用途
该技能用于对可疑 PDF 文件进行结构分析,判断其中是否包含内嵌 JavaScript、shellcode、漏洞利用代码或可疑对象。它面向的是 PDF 文件格式层面的恶意对象分析,而非 PDF 渲染后的视觉内容分析。典型使用场景包括:邮件安全系统标记的可疑 PDF 附件、用户上报的可疑文档、在沙箱或分析环境中打开前的初步分类、从恶意 PDF 对象中提取内嵌可执行文件、脚本或 URL,以及分析针对 Adobe Reader 或其他 PDF 阅读器漏洞的 PDF 漏洞利用工具包。
主要能力
技能围绕三类工具展开:
- PDFiD:在不完整解析文档的情况下扫描 PDF 中的可疑关键词和结构,如 /JS、/JavaScript、/AA、/OpenAction、/Launch、/EmbeddedFile、/RichMedia、/ObjStm、/URI、/AcroForm 等,并按高、中、低风险进行分类。
- pdf-parser:用于详细提取 PDF 对象、解压流内容、搜索特定关键词、按对象 ID 提取内容,以及导出原始流数据。
- peepdf:提供交互式 shell,用于对象检查、JavaScript 提取与美化、在沙箱环境中评估 JavaScript,以及查看对象偏移量。
此外,技能还涉及使用 scdbg 或 speakeasy 进行 shellcode 模拟分析、使用 CyberChef 解码 Base64/十六进制/deflate 流、使用 YARA 规则匹配已知 PDF 恶意软件家族,以及使用 QPDF 对 PDF 进行线性化、解密和重构。
使用方式
工作流程分为六个步骤:
- PDFiD 初步分类:运行
pdfid suspect.pdf扫描可疑关键词,可使用-e获取额外细节,或使用-d对可疑关键词进行重命名。根据 /JS、/JavaScript、/AA、/OpenAction、/Launch、/JBIG2Decode 等高风险指标,以及 /EmbeddedFile、/RichMedia、/AcroForm、/XFA 等中风险指标进行风险评估。 - pdf-parser 解析结构:使用
pdf-parser --search搜索特定关键词,使用--object提取指定对象,使用--filter --raw解压并导出流内容,使用--stats列出所有对象及其类型。 - 提取并分析内嵌 JavaScript:通过 pdf-parser 或 peepdf 提取 JavaScript 代码,使用 peepdf 的
js_analyse、js_beautify、js_eval等命令进行分析。 - 分析内嵌 shellcode:使用
pdf-parser --dump导出原始流数据,再用 scdbg 或 speakeasy 进行模拟执行并记录 API 调用。 - 提取内嵌文件与 URL:搜索 /EmbeddedFile 对象,通过 MZ/PE 签名定位内嵌可执行文件并计算哈希,使用正则表达式提取 URL。
- 生成分析报告:汇总 PDFiD 分类结果、PDF 结构异常、提取的 JavaScript、shellcode 分析结果、内嵌文件哈希、URL 与外部引用、CVE 识别以及 YARA 规则匹配情况。
适用场景
- 对带有可疑 JavaScript 指标的钓鱼 PDF 进行分诊,判断其是漏洞利用还是社会工程重定向。
- 在隔离分析虚拟机中分析 PDF 漏洞利用工具包。
- 从恶意 PDF 中提取 IOC,包括 URL、IP、域名和内嵌文件哈希。
- 识别针对 Adobe Reader 或其他 PDF 阅读器漏洞的已知 CVE。
限制
该技能不适用于分析 PDF 渲染后的视觉内容,仅针对 PDF 文件格式的结构分析。分析应在未安装 PDF 阅读器的隔离虚拟机中进行,以防止意外打开。需要注意的常见陷阱包括:使用标准阅读器打开 PDF 而非命令行工具分析、遗漏隐藏在对象流(/ObjStm)中的 JavaScript、未在分析前解压流(FlateDecode、ASCIIHexDecode、ASCII85Decode 过滤器),以及误以为缺少 /JS 就意味着没有 JavaScript(代码可能嵌入在表单字段 /AcroForm 与 /XFA 中)。
前置条件
需要 Python 3.8+ 并安装 Didier Stevens 的 PDF 工具(pip install pdfid pdf-parser)、peepdf(pip install peepdf)、poppler-utils 中的 pdftotext、带有 PDF 专用规则的 YARA、未安装 PDF 阅读器的隔离分析虚拟机,以及 CyberChef。