← All Articles

Process Injectionを解析する

Posted on

MITRE ATT&CK

今回の解析対象について


通称PLEADと呼ばれるマルウェアを対象とします。

  • RAT (Remote Access Trojan)
  • TrendMicroのレポート上ではBKDR_PLEAD.ZTDK-Bと表記
  • SHA256: c303bab9e2655739ee85adf92cc9e9c9b1e4371dddeb9270cbbb81f34f4f96b9

JPCERTのブログにも解析記事があります。

https://blogs.jpcert.or.jp/ja/2018/05/linopid.html


対象検体によるProcess Injectionの流れ


以下の流れで解析を行っていきます。

  1. CreateProcessA();で64bitのiexplore.exeを起動
  2. VirtualAllocEx();でiexplore.exe内にShellcodeのメモリを確保
  3. WriteProcessMemory();でVirtualAllocExで確保したメモリにShellcodeを書き込み
  4. CreateRemoteThread();でShellcodeを新しいThreadとしてiexplore.exeに実行させる

余談:Process InjectionとProcess Hollowingの違い

ATT&Kの情報を読んでもほとんど同じことを行っているように思えるのですが、どうやらProcess Hollowingの場合にはターゲットプロセスのメモリをアンマップした領域に悪性のコードを書き込むことを指しているようです。

https://attack.mitre.org/techniques/enterprise/ 参照

解析方法(Code injection動作の解析)


ここでは、Process Injection部分の解析の流れを上で紹介した検体をもとに説明します。

まずマルウェアがCreateProcessA();で自分の子プロセスを新しく作成します。

引数lpCommandLineとしてebxの値が使われているため、このebxの指すアドレスに実行されるプロセスが書かれています。

CreateProcessA

ebxを見てみると32bitのiexplore.exeを実行しようとしていることが分かります。

(実は今回の解析時にこのiexplore.exeのパスの”Program Files”を”Program Files (x86)“に手動で書き換えてしまいました。理由は、32bit(WOW64)から64bitプロセスに対してCreateRemoteThread();を実行するとERROR_ACCESS_DENIED(5)で失敗するからです。この詳細はまた別の記事にて紹介します。)

ebx

CreateProcessA();は引数として渡したlpProcessInformationのメンバからhProcessを取り出し、iexplore.exeに対してVirtualAllocEx();を呼び出します。

これは不正なコードをInjectionするメモリ領域を確保する為です。

VirtualAllocEx

VirtualAlloc();で確保したメモリにWriteProcessMemoryA();にて不正なコードを書き込み(Injection)します。

WriteProcessMemory

CreateRemoteThread();にて、不正なコードをInjectionしたメモリのアドレスをlpStartAddressに入れてiexplore.exeのスレッドとして実行します。

CreateRemoteThread

ここまでで、Process Injectionの流れは終了です。この後、iexplore.exeが不正な挙動を実行していくこととなります。

解析方法(Code injectionされたプロセスの解析)


今回の例では、Code injectionされたiexplore.exeの解析を進める方法を示します。

上述のCreateRemoteThread();実行の直前から開始します。 デバッガを新しく開き、CreateProcessA();で作られたiexplore.exeのプロセスにAttachします。私の場合は今まで通りIDA Proで行います。

IDA ProでAttachする図1

IDA ProでAttachする図2

Shift+F7でSegmentsを開き、不正コードがInjectionされたセグメント(実行フラグXが付いているはずです)を右クリックしBreak on accessを選択します。そうすると、選択セグメント全体にハードウェアブレイクポイントが張られます。

Segments

ハードウェアブレイクポイントが張られていることを確認し、F9でContinueしておきます。

Hardware breakpointが張られた図

ここで初めて、Code injectionする側のCreateRemoteThread();をステップ実行します。

すると、iexplore.exeがブレイクポイントで止まっているので動的解析を始めることが出来ます。


reversingmalwareida pro