Windowsのプロセス空洞化の概念検証
プロセスフォローイング(空洞化)とは、正当なプロセスの内部を空洞化し、その部分に悪意あるプログラムのイメージヘッダー及びPEセクションヘッダーで上書きをして、悪意あるプログラムを正当なプロセスの中で実行させる手法です。
これにより、Process Explorerやタスクマネージャーで見ても、正当なプロセスが動いているように見えるわけです。
- 手順
- 指定されたターゲットプログラム(svchost.exeとか)を起動してすぐに一時停止する
- 実行させたい悪意あるコンテンツのファイルをローカルプロセスのメモリにロード
- 一時停止しているターゲットプロセスを空洞化する
- ターゲットプロセスの空洞化部分に、悪意あるコンテンツのイメージヘッダを書き込む
- ターゲットプロセスの空洞化部分に、悪意あるコンテンツの各PEセクションヘッダを書き込む(悪意あるコードも書き込まれる)
- ターゲットプロセスのRAX(プログラムの開始アドレス)を、悪意あるコンテンツの開始位置に書き換える
- ターゲットプログラムの停止を解除する。
- ターゲットプログラムは悪意あるコードを実行する。
POCのコードはこちらです。
https://github.com/yokohama/winlab/tree/main/processHollowing
また、それぞれのファイルの説明になります。各ファイルはコンパイルして、exe形式で使用してください。
ファイル名 | 説明 |
---|---|
sample.cpp | svchost.exeなどに変わり正当なプログラムを実行するためのやられ(のっとられるための)プログラムです。このプログラムはただのメッセージボックを表示します。 |
malware.cpp | 最終的に実行したい悪意あるコードです。今回はPOCなので、ただのメッセージボックスを表示するだけのコードになっています。 |
processHollowing.cpp | 正当なプロセス(今回はsample.exe)を実行し空洞化して、悪意あるコード(malware.cpp)を実行するプログラムです。 |