collecting-volatile-evidence-from-compromised-host について
インシデント対応者とフォレンジック調査員向けの揮発性証拠収集スキルです。隔離や修復の前にメモリ、ネットワーク、プロセス、セッション情報を取得し、ハッシュと管理記録で証拠の完全性を保ちます。
主な機能
- 01揮発性の順序に沿ったデータ収集
- 02メモリとネットワーク状態の取得
- 03プロセス、ユーザー、設定の記録
- 04SHA256 による証拠のハッシュ化
- 05証拠管理記録の維持
活用シーン
- 01ファイルレスマルウェアの調査
- 02稼働中の C2 セッションの証拠保全
- 03内部不正やラテラルムーブメントの調査
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ mukul975/ anthropic-cybersecurity-skills --skill collecting-volatile-evidence-from-compromised-hostインストール後、Claude Code で/collecting-volatile-evidence-from-compromised-hostを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
LICENSEassets/template.mdreferences/api-reference.mdstandards.mdworkflows.mdscripts/agent.pyprocess.py詳細
侵害されたホストからの揮発性証拠の収集
使用する状況
- セキュリティインシデントが確認され、侵害されたホストが特定されている
- システムの隔離、シャットダウン、または修復を開始する前
- メモリ常駐型マルウェアが疑われる(ファイルレス攻撃)
- ネットワーク接続、実行中のプロセス、システムの状態を取得する必要がある
- 法的手続きにおいて、フォレンジック証拠の保全が求められる可能性がある
- 揮発性データを用いた根本原因分析が必要なインシデント
前提条件
- USB またはネットワーク共有上にフォレンジック収集ツールキットがあること(信頼できるツール)
- メモリ取得用の WinPmem/LiME
- ディスクイメージ作成用のライトブロッカーまたはフォレンジックワークステーション
- 証拠保全の連鎖を記録する書類
- 完全性を検証できる安全な証拠保管場所
- 証拠収集の許可(内部関係者による事案では法務部門/人事部門の承認)
ワークフロー
ステップ 1:収集環境を準備する
# Mount forensic USB toolkit (do NOT install tools on compromised system)
# Verify toolkit integrity
sha256sum /mnt/forensic_usb/tools/* > /tmp/toolkit_hashes.txt
diff /mnt/forensic_usb/tools/known_good_hashes.txt /tmp/toolkit_hashes.txt
# Create evidence output directory with timestamps
EVIDENCE_DIR="/mnt/evidence/$(hostname)_$(date +%Y%m%d_%H%M%S)"
mkdir -p "$EVIDENCE_DIR"
echo "Collection started: $(date -u)" > "$EVIDENCE_DIR/collection_log.txt"
echo "Collector: $(whoami)" >> "$EVIDENCE_DIR/collection_log.txt"
echo "System: $(hostname)" >> "$EVIDENCE_DIR/collection_log.txt"
ステップ 2:システムメモリを取得する(揮発性が最も高い)
# Windows - WinPmem memory acquisition
winpmem_mini_x64.exe "$EVIDENCE_DIR\memdump_$(hostname).raw"
# Linux - LiME kernel module for memory acquisition
insmod /mnt/forensic_usb/lime.ko "path=$EVIDENCE_DIR/memdump_$(hostname).lime format=lime"
# Linux - Alternative using /proc/kcore
dd if=/proc/kcore of="$EVIDENCE_DIR/kcore_dump.raw" bs=1M
# macOS - osxpmem
osxpmem -o "$EVIDENCE_DIR/memdump_$(hostname).aff4"
# Hash the memory dump immediately
sha256sum "$EVIDENCE_DIR/memdump_"* > "$EVIDENCE_DIR/memory_hash.sha256"
ステップ 3:ネットワークの状態を取得する
# Active network connections
# Windows
netstat -anob > "$EVIDENCE_DIR/netstat_connections.txt" 2>&1
Get-NetTCPConnection | Export-Csv "$EVIDENCE_DIR/tcp_connections.csv" -NoTypeInformation
Get-NetUDPEndpoint | Export-Csv "$EVIDENCE_DIR/udp_endpoints.csv" -NoTypeInformation
# Linux
ss -tulnp > "$EVIDENCE_DIR/socket_stats.txt"
netstat -anp > "$EVIDENCE_DIR/netstat_all.txt" 2>/dev/null
cat /proc/net/tcp > "$EVIDENCE_DIR/proc_net_tcp.txt"
cat /proc/net/udp > "$EVIDENCE_DIR/proc_net_udp.txt"
# ARP cache
arp -a > "$EVIDENCE_DIR/arp_cache.txt"
# Routing table
route print > "$EVIDENCE_DIR/routing_table.txt" # Windows
ip route show > "$EVIDENCE_DIR/routing_table.txt" # Linux
# DNS cache
ipconfig /displaydns > "$EVIDENCE_DIR/dns_cache.txt" # Windows
# Linux: varies by resolver, check systemd-resolve or nscd
systemd-resolve --statistics > "$EVIDENCE_DIR/dns_stats.txt" 2>/dev/null
# Active firewall rules
netsh advfirewall show allprofiles > "$EVIDENCE_DIR/firewall_rules.txt" # Windows
iptables -L -n -v > "$EVIDENCE_DIR/iptables_rules.txt" # Linux
ステップ 4:実行中のプロセスを取得する
# Windows - Detailed process list
tasklist /V /FO CSV > "$EVIDENCE_DIR/process_list_verbose.csv"
wmic process list full > "$EVIDENCE_DIR/wmic_process_full.txt"
Get-Process | Select-Object Id,ProcessName,Path,StartTime,CPU,WorkingSet |
Export-Csv "$EVIDENCE_DIR/ps_processes.csv" -NoTypeInformation
# Windows - Process with command line and parent
wmic process get ProcessId,Name,CommandLine,ParentProcessId,ExecutablePath /FORMAT:CSV > \
"$EVIDENCE_DIR/process_commandlines.csv"
# Linux - Full process tree
ps auxwwf > "$EVIDENCE_DIR/process_tree.txt"
ps -eo pid,ppid,user,args --forest > "$EVIDENCE_DIR/process_forest.txt"
cat /proc/*/cmdline 2>/dev/null | tr '\0' ' ' > "$EVIDENCE_DIR/proc_cmdline_all.txt"
# Process modules/DLLs loaded
# Windows
listdlls.exe -accepteula > "$EVIDENCE_DIR/loaded_dlls.txt"
# Linux
for pid in $(ls /proc/ | grep -E '^[0-9]+$'); do
echo "=== PID $pid ===" >> "$EVIDENCE_DIR/proc_maps.txt"
cat "/proc/$pid/maps" 2>/dev/null >> "$EVIDENCE_DIR/proc_maps.txt"
done
# Open file handles
handle.exe -accepteula > "$EVIDENCE_DIR/open_handles.txt" # Windows (Sysinternals)
lsof > "$EVIDENCE_DIR/open_files.txt" # Linux
ステップ 5:ログイン中のユーザーとセッションを取得する
# Windows
query user > "$EVIDENCE_DIR/logged_in_users.txt"
query session > "$EVIDENCE_DIR/active_sessions.txt"
net session > "$EVIDENCE_DIR/net_sessions.txt" 2>&1
net use > "$EVIDENCE_DIR/mapped_drives.txt" 2>&1
# Linux
who > "$EVIDENCE_DIR/who_output.txt"
w > "$EVIDENCE_DIR/w_output.txt"
last -50 > "$EVIDENCE_DIR/last_logins.txt"
lastlog > "$EVIDENCE_DIR/lastlog.txt"
cat /var/log/auth.log | tail -200 > "$EVIDENCE_DIR/recent_auth.txt" 2>/dev/null
ステップ 6:システム設定の状態を取得する
# System time (critical for timeline)
date -u > "$EVIDENCE_DIR/system_time_utc.txt"
w32tm /query /status > "$EVIDENCE_DIR/ntp_status.txt" # Windows
ntpq -p > "$EVIDENCE_DIR/ntp_status.txt" # Linux
# Environment variables
set > "$EVIDENCE_DIR/environment_vars.txt" # Windows
env > "$EVIDENCE_DIR/environment_vars.txt" # Linux
# Scheduled tasks / Cron jobs
schtasks /query /fo CSV /v > "$EVIDENCE_DIR/scheduled_tasks.csv" # Windows
crontab -l > "$EVIDENCE_DIR/crontab_current.txt" 2>/dev/null # Linux
ls -la /etc/cron.* > "$EVIDENCE_DIR/cron_dirs.txt" 2>/dev/null
# Services
sc queryex type=service state=all > "$EVIDENCE_DIR/services_all.txt" # Windows
systemctl list-units --type=service --all > "$EVIDENCE_DIR/systemd_services.txt" # Linux
# Windows Registry - key autostart locations
reg export "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" "$EVIDENCE_DIR/reg_run_hklm.reg" /y
reg export "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" "$EVIDENCE_DIR/reg_run_hkcu.reg" /y
reg export "HKLM\SYSTEM\CurrentControlSet\Services" "$EVIDENCE_DIR/reg_services.reg" /y
ステップ 7:すべての証拠をハッシュ化し、証拠保全の連鎖を記録する
# Generate SHA256 hashes for all collected evidence
cd "$EVIDENCE_DIR"
sha256sum * > evidence_manifest.sha256
# Create chain of custody record
cat > "$EVIDENCE_DIR/chain_of_custody.txt" << EOF
CHAIN OF CUSTODY RECORD
========================
Case ID: IR-YYYY-NNN
Collection Date: $(date -u)
Collected By: $(whoami)
System: $(hostname)
System IP: $(hostname -I 2>/dev/null || ipconfig | grep IPv4)
Collection Method: Live forensic collection via trusted USB toolkit
Evidence Items:
$(ls -la "$EVIDENCE_DIR/" | grep -v chain_of_custody)
SHA256 Manifest: evidence_manifest.sha256
Transfer: [TO BE COMPLETED]
Storage Location: [TO BE COMPLETED]
EOF
主要な概念
| 概念 | 説明 |
|---|---|
| 揮発性の順序 | RFC 3227 - 最も揮発性の高いデータから収集します:レジスタ > キャッシュ > メモリ > ディスク |
| ライブフォレンジック | シャットダウン前に稼働中のシステムから証拠を収集すること |
| 証拠保全の連鎖 | 収集から法廷までの証拠の取り扱いを記録する文書 |
| フォレンジック上の健全性 | 証拠の収集によって元の証拠が変更されないようにすること |
| 信頼できるツール | 侵害されたシステム上のツールではなく、外部メディア上の検証済みツールを使用すること |
| 証拠の完全性 | 収集直後にすべての証拠を SHA256 でハッシュ化すること |
| ロカードの交換原理 | あらゆる接触は痕跡を残すため、調査担当者による痕跡を最小限に抑えます |
ツールとシステム
| ツール | 目的 |
|---|---|
| WinPmem | Windows メモリの取得 |
| LiME (Linux Memory Extractor) | Linux カーネルメモリの取得 |
| Sysinternals Suite | プロセス、ハンドル、DLL の分析(Windows) |
| Velociraptor | 大規模なリモートフォレンジック収集 |
| KAPE (Kroll Artifact Parser) | Windows 上でのアーティファクトの自動収集 |
| CyLR | クロスプラットフォームのライブレスポンス収集 |
| GRR Rapid Response | リモートライブフォレンジックフレームワーク |
よくあるシナリオ
- ファイルレスマルウェア攻撃:ディスク上にファイルを残さない PowerShell ベースの攻撃です。悪意のあるスクリプトを含むメモリダンプが重要な証拠になります。
- アクティブな C2 セッション:攻撃者が接続中です。ネットワーク接続とプロセスデータから C2 インフラストラクチャを特定できます。
- 内部関係者によるデータ窃取:従業員がファイルをコピーしています。プロセス一覧、マップされたドライブ、ネットワーク接続からデータ流出の活動が分かります。
- 侵害された Web サーバー:Web シェルが検出されました。メモリには、まだディスクに書き込まれていない追加のバックドアが含まれている可能性があります。
- 進行中のラテラルムーブメント:攻撃者がシステム間を移動しています。メモリ内の認証トークンとネットワークセッションから影響範囲が分かります。
出力形式
- SHA256 ハッシュ付きのメモリダンプファイル(.raw または .lime 形式)
- ネットワーク状態の取得データ(接続、ARP、DNS、ルート)
- コマンドラインと親プロセスを含むプロセス一覧
- ユーザーセッションと認証データ
- システム設定のスナップショット
- SHA256 チェックサム付きの証拠マニフェスト
- 証拠保全の連鎖を記録した文書
コメント
Markdown 対応