a

よろしくのキワミ

1日1解析 part2

1日1解析 part2

下書きのままアップロードするのを忘れていたので公開。 6/15に書いた物です。供養。

今回のサンプル

https://malshare.com/sample.php?action=detail&hash=90c2c10001134ab2a1cc87ec4382b197

前回で全然実力がないことがわかったのでわからなくなった時に見返すことができるよう、解析つきのバイナリを選ぶことにした。

困ったら見る動画↓

www.youtube.com

動的解析

対象をデスクトップに置いて走らせると、場所と名前を変えて実行される。

f:id:toDo:20200615015323p:plain

移動後のpath

C:\Windows\System32\dnsagent.exe

デバッガで動かしても途中でプロセスが終了してしまうため、初めから上記の場所に置いておいた方が良さそう。 と思ったが、emotetはプロセス名をランダムに変更していた気がするので大人しく解析することにした。

ProcMonを見てみるとThreadExitでプロセスを終了しているので、そこにbreakpointを仕掛けることにする。

[symbols]→[kernel32]→[ExitThread]

f:id:toDo:20200615021301p:plain

F8で走らせるたびにModuleをimportしていくのがわかる。

これでpathを変更した新しい実行ファイル付近をみることができるはず...と思ったが、動画を見るとプロセスを作っている箇所にbreakpointを仕掛け、新しくpathを変更して実行している箇所を探していた。

のでそれをなぞることにした。

f:id:toDo:20200615024045p:plain

CreateProcessInternalWにbreakpointを仕掛け

f:id:toDo:20200615025214p:plain

memoryに読み取り書き込みの権限がある箇所を見てみると

f:id:toDo:20200615025253p:plain

MZと見える。

これはWindowsの実行ファイルの特徴なので、取り出したい部分をみることができた。

en.wikipedia.org

ちなみにCreateProcessにbreakpointを仕掛ける方が個人的にわかりやすいのでそっちでもやってみるとうまくいった。

やっぱりmoduleを追うのが最強や!

次の解析へ

新しい実行ファイルを切り出すことができた。

f:id:toDo:20200615031113p:plain

なので実行してみたが、エラーが出て実行できない。

f:id:toDo:20200615031119p:plain

どうやらバイナリが壊れているようだ。

動画をみる限り、memoryのセクションがおかしくなっているらしい。

PE-Bearで見てみると、Raw AddrVirtual Addrのアドレスにズレがある。

f:id:toDo:20200615034540p:plain

これが正常なバイナリだと合っている

f:id:toDo:20200615034606p:plain

のでこれを合わせてみる。

また、ImageBaseの値は実際のPEファイルが読み込まれたベースアドレスと一致するため、変更してやる。

f:id:toDo:20200615133343p:plain

f:id:toDo:20200615133345p:plain

しかしこれでもまだIATが壊れたままになってしまっているのでこれを直していく。 

f:id:toDo:20200615134300p:plain

IATの自動修復ツールの1つにScyllaがある。

github.com

x64dbgにもデフォルトでついているやつだ。

以下の記事を参考にしながらMemoryDumpを取得する。

ameblo.jp

これでemotetのメモリにある実行ファイルを取り出すことができた。

f:id:toDo:20200617101235p:plain

f:id:toDo:20200617101251p:plain

ただ、この取り出したバイナリも途中でクラッシュしてしまう...
仕方がないのでデバッガで追いながら確認していくことにしました。

動画内では、取り出したバイナリを配布しているのだが、それも走らないので謎...

f:id:toDo:20200617142348j:plain

取り出したバイナリの解析

ここまでで動画は終了になるのでここからは自力で解析することになる。

Stringsを見てみると何やら文字列が見える。

f:id:toDo:20200617142850p:plain

この文字列を検索してみるとZeus Pandaというmalwareが引っかかる。

malwareは上記のパスにファイルが存在しているかどうかのチェックをし、存在していたら動作を止めるらしい。

アセンブラを見てみるとファイルのチェックの処理が見える。

f:id:toDo:20200617150057p:plain

これがあるということはこのmalwareはemotetのなかにZeus Pandaが入ってるという認識で良さそう。

関数に名前をつけてこの関数を呼び出している箇所を見てみる。

f:id:toDo:20200617153351p:plain

この関数の呼び出し元は単純で、check_fileの戻り値をもとにとある処理を走らせているように見える。

f:id:toDo:20200617154047p:plain

プライバシーポリシー お問い合わせ