☰
Anthropic-Cybersecurity-Skills:peepdf / pdfid / pdf-parser 恶意 PDF 静态分析完全参考
2026/10/15 7:16:07 网站建设 项目流程

Anthropic-Cybersecurity-Skills:peepdf / pdfid / pdf-parser 恶意 PDF 静态分析完全参考

【免费下载链接】Anthropic-Cybersecurity-Skills817 structured cybersecurity skills for AI agents · Mapped to 6 frameworks: MITRE ATT&CK, NIST CSF 2.0, MITRE ATLAS, D3FEND, NIST AI RMF & MITRE F3 (Fight Fraud) · agentskills.io standard · Works with Claude Code, GitHub Copilot, Codex CLI, Cursor, Gemini CLI & 20+ platforms · 29 security domains · Apache 2.0项目地址: https://gitcode.com/GitHub_Trending/an/Anthropic-Cybersecurity-Skills

本文围绕 Anthropic-Cybersecurity-Skills 仓库中 malware-analysis 子域的 peepdf 技能 展开,完整覆盖 peepdf、pdfid.py、pdf-parser.py 三大工具的安装、命令行参数、交互式命令、可疑关键字分级、历史 CVE 与 shellcode 检测模式等 API 级参考内容,并结合仓库自带的自动化分析脚本 agent.py 的源码,讲清风险评分算法与报告生成链路。读完后,你既能手工完成一次武器化 PDF 的取证分析,也能直接用该技能的脚本对样本批量产出结构化风险报告。

该技能位于仓库的 817 个结构化安全技能之一,遵循 agentskills.io 开放标准,以SKILL.md的 frontmatter 声明了适用场景与框架映射:MITRE ATT&CK 的 T1204.002(恶意文件:恶意文档)、T1059.007(命令和脚本解释器:JavaScript)、T1027(混淆文件或信息)、T1106(原生 API),以及 NIST CSF 2.0 的 DE.AE-02、RS.AN-03、ID.RA-01、DE.CM-01 子类目,声明见 SKILL.md frontmatter。本文的 API 参考主体即同目录下的 references/api-reference.md。

适用场景与前置条件

按 SKILL.md 的 "When to Use" 定义,本技能适用于:

  • 分诊(triage)来自钓鱼邮件的可疑 PDF 附件;
  • 对 PDF 型漏洞利用文档(exploit document)做恶意软件分析;
  • 从 PDF 中提取内嵌 JavaScript、shellcode 或可执行文件;
  • 对武器化文档工件做取证审查;
  • 为 PDF 型威胁构建检测签名(YARA、Sigma 等)。

前置条件(SKILL.md "Prerequisites" 一节):

  • Python 3.8+,已安装peepdf-3;
  • Didier Stevens 工具套件中的pdfid.py与pdf-parser.py;
  • 隔离分析环境(虚拟机或沙箱)——PDF 是恶意文档的主要投递载体,切勿在宿主机直接打开样本;
  • 可选:PyV8,用于 peepdf 内嵌 JavaScript 仿真(emulation);
  • 可选:Pylibemu,用于 shellcode 行为分析。

peepdf 安装

peepdf最初为 Python 2 编写,Python 3 环境应使用社区维护的 Python 3 版本peepdf-3(对应关系见 references/api-reference.md 的 "peepdf Installation" 一节):

# Python 3 版本 pip install peepdf-3 # 从源码安装:从 peepdf 官方仓库获取源码后 cd peepdf && pip install -r requirements.txt

从 agent.py 的实现可以看到,仓库的自动化流程对两种调用方式都做了兼容:优先尝试直接执行peepdf -f -l <file>,若返回非零状态则回退到python3 -m peepdf -f -l <file>。这种"命令优先、模块回退"的策略在run_pdfid(pdfid.pyvspython3 -m pdfid,L36-L42)中同样存在,适配不同安装方式下的 PATH 差异。

peepdf 命令行用法

参考文档给出的四种基本调用方式,覆盖批量分诊、交互式取证、脚本化批量执行与机器可读输出:

# 基本分析(宽松解析模式 -l,强制解析 -f) peepdf -f -l malicious.pdf # 交互模式 peepdf -i malicious.pdf # 批量执行脚本中的命令 peepdf -s commands.txt malicious.pdf # JSON 输出 peepdf -j malicious.pdf

其中-f(force parsing)与-l(loose mode)组合是恶意样本分析的标准姿势:武器化 PDF 经常故意构造畸形对象树或损坏的对象引用,正常模式会直接解析失败,宽松+强制模式则能在最大程度上把对象都拉出来。agent.py 的run_peepdf_analysis正是固定使用peepdf -f -l获取文本输出,再用正则从中提取结构化信息:

  • 对象总数:匹配同时含Version与Objects的行,取最后一个数字;
  • JS 对象:对含/JS或/JavaScript的行用(\d+)提取对象 ID 列表;
  • CVE 引用:CVE-\d{4}-\d{4,}模式提取,用于关联已知漏洞;
  • URL:https?://[^\s"<>]+提取外联地址,进入 IOC 集合。

peepdf 交互命令速查

进入交互模式(peepdf -i)后,参考文档列出的核心命令如下表。这套命令构成了"从对象树定位到字节偏移"的完整取证路径:

命令说明
info显示文档摘要与可疑元素
tree展示对象树结构
object <id>显示对象的原始内容
stream <id>解码并显示流内容(自动应用 /Filter 解码)
rawstream <id>显示原始(未解码)流
js_analyse <id>分析对象中的 JavaScript
js_eval <id>仿真执行 JavaScript(需要 PyV8)
vtcheck在 VirusTotal 上查询文件哈希
extract uri提取文档中所有 URI
search <string>跨对象搜索字符串
offsets <id>显示对象在文件中的字节偏移
metadata显示文档元数据

实操路径通常是:tree找到疑似对象 →object <id>看结构 →stream <id>与rawstream <id>对比"解码前/解码后"以识别 FlateDecode、ASCIIHexDecode 等隐藏层 →js_analyse <id>静态检查 JS → 需要动态行为时再用js_eval <id>(注意:仿真执行应在沙箱内进行)。offsets <id>给出的字节偏移还可以与 agent.py 中compute_hashes计算的文件哈希一起写入报告,作为"证据位置"锚点。

pdfid.py:关键字快速分诊

pdfid.py是恶意 PDF 分诊的第一道关卡,只做纯文本级关键字计数,不解析、不触发任何 PDF 行为:

# 基本扫描 pdfid.py malicious.pdf # 附加"解除武装"指标(-e,扩展关键字集) pdfid.py -e malicious.pdf # 递归扫描目录 pdfid.py -r /samples/

参考文档给出的可疑关键字分级表:

关键字风险含义
/JSHighJavaScript 对象引用
/JavaScriptHighJavaScript 动作
/OpenActionHigh打开文档时自动执行
/AAHigh附加动作触发器(Additional Actions)
/LaunchCritical启动外部应用程序
/EmbeddedFileHigh内嵌文件(常见 dropper 载体)
/XFAHighXML Forms Architecture(漏洞利用面)
/JBIG2DecodeMediumJBIG2 图像解码器(CVE-2009-0658)
/AcroFormMedium交互表单(潜在利用点)
/ObjStmLow对象流(可用于隐藏对象)
/URILow外部 URL 引用

这些关键字与 PDF 恶意利用的经典机制一一对应:/OpenAction//AA提供"打开即触发"的执行入口,/JS+/JavaScript提供脚本层,/Launch直接跳出 PDF 沙箱,/EmbeddedFile携带落盘载荷,/ObjStm则常被用来把对象藏进压缩流里规避简单扫描。

agent.py 在 pdfid 基础表之外扩展了一个 16 项关键字清单,额外纳入了/RichMedia、/SubmitForm、/ImportData、/Names四个指标——它们对应富媒体嵌入、表单外发、XFA 数据导入和名称树(常用于隐藏自定义对象)等利用路径。其中 6 个被标记为高风险(HIGH_RISK_KEYWORDS):/JS、/JavaScript、/OpenAction、/Launch、/EmbeddedFile、/XFA。run_pdfid函数通过line.rsplit(None, 1)解析 pdfid 输出每行的"关键字 计数"对,汇总成{keyword: count}字典供后续评分使用。

pdf-parser.py:对象级深度解析

pdf-parser.py用于绕过交互式界面、直接按对象 ID 取数,适合脚本化取证:

# 文档统计 pdf-parser.py --stats malicious.pdf # 提取指定对象 pdf-parser.py -o 10 malicious.pdf # 提取并解码过滤器 pdf-parser.py -o 10 -f malicious.pdf # 将解码后的流转储到文件 pdf-parser.py -o 10 -f -d extracted.bin malicious.pdf # 关键字搜索 pdf-parser.py --search "/JavaScript" malicious.pdf # 按类型搜索 pdf-parser.py --type "/Action" malicious.pdf

-f(decode filters)会对流应用 /Filter 声明的解码,-d <file>把解码结果落盘供后续分析(丢进反汇编器、YARA 扫描或 CyberChef 二次解码)。SKILL.md 的工具对照表还列出了 VirusTotal(哈希交叉核验)与 CyberChef(解码变换)作为配套工具。

一个实用的组合拳是:--type "/Action"列出全部动作对象,确认哪些动作挂在/OpenAction上;再用-o <id> -f -d payload.bin导出流内容;最后对导出文件跑 YARA 或哈希核验。

PDF 漏洞利用中的常见 CVE

参考文档维护了一份 PDF 利用史的高频 CVE 对照表,用于在看到对应组件时快速判断利用年代与攻击面:

CVE组件描述
CVE-2009-0658JBIG2JBIG2 解码器缓冲区溢出
CVE-2009-4324Doc.media通过 newplayer 的释放后使用(UAF)
CVE-2010-0188LibTIFFTIFF 图像处理溢出
CVE-2013-0640XFAXFA 内存破坏
CVE-2017-11882Equation Editor公式编辑器栈溢出

从 agent.py 的实现看,脚本会把 peepdf 输出中匹配到的CVE-YYYY-NNNN形式编号自动收集进vulns列表,既写入报告的cve_references,也直接计入 IOC 的cves字段——当样本对象结构与上述某类组件吻合(如存在/JBIG2Decode过滤器)时,CVE 关联可显著缩短研判时间。

Shellcode 与混淆 JavaScript 检测模式

参考文档给出的模式速查表:

模式指示意义
%u9090%u9090NOP sled(Unicode 形式)
\x90\x90\x90NOP sled(hex 形式)
unescape()shellcode 解码(unescape 链)
String.fromCharCode字符码拼装
eval()动态代码执行
new ActiveXObjectCOM 对象实例化
spray变量名堆喷射(heap spray)技术

仓库的 agent.py 中detect_shellcode_patterns将上述启发式落实为 7 组精确正则,并给出了比速查表更严格的匹配阈值:

检测项正则说明
heap_spray(%u[0-9a-fA-F]{4}){4,}连续 4 个及以上 Unicode 转义(堆喷射特征)
nop_sled(\\x90){8,}\|(%u9090){4,}连续 8 个以上\x90或 4 组以上%u9090
unescape_chainunescape\s*\(unescape 解码链
shellcode_varshellcode\|payload\|sc\s*=\s*["']shellcode/payload 变量赋值
fromcharcodeString\.fromCharCode字符码拼装
eval_calleval\s*\(eval 调用
activexnew\s+ActiveXObjectCOM 实例化

从源码结构看,脚本对 NOP sled 采用"长度阈值"(8 个 hex 字节或 4 组 Unicode)而非参考表中的裸字符串匹配,可有效降低正常 PDF 中零星0x90字节的误报。检测对象是extract_javascript函数(L105-L117)导出的 JS 内容——它依据 peepdf 定位到的 JS 对象 ID,逐个执行pdf-parser.py -o <id> -f -w <file>拉取解码后的流,取前 1000 字符作为内容预览参与模式匹配。

VirusTotal 交叉核验

peepdf 内置的vtcheck命令可用文件哈希在 VirusTotal 上交叉核验(参考文档示例输出):

PPDF> vtcheck MD5: abc123... Detections: 45/72

vtcheck属于"外部情报"而非本地证据:高检出率(如示例中的 45/72)可快速确认恶意属性并指导后续分析优先级;低检出则提示可能是新样本,应把分析重心转向行为层(JS 仿真、流解码)。结合 SKILL.md 输出格式 的报告模板,VirusTotal Detections: [X/Y engines]是标准报告字段。

自动化流水线:agent.py 风险评分与报告

skills/analyzing-malicious-pdf-with-peepdf/scripts/agent.py 是把上述全部 API 串成一条无人值守流水线的主脚本,入口main(L182-L215)的执行顺序为:

  1. 计算 MD5/SHA-256(64KB 分块流式读取,见 L25-L33);
  2. 运行 pdfid 分诊,得到关键字计数;
  3. 运行peepdf -f -l深度分析,得到对象数、JS 对象、CVE 引用、URL;
  4. 若发现 JS 对象(或显式指定--extract-js),导出 JS 内容并做 shellcode 模式检测;
  5. 汇总风险评分,生成 JSON 报告并落盘(默认pdf_analysis_report.json)。

风险评分算法

calculate_risk_score(L139-L152)采用加权求和、封顶 100 分:

因子权重
高风险关键字命中每个计数 × 20
其他可疑关键字命中每个计数 × 5
peepdf 输出的 CVE 引用每条 × 30
识别出的 JS 对象每个 × 15
shellcode/混淆模式命中每次 × 10

风险等级阈值:score >= 80为 critical,>= 50为 high,>= 20为 medium,其余为 low。例如一个含/Launch(计 1)+/OpenAction(计 1)+ 2 个 JS 对象 + 1 处unescape链的样本,得分为 40 + 30 + 10 = 80,直接判为 critical——这与参考文档将/Launch定为 Critical、/OpenAction定为 High 的分级语义一致。

报告结构

generate_report(L155-L179)输出的 JSON 包含:hashes(md5/sha256)、risk_assessment(分数与等级)、pdfid_keywords(完整计数表)、peepdf_analysis(对象数、JS 对象 ID、CVE 引用、去重后的 URL)、javascript_content(最多 5 个对象的预览)、shellcode_indicators(各模式命中次数)、iocs(sha256、URL、CVE 三元组)。这与 SKILL.md 定义的文本报告骨架(文件名、SHA-256、可疑关键字、JS 对象、URL、shellcode 判定、内嵌文件、VT 检出、风险等级)在字段上一一对应,可直接转换为 IR 通报格式。

使用方式:

# 基本分析(自动哈希 + pdfid + peepdf + 风险评分) python3 skills/analyzing-malicious-pdf-with-peepdf/scripts/agent.py malicious.pdf # 显式提取 JS 对象内容并输出到指定文件 python3 skills/analyzing-malicious-pdf-with-peepdf/scripts/agent.py malicious.pdf \ --extract-js --output report.json

端到端工作流与输出模板

综合 SKILL.md 的七步工作流,一次完整的恶意 PDF 静态分析应按以下顺序执行:

  1. pdfid 分诊:扫描/JS、/JavaScript、/OpenAction、/Launch、/EmbeddedFile等关键字,快速定性;
  2. peepdf 交互分析:peepdf -i探索对象结构,tree+object定位可疑对象;
  3. 识别可疑对象:锁定含 JavaScript、流或编码数据的对象 ID;
  4. 提取内容:pdf-parser.py -o <id> -f -d导出并解码流(FlateDecode、ASCIIHexDecode 等);
  5. JavaScript 去混淆:对提取的 JS 检查 shellcode、堆喷射与利用代码(对照前文模式表与 agent.py 正则);
  6. VirusTotal 核验:vtcheck交叉比对哈希;
  7. 生成 IOC:汇总 URL、域名、哈希与 shellcode 签名。

分析完成后按 SKILL.md 的 "Output Format" 模板产出报告:

Analysis Report: PDF-MAL-[DATE]-[SEQ] File: [filename.pdf] SHA-256: [hash] Suspicious Keywords: [/JS, /OpenAction, etc.] Objects with JavaScript: [Object IDs] Extracted URLs: [List] Shellcode Detected: [Yes/No] Embedded Files: [Count and types] VirusTotal Detections: [X/Y engines] Risk Level: [Critical/High/Medium/Low]

关键概念与合规边界

SKILL.md 的 "Key Concepts" 表给出了理解上述 API 输出所需的最小概念集:/OpenAction(打开时自动执行的动作)、/JavaScript//JS(内嵌脚本对象)、/Launch(启动外部程序)、/EmbeddedFile(PDF 内嵌文件)、FlateDecode(zlib 压缩过滤器,用于隐藏内容)、Object Streams(压缩流中存储的对象)。

最后强调安全边界:仓库 README 明确要求本库中的分析技术仅用于授权测试、防御与研究场景;PDF 样本的每一步交互分析(尤其是js_eval仿真、-d导出执行)都应在隔离虚拟机或沙箱中完成,分析产物(IOC、报告)按 SKILL.md 模板归档后即可进入威胁狩猎与检测规则建设环节(对应 MITRE ATT&CK T1204.002/T1059.007 的检测覆盖)。

【免费下载链接】Anthropic-Cybersecurity-Skills817 structured cybersecurity skills for AI agents · Mapped to 6 frameworks: MITRE ATT&CK, NIST CSF 2.0, MITRE ATLAS, D3FEND, NIST AI RMF & MITRE F3 (Fight Fraud) · agentskills.io standard · Works with Claude Code, GitHub Copilot, Codex CLI, Cursor, Gemini CLI & 20+ platforms · 29 security domains · Apache 2.0项目地址: https://gitcode.com/GitHub_Trending/an/Anthropic-Cybersecurity-Skills

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询