San Antonio API Security Summit 2025 に参加しよう!
San Antonio API Security Summit 2025 に参加しよう!
San Antonio API Security Summit 2025 に参加しよう!
San Antonio API Security Summit 2025 に参加しよう!
San Antonio API Security Summit 2025 に参加しよう!
San Antonio API Security Summit 2025 に参加しよう!
閉じる
プライバシー設定
ウェブサイト運営に必要なCookieや類似技術を使用しています。追加のCookieは貴社の同意がある場合のみ利用されます。同意は「Agree」をクリックすることでいただけます。どのデータが収集され、どのようにパートナーと共有されているかの詳細は、Cookieポリシープライバシーポリシーをご確認ください。
Cookieは、貴社デバイスの特性や、IPアドレス、閲覧履歴、位置情報、固有識別子などの特定の個人情報を取得、解析、保存するために使用されます。これらのデータは様々な目的で利用されます。分析Cookieによりパフォーマンスを評価し、オンライン体験やキャンペーンの効果向上に役立てます。パーソナライズCookieは、利用状況に応じた情報やサポートを通じ、貴社専用の体験を提供します。広告Cookieは、第三者が貴社のデータをもとにオーディエンスリストを作成し、ソーシャルメディアやネット上でのターゲット広告に使用します。貴社は各ページ下部のリンクから、いつでも同意の許可、拒否、または撤回が可能です。
ご送信ありがとうございます。内容を受け付けました。
申し訳ありません。フォーム送信時にエラーが発生しました。
Attack, Vulnerabilities

フォークボム

はじめに

もし実際の爆弾に飽きたなら、Linuxの端末で以下を実行してコンピュータをクラッシュさせる方法もあります:():|:& ;: この操作にはrootユーザーである必要はありません。この文字列がフォークボムと呼ばれる所以です。動作を理解する前に、bashフォークボムとは何か、シェルフォークボムの仕組みについて把握することが大切です。

フォークボム

フォークボムとは何か?

UnixやLinuxでは、フォークボム攻撃とは、システムコールを利用して、現在のプロセス(親プロセスと呼ばれる)から新たなプロセス(子プロセスと呼ばれる)を生成する攻撃です。結果として、2つのプロセスが同時に別々の作業を行います。

フォークボム(「ラビットウイルス」とも呼ばれる)は、サービス拒否(DoS)攻撃の一種です。forkシステムコールを繰り返し実行し、システムリソースがすべて使い果たされるまでプロセスを生成し続けます。やがてシステムは過負荷になり、情報に応答できなくなります。

フォークボムコマンド

以下は、フォークボムのコマンド例です:

  1. :() は関数を定義していることを示す。
  2. {:|:&} は、その関数を再帰的に呼び出し、出力をバックグラウンドで実行することを意味する。
  3. : は、定義された関数のコピーをメモリに積むことを示す。つまり、':'が呼ばれるたびに、':|:' は実質的に二重にコピーを生成する。& はプロセスを切り離すことを表し、最初の':'が終了しても、その子プロセスは終了しない。
  4. ; はコマンドの区切りを示す。
  5. : は関数を実行するために呼び出される。

基本的には、関数が自らを一回の呼び出しごとに二度呼び出すため、終了することなくプロセスが増え続け、システムリソースが尽きるまで増殖します。

フォークボムはどのように動作する?

自己再帰する子プロセスがシステムリソースを消費するため、本来のプロセスの実行や新規プロセスの生成が妨げられます。攻撃中は、コンソールへの入力(例:ログアウトの試み)も無視され、システムが事実上ロック状態となります。

フォークサイクルはCPUとメモリを大量に消費するため、システムリソースは通常、最大プロセス数に達する前に枯渇します。その結果、システムのコア部分が過負荷となり、クラッシュしてしまいます。これを「カーネルパニック」と呼ぶ場合もあります。

システムのフリーズ状態は、機械が再起動されるまで続き、制御の回復にはハードリブートが必要となることが多いです。このため、データが失われる可能性もあります。また、一部のプロセスはあらかじめ設定されたルールにより、最終的にシステムへのアクセス権を与える場合もあります。

The architecture of the fork bomb
フォークボムの構造

フォークボムの影響はどう軽減できるか?

フォークボムを防ぐため、利用者が生成できるプロセス数に上限を設けます。これは以下の方法で実現されます:

Unix/Linuxでは、ulimitコマンドを使って利用者が生成できるプロセス数を制限します。例えば、ulimit=30とすることで、利用者が持てるプロセス数を30に制限します。この制限はセッション終了時にリセットされます。

また、/etc/security/limits.confファイルを用いて、システム全体のプロセス数制限を設定する方法もあります。こちらは各利用者の設定を個別に調整する手間を省くため、一般的に推奨されています。

スーパーユーザーや管理者権限を持つプロセスは、limits.confによる適切な設定がなされていても、フォークボム攻撃を防げない場合があります。

現代のシステムを用いた場合でも、フォークボム対策の完全な方法は存在しません。一般的なセキュリティのベストプラクティスを維持し、不審なコードがroot権限で実行されないようにすることで、多くのフォークボム攻撃のケースは防げます。

FAQ

参考資料

最新情報を購読

更新日:
February 25, 2025
学習目標
最新情報を購読
購読
関連トピック