セキュリティ研究員の皆さん、こんにちは!🕵️♂️
私たちは人を判断するとき、その人の「見た目」だけで判断しませんよね?その人が普段「どのような行動」をするかを見て、初めて本当の性格を知ることができます。
ソフトウェア(ファイル)も同様です。
外見(アイコン、ファイル名)は電卓のように偽装できても、内部でオペレーティングシステム(OS)に要求する行動であるAPI(Application Programming Interface)呼び出しは欺くのが難しいです。
- 正常ファイル(電卓):「画面に数字を描画して」、「マウスのクリックを受け取って」
- 悪性ファイル(ランサムウェア):「ファイルリストを全部持ってきて」、「暗号化して」、「インターネットに接続してキーを送って」
今日は、正常ファイルと悪性ファイルのAPI呼び出しリスト(Import Table)を抽出し、それをAIに見せて「犯人は誰か当ててみて!」と質問する実習を行います。
AIは果たしてこの「行動リスト」だけでマルウェアを検出できるでしょうか?確認してみましょう!🚀

1. API呼び出しリスト(Import Table)とは? 📋
Windows実行ファイル(PE)は、すべてを単独で行うわけではありません。ファイルを読み込んだり、インターネットにアクセスしたりするには、Windowsオペレーティングシステムに「助けて!」と要求する必要があります。このときに使用する関数がまさにWindows APIです。
このファイルが「実行時にこれらの関数が必要だ!」と記したリストをIAT(Import Address Table)と呼びますが、これを見るだけでファイルの目的の80%は推測できます。
2. [準備] APIリストの抽出 🛠️
抽出方法はいくつか(PEStudio、Ghidraなど)ありますが、私たちは最も速くて簡単なPythonスクリプトを使ってみます。(pefileライブラリが必要)
💡 ヒント:Pythonがない場合は、「PEStudio」のような無料ツールにファイルを入れ、「Imports」タブをコピーしても構いません!
🐍 Python抽出スクリプト (extract_api.py)
Python
import pefile
def get_api_list(file_path):
try:
pe = pefile.PE(file_path)
print(f"--- [ {file_path} ] API List ---")
for entry in pe.DIRECTORY_ENTRY_IMPORT:
for imp in entry.imports:
if imp.name:
print(imp.name.decode('utf-8'))
except Exception as e:
print(f"Error: {e}")
# 実習: 正常ファイル(電卓)と悪性サンプルのパスを指定してください
get_api_list("C:\Windows\System32\calc.exe")
get_api_list("malware_sample.exe")
3. [データ] 抽出されたAPIリストの比較 (サンプルデータ) 📊
スクリプトを実行して得られた2つのファイルのAPIリストです。ざっと見ただけでも、何となく違いが感じられませんか?
✅ ファイルA (正常ファイル:電卓)
GetMessageW
TranslateMessage
DispatchMessageW
SetWindowTextW
DrawTextW
BeginPaint
EndPaint
LoadIconW
...
👉 特徴:Paint, Window, Message… 主に画面を描画し、ユーザーと対話する(GUI)関数が見られます。
⛔ ファイルB (悪性ファイル:ランサムウェアの疑い)
FindFirstFileA
FindNextFileA
CryptAcquireContextA
CryptGenKey
CryptEncrypt
InternetOpenA
InternetConnectA
HttpSendRequestA
WriteFile
Process32First
VirtualAllocEx
...
👉 特徴:FindFile(ファイルを検索)、Crypt(暗号化)、Internet(ネットワーク)、VirtualAlloc(メモリ割り当て)… 何か秘密裏で攻撃的な作業を行うようです。
4. [実習] AIに「犯人は誰?」と尋ねる 🗣️
さあ、このリストをそのままコピーして、AI(ChatGPT、Claudeなど)に判断を任せてみましょう。
📝 プロンプト (Prompt)
[役割] あなたはマルウェア分析の専門家です。
>
[状況] 私は2つの実行ファイル(A、B)から抽出したAPIインポートリストを持っています。
>
[要求事項]
>
1. 各ファイルのAPIリストを分析し、該当プログラムの主要機能(挙動)を推論してください。
2. 2つのファイルのうちマルウェアと疑われるファイルを指摘し、その根拠となる脅威的なAPIの組み合わせを説明してください。
3. 予想される悪性挙動のタイプ(例:ランサムウェア、キーロガー、インジェクターなど)を分類してください。
>
[データ]
>
(ファイルAリスト):
>
GetMessageW, TranslateMessage, SetWindowTextW, DrawTextW, … (上記の正常リストを貼り付け)
>
(ファイルBリスト):
>
FindFirstFileA, CryptEncrypt, InternetOpenA, VirtualAllocEx, … (上記の悪性リストを貼り付け)
5. [結果] AIの鳥肌が立つ分析 🕵️♀️
AIは単純な関数名の羅列から「文脈(Context)」を読み取ります。
🤖 AI分析結果
>
1. 挙動分析:
>
– ファイルA:Windowsウィンドウを作成し、画面にテキストを描画し、ユーザー入力を待機する典型的なGUIアプリケーションです。危険な機能は見られません。
– ファイルB:ファイルシステムを探索(FindFile)し、データを暗号化(CryptEncrypt)し、外部サーバーと通信(HttpSendRequest)します。また、他のプロセスのメモリにアクセス(VirtualAllocEx)しようとする兆候が見られます。
>
2. 犯人の特定:🚨 ファイルB(悪性の疑い)
>
3. 決定的な証拠(疑わしいAPIの組み合わせ):
>
– ランサムウェアの兆候:FindFirstFile + WriteFile + CryptEncryptの組み合わせは、PC内のファイルを見つけて内容を暗号化し、上書きする典型的なランサムウェアのパターンです。
– C2通信:InternetOpen + HttpSendRequestは、暗号化キーを送信したりコマンドを受信したりするためのネットワーク挙動です。
– インジェクション:VirtualAllocExは、他のプロセスに悪性コードを埋め込む際によく使用されます。
>
4. 結論:
>
ファイルBはランサムウェア(Ransomware)または情報窃取型トロイの木馬である可能性が非常に高いです。直ちに隔離してください!
6. 終わりに:AI、静的分析の優れたパートナー 🤝
いかがでしたか?私たちはコードを一行も見ていません。ただ「このファイルがどのようなツール(API)を用意したか」というリストを見せただけで、AIは正確に悪性かどうかを判断しました。
もちろん、巧妙なマルウェアはAPIを隠すことも(Dynamic Loading)ありますが、この「APIプロファイリング」手法は、初期分析において最も迅速かつ効果的な方法の一つです。
もし皆さんのPCに気になるファイルがあれば、今日学んだ方法でAPIリストを抽出してAIに尋ねてみてください!意外な結果を教えてくれるかもしれません。👻
次回は理論編、「アセンブリ命令パターンとC言語のマッピング構造」を通じて、見た目ではなく本当のコードの中に入っていく準備をしてみましょう。お楽しみに!
コメントを残す