解析メモ

マルウェア解析してみたり解析に役に立ちそうと思ったことをメモする場所。このサイトはGoogle Analyticsを利用しています。

Panda Banker 解析 (6)

Panda Banker 解析 (1) - 解析メモ ... 軽く動作確認

Panda Banker 解析 (2) - 解析メモ ... UnhandledExceptionFilter による耐解析機能

Panda Banker 解析 (3) - 解析メモ ... アンパック

Panda Banker 解析 (4) - 解析メモ ... Extended Attribute (EA) による耐解析機能

Panda Banker 解析 (5) - 解析メモ ... コードインジェクション解明

 

前回コードインジェクションしている手法は判明しているので、今度はインジェクション先(svchost.exe)をデバッグしてみたい。できればエントリポイントからのデバッグがしたい。

 

コードインジェクションは API Monitor のログを見ると、CreateProcessW でプロセス作成、コード注入後、CreateRemoteThread でスレッド開始の流れ。それぞれにブレイクポイントを貼ってみる。

 

f:id:k1z3:20180423011329p:plain

CreateProcessW()

 

f:id:k1z3:20180423012018p:plain

CreateRemoteThread()

 

ここで、CreateRemoteThread の引数を確認してみる。

MSDN - CreateRemoteThread function (Windows) によると以下の通り。

 

HANDLE WINAPI CreateRemoteThread(
 _In_ HANDLE             hProcess,
 _In_ LPSECURITY_ATTRIBUTES    lpThreadAttributes,
 _In_ SIZE_T              dwStackSize,
 _In_ LPTHREAD_START_ROUTINE  lpStartAddress,
 _In_ LPVOID           lpParameter,
 _In_ DWORD            dwCreationFlags,
 _Out_ LPDWORD           lpThreadId
);

 

4つ目の引数が lpStartAddress なので、Thread の開始アドレスがここに入っていると思う。デバッガをもう一つ起動して、svchost.exe にアタッチ&実行。ブレイクポイントを lpStartAddress に貼ってみる。その後、CreateRemoteThread 以降を実行。

 

f:id:k1z3:20180423012718p:plain

 

svchost.exe の方のデバッガが無事エントリポイント(lpStartAddress)でブレイクがかかる。以降はステップ実行でデバッグできる。

 

ちなみに、CrateRemoteThread でブレイクかけた時の RWX 属性の 120KB はProcessHacker で取得することができて、MZ から始まる実行ファイルが取得できる。

 

f:id:k1z3:20180423013546p:plain

 

ただし、実行してもエラー終了する。

f:id:k1z3:20180423013623p:plain

 

IDA Pro でも見れるが、アドレスが違っていたり(0x8987E→0x10BA47E)、インポートテーブルが見れなかったりと散々な結果になる。

 

f:id:k1z3:20180423014556p:plain