Cプログラミング
 Computer >> コンピューター >  >> プログラミング >> Cプログラミング

フォーク爆弾とは?BASHとC言語での実装例を徹底解説

フォーク爆弾(Fork Bomb)は、Linuxベースのシステムを標的とするDoS(Denial of Service/サービス拒否)攻撃の一種です。fork()システムコールを無限回呼び出し続けることで、システムのメモリやプロセステーブルを埋め尽くし、最終的にマシン全体を停止させる悪意あるプログラムです。

BASHによるフォーク爆弾

BASHで記述されたフォーク爆弾は、わずか十数文字という短いコードで構成されていることでも有名です。

:(){ :|:& };:

コードの解説

この一見不可思議なコードは、次のように分解して理解できます。

  • :( ) — 「:」という名前の関数を定義しています。
  • { } — 関数の本体(処理内容)を表します。
  • :|:& — 自分自身をパイプで連結しながらバックグラウンドで実行します。これによりメモリ領域が確保され続け、解放されなくなります。
  • ;: — 定義した関数を呼び出し、爆弾を起動します。

この関数は自分自身を何度も呼び出すため、プロセスが無限に生成され続けます。その結果、システムリソースが枯渇し、マシンは応答不能状態に陥ります。

C言語によるフォーク爆弾

C言語でも同じ種類のDoS攻撃を実装できます。Cコンパイラでビルド・実行すると、fork()への無限の呼び出しが発生し、メモリ割り当てを繰り返してシステムのメモリを使い果たします。

サンプルコード

#include <unistd.h>
#include <malloc.h>

int main() {
    while (1) {
        fork();
    }
}

実行結果

無限にプロセスが生成され続ける

注意点

フォーク爆弾は非常に単純なコードですが、実行するとシステム全体がフリーズし、強制的な再起動が必要になる場合があります。学習目的であっても、実環境での実行は絶対に行わないでください。動作を確認したい場合は、ulimitコマンドなどでユーザーが生成できるプロセス数を制限したうえで、仮想マシンなどの隔離環境を使用することを強くおすすめします。

  1. screenFetchとNeofetchでLinuxシステム情報を美しく表示・共有する方法

    自分のLinux環境の設定を他の人と共有したい理由はさまざまです。システムのトラブルシューティングで助けを求めたい場合もあれば、自分が作り上げたデスクトップ環境を誇らしく思って、オープンソース愛好家の仲間に披露したい場合もあるでしょう。 cat /proc/cpuinfo や lscpu コマンドを使えば、一部の情報はBashプロンプトから取得できます。しかし、OS、カーネル、稼働時間(アップタイム)、シェル環境、画面解像度といったより詳細な情報をまとめて共有したいなら、「screenFetch」と「Neofetch」という2つの優れたツールがおすすめです。 ScreenFetchとは Scr

  2. Windowsエラーコード43とは?主な原因と解決方法を徹底解説

    Windowsエラーコード43は、PCがハードウェアを正常に動作させるために必要な設定や情報を正しく処理できない場合に発生するトラブルです。このエラーは、主にデバイスドライバーが古くなっている、あるいは正しくインストールされていないことが原因で表示されます。本記事では、Windowsエラーコード43の発生原因と、具体的な解決手順について詳しく解説していきます。 Windowsエラーコード43の原因は? このエラーが発生すると、画面には次のようなメッセージが表示されます。 「Windows は、このデバイスに問題が発生したため停止しました(コード 43)」 エラーコード43は、システムに接続さ