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

フォーク爆弾

監修Cybersecurity entrepreneur & security researcher

フォーク爆弾 とは何ですか?

フォーク爆弾プロセスが自身を再帰的に fork し続けることでプロセステーブル・メモリ・CPU を枯渇させるサービス妨害手法。


フォーク爆弾は、子プロセスを再帰的に生成し、各サイクルで倍増させて、カーネルの上限・メモリ・CPU が飽和してシステムが応答不能になるまで続く、悪意ある、あるいは事故的なコードです。古典的な POSIX の一行コマンド :(){ :|:& };: は、: という名前の関数を定義し、その関数が自身の 2 つのコピーをパイプでバックグラウンドに渡してから呼び出します。各世代でプロセス数が倍増するため、プロセステーブルは数秒で埋まってしまいます。この着想は Unix よりはるか以前にさかのぼり、最も古い名称の一つが 「wabbit」 すなわちラビット(rabbit)プログラムで、1969〜1974 年頃にワシントン大学の Burroughs メインフレーム上で確認されたと伝えられています。

フォーク爆弾はワームのようにネットワークを介して伝播することはなく、局所的なリソース枯渇攻撃です。しかし、単一の非特権ユーザーが全員のサービスを妨害できる、共有マルチユーザーホスト、CI ランナー、コンテナでは非常に効果的です。

防御策は、システムコールをブロックするのではなく、プロセスツリーが消費できるリソースに上限を設けます。Linux における主要な制御は、ユーザーごとのプロセス数を制限する ulimit -u / PAM の pam_limits(nproc)と、コンテナのタスク数を制限する cgroups の pids コントローラ(pids.max。Docker と Kubernetes は --pids-limit で公開)です。アカウント分離、信頼できないコード用のサンドボックス、専用の CI エグゼキュータは、被害範囲をさらに封じ込めます。

flowchart TD
  A[":() 関数が<br/>自身を 2 回呼び出す"] --> 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<br/>に到達?"}
  I -->|上限なし| J[プロセステーブル枯渇 — ホストがハング]
  I -->|上限あり| K[新規 fork が EAGAIN で失敗 — ホストは生存]

  1. 01

    DoS デモとして知られる Bash の一行コマンド `:(){ :|:& };:`。

  2. 02

    無限ループ内で誤って fork する不具合のある CI スクリプト。

よくある質問

フォーク爆弾 とは何ですか?

プロセスが自身を再帰的に fork し続けることでプロセステーブル・メモリ・CPU を枯渇させるサービス妨害手法。 サイバーセキュリティの マルウェア カテゴリに属します。

フォーク爆弾 とはどういう意味ですか?

プロセスが自身を再帰的に fork し続けることでプロセステーブル・メモリ・CPU を枯渇させるサービス妨害手法。

フォーク爆弾 からどのように防御しますか?

フォーク爆弾 に対する防御は通常、上記の定義で述べたとおり、技術的統制と運用上の実践を組み合わせます。

フォーク爆弾 の別名は何ですか?

一般的な別名: ウサギ型(Wabbit), ラビットウイルス。

関連用語

関連項目