前回記事で、Process Hollowingで展開されたプロセスに対し、x32dbgでアタッチして、OEPでブレークしたところまでを実施しました。
ここから、プラグインの「Scylla」を用いて実行できるexeファイルに復元します。
Scylla自体は今でも単独のモジュールで存在していると思います。
以前、私がSANS FOR610 のコースを受講したときは、OllyDbgを使って自身のプロセスの実行形式部分をダンプし、Scyllaで分析してダンプしたバイナリと結合させてFixする方法でした。
当時、実習でやったのは、デバッガで自プロセス内に不正コードを復号化するところまで進め、そこにEIPが移ったところでそこを新たなOEPとして設定、ダンプした後にScyllaでImportテーブルを解決し、実行できるexeにするものでした。
今回は、Process Hollowingされたプロセスに対してアタッチした場合に、実行形式ファイルとして抽出できれば生の悪意あるコードが分析できるだろう、という点が異なるということです。
SANSのトレーニングを前に受けたのが2~3年前なので、ひょっとすると同じような方法がトレーニングで示されているかもしれません。GIAC GREMの期限更新もあるので、また受けたいなぁ(トレーニングが80万弱なので、おいそれとは受けられないんですけどね・・・)。
Scyllaの起動
x32dbgのプラグインから、Scyllaを起動します。
Scyllaプラグインのダイアログの全体像を示しておきます。
Scyllaで対象のプロセスを選択
まず、上部の「Attach to an active process」で対象のプロセスであることを確認します。
確実を期するには、プロセスを選択しておくといいでしょう。
(ただし、実はこの時にOEPがしれっと変更されてしまいます。必要なら直しましょう。)
ScyllaでIATの検索とImportテーブルの取得
プロセスを選択した後、IATの分析を行います。
画面を中央部近辺にある「IAT Autosearch」ボタンを押します。
自動的に検索され、開始アドレスとサイズが取得されます。
横のVAとSizeに自動的にそれらが入力されます。
さらに、Importテーブルの情報を取得します。
IAT Autosearchの下にある「Get Import」ボタンを押下します。
Importテーブルの情報がImportウィンドウに表示されます。
対象プロセスのPEファイルのダンプを取得
手順は先でも良いのですが、解析対象のプロセスのPE形式のファイルをダンプします。
Scyllaのダイアログの「File」メニュー→「Dump Memory」をクリックすると、Dump Memoryダイアログが表示されます。
Dump memoryダイアログが開くと、メモリのマッピング情報が表示されます。
「Dump PE」ボタンをクリックすると、「名前をつけて保存」ダイアログが開くので、ここに保存するフォルダ、ファイル名を指定してダンプデータを保存します。
その後にmemの保存も聞かれますが、これは特には必要ないです。
PEのダンプファイルのImportテーブルをFix
ダンプされたPEのダンプデータのファイルに対し、Importテーブルを解決します。
画面の中央部の「Fix Dump」を押下します。
「開く」ダイアログが開くので、先ほどダンプしたPEのダンプファイルを選択します。
その結果、選択されたファイル名の後ろ、拡張子の前に「_SCY」が付与されたファイルが出力されます。
出力されたファイルは、Importテーブルなども正しく設定されたファイルとなっています。
分析でしっかり追ってまではいませんが、ざっくりと見た限りでは、通常のexeファイルと同様にIDAで分析できたほか、ブレークポイントをOEPに設定してデバッガで実行したところ、ちゃんと動きました。
このため、デバッガで実行しながらの解析も可能だと思います。
OEPの問題
今回の実行ファイルの抽出で一番あやふやなのが「OEPの確定」です。
実は、IDAでアタッチしてしばらく追っていたので、そのメモからOEPとみられるアドレスを知っていたという事情があります。
Resume直前のメモリ情報から知るのが、本当はスマートですよね。
恐らく、PEヘッダ部分をしっかり解析すれば、ちゃんとアドレスは書いてあると思います。
今回はここをはしょってしまったので、機会があれば後日にProcess Hollowing時のOEPの求め方も調査してみたいと思います。
(どっかの記事をちゃんと読めば書いてあるんだろうけどなぁ・・・。)
個人的な感想
複数人でマルウェアの検体を解析する機会があるかは分かりませんが、このファイルを解析者に配布することで、アンチフォレンジック、アンチ解析のテクニックをそれぞれの解析者がわざわざ回避しなくても、問題の部分の解析に注力できるのでは、と思います。また、再解析のときにも手間が省けますね。
Process Hollowingが用いられている検体のコア部分の抽出と解析には活用できるのではないか、と思いメモしてみました。
Process Hollowingは、理解さえしてしまえば仕組みが比較的簡単なため、不正コードの暗号化とセットで用いられているケースをよく目にします。
個人的な夏休みの宿題(?)でやってみた、アンパックされた部分の抽出方法の紹介でしたが、Process Hollowingの仕組みの理解と、その分析の一助になれば幸いですね。