关于 analyzing-malware
这是供恶意软件分析人员使用的样本分析技能,适用于恶意文件分诊、能力判断和事件调查。它强调隔离与证据支撑,并将静态、动态分析结果整理为 IOC 和检测内容。
主要功能
- 01先行隔离分析环境
- 02静态检查文件与脚本
- 03动态观察进程、文件和网络
- 04提取配置与 C2 信息
- 05编写并验证 YARA 规则
适用场景
- 01分诊可疑附件或二进制文件
- 02调查样本的持久化与命令控制
- 03提取 IOC 用于威胁搜寻和阻断
- 04根据样本行为编写检测规则
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ trilwu/ secskills --skill analyzing-malware安装后在 Claude Code 中输入/analyzing-malware确认已加载。
详细介绍
恶意软件分析
分析是容易的部分。容易出问题的是隔离:样本在能够访问生产环境的机器上引爆,或发布的 IOC 暴露了正在进行的调查。首先确保环境设置正确。
适用场景
- 对可疑文件、附件、脚本或投放的二进制文件进行分诊
- 确定样本的能力、持久化方式和命令与控制行为
- 提取用于威胁搜寻和拦截的指标
- 根据样本编写 YARA 规则或行为检测
- 为事件响应提供从样本中提取的情报
不适用场景
- 编写恶意软件、投放器、加载器或规避检测代码——无论如何描述,都不属于此技能的范围
- 仅对良性二进制文件进行逆向工程——使用
analyzing-binaries - 没有 PE/ELF 头的原始 shellcode 数据块——使用
analyzing-shellcode - 样本的网络捕获数据——使用
analyzing-network-traffic - 扫描整个网站源代码树以查找植入的 Webshell(而非分析单个恢复的样本)——使用
hunting-web-backdoors - 为该家族编写 YARA 特征——使用
writing-yara-rules - 更广泛的事件响应——使用
responding-to-incidents - 将分析结果转化为已部署的规则——使用
engineering-detections - 将样本 IOC 关联到相关基础设施、跟踪攻击者或形成完整的情报产品——使用
producing-threat-intelligence
隔离:先做这件事
| 控制项 | 要求 |
|---|---|
| 主机 | 一次性 VM 或专用裸机,并在执行前创建快照 |
| 网络 | 隔离网段;默认使用模拟服务(INetSim/FakeNet-NG) |
| 共享 | 不共享主机文件夹、不共享剪贴板、不挂载主机驱动器 |
| 凭据 | 不使用真实账户、不加入域、不使用密码管理器 |
| 处理 | 将样本存放在受密码保护的压缩包中,并修改扩展名以禁用其执行(.bin、.mal) |
| 出站连接 | 仅在明确决定并制定归因信息泄露计划后,才连接真实互联网 |
与实时 C2 通信会让操作者知道你正在关注。在正在处理的事件中,未经事件负责人批准,不要解析 C2 域名、公开提交哈希,或将样本上传到多引擎扫描服务——公开提交会造成信息泄露。
静态分诊——不执行样本
# Identity, always first
sha256sum sample && file sample && du -h sample
# Fuzzy and import hashes for clustering against known families
ssdeep sample; tlsh sample # Debian tlsh-tools ships /usr/bin/tlsh;
# built from upstream it is tlsh_unittest
python3 -c "import pefile;print(pefile.PE('sample').get_imphash())"
# Structure
pecheck sample # or: rabin2 -I / readelf -h
capa -v sample # capability detection mapped to ATT&CK — start here
floss sample # deobfuscated + stack strings, better than `strings`
# Packing and embedded content
binwalk -E sample # entropy
binwalk -Me sample # extract embedded objects
capa 是此工作流中单个价值最高的命令:它会将二进制文件转换为映射到 MITRE ATT&CK 和 MBC 的行为列表,帮助判断是否有必要进行更深入的分析。
文档类和脚本类样本:
oleid doc.xls && olevba --deobf doc.xls # OLE macros
oledump.py doc.doc # stream-level inspection
msodde doc.docx # DDE payloads
rtfobj doc.rtf # embedded objects in RTF
pdfid file.pdf && pdf-parser -a file.pdf # /JS /OpenAction /Launch
# Obfuscated scripts: normalize before reading
box-js payload.js
# PowerShell: decode -EncodedCommand, then unwrap the layers
echo '<base64>' | base64 -d | iconv -f UTF-16LE -t UTF-8
大多数脚本恶意软件会将十行逻辑包裹在三层编码中。应通过机械方式反混淆,而不是阅读混淆后的形式。
动态分析
创建快照、引爆样本、观察、还原。切勿在状态不干净的环境中重复分析。
Baseline snapshot
→ start Procmon / Sysmon / inotify + tcpdump + INetSim
→ detonate with the right launcher (rundll32, wscript, mshta, Office)
→ observe 3-5 minutes, then interact (click, wait past sleep timers)
→ collect artifacts and memory
→ revert
要收集的内容及其用途:
| 产物 | 工具 | 可回答的问题 |
|---|---|---|
| 进程树 | Sysmon E1、Procmon、execsnoop | 进程注入、滥用 LOLBin、生成子进程 |
| 文件和注册表写入 | Procmon、inotifywait | 文件投放、持久化、配置 |
| 网络 | tcpdump、Wireshark、INetSim 日志、mitmproxy | C2 端点、信标间隔、协议 |
| 内存 | DumpIt / procdump,然后使用 Volatility | 解包后的载荷、注入的代码、密钥 |
| 持久化 | Autoruns、systemctl list-units、cron、LaunchAgents | 持续运行机制 |
从内存中恢复解包后的载荷,而不是费力对付加壳器:
# After the sample unpacks itself, dump and carve
vol -f mem.raw windows.malfind # injected/RWX regions
vol -f mem.raw windows.dumpfiles --pid <pid>
注意休眠和规避检测门控:许多样本会空闲数分钟、检查主机是否已加入域、统计 CPU 核心数,或查找分析进程。如果没有任何活动,可修补相关检查,或使用 Frida Hook Sleep/NtDelayExecution,然后再判断样本是否处于惰性状态。
能力模型
按照 ATT&CK 组织发现,而不是写成叙述:
- 初始执行 — 如何启动,需要什么条件
- 防御规避 — 加壳、注入、AMSI/ETW 修补、利用已签名二进制代理执行
- 持久化 — 运行键、服务、计划任务、WMI 订阅、cron、LaunchAgents
- 凭据访问 — 访问 LSASS、浏览器存储、键盘记录
- 发现 — 枚举主机、域和安全产品
- 收集与外传 — 收集了什么、存放在哪里,以及如何外传
- 命令与控制 — 协议、编码、抖动、备用通道、终止日期
- 影响 — 加密、擦除、资源劫持
对于每项,都要记录支持该结论的具体证据(地址、API 调用、工件)。 没有证据支撑的能力声明只是猜测,而恶意软件报告中的猜测会导致错误的响应决策。
配置与 C2 提取
配置是最有价值的产出——它能用于阻断、狩猎和归因。
# Known families: use the community extractors first
python3 -m maco.extract sample # MACO / CAPE / RATDecoders ecosystems
# Unknown: find the decode routine, then emulate it over the encrypted blob
典型的配置内容包括:C2 URL 和备用地址、活动或僵尸网络 ID、RC4/AES 密钥、互斥体、休眠间隔和抖动、安装路径、终止日期。全部提取出来——活动 ID 和互斥体通常比会轮换的 C2 更适合作为狩猎线索。
IOC 与检测输出
根据指标的存续时间和特异性对其分级:
Hash → precise, dies immediately (recompile)
C2 IP/domain → useful now, rotates in days
Mutex / config → survives rotation, family-specific
Behaviour/TTP → survives redevelopment; write these
针对结构和代码编写 YARA 规则,而非依赖偶然出现的字符串:
rule Family_Loader_ConfigDecode
{
meta:
author = "analyst"
date = "2026-07-26"
description = "Loader config RC4 decode stub"
hash = "<sha256>"
reference = "<internal case id>"
strings:
// The decode loop's constants, not a filename it happens to drop
$decode = { 8A 04 0? 32 0? 88 0? 4? 3B ?? 72 }
$mutex = "Global\\<family-specific>" ascii
condition:
uint16(0) == 0x5A4D and filesize < 2MB and all of them
}
发布前验证每条规则:
yara -w rule.yar ./samples/family/ # must hit all known-true samples
yara -w rule.yar ./corpus/goodware/ # must produce zero hits — this step is not optional
将行为检测交给 engineering-detections,用于转换为 Sigma/EDR 规则并进行调优。
应当摒弃的自我安慰
- “这只是个脚本,我在自己的笔记本电脑上运行就行。” 脚本恶意软件也是恶意软件。
- “沙箱说它是干净的。” 沙箱的设计本就会被规避。文件可疑却被判定为干净,意味着应该深入分析,而不是结案。
- “我上传到 VirusTotal 快速检查一下。” 公开提交等于向对手披露信息,也可能泄露给客户的竞争对手。应审慎决定。
- “哈希就是 IOC。” 这个哈希只能阻断当前这个构建版本。
- “AV 把它命名为 X 家族,所以它就是 X 家族。” 不同供应商的命名并不一致。在沿用该家族的归因和响应流程前,应通过代码或配置相似性进行确认。
- “没有网络流量,所以没有 C2。” 在下结论前,应检查休眠门控、等待特定日期的 DGA 种子,以及死信投递解析器。
交付内容
- 身份信息 — 文件名、SHA-256、imphash、ssdeep、大小、类型、签名者
- 判定与置信度 — 恶意/可疑/良性,并说明理由
- 家族与活动 — 提供支持该归因的证据
- 能力 — 映射到 ATT&CK,逐项提供证据
- IOC — 按上述方式分级,并注明每项指标的置信度
- 检测 — YARA、Sigma 和网络特征,并提供误报测试结果
- 建议措施 — 遏制、阻断、狩猎查询
ATT&CK 覆盖范围
由 secskills-core/ttp-index.json 生成——编辑该文件,然后运行
python3 scripts/sync_attack.py --write。在报告中引用 ID 前,请根据当前 ATT&CK 版本重新核实。
资源开发(TA0042)
- T1588 获取能力
初始访问(TA0001)
- T1566.001 鱼叉式钓鱼附件——另请参阅
performing-social-engineering、analyzing-phishing-emails
执行(TA0002)
- T1059.001 PowerShell——另请参阅
escalating-windows-privileges - T1203 利用漏洞执行客户端代码——另请参阅
performing-social-engineering、exploiting-memory-corruption
权限提升(TA0004)
- T1055 进程注入_(也属于防御规避)_——另请参阅
escalating-windows-privileges
防御规避(TA0005)
- T1027 混淆文件或信息——另请参阅
analyzing-binaries、analyzing-shellcode - T1027.002 软件打包——另请参阅
analyzing-binaries - T1140 去混淆/解码文件或信息——另请参阅
analyzing-binaries、analyzing-shellcode - T1218.011 Rundll32——另请参阅
hunting-threats - T1497 虚拟化/沙箱规避——另请参阅
analyzing-binaries - T1553 破坏信任控制——另请参阅
auditing-supply-chain - T1620 反射式代码加载——另请参阅
analyzing-shellcode - T1622 调试器规避——另请参阅
analyzing-binaries
收集(TA0009)
- T1056.001 键盘记录_(也属于凭据访问)_
命令与控制(TA0011)
- T1071 应用层协议——另请参阅
engineering-detections、analyzing-network-traffic - T1132 数据编码——另请参阅
transferring-files、analyzing-network-traffic - T1568 动态解析——另请参阅
hunting-threats、analyzing-network-traffic - T1573 加密通道——另请参阅
engineering-detections、analyzing-network-traffic
影响(TA0040)
- T1486 用于造成影响的数据加密——另请参阅
responding-to-incidents
这些技术的检测内容:engineering-detections。主动搜寻:hunting-threats。失陷后响应:responding-to-incidents。
阅读外部来源
以 Markdown 格式获取公开公告、规范和供应商报告:
curl -sL "https://defuddle.md/<url>" # scheme in the path is optional
这会剔除页面中的冗余内容——对于以文字为主的页面,Token 数量大约减少 78%——并返回完整文本而非摘要,因此你可以搜索内容,并相信未找到结果这一结论。
它有三种不适用的情况。获取 JSON 和 API 响应时应使用原始格式,因为可读性提取会破坏结构化数据。获取需要身份验证或由 JavaScript 渲染的页面时,应直接访问,因为它会以匿名方式检索页面。切勿通过它访问对手基础设施(钓鱼链接、C2、恶意软件托管)、客户所有的主机或行动 URL——请求会离开你的机器并发送给第三方;对于正在运行的对手基础设施,这也会向运营者暴露你的访问行为。
某些网站会拦截提取器,并返回错误信息而非页面内容——例如,freedesktop.org 返回的 {"error":"Failed to fetch: 418 I'm a teapot"}。这表示获取请求遭到拒绝,并不表示来源声称该内容不存在。得出任何结论前,请直接重新获取该 URL。
参考资料
analyzing-binaries— 反汇编、解包和反分析细节responding-to-incidents— 围绕样本进行范围界定和根除engineering-detections— 将能力转化为已部署的规则- MITRE ATT&CK 和 MBC(恶意软件行为目录),用于分类
capa、floss、oletools、Volatility 3、YARA,作为核心工具链