概要
API Monitorはアプリケーションやサービスによって呼び出されたAPIを監視および制御できるフリーのソフトウェアです。呼び出されるAPIの種類や引数、API実行後の戻り値といったパラメータをキャプチャすることができます。また引数や戻り値を改変することができ、プログラムのテストやデバッグに活用することができます。
下図はAPI Monitorの画面構成を示しています。基本的な使い方は以下のとおりです。
- 図中の画面①で監視するAPIにチェックを入れる。
- 監視するアプリケーションやサービスを画面②(既に実行されているプロセスやサービス)や画面③(実行前のアプリケーション)から読み込む。
- 呼び出されたAPIを画面④で確認する。
- 画面④からAPIを選択して引数や戻り値の確認を行う。
マルウェア解析における利用方法
マルウェア解析の分野では、API MonitorはAPIを利用した処理(ハードウェア情報の取得、データの暗号化や復号、解析妨害など)の解明に利用されます。今回はマルウェア(ファイル名:sample.exe)がプロセスインジェクションを行う処理について紹介します。
- 監視するAPIを指定
- 検体の読み込み
- キャプチャされた情報を確認
詳細な手順
1.監視するAPIを指定
監視するAPIの項目にチェックを入れます。マルウェアによって呼び出されることの多いAPIや調査したい動作に関係するAPIなど、項目を絞り込むことで効率的な解析を行うことができます。
2.検体の読み込み
監視対象のアプリケーションを指定して読み込むと、そのアプリケーションが実行されAPIの呼び出し情報がキャプチャされます。
3.キャプチャされた情報を確認
キャプチャされたAPI情報を確認することで、マルウェアの挙動を把握することができます。下図を見ると、読み込んだsample.exeによって以下のAPIが呼び出されたことが確認できます。これらのAPIから、sample.exeがプロセスインジェクションの手法を備えた検体であることが分かります。
- CreateProcessA(サスペンド状態でプロセスを作成する)
- GetThreadContext(スレッドのコンテキストを取得する)
- ReadProcessMemory(プロセス内のメモリー領域からデータを読み取る)
- VirtualAllocEx(プロセス内のメモリー領域を確保する)
- WriteProcessMemory(プロセス内のメモリー領域にデータを書き込む)
- SetThreadContext(スレッドのコンテキストを設定する)
- ResumeThread(サスペンド状態のプロセスを再開する)
以上のように、調査対象のマルウェアがプロセスインジェクション手法を利用することやその際に呼び出されるAPIを確認することができます。