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, 兔子病毒。

相关术语

另见