Skip to content
Vol. 1 · Ed. 2026
CyberGlossary
Entry № 477

Fork 炸弹

审核人Cybersecurity entrepreneur & security researcher

Fork 炸弹 是什么?

Fork 炸弹通过让进程不断派生(fork)自身,耗尽主机进程表、内存与 CPU 的拒绝服务技术。


Fork 炸弹是一种恶意或意外的代码,它递归地派生子进程,每轮翻倍,直至内核上限、内存或 CPU 被占满,系统随之失去响应。经典的 POSIX 单行命令 :(){ :|:& };: 定义了一个名为 : 的函数,它将自身的两个副本管道连接后置于后台,然后调用它;每一代都会使进程数翻倍,因此进程表会在数秒内被填满。这一构想远早于 Unix——它最早的名称之一是 “wabbit” 或兔子(rabbit)程序,据称大约在 1969-1974 年间出现在华盛顿大学的一台 Burroughs 大型机上。

Fork 炸弹不像蠕虫那样通过网络传播;它们是本地的资源耗尽攻击,但在共享的多用户主机、CI 运行器和容器上极为有效——在这些环境中,单个非特权用户就能让所有人无法使用服务。

防御手段是限制一个进程树可消耗的资源,而非阻止系统调用本身。在 Linux 上,关键的控制手段包括 ulimit -u / PAM pam_limits(nproc),用于限制每个用户的进程数;以及 cgroups 的 pids 控制器(pids.max)——Docker 和 Kubernetes 通过 --pids-limit 将其暴露出来——用于限制容器的任务数量。账户隔离、不可信代码沙箱以及专用的 CI 执行器可进一步收缩爆炸半径。

flowchart TD
  A[":() 函数<br/>调用自身两次"] --> B[子进程 1]
  A --> C[子进程 2]
  B --> D[孙进程]
  B --> E[孙进程]
  C --> F[孙进程]
  C --> G[孙进程]
  D --> H["…… 指数级增长 ……"]
  E --> H
  F --> H
  G --> H
  H --> I{"达到 pids.max / ulimit -u?"}
  I -->|无限制| J[进程表耗尽 — 主机挂起]
  I -->|已设限制| K[新的 fork 以 EAGAIN 失败 — 主机存活]

● 示例

  1. 01

    经典的 Bash 单行 DoS 演示 `:(){ :|:& };:`。

  2. 02

    在无限循环内意外调用 fork 的有缺陷 CI 脚本。

● 常见问题

Fork 炸弹 是什么?

通过让进程不断派生(fork)自身,耗尽主机进程表、内存与 CPU 的拒绝服务技术。 它属于网络安全的 恶意软件 分类。

Fork 炸弹 是什么意思?

通过让进程不断派生(fork)自身,耗尽主机进程表、内存与 CPU 的拒绝服务技术。

如何防御 Fork 炸弹?

针对 Fork 炸弹 的防御通常结合技术控制与运营实践,详见上方完整定义。

Fork 炸弹 还有哪些其他名称?

常见的别称包括: Wabbit, 兔子病毒。

● 相关术语

● 另见