Mantis去重引擎揭秘:三层去重机制如何毫秒级消灭重复漏洞报告 Mantis去重引擎揭秘三层去重机制如何毫秒级消灭重复漏洞报告【免费下载链接】mantisA modular, stack-agnostic toolkit for AI coding agents to autonomously find, reproduce, and patch vulnerabilities.项目地址: https://gitcode.com/gh_mirrors/mantis17/mantisMantis 是一款面向 AI 编码智能体的安全漏洞审查工具包可自主发现、复现并修复漏洞。其流水线中的去重引擎Deduplicator 阶段专门负责清理战场当多个 AI 研究员Researcher同时扫描代码库时同一条 SQL 注入漏洞可能被反复上报去重引擎会把这些冗余报告在毫秒级合并为一条让人类工程师只看到精炼后的结果而不是上千条重复警报。为什么 AI 安全扫描需要去重引擎想象一个并行扫描场景32 个研究员 Agent 同时遍历代码库不同 Agent 从不同入口函数调用链、API 路由、反序列化点发现同一个漏洞报告措辞、代码行号、扫描器标签各不相同。如果没有去重最终报告会出现三类噪音噪音类型例子后果跨 Agent 重复同一漏洞从 3 条调用链被独立发现报告膨胀人工复核疲劳跨轮次重复上一轮已归档的漏洞在新循环再次命中重复分析浪费 Token幻觉型重复措辞不同但指向同一缺陷被误判为新漏洞Mantis 把去重作为流水线的Stage 7研究之后、评审之前由mantis-dedupe/SKILL.md定义行为契约是连接AI 产出与人工信任的关键闸门。核心机制3 级去重阶梯Deduplication LadderMantis 去重引擎的核心是一套分层漏斗越便宜的手段放在前面越贵的手段放在最后。绝大多数重复在毫秒级的确定性规则下就被消灭只有真正难判断的样本才会升级到大模型和向量计算。Tier 1毫秒级精确锚点 1ms0 Token最快的一层完全不调用 LLM纯确定性匹配内容签名精确匹配对规范化文件路径、CWE 分类、目标符号做 SHA-256 哈希。即使代码行号漂移、标题被改写签名不变即可命中路径 CWE 符号三元组精确匹配行号邻近窗口≤ 3 行目标符号缺失时同文件相近行号视为同一缺陷。命中 Tier 1 的重复会直接继承祖先缺陷的lineage_id缺陷谱系 ID全程零 Token 开销——这就是毫秒级的底气。Tier 2RCA 根因分析归一化若精确锚点未命中引擎会把两条报告各自压缩为标准化的 5 行根因分析摘要组件位置、漏洞类别CWE、根因机制、触发条件、污点数据流轨迹。这一步消除了措辞差异带来的假阴性把语义比较变成结构化比较。Tier 3向量嵌入 余弦相似度兜底最后的语义层将 RCA 摘要投影为稠密向量默认嵌入引擎vertex_ai/gemini-embedding-001与历史缺陷谱系向量库做近邻扫描并采用双阈值失败关闭策略≥ 0.90正阈值语义等价、仅措辞/标签/行号不同 → 合并到同一lineage_id 0.70负阈值确属不同漏洞类别如 SQL 注入 vs 命令注入→ 保留为全新独立缺陷绝不硬合。还有一个关键防护——CWE 家族结构守卫当两条缺陷的 CWE 分类互不兼容时无论余弦分数多高都跳过向量比较从结构上杜绝把两类不同漏洞强行合并的灾难。 三层阶梯定义见 mantis-dedupe/SKILL.md#L247-L293防误杀设计宁软勿删的判重哲学毫秒级判重最怕的不是漏杀而是错杀——把真实漏洞当重复删掉。Mantis 为此设计了多层保险行号感知匹配两条报告的code_paths必须含行号一致才算重复。parser.c:100和parser.c:900的同名同 CWE 缺陷是两个独立漏洞永不合并签名只收紧、不替代signature字段剥离行号的粗粒度指纹只能把候选对晋升到下一轮检查不能单独判死。签名相同但行号/标题不一致时最多标记为软性提示possible_duplicate_of缺陷保持 ACTIVE快照门控 回归保护跨轮次比较时逐对核对discovery_commit发现时的代码版本快照字节级不等则保持活跃并留软提示若归档侧已被修复、新快照又出现同缺陷则标记POSSIBLE REGRESSION疑似修复回退绝不清理——被撤销的修复被重新发现必须保留给人看事务化清理支持回滚重复报告永不物理删除而是打DUPLICATE状态、移入workspace/findings/.trash/暂存区并在workspace/.tx_log.jsonl追加事务记录每一步合并都可追溯、可回滚。规模化执行Map/Reduce 确定性合并脚本当单批发现量超过 20 条时去重阶段切换为Map/Reduce 分块策略先按目标文件/组件分组再组内查重避免撑爆上下文窗口。合并动作不交给 LLM 手写 JSON而是生成一个带版本标记的确定性脚本workspace/helpers/merge_findings.py首行# MANTIS_HELPER_VERSION 2按固定规则执行保留主发现 ID、取最高严重级、继承最苛刻的权限/位置/交互要求、并集去重code_paths、拼接历史并追加一条stage: dedupe的合并记录。脚本还会拒绝合并discovery_commit不同的两条发现——它们描述的是不同代码版本。ADK 参考实现中dedupe_findings工具在 SQLite 状态库中完成同样的合并与抑制见 reference/tools/research_tools.py#L1020-L1044对应的评估智能体构建于 reference/evals/deduplicator_agent/agent.py。性能加速Harness 侧嵌入预过滤在大规模多轮扫描中每条当前发现 × 每条归档发现的 O(n×m) 比较非常昂贵。Mantis 在编排层Harness提供可选的嵌入预过滤先对每条发现计算嵌入输出相似度 ≥ 0.85 的候选对清单dedup_candidates.json让/mantis-dedupe只精查这些候选对。安全护栏写得很明确️ 预过滤只缩小搜索空间从不参与判决——向量分数无权触发任何DUPLICATE判定只有确定性的code_pathstitlediscovery_commit检查拥有最终裁决权预过滤失败时自动回退到全量比较宁可多保留也不误删。详见 mantis-pipeline-adapter/SKILL.md#L687-L739。质量保障去重专项评测集去重引擎本身也接受对抗性考核。Mantis 内置了专门的去重基准数据集 reference/evals/deduplication.test.json考察三类极限场景措辞天壤之别的重复如购物袋载荷头畸形导致的拒绝服务 vs 无约束反序列化引发的内存无限消耗——本质是同一缺陷调用方/被调方文件边界缺陷跨越 caller/callee 两个文件的拆分报告表面相似实则独立的缺陷同文件、同 CWE、不同位置的真实漏洞测试引擎会不会错杀。配合 reference/evals/run_eval.py 的阶段基准--stage dedupe任何规则改动都能快速回归验证该合并的必须合并不该合并的必须分开。总结Mantis 去重引擎的设计哲学可以浓缩为一句话便宜的确定性先行昂贵的语义计算兜底而删除永远要留后路。 Tier 1 哈希锚点毫秒级、零 Token消灭绝大多数重复 Tier 2 RCA 归一化抹平措辞差异 Tier 3 向量相似度 双阈值 CWE 结构守卫语义等价才合并失败关闭️ 行号感知、快照门控、回归保护、事务日志层层防误杀支持回滚。这套机制让 AI 安全扫描的产出从洪水般的原始警报变成可直接复核的精炼清单也让去重成为整条 Mantis 流水线中最接近确定性问题的确定性环节。【免费下载链接】mantisA modular, stack-agnostic toolkit for AI coding agents to autonomously find, reproduce, and patch vulnerabilities.项目地址: https://gitcode.com/gh_mirrors/mantis17/mantis创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考