Fork爆弾『 :(){ :|:& };:』
前々回・前回で、Ubuntu ServerおよびUbuntu Desktopに対して、収束しないように工夫したFork爆弾を仕込んでみた。Fork爆弾を連続して実行しても、動作はもっさりするものの、操作不能では至らず、致命的な状況にはならないことがわかった。
今回はこれをWindows 10 WSLのUbuntuでやってみる。環境はUbuntu 18.04 LTSだが、カーネルはLinuxカーネルではなくWindowsカーネルだ。ネイティブのUbuntuとは異なる結果が得られるだろう。まずは、/etc/crontabに次の設定を追加する。
/etc/crontabに追加するFork爆弾の設定
*/1 * * * * root f(){ f|f& }; f
*/1 * * * * root f(){ f|f& }; f
*/1 * * * * root f(){ f|f& }; f
*/1 * * * * root f(){ f|f& }; f
*/1 * * * * root f(){ f|f& }; f
*/1 * * * * root f(){ f|f& }; f
*/1 * * * * root f(){ f|f& }; f
*/1 * * * * root f(){ f|f& }; f
*/1 * * * * root f(){ f|f& }; f
*/1 * * * * root f(){ f|f& }; f
追加が終わったら、次のようにcronを動作させる。
cronを実行
sudo service cron start
少なくともこの状態で1分も待てば、Fork爆弾が起動する。
Windows 10 WSLでFork爆弾実行
Fork爆弾が起動すると、次のタスクマネージャが示すように一気にCPUリソースの消費が100%へ跳ね上がる。メモリの使用量も徐々に増えていく。
Fork爆弾が安定して動作するようになると、数千のプロセスが同時に動作することを確認できる。メモリもこの環境でほぼマックスまで使い切った。
この状態のWindows 10は正直なところ使い物にならない。Ubuntu Desktopの場合は「もっさり」している程度だったが、この状態のWindows 10はとてもじゃないが使えない。システムの終了もできず、強制的にマシンを終了させるしか方法がなかった。
WSLでFork爆弾を実行してはいけない
前回はかなりしぶとく生き続けたLinuxだったが、Windowsカーネルではそうはいかないようだ。Fork爆弾はWindows 10には実に効果的に機能し、少なくともデスクトップとしての利用は致命的な状況になる。Windowsカーネルに対しては、依然として、Fork爆弾は有効な攻撃手段といえそうだ。
WSLで実行できるので簡単にFork爆弾を試すことができるが、普段使っているWindows 10では実行しないほうがよい。どうにも操作ができなくなるので、強制的な再起動が必要になる。システムにとって決してよいことではないだろう。