reverse-skills-max: initial public release (restored, redacted, hardened)
This commit is contained in:
@@ -0,0 +1,99 @@
|
||||
# 恶意文档分析决策树与证据分级
|
||||
|
||||
## 场景决策树(入口 → 分支)
|
||||
|
||||
### 1. 文件类型识别(第一级)
|
||||
|
||||
```
|
||||
拿到文档样本
|
||||
├─ 头 %PDF → PDF 分支(第 2 节)
|
||||
├─ 头 D0 CF 11 E0 → CFB/OLE 分支(第 3 节:doc/xls/ppt 旧格式)
|
||||
├─ 头 PK → OOXML 分支(第 3 节:docx/xlsx/docm/zip 包)
|
||||
├─ 头 {\rtf → RTF 分支(第 4 节)
|
||||
└─ 其他 → 真格式伪装?再 file 二次判定;仍不是文档 → 换 [[re-triage]]
|
||||
```
|
||||
|
||||
- 判定依据是**文件头字节**不是扩展名(扩展名可伪造);`file` 输出的 MIME 只作参考
|
||||
- 多类型混合(PDF 内嵌 OLE 对象、RTF 内嵌 OLE、OOXML 内嵌 PDF)→ 外层分支走完后,提取出的内嵌物回到第一级重新分支
|
||||
|
||||
### 2. PDF 分支
|
||||
|
||||
```
|
||||
PDF 样本
|
||||
├─ /JS 或 /JavaScript 动作 → 提取 JS → [[re-script-deob]] 还原 → 查 shellcode/URL
|
||||
├─ /OpenAction 或 /AA → 打开即执行 → 同上,并记录触发方式(文档级/页级)
|
||||
├─ /Launch → 外部程序启动 → 提取 /F 参数与嵌入文件
|
||||
├─ /EmbeddedFile → 嵌入载荷 → 按文件类型回第一级
|
||||
├─ /JBIG2Decode /RichMedia 等已知漏洞结构 → 对照利用模式(结构特征,非版本号)
|
||||
├─ 有对象流(ObjStm)且 -f 后仍无 JS → 用 qpdf 展开对象流/压缩流重查(坑 1)
|
||||
└─ 全静态无特征 → 沙箱动态打开(见步骤 7),对比渲染前后行为
|
||||
```
|
||||
|
||||
### 3. Office 分支(CFB / OOXML)
|
||||
|
||||
```
|
||||
Office 样本
|
||||
├─ olevba 提到宏(AutoOpen/Workbook_Open/Document_Open/Auto_Open 等)
|
||||
│ ├─ 有 VBA stomping 警告 → 以动态行为为准,P-code 反汇编对照
|
||||
│ ├─ 宏源码混淆 → --decode/--reveal/--deobf 逐层解
|
||||
│ └─ 宏干净但行为异常 → 查非宏向量(下表)
|
||||
├─ 无宏
|
||||
│ ├─ rels 有 TargetMode="External" → 模板注入/外部链接 → 追远程目标(网络侧)
|
||||
│ ├─ 有 DDEAUTO 域 → 较新 Word 默认禁用;旧版触发 → 记录版本假设
|
||||
│ ├─ 有 OLE 嵌入对象 → oleobj/rtfobj 提取 → 回第一级
|
||||
│ ├─ XLM 宏表(.xls) → xlmdeobfuscator 还原
|
||||
│ └─ 全静态无特征 → 沙箱动态打开
|
||||
└─ 加密/损坏(olevba 读不出)→ 查是否加密文档(oleid);口令型样本标注"无法提取宏"
|
||||
```
|
||||
|
||||
- 宏入口不止自动宏:表单控件、快捷键、工作簿事件、自定义按钮都能触发——静态看全部 `Sub` 的调用关系
|
||||
- 宏的最终载荷多为 PowerShell/mshta/regsvr32/rundll32 命令行 → 提取命令后走 [[re-script-deob]] / [[re-evasion]]
|
||||
|
||||
### 4. RTF 分支
|
||||
|
||||
```
|
||||
RTF 样本
|
||||
├─ 含 \objdata → 嵌入 OLE → rtfobj 提取 → 回第一级(多为 Office 漏洞利用或宏文档)
|
||||
├─ 含 \pict → 图片内嵌数据 → 可疑则提取十六进制再判定
|
||||
├─ 整篇 \'XX 转义 → 先还原转义(unrtf/文本替换)再查关键字
|
||||
└─ 纯文本内容 → 钓鱼正文类,转 [[re-ioc]] 提 URL/身份特征
|
||||
```
|
||||
|
||||
### 5. 载荷 → 处置分支
|
||||
|
||||
```
|
||||
提取到的载荷
|
||||
├─ JS/VBA/PowerShell 脚本 → [[re-script-deob]] 去混淆 → 还原后回到本节
|
||||
├─ URL/域名 → [[re-netcap]] 抓取(沙箱)或 [[re-triage]] 初勘 → [[re-ioc]]
|
||||
├─ PE/ELF 二进制 → [[re-triage]] → [[re-malware]] 网关走完整分析
|
||||
├─ 多层嵌套 → 每层编号存档后递归处理,保留触发链记录
|
||||
└─ 数据文件(其他格式) → 回第一级重新识别
|
||||
```
|
||||
|
||||
## 证据分级表
|
||||
|
||||
结论要能回答"恶意性证据从哪来",按强度分级标注:
|
||||
|
||||
| 级别 | 证据形态 | 示例 | 用途 |
|
||||
|---|---|---|---|
|
||||
| A 强 | 动态行为 + 网络侧闭合 | 沙箱内释放/回连 URL,网络侧抓到相同 URL | 可下"恶意"结论 |
|
||||
| B 中 | 载荷提取链闭合 | 宏还原出 PowerShell 下载命令,URL 可访问 | 可下"可疑/高度可疑" |
|
||||
| C 弱 | 静态特征 | 只有 /JS + /OpenAction、宏存在、未知 CLSID | 只支持"需进一步分析",不下结论 |
|
||||
| 反证 | 良性解释 | 宏仅为自动化办公、对象为正常嵌入 | 记录并存档,避免误报 |
|
||||
|
||||
- 每个结论至少对应一级证据;跨级结论(C 级特征下"恶意"结论)视为无证据支撑
|
||||
- 存档时注明:工具版本(olevba 版本影响 XLM/stomping 检测能力)、文件哈希、提取链每层哈希([[re-analyze/analysis-contract]])
|
||||
|
||||
## 实现教训(内化)
|
||||
|
||||
- 先类型后特征:分支判断全部基于头字节,扩展名只当提示;类型判错整个工具链就错
|
||||
- 特征定位按"动作"而非"对象":/JS 要配合 /OpenAction /AA 才构成执行链——单看对象存在不够,要看触发关系
|
||||
- 静态怀疑、动态确认:任何静态特征结论都在沙箱里用行为对照一遍;VBA stomping 场景下静态源码可能完全不可信
|
||||
- 每层载荷立即存档(编号 + sha256),不要等分析完再补——多层链极易在还原过程中丢失中间层
|
||||
- 版本记录:Office/阅读器/工具版本影响触发行为(MOTW、DDE 默认值、宏安全)——报告里注明环境版本
|
||||
- 证据链与触发方式(打开触发/交互触发/延迟触发)一起记录,动态复现才能对齐
|
||||
|
||||
## 使用注意
|
||||
|
||||
- 全部在沙箱内执行([[re-sandbox]],[[re-analyze/platform-tips]] 最高原则);动态打开 = 真实执行未知代码
|
||||
- 文档类样本分析只针对授权范围内的分析任务;提取出的载荷按 [[re-malware]] 流程继续,不在此技能内处置
|
||||
Reference in New Issue
Block a user