【注意】このサイトに記載されていることを他人に試すことは「不正アクセス禁止法」に該当する場合があります。詳しくはこちらから

ハッカーが使うLinuxの裏側 forkとexecveでわかるプロセスのしくみ

ペネトレーションテスト&バグバウンティ

「プロセス」というのは、コンピューターで何かのプログラムが動いている状態のことです。たとえば、電卓アプリを開いたとき、その裏では電卓のプログラムが「プロセス」として動いています。

※イメージです。

プロセスってとは

パソコンの中では、いろんなプログラムが同時に動いています。
この「動いている最中のプログラム」のことを、Linuxではプロセス(process)と呼びます。
たとえば、あなたがターミナルで、Google Chromeと入力すれば、Google Chromeが開きます。この時、Google Chromeというプログラムがプロセスとして起動されたということです。
プロセスは、パソコンの中の「仕事中の人」とも言えます。
 
 

fork(自分のコピーを作る命令)

Linuxでは、プロセスが自分のコピー(子プロセス)を作ることができます。そのとき使うのが fork()(フォーク)というシステムコールです。
たとえば、ハッカーのクロちゃんが fork()を使うと、クロちゃんの分身が生まれるイメージです。
 
この時点では、元のプロセス(親)とコピー(子)はほとんど同じ内容を持っています。ただし、親か子かを判断するための戻り値だけが違います。
 
親 → 子のPID(プロセスID)を受け取る
子 → 0を受け取る
 
これを利用して、親と子がそれぞれ別の動きをすることができます。
 
 

execve(中身の入れ替えコマンド)

fork()でコピーを作っただけでは、中身は元のままです。
そこで登場するのが、execve()(エグゼクブ)という命令。
 
これは、今動いているプログラムの中身を、新しいプログラムにまるごと入れ替える命令です。
たとえば、execve("/bin/ls")を使うと、今のプロセスの中身が「lsコマンド」に入れ替わります。
 
つまり、
fork() → コピーを作る
execve() → 中身を入れ替える
というふうに組み合わせることで、新しいプログラムを起動できるんです。
 
 

ハッカー的な利用方法とは

ハッカーやエンジニアは、この仕組みを使って、マルチプロセスのプログラムを作ったり、特権を持ったプログラムを子にしたり、サンドボックス的に別環境で実行したり
と、いろんな応用をします。
 
逆に言えば、この「プロセス」の動きが正しく管理されていないと、脆弱性の元になることもあります。たとえば、fork()とexecve()を使った間に、攻撃者が環境を変えてしまう可能性もあります。
だから、プロセスの流れを理解することは、安全なプログラム作りにもつながるのです。
 
 

ハッカーが使うLinuxの裏側 forkとexecveでわかるプロセスのしくみのまとめ

Linuxでプログラムが動く仕組みには、「プロセス」という考え方が重要です。
fork()は、今動いているプロセスのコピー(子プロセス)を作る命令です。一方、execve()は、今のプロセスの中身を別のプログラムに入れ替える命令です。
この2つを組み合わせることで、新しいプログラムを実行できます。
たとえば、親がfork()で子を作り、子がexecve()で/bin/lsを実行、親は子が終わるのをwait()で待つ、という使い方が一般的です。
ハッカーはこの仕組みを理解し、脆弱性の発見や安全なプログラム設計に活用しています。