Windowsのプロセスインジェクションの概念検証

ソースコードはこちら

https://github.com/yokohama/winlab/blob/main/shellinjection.cpp

以下の流れに沿って、指定したプロセスIDで動くプロセスに、悪意あるコードを挿入して実行させる検証コードになります。成功すると指定したプロセス内部でコードが実行され以下のようなメッセージボックスが表示されます。

  1. プロセスハンドルの取得:
    • OpenProcess関数を使用して、コマンドライン引数から指定されたプロセスIDに対応するプロセスのハンドルを取得しています。PROCESS_ALL_ACCESSフラグは、取得したプロセスハンドルに全アクセス権を要求します。ハンドルの取得に失敗した場合はエラーメッセージを表示して処理を終了します。
  2. メモリ領域の確保:
    • VirtualAllocEx関数を使用して、ターゲットプロセスのアドレス空間内にシェルコードを格納するためのメモリ領域を確保しています。このメモリ領域は実行可能かつ読み書き可能に設定されます(PAGE_EXECUTE_READWRITE)。メモリの確保に失敗した場合は、エラーメッセージを表示し、取得したプロセスハンドルをクローズして処理を終了します。
  3. シェルコードの書き込み:
    • WriteProcessMemory関数を使用して、確保したメモリ領域にシェルコードを書き込んでいます。書き込みに失敗した場合は、エラーメッセージを表示し、確保したメモリ領域を解放し、プロセスハンドルをクローズして処理を終了します。
  4. シェルコードの実行:
    • CreateRemoteThread関数を使用して、ターゲットプロセス内に新しいスレッドを作成し、そのスレッドの開始アドレスを確保したメモリ領域(シェルコードが格納されている場所)に設定しています。これにより、ターゲットプロセス内でシェルコードが実行されます。スレッドの作成に失敗した場合は、エラーメッセージを表示し、確保したメモリ領域を解放し、プロセスハンドルをクローズして処理を終了します。

ソースコードはこちら

https://github.com/yokohama/winlab/blob/main/shellinjection.cpp

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です