• 検索結果がありません。

第 5 章 呼出し元識別手法 45

5.8 感染領域識別機能の評価

2014」[55]内で観測されていたものと同等のものである.当該検体は,多くのアンチ ウイルスソフトウェアでPlugXとして検出されたものである. PlugXは,Windows の持つ実行ファイルである svchost.exe を起動し,メモリにマップされたエントリポ イントを改竄することで,挿入したコードを実行させる [26].実行ファイルそのもの の改竄や新たなスレッドの挿入を行わないため,従来のプロセスやスレッドを単位と する観測手法では,正規のコードとマルウェアのコードを区別できず,無害なファイ ルが実行されただけにみえる.

PlugXの挙動を解析するためには,(1) svchost.exe プロセス内に挿入された感染領

域を識別し,(2) その領域から発行されるシステムコールを識別する必要がある.当該 感染領域は,PlugXが svchost.exeプロセスに対して行ったメモリ領域の確保や,当該 領域への実行権限の付与やコードの書込みに相当する挙動を観測することで検出でき る.また,関数呼出し階層に感染領域内の関数が含まれることを確認することで,シ ステムコールの識別も可能である.なお,これらの識別ができれば,PlugXが挿入し た感染領域から拡大する感染領域も追跡・識別が可能である. したがって,本評価 では,上記(1),(2)の2点を確認事項とし,これらを提案手法で識別可能であること を示す.

5.8.2 評価結果

検体c13.exeは,Tempフォルダにstarter.exeを作成し,このstarter.exeをPID 32c のプロセスとして起動した.図5.6の破線より上は,starter.exeがsvchost.exeを起動 し,その内部にコードインジェクションを行う挙動を示し,破線より下は感染された

svchost.exe の挙動を示す.図中の行頭の数字は,ログの番号を示す.先頭に表示して

いるログ番号11008のログでは,“(32c.584)”は,PID 32c,TID 584であることを示し,

“starter.exe”はプロセス名,“NtCreateProcessEx”が発行されたシステムコールの名前 である.その後は,引数から得た情報が続く.当該ログの場合,“<略>\svchost.exe”

がPID 5c8のプロセスとして起動されたことを示す.続く11068のNtCreateThread システムコールを用いてスレッドを作成しているが,この段階では作成されたTID 5b0 のスレッドは,中断状態である(“Suspended:TRUE”).破線より下に示したログ12139 には,5.6節で示したログと同様に,システムコールフック時の関数呼出し階層も表記 している.

11115や11128のログは,起動された svchost.exeプロセスのメモリ空間にメモリ 領域の確保と書込みを行っていることを示している.11115のログは,starter.exe が

5.8. 感染領域識別機能の評価 61

図 5.6 svchost.exeへのコードインジェクション [19]

NtAllocateVirtualMemory システムコールを用いて,svchost.exeのメモリ空間上のア ドレス0x90000から0x1d000バイトの領域を確保していることを示す.さらに,11128 のログは,11115で確保されたメモリ領域に書込みが行われたことを示す. また,上記 の領域に対して,実行権限と書込み権限を付与するために,NtProtectVirtualMemory システムコールが複数回発行されていたことも確認した.以上のことから,提案手 法は当該領域を感染領域として検出する. この他,更なるメモリ確保や書込み,メ モリの保護権限の変更などが行われた後,NtResumeThreadシステムコールによって svchost.exe のTID 5b0のスレッドが動作を開始する. なお,svchost.exe が起動され るまでに当該実行ファイルをPlugXが改竄するような挙動はなかった.以上から,上 記の挙動は PlugXの持つsvchost.exeに感染する挙動であり,挿入された感染領域は 0x90000から0xad000であることが確認できた(確認事項(1)).

破線より下のログ12139が示すNtAllocateVirtualMemory システムコールは,ログ

11068が示す starter.exe が発行したシステムコールにより作成されたスレッド(TID

5b0)から発行されたものである.前述したように実行ファイルであるsvchost.exe に は改竄された痕跡はなく,スレッドも通常のプロセス生成の一環で作成されたもので

ある.したがって,プロセス単位およびスレッド単位でのマルウェアの区別では,こ のシステムコールをマルウェアによるものであると判定することは困難である.

関数呼出し階層の[03]および[04]のエントリは,0x90000から0xad000のメモリ 領域にある関数を経由したことを示している.このメモリ領域は,11115や11128の ログが示すようにマルウェアであるstarter.exeにより確保・書込みされた感染領域で ある.また,PTEから得た情報から,書込み可能な領域であり(Writable: 1),実際に 書込みが行われた領域である(Dirty: 1)ことも確認できる.少なくとも[03]は Valid:

YESであるため,この領域を経由してシステムコールが発行されてきたことは確実で ある. したがって,確認事項(2)についても確認できた. 以上から,システムコー ルの結果とVADやPTEから得られるメモリ領域の情報から,感染領域を識別可能で あることが確認できた. したがって,提案手法は,感染領域から発行されたシステム コールを識別可能である.