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

第 4 章 Alkanet 19

4.2 Alkanet の構成と概要

4.2.1 構成

Alkanetの全体構成を図4.1に示す.Alkanet は,2台の PCを用いてマルウェアの 挙動観測と解析を行う.マルウェア観測用 PC上では,マルウェアを動作させ,シス

図 4.1 Alkanetの全体構成 [18]

テムコールトレースを行う.ロギング用PC では,ログを収集し,解析を行う.

Alkanetは,Intel VT を利用するバージョンのBitVisor [20]内部に拡張機能として 実装している.準パススルー型の VMM であるBitVisor は,実ハードウェアの多く をVMへ提供する.Intel VT版 BitVisor は,ゲスト OS との通信用のインタフェー

スにvmcall命令を用いている. vmcall命令は,VMMが動作していない状態で使用す

ると,#UD(未定義オペコード)例外が発生する. したがって,Alkanetでは,vmcall 実行時にVMへ #UD 例外を発生させることで,BitVisorが動作していることを隠蔽 する.

マルウェアの実行環境であるゲスト OS には,x86版Windows XP Service Pack 3 を用いている.Alkanet は,この環境で発行されるシステムコールをシステムコール ハンドラの入口と出口でフックし,Alkanet 内部のシステムコールアナライザに制御 を移し,その種類や引数などを取得・記録する.

Alkanetのログは,ロギング用PCのロガーによってIEEE 1394のDirect Memory

4.2. Alkanetの構成と概要 21

Access を用いてロギング用 PCに転送される.このログ取得手法は,Alkanetによる

送信処理が不要であるため,Alkanetに負荷をかけずにログを取得できる.ロギング 用PCのログ解析ツールは,Alkanetから取得したログから,システムコールのグルー プ化や,各種 ID やファイルパスなどを用いたログ同士の関連付け,別プロセスに挿 入されたスレッドの追跡などを行う.

4.2.2 監視対象とするシステムコール

効率的にマルウェアの挙動を観測するためには,マルウェアが使用するシステムコー ルに絞って情報を取得する必要がある.例えば,ファイルやレジストリの改竄には,

ファイルやレジストリを読み書きするシステムコールが必要である.また,DoS 攻撃 やスパムメールの送信を行う場合,ネットワークの操作を行うシステムコールの発行 が必要である.典型的なマルウェアの機能は,以下のような挙動で構成される.

ファイルのオープン,作成,読出し,書込み

レジストリの参照,設定

仮想メモリの読出し,書込み,確保,権限の変更

ファイルマッピングの作成,オープン,ビューの作成

ネットワークに対する送信,受信

プロセスの作成,終了

スレッドの作成,終了,停止,再開,コンテキスト変更

ドライバのロード,アンロード

処理時間の計測

スリープ

Alkanetでは,上記の挙動に対応するシステムコールに限定して,情報を取得し,ロ

グを取得する.これにより,より高速な動的解析を実現する.具体的に Windows XP でトレース対象とするシステムコールの例を表4.1に示す.

4.2.3 取得する情報

Alkanetは,システムコールのフック時に以下の情報を取得する.

システムコール発行元の Cid と実行ファイル名

システムコール番号

表 4.1 Alkanet がログに記録するシステムコール [18]

挙動 フックするシステムコールの例

ファイル NtCreateFile, NtOpenFile, NtWriteFile, NtReadFile,    NtSetInformationFile, NtDeleteFile

レジストリ NtCreateKey, NtOpenKey, NtQueryKey,        NtSetInformationKey, NtDeleteKey, NtSetValueKey,    NtQueryValueKey, NtDeleteValueKey

仮想メモリ NtWriteVirtualMemory, NtReadVirtualMemory,      NtAllocateVirtualMemory, NtProtectVirtualMemory

ファイルマッピング NtCreateSection, NtOpenSection, NtMapViewOfSection ネットワーク NtDeviceIoControlFile, NtCreateFile, NtReadFile,    

NtWriteFile

プロセス NtCreateProcess, NtCreateProcessEx, NtTerminateProcess スレッド NtCreateThread, NtSuspendThread, NtResumeThread,  

NtTerminateThread, NtGetContextThread,        NtSetContextThread

ドライバ NtLoadDriver, NtUnloadDriver

時間 NtQueryPerformanceCounter

スリープ NtDelayExecution

システムコールの引数と戻り値

Cid は,プロセスIDとスレッドIDの組であり,ログ取得時におけるシステムコー ル発行元の区別に用いられる.また,その実行ファイルの名前も取得する.さらに,

システムコールが示す挙動を調査するために,システムコールの引数と戻り値も取得 する.