使用 peepdf 分析恶意 PDF
适用场景
- 对来自钓鱼邮件的可疑 PDF 附件进行分类
- 对基于 PDF 的漏洞利用文档进行恶意软件分析
- 从 PDF 中提取嵌入的 JavaScript、shellcode 或可执行文件
- 对武器化文档工件进行取证检查
- 为基于 PDF 的威胁构建检测签名
前置条件
- Python 3.8+,安装 peepdf-3(pip install peepdf-3)
- Didier Stevens 工具套件中的 pdfid.py 和 pdf-parser.py
- 隔离分析环境(虚拟机或沙箱)
- 可选:PyV8,用于 peepdf 内的 JavaScript 模拟
- 可选:Pylibemu,用于 shellcode 分析
工作流程
- 使用 pdfid 分类:扫描 PDF 中的可疑关键词(/JS、/JavaScript、/OpenAction、/Launch、/EmbeddedFile)。
- 交互式分析:在 peepdf 交互模式下打开 PDF,探索对象结构。
- 识别可疑对象:定位包含 JavaScript、流或编码数据的对象。
- 提取内容:转储可疑流并解码过滤器(FlateDecode、ASCIIHexDecode)。
- 去混淆 JavaScript:分析提取的 JavaScript 中的 shellcode、堆喷射或漏洞利用代码。
- VirusTotal 检查:使用 peepdf vtcheck 将文件哈希与 AV 检测结果交叉验证。
- 生成 IOC:提取 URL、域名、哈希值和 shellcode 签名。
核心概念
| 概念 | 定义 |
|---|---|
| /OpenAction | PDF 打开时自动执行的操作 |
| /JavaScript /JS | PDF 对象中嵌入的 JavaScript 代码 |
| /Launch | 启动外部应用程序的操作 |
| /EmbeddedFile | 嵌入在 PDF 结构中的文件 |
| FlateDecode | 用于隐藏内容的 zlib 压缩过滤器 |
| Object Streams | 存储在压缩流中的 PDF 对象 |
工具与系统
| 工具 | 用途 |
|---|---|
| peepdf / peepdf-3 | 带 JavaScript 模拟的交互式 PDF 分析 |
| pdfid.py | 扫描可疑关键词的快速分类工具 |
| pdf-parser.py | 深层对象级 PDF 解析 |
| VirusTotal | 哈希查询和 AV 检测交叉验证 |
| CyberChef | 解码和转换提取的载荷 |
输出格式
分析报告:PDF-MAL-[日期]-[序号]
文件:[filename.pdf]
SHA-256:[哈希值]
可疑关键词:[/JS、/OpenAction 等]
包含 JavaScript 的对象:[对象 ID]
提取的 URL:[列表]
检测到 Shellcode:[是/否]
嵌入文件:[数量和类型]
VirusTotal 检测:[X/Y 引擎]
风险等级:[严重/高/中/低]