关于 variant-analysis
用于在不同代码路径中寻找已知 Bug 其他实例的安全 Skill。它引导研究人员校准匹配模式、逐步泛化、分诊候选结果并编写报告,也提供并行搜索工作流。
主要功能
- 01提取根因及变体方向
- 02用已知 Bug 校准匹配模式
- 03逐次泛化搜索条件
- 04分诊候选问题
- 05生成报告与 CI 规则
适用场景
- 01发现漏洞后搜索其变体
- 02构建或改进 CodeQL、Semgrep 查询
- 03围绕已知根因系统审计代码
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ trailofbits/ skills --skill variant-analysis安装后在 Claude Code 中输入/variant-analysis确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
agents/openai.yamlassets/trail-of-bits-mark.svgreferences/reporting.mdroot-cause.mdsearching.mdtriage.mdresources/variant-report-template.mdresources/codeql/cpp.qlgo.qljava.qljavascript.qlpython.qlresources/semgrep/cpp.yamlgo.yamljava.yamljavascript.yamlpython.yaml详细介绍
变体分析
查找已发现漏洞的其他实例。一个根本原因通常会有多种表现形式,而且这些问题很少出现在最初发现问题的模块中。
适用场景
- 已发现漏洞,需要搜索类似实例
- 构建或优化用于检测安全模式的 CodeQL/Semgrep 查询
- 初步发现问题后,开展系统性代码审计
- 分析同一个根本原因如何在不同代码路径中表现
不适用场景
- 初步发现漏洞——请使用 audit-context-building 或特定领域的审计
- 没有已知模式需要搜索的一般代码审查
- 编写修复建议——请使用 issue-writer
- 理解不熟悉的代码——请先使用 audit-context-building
五个步骤
进行到某一步时,请阅读该步骤的参考文档。
1. 理解原始问题。 提取根本原因——代码为何出错,而非代码做了什么——并列出变体可能隐藏的方向:相关标识符、同一错误的其他表现形式、数据类型边界情况。 → references/root-cause.md
2. 创建精确匹配。 编写一个只匹配已知实例的模式,并确认它能命中。模式若一个结果都匹配不到,说明你误解了漏洞,而基于它构建的所有搜索都会以错误代码为基准进行校准。
3–4. 每次只推广一个元素。 从精确匹配逐步扩展到模式族,每次只做一处更改,然后运行搜索并查看所有匹配结果。当噪声超过一半时停止。 → references/searching.md — 抽象阶梯、工具选择、误报过滤
5. 分类判断。 判断哪些候选项是真实问题,并标注严重性。 → references/triage.md
然后撰写报告,包含未奏效的模式以及防止问题回归的 CI 规则。 → references/reporting.md
作为工作流运行
此插件提供 /variant-analysis:variants,它会通过并行子 Agent 执行这五个步骤——每个扩展方向对应一个子 Agent,并持续循环,直到搜索不再发现新问题。每个阶段都会阅读与其任务对应的上述参考文档。
当代码库较大或根本原因有多种表现形式时,请使用此工作流。如果搜索范围较窄,或你希望逐步参与每次推广,则直接执行这些步骤。
导致搜索失败的原因
- 范围过窄——只搜索原始漏洞所在的模块
- 模式过于具体——只搜索某个属性,遗漏周边的模式族
- 只关注一种漏洞类型——追查根本原因的一种表现形式
- 只测试理想路径——从不尝试 null、空值和边界情况
- 推广过快——一次抽象多个元素,导致无法判断噪声究竟由哪一个元素引起
前三项在 root-cause.md 和 searching.md 中介绍,第四项在 triage.md 中介绍。
资源
CodeQL (resources/codeql/):python.ql、javascript.ql、java.ql、go.ql、cpp.ql
Semgrep (resources/semgrep/):python.yaml、javascript.yaml、java.yaml、go.yaml、cpp.yaml
报告:resources/variant-report-template.md