1日1解析 part2
1日1解析 part2
下書きのままアップロードするのを忘れていたので公開。 6/15に書いた物です。供養。
今回のサンプル
https://malshare.com/sample.php?action=detail&hash=90c2c10001134ab2a1cc87ec4382b197
前回で全然実力がないことがわかったのでわからなくなった時に見返すことができるよう、解析つきのバイナリを選ぶことにした。
困ったら見る動画↓
動的解析
対象をデスクトップに置いて走らせると、場所と名前を変えて実行される。
移動後のpath
C:\Windows\System32\dnsagent.exe
デバッガで動かしても途中でプロセスが終了してしまうため、初めから上記の場所に置いておいた方が良さそう。 と思ったが、emotetはプロセス名をランダムに変更していた気がするので大人しく解析することにした。
ProcMonを見てみるとThreadExit
でプロセスを終了しているので、そこにbreakpointを仕掛けることにする。
[symbols]→[kernel32]→[ExitThread]
F8
で走らせるたびにModuleをimportしていくのがわかる。
これでpathを変更した新しい実行ファイル付近をみることができるはず...と思ったが、動画を見るとプロセスを作っている箇所にbreakpointを仕掛け、新しくpathを変更して実行している箇所を探していた。
のでそれをなぞることにした。
CreateProcessInternalW
にbreakpointを仕掛け
memoryに読み取り書き込みの権限がある箇所を見てみると
MZ
と見える。
これはWindows
の実行ファイルの特徴なので、取り出したい部分をみることができた。
ちなみにCreateProcess
にbreakpointを仕掛ける方が個人的にわかりやすいのでそっちでもやってみるとうまくいった。
やっぱりmoduleを追うのが最強や!
次の解析へ
新しい実行ファイルを切り出すことができた。
なので実行してみたが、エラーが出て実行できない。
どうやらバイナリが壊れているようだ。
動画をみる限り、memoryのセクションがおかしくなっているらしい。
PE-Bear
で見てみると、Raw Addr
とVirtual Addr
のアドレスにズレがある。
これが正常なバイナリだと合っている
のでこれを合わせてみる。
また、ImageBaseの値は実際のPEファイルが読み込まれたベースアドレスと一致するため、変更してやる。
しかしこれでもまだIATが壊れたままになってしまっているのでこれを直していく。
IATの自動修復ツールの1つにScylla
がある。
x64dbgにもデフォルトでついているやつだ。
以下の記事を参考にしながらMemoryDumpを取得する。
これでemotetのメモリにある実行ファイルを取り出すことができた。
ただ、この取り出したバイナリも途中でクラッシュしてしまう...
仕方がないのでデバッガで追いながら確認していくことにしました。
動画内では、取り出したバイナリを配布しているのだが、それも走らないので謎...
取り出したバイナリの解析
ここまでで動画は終了になるのでここからは自力で解析することになる。
Stringsを見てみると何やら文字列が見える。
この文字列を検索してみるとZeus Panda
というmalwareが引っかかる。
malwareは上記のパスにファイルが存在しているかどうかのチェックをし、存在していたら動作を止めるらしい。
逆アセンブラを見てみるとファイルのチェックの処理が見える。
これがあるということはこのmalwareはemotetのなかにZeus Pandaが入ってるという認識で良さそう。
関数に名前をつけてこの関数を呼び出している箇所を見てみる。
この関数の呼び出し元は単純で、check_fileの戻り値をもとにとある処理を走らせているように見える。