用途:在已识别一个初始漏洞或缺陷模式后,帮助在代码库中查找相似变体。适用于搜索同类实例、构建或优化 CodeQL/Semgrep 查询、初始问题发现后的系统性代码审计、跨代码库追踪缺陷变体,以及分析单一根因在不同代码路径中的表现。不适用于初始漏洞发现、无已知模式的通用代码审查、编写修复建议或理解陌生代码。
五步流程:一,理解原始问题,明确根因、所需条件与可利用性;二,创建精确匹配,先用只匹配已知实例的模式,如 rg -n "exact_vulnerable_code_here",并验证只匹配一处;三,识别抽象点,函数名、变量名、字面值、参数按需保留或抽象;四,迭代泛化,每次只改一个元素,运行后审查全部新匹配并分类真假阳性,假阳性率过高则回退,超过约 50% 时停止;五,分析与分诊结果,记录位置、置信度、可利用性与优先级。
工具选择:快速表面搜索用 ripgrep;简单模式匹配用 Semgrep;数据流追踪用 Semgrep taint 或 CodeQL;跨函数分析用 CodeQL;无法构建的代码用 Semgrep。
关键原则:根因优先,先理解为何再搜索何处;从精确开始;每次只改一处并验证;知道何时停止;始终搜索整个代码库;扩展漏洞类别。
需避免的陷阱:搜索范围过窄,只搜原始模块会遗漏其他位置;模式过于具体,只搜原始属性会遗漏相关构造;只关注单一漏洞类别,会遗漏同一根因的其他表现,如空值相等绕过、文档与代码不一致、条件逻辑反转;遗漏边界情况,应测试未认证用户、空值、空集合与边界条件。
资源:resources/ 提供 CodeQL 模板(python.ql、javascript.ql、java.ql、go.ql、cpp.ql)、Semgrep 模板(python.yaml、javascript.yaml、java.yaml、go.yaml、cpp.yaml)及报告模板 resources/variant-report-template.md。