Linuxフォーク爆弾
Linuxフォーク爆弾は、Linuxシステムをクラッシュさせる最も古く、かつ簡潔な方法の一つです。これは、サービス拒否攻撃の一種であり、より多くのプロセスを生成することで機能し、最終的にはシステム上のすべてのリソースが占有され、クラッシュします。
このチュートリアルでは、フォーク爆弾を使用してLinuxシステムをクラッシュさせる方法を見ていきます。また、フォーク爆弾や過剰な数のプロセスが生成されてシステムがクラッシュするのを防ぐために取るべきいくつかのステップも説明します。
このチュートリアルでは、あなたは学びます:
- フォーク爆弾でLinuxシステムをクラッシュさせる方法
- フォークボムによるLinuxクラッシュを防ぐ方法
フォーク爆弾でLinuxシステムをクラッシュさせる方法
このコードはテストマシンまたは仮想マシンでのみテストしてください。他のシステムで使用することは、テスト目的であっても、システムをクラッシュさせようとする攻撃者のように見えてしまいます。そして、場合によっては、成功するかもしれません。
次のコード行は短くて甘いフォークボムです:
:(){ :|:& };:
一見すると、これは意味不明で実行しても無害に思えるかもしれませんが、ここで何が本当に起こっているのか見てみましょう:
:は関数の名前です:|:は関数自身を呼び出し、別のプロセスを生成します- コマンド & はプロセスをバックグラウンドに置くので、簡単に終了させることができなくなります。
;は関数の終了を示します。:再度関数を呼び出します
他のタイプのフォークボムが存在することを忘れないでください。例えば、Perl、Python、その他の言語でプログラムすることができます。ここで示したものは最も一般的に使用されており、Bashシェルで動作します。
こちらは、より人間が読みやすい形式での同じ関数呼び出しです。
forkbomb(){ forkbomb | forkbomb & }; forkbomb
ご覧のように、この関数は本体内で2回自分自身を呼び出しています。これにより、システムのすべてのリソースが消費され、最終的にはLinuxシステムがクラッシュすることになります。
結果は、Linuxシステムの設定や使用しているディストリビューションなどによって異なる場合があります。私たちのUbuntuテストシステムでは、フォーク爆弾を実行するとシステムがロックされ、最終的に端末にこれらのメッセージが洪水のように表示され始めました:
bash: fork: retry: Resource temporarily unavailable.
ターミナルを閉じた後も、システムは非常に鈍く、何も操作できないほど反応がなく、再起動を余儀なくされました。システムが再起動した際、以下のエラーメッセージが表示されました:
一部のLinuxディストリビューションは、フォーク爆弾を本質的に防ぐようにプログラムされています。それらのシステムでは、カーネルがすべての生成されたプロセスを終了させ、システムクラッシュを防ごうとします。
フォークボムによるLinuxクラッシュを防ぐ方法
フォークボムは無限の数のプロセスを生成できるため、効果的です。最終的に、システムはすべてのプロセスを処理できなくなり、クラッシュします。したがって、ユーザーまたはユーザーグループが生成できるプロセスの数を制限することで、これらのタイプのクラッシュを防ぐことができます。
ユーザーが生成できるプロセスの数に制限を設ける最良の方法は、/etc/security/limits.confファイルを編集することです。
例として、「企業」グループのユーザーが生成できるプロセスの数に制限を設けてみましょう。この行をファイルに追加することで、そのグループのユーザーが生成できるプロセスの最大数を30に制限することができます。
@corporate hard nproc 30特定のユーザーにプロセスの制限を課したい場合はどうすればよいでしょうか?この場合、最初の値にそのユーザー名を入れます。以下は、
linuxconfigという名前のユーザーが最大で40のプロセスを生成できるように制限するための行です。linuxconfig hard nproc 40
さらなる例については、limits.confファイル内でさまざまな種類の制限を適用する方法や、ulimitコマンドを使用して一時的な制限を課す方法を示すLinux ulimitコマンドに関するガイドをご覧ください。
締めくくりの考え
このチュートリアルでは、フォークボムコマンドを使ってLinuxシステムをクラッシュさせる方法を見ました。また、フォークボムがどのように機能するか、そしてユーザーがそれを使ってシステムをクラッシュさせるのを防ぐ方法についても学びました。フォークボムはLinuxシステムのバグや弱点ではありません。ユーザーが生成できるプロセスの数を制限する責任は、システム管理者にあります。


