Fork爆弾 :(){ :|:& };:

Windows前々回、前回では、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爆弾の起動を確認

    Fork爆弾の起動を確認

  • メモリの使用量も徐々に増加

    メモリの使用量も徐々に増加

Fork爆弾が安定して動作するようになると、数千のプロセスが同時に動作することを確認できる。メモリもこの環境でほぼマックスまで使い切った。

  • 数千のプロセスが動作する状況を確認

    数千のプロセスが動作する状況を確認

  • メモリもほぼ使い切った状態になる

    メモリもほぼ使い切った状態になる

この状態のWindows 10は正直なところ使い物にならない。Ubuntu Desktopの場合は「もっさり」している程度だったが、この状態のWindows 10はとてもじゃないが使えない。システムの終了もできず、強制的にマシンを終了させるしか方法がなかった。

WSLでFork爆弾を実行してはいけない

前回はかなりしぶとく生き続けたLinuxだったが、Windowsカーネルではそうはいかないようだ。Fork爆弾はWindows 10には実に効果的に機能し、少なくともデスクトップとしての利用は致命的な状況になる。Windowsカーネルに対しては依然としてFork爆弾は有効な攻撃手段といえそうだ。

WSLで実行できるので簡単にFork爆弾を試すことができるが、普段使っているWindows 10では実行しないほうがよい。どうにも操作が効かなくなるので、強制的な再起動が必要になる。システムにとって決していいことではないだろう。