malware-analysis-methodology について
セキュリティ分析者向けのマルウェア分析手法です。サンプルの安全な取り扱い、静的・動的分析、IOC 抽出、OPSEC の振り返りを扱い、PE や ELF などに対応します。
主な機能
- 01安全な取り扱いとサンプル分類
- 02PE と ELF の静的分析
- 03Windows と Linux の動的分析
- 04IOC 抽出チェックリスト
- 05レッドチームの OPSEC 振り返り
活用シーン
- 01マルウェアサンプルの分析計画
- 02実行時の挙動から IOC を抽出
- 03サンプルが示す静的・動的な特徴の確認
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ wgpsec/ aboutsecurity --skill malware-analysis-methodologyインストール後、Claude Code で/malware-analysis-methodologyを入力して読み込まれたか確認します。
同梱ファイルreferences/dynamic-analysis.mdreferences/static-analysis.md
詳細
マルウェア分析の方法論
レッドチームにとっての価値:サンプルの分析方法を理解する → どのような特徴が露見につながるかを把握する → 検知回避と OPSEC を改善する
⛔ 詳細な参考資料
- PE/ELF 静的解析の詳細なコマンドとスクリプト → references/static-analysis.md
- 動的解析とサンドボックスへの対抗 → references/dynamic-analysis.md
Phase 0: サンプルの取り扱いと安全対策
⛔ NEVER 隔離されていない環境でサンプルを実行しないでください!
# 计算哈希
sha256sum sample.bin
md5sum sample.bin
# 基础识别
file sample.bin
strings -n 6 sample.bin | head -50
# 检查是否加壳
upx -t sample.bin # UPX
die sample.bin # Detect It Easy
判断:
样本类型?
├─ PE (Windows) → Phase 1A
├─ ELF (Linux) → Phase 1B
├─ Mach-O (macOS) → Phase 1C
├─ Shellcode/内存 dump → Phase 2(直接动态分析)
└─ 脚本(PS1/VBS/JS/Python)→ 直接静态阅读代码
Phase 1A: PE 静的解析
# PE 头信息
python3 -c "
import pefile
pe = pefile.PE('sample.exe')
print(f'Compiled: {pe.FILE_HEADER.TimeDateStamp}')
print(f'Sections: {len(pe.sections)}')
for s in pe.sections:
print(f' {s.Name.decode().strip(chr(0)):8} Entropy:{s.get_entropy():.2f} VSize:{s.Misc_VirtualSize}')
print(f'Imports: {len(pe.DIRECTORY_ENTRY_IMPORT)}')
for entry in pe.DIRECTORY_ENTRY_IMPORT:
print(f' {entry.dll.decode()}')
"
重要な Import 特徴の対応関係:
| Import API | 機能の推定 |
|---|---|
| VirtualAlloc + WriteProcessMemory | プロセスインジェクション |
| CreateRemoteThread | リモートスレッドインジェクション |
| WinHttpOpen / InternetOpenA | ネットワーク通信/C2 |
| CryptEncrypt / BCryptEncrypt | 暗号化(ランサムウェアの可能性) |
| RegSetValueEx + RunKey | 永続化 |
| NtQueryInformationProcess | アンチデバッグ |
| IsDebuggerPresent | アンチデバッグ |
| GetTickCount / QueryPerformanceCounter | サンドボックス検知 |
Phase 1B: ELF 静的解析
readelf -h sample # ELF 头
readelf -S sample # 节表
readelf -d sample # 动态链接
nm sample 2>/dev/null # 符号表(未 strip 时)
# 高熵节 = 可能加密/压缩
python3 -c "
from elftools.elf.elffile import ELFFile
import math
from collections import Counter
with open('sample','rb') as f:
elf = ELFFile(f)
for s in elf.iter_sections():
data = s.data()
if len(data) > 100:
entropy = -sum((c/len(data))*math.log2(c/len(data)) for c in Counter(data).values())
if entropy > 7.0:
print(f'[!] 高熵: {s.name} entropy={entropy:.2f}')
"
Phase 2: 動的解析の判断
目标:观察样本运行时行为
├─ 有沙箱环境 → 直接投递(AnyRun/Cuckoo/CAPE)
├─ 本地 VM → strace/procmon + 网络抓包
└─ 仅有样本无法执行 → 纯静态(Ghidra/IDA)
Windows の動的解析:
1. Procmon 过滤进程名 → 文件/注册表/网络操作
2. Wireshark/fakenet → C2 通信
3. API Monitor → 关键 API 调用序列
Linux の動的解析:
strace -f -e trace=network,process,file -o trace.log ./sample
ltrace -f -o ltrace.log ./sample
# 另一终端监控
ss -tlnp # 监听端口
ss -tnp # 外连
Phase 3: IOC 抽出チェックリスト
⛔ 以下のすべての種類の IOC を抽出する必要があります:
- ファイルハッシュ(MD5 + SHA256)
- ネットワーク指標(IP/ドメイン/URL/URI パス)
- ファイルシステム指標(作成・変更されたファイルパス)
- レジストリ指標(Windows)
- プロセス指標(プロセス名、コマンドライン、親子関係)
- 永続化メカニズム(スタートアップ項目/スケジュールタスク/サービス/cron)
- MITRE ATT&CK TTP のマッピング
Phase 4: レッドチームによる振り返り(OPSEC レビュー)
分析完了後、レッドチームの視点から振り返ります:
该样本暴露了哪些特征?
├─ 静态特征 → 特定字符串/Import/节名/编译时间
├─ 行为特征 → 进程注入方式/持久化手法/C2 模式
├─ 网络特征 → User-Agent/URI 模式/心跳间隔
└─ 内存特征 → 未加密字符串/固定 XOR key/特征字节序列
→ 自身のツールの検知回避設計の改善に活用します
ツール早見表
| 用途 | ツール |
|---|---|
| PE 分析 | pefile, pestudio, CFF Explorer |
| ELF 分析 | readelf, pyelftools, radare2 |
| デコンパイル | Ghidra, IDA Pro, Binary Ninja |
| 文字列抽出 | FLOSS (FireEye), strings |
| サンドボックス | AnyRun, CAPE, Cuckoo |
| ネットワーク | Wireshark, FakeNet-NG |
| YARA | yara-python, yarGen |
コメント
Markdown 対応