analyzing-malware-behavior-with-cuckoo-sandbox について
Cuckoo Sandboxで不審なファイルを実行し、挙動を調べるマルウェア分析向けのスキルです。プロセス、ネットワーク、ファイルやレジストリの変更、挙動シグネチャ、取得したメモリの追跡を案内します。
主な機能
- 01サンプルの投入と実行監視
- 02プロセス動作とAPI呼び出しの追跡
- 03DNSとネットワーク通信の確認
- 04ファイルとレジストリ変更の調査
- 05挙動シグネチャの確認
- 06取得したメモリの分析
活用シーン
- 01パックされたサンプルの展開とペイロード配信の観察
- 02永続化とC2通信の追跡
- 03複数サンプルの分析手順の標準化
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ mukul975/ anthropic-cybersecurity-skills --skill analyzing-malware-behavior-with-cuckoo-sandboxインストール後、Claude Code で/analyzing-malware-behavior-with-cuckoo-sandboxを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
LICENSEreferences/api-reference.mdscripts/agent.py詳細
Cuckoo Sandbox でマルウェアの挙動を分析する
使用する場面
- 不審なサンプルが静的解析によるトリアージを通過し、制御された環境での挙動観察が必要な場合
- マルウェアの実行によるネットワークトラフィック、ドロップされたファイル、レジストリの変更、API 呼び出しを取得する必要がある場合
- 第 2 段階ペイロードのダウンロードや永続化メカニズムを含む、感染チェーン全体を特定する場合
- 観察した実行時のアクティビティに基づいて、挙動シグネチャや YARA ルールを生成する場合
- 一貫したレポートが必要な、大量のマルウェアサンプルの自動分析を行う場合
使用しないでください:設定に誤りのあるサンドボックスでネットワーク共有を介して拡散する可能性のある、既知のランサムウェアの亜種を分析する場合。まずネットワークが隔離されていることを確認してください。
前提条件
- 専用の分析サーバーに Cuckoo Sandbox 3.x がインストールされていること(Ubuntu 22.04 を推奨)
- Windows 10/11 のスナップショットでゲスト VM が設定されていること(Cuckoo エージェントがインストールされ、クリーンな状態でスナップショットが取得されていること)
- Cuckoo の仮想化バックエンドとして、VirtualBox、KVM、または VMware が設定されていること
- インターネットサービスをシミュレートする InetSim または FakeNet-NG を備えた隔離ネットワーク
- 分析中のネットワークレベルのシグネチャ照合のために、Suricata または Snort が統合されていること
- PCAP キャプチャとメモリダンプ用の十分なディスク容量(最低 500 GB を推奨)
ワークフロー
ステップ 1:サンプルを Cuckoo に送信する
自動分析のためにマルウェアサンプルを送信します。
# Submit via command line
cuckoo submit /path/to/suspect.exe
# Submit with specific analysis timeout (300 seconds)
cuckoo submit --timeout 300 /path/to/suspect.exe
# Submit with specific VM and analysis package
cuckoo submit --machine win10_x64 --package exe --timeout 300 /path/to/suspect.exe
# Submit via REST API
curl -F "[email protected]" -F "timeout=300" -F "machine=win10_x64" \
http://localhost:8090/tasks/create/file
# Submit URL for analysis
curl -F "url=http://malicious-site.com/payload" -F "timeout=300" \
http://localhost:8090/tasks/create/url
# Check task status
curl http://localhost:8090/tasks/view/1 | jq '.task.status'
ステップ 2:実行をリアルタイムで監視する
分析の進行状況を追跡し、実行中の挙動を観察します。
# Watch Cuckoo analysis log
tail -f /opt/cuckoo/log/cuckoo.log
# Monitor analysis task status
cuckoo status
# Access Cuckoo web interface for live screenshots and process tree
# Navigate to http://localhost:8080/analysis/<task_id>/
実行中に注目する主な挙動イベント:
- プロセスの生成チェーン(親子関係)
- 外部 IP へのネットワーク接続の試行
- 一時ディレクトリまたはシステムフォルダーへのファイルのドロップ
- Run キーまたはサービスエントリへのレジストリ変更
- 暗号化(CryptEncrypt)、インジェクション(WriteProcessMemory)、または回避に関する API 呼び出し
ステップ 3:プロセスのアクティビティを分析する
Cuckoo レポートからプロセスツリーと API 呼び出しトレースを確認します。
# Parse Cuckoo JSON report programmatically
import json
with open("/opt/cuckoo/storage/analyses/1/reports/report.json") as f:
report = json.load(f)
# Process tree analysis
for process in report["behavior"]["processes"]:
pid = process["pid"]
ppid = process["ppid"]
name = process["process_name"]
print(f"PID: {pid} PPID: {ppid} Name: {name}")
# Extract suspicious API calls
for call in process["calls"]:
api = call["api"]
if api in ["CreateRemoteThread", "VirtualAllocEx", "WriteProcessMemory",
"NtCreateThreadEx", "RegSetValueExA", "URLDownloadToFileA"]:
args = {arg["name"]: arg["value"] for arg in call["arguments"]}
print(f" [!] {api}({args})")
ステップ 4:ネットワークアクティビティを確認する
ネットワーク接続、DNS クエリ、HTTP リクエストを調べます。
# Network analysis from Cuckoo report
network = report["network"]
# DNS resolutions
print("DNS Queries:")
for dns in network.get("dns", []):
print(f" {dns['request']} -> {dns.get('answers', [])}")
# HTTP requests
print("\nHTTP Requests:")
for http in network.get("http", []):
print(f" {http['method']} {http['uri']} (Host: {http['host']})")
if http.get("body"):
print(f" Body: {http['body'][:200]}")
# TCP connections
print("\nTCP Connections:")
for tcp in network.get("tcp", []):
print(f" {tcp['src']}:{tcp['sport']} -> {tcp['dst']}:{tcp['dport']}")
# Extract PCAP for deeper Wireshark analysis
# PCAP location: /opt/cuckoo/storage/analyses/1/dump.pcap
ステップ 5:ファイルシステムとレジストリの変更を調べる
永続化メカニズムとドロップされたファイルを記録します。
# File operations
print("Files Created/Modified:")
for f in report["behavior"].get("summary", {}).get("files", []):
print(f" {f}")
# Dropped files with hashes
print("\nDropped Files:")
for dropped in report.get("dropped", []):
print(f" Path: {dropped['filepath']}")
print(f" SHA-256: {dropped['sha256']}")
print(f" Size: {dropped['size']} bytes")
print(f" Type: {dropped['type']}")
# Registry modifications
print("\nRegistry Keys Modified:")
for key in report["behavior"].get("summary", {}).get("keys", []):
print(f" {key}")
ステップ 6:シグネチャとスコアを確認する
Cuckoo の挙動シグネチャと脅威スコアを確認します。
# Behavioral signatures triggered
print("Triggered Signatures:")
for sig in report.get("signatures", []):
severity = sig["severity"]
name = sig["name"]
description = sig["description"]
marker = "[!]" if severity >= 3 else "[*]"
print(f" {marker} [{severity}/5] {name}: {description}")
for mark in sig.get("marks", []):
if mark.get("call"):
print(f" API: {mark['call']['api']}")
if mark.get("ioc"):
print(f" IOC: {mark['ioc']}")
# Overall score
score = report.get("info", {}).get("score", 0)
print(f"\nOverall Threat Score: {score}/10")
ステップ 7:メモリダンプのアーティファクトを抽出する
実行中に取得した完全なメモリダンプを分析します。
# Memory dump is saved at:
# /opt/cuckoo/storage/analyses/1/memory.dmp
# Use Volatility to analyze the memory dump
vol3 -f /opt/cuckoo/storage/analyses/1/memory.dmp windows.pslist
vol3 -f /opt/cuckoo/storage/analyses/1/memory.dmp windows.malfind
vol3 -f /opt/cuckoo/storage/analyses/1/memory.dmp windows.netscan
主な概念
| 用語 | 定義 |
|---|---|
| 動的解析 | 制御された環境でマルウェアを実行し、システムコール、ネットワークアクティビティ、ファイル操作などの実行時の挙動を観察すること |
| サンドボックス回避 | 解析を避けるために仮想環境やサンドボックスを検出し、挙動を変えるマルウェアの手法(スリープタイマー、VM チェック、ユーザー操作のチェックなど) |
| API フック | マルウェアによる Windows API 呼び出しを傍受し、関数名、パラメーター、戻り値を記録する Cuckoo の手法 |
| InetSim | 隔離された分析ネットワーク内で、マルウェアのネットワークリクエスト(HTTP、DNS、SMTP)に応答するインターネットサービスシミュレーションツール |
| プロセスインジェクション | 正規のプロセスにコードを注入するマルウェアの手法。VirtualAllocEx と WriteProcessMemory の API 呼び出しシーケンスを監視して検出します |
| 挙動シグネチャ | 特定の API 呼び出し、ファイル操作、またはネットワークアクティビティのシーケンスを既知のマルウェアの挙動と照合する、ルールベースの検出方法 |
| 分析パッケージ | ゲスト VM 内で特定のファイルタイプ(exe、dll、pdf、doc)をどのように実行するかを定義し、適切に挙動を取得するための Cuckoo モジュール |
ツールとシステム
- Cuckoo Sandbox:オープンソースの自動マルウェア解析システムです。動作レポート、ネットワークキャプチャ、メモリダンプを提供します
- InetSim:インターネットサービスのシミュレーションスイートです。隔離されたマルウェア解析ネットワーク向けに、偽の HTTP、DNS、SMTP などのサービスを提供します
- FakeNet-NG:FLARE チームのネットワークシミュレーションツールです。すべてのネットワークトラフィックを傍受し、解析用にリダイレクトします
- Suricata:Cuckoo と統合されたネットワーク IDS/IPS です。悪意のあるネットワークトラフィックをシグネチャベースでリアルタイムに検出します
- Volatility:Cuckoo による解析中に取得したメモリダンプの分析に使用するメモリフォレンジックフレームワークです
よくあるシナリオ
シナリオ:多段階ドロッパーの解析
コンテキスト:静的解析で、インポートが最小限でエントロピーが高いパック済み実行ファイルが見つかりました。アンパック、ペイロードの配信、C2 の確立を観察するため、サンプルをサンドボックスで実行する必要があります。
手順:
- 動作が遅い場合にも記録できるよう、タイムアウトを延長(600 秒)してサンプルを Cuckoo に送信します
- プロセスツリーを確認し、子プロセスの作成(ドロッパーによるペイロードプロセスの起動)を調べます
- %TEMP%、%APPDATA%、またはシステムディレクトリにドロップされたファイルを特定します
- ドロップされたファイルを抽出し、個別に解析するためにハッシュを計算します
- ネットワーク接続をマッピングし、初回実行後に接続した C2 インフラストラクチャを特定します
- レジストリの変更を確認し、永続化の仕組み(Run キー、スケジュールされたタスク、サービス)を調べます
- 動作シグネチャを既知のマルウェアファミリーと比較します
注意点:
- 解析タイムアウトが短すぎると、2 段階目のペイロードが実行される前にサンドボックスが終了することがあります
- InetSim が DNS および HTTP リクエストに応答するよう設定されていないと、マルウェアが C2 へのチェックインを越えて先に進めません
- サンドボックス回避の検知を無視しないでください。サンプルがすぐに終了する場合、仮想環境を検知している可能性があります
- ドロップされたファイルを個別に解析しないと、最終ペイロードよりも初期のドロッパーに注目してしまうことがあります
出力形式
DYNAMIC ANALYSIS REPORT - CUCKOO SANDBOX
==========================================
Task ID: 1547
Sample: suspect.exe (SHA-256: e3b0c44298fc1c149afbf4c8996fb924...)
Analysis Time: 300 seconds
VM: win10_x64 (Windows 10 21H2)
Score: 8.5/10
PROCESS TREE
suspect.exe (PID: 2184)
└── cmd.exe (PID: 3456)
└── powershell.exe (PID: 4012)
└── svchost_fake.exe (PID: 4568)
FILE SYSTEM ACTIVITY
[CREATED] C:\Users\Admin\AppData\Local\Temp\payload.dll
[CREATED] C:\Windows\System32\svchost_fake.exe
[MODIFIED] C:\Windows\System32\drivers\etc\hosts
REGISTRY MODIFICATIONS
[SET] HKCU\Software\Microsoft\Windows\CurrentVersion\Run\WindowsUpdate = "C:\Windows\System32\svchost_fake.exe"
[SET] HKLM\SYSTEM\CurrentControlSet\Services\FakeService\ImagePath = "C:\Windows\System32\svchost_fake.exe"
NETWORK ACTIVITY
DNS: update.malicious[.]com -> 185.220.101.42
HTTP: POST hxxps://185.220.101[.]42/gate.php (beacon)
TCP: 10.0.2.15:49152 -> 185.220.101.42:443 (237 connections)
BEHAVIORAL SIGNATURES
[!] [4/5] injection_createremotethread: Injects code into remote process
[!] [4/5] persistence_autorun: Modifies Run registry key for persistence
[!] [3/5] network_cnc_http: Performs HTTP C2 communication
[*] [2/5] antiav_detectfile: Checks for antivirus product files
DROPPED FILES
payload.dll SHA-256: abc123... Size: 98304 Type: PE32 DLL
svchost_fake.exe SHA-256: def456... Size: 184320 Type: PE32 EXE
コメント
Markdown 対応