驯服LLM严重度通胀:Mantis-calibrate风险评分矩阵全解析,让最危险的风险浮出水面
【免费下载链接】mantisA modular, stack-agnostic toolkit for AI coding agents to autonomously find, reproduce, and patch vulnerabilities.项目地址: https://gitcode.com/gh_mirrors/mantis17/mantis
在AI安全扫描中,LLM严重度通胀(severity inflation)是个老大难问题:大模型总倾向把每个漏洞都标成"CRITICAL",淹没真正致命的问题。Mantis(GitHub 加速计划 / mantis17 / mantis)是一个面向 AI 编码智能体的模块化漏洞挖掘工具包,其中的/mantis-calibrate风险校准器专门用一套"影响 × 可能性 × 上下文"的风险评分矩阵为每个发现打分(1-10),把最危险的风险浮出水面,而不是喷涌出几千条"危急"。本文完整拆解这套校准机制的设计思路 🎯。
为什么需要"风险校准器"?
当 AI 智能体自主扫描代码库时,典型困境是:
- 🔴虚高报告:模型对"代码脆弱性""理论风险"也给出高危评级
- 🌀注意力稀释:安全专家面对数百条"CRITICAL",真正 0-click RCE 被埋没
- ⚖️标准不一:同一漏洞换个描述方式,评分就漂移
Mantis 在 README.md 中明确把校准列为核心能力:
Calibrate all findings based on an established rubric tocombat LLM inflation of severity(surfacing the most critical risks to humans instead of spewing thousands of "criticals")
校准器在整条流水线中位于第 12 阶段(Calibrate),由@mantis-calibrate子代理执行:读取workspace/findings/下所有已完成复现、修复验证的发现文件,结合威胁模型,为每条发现追加最终风险分,供后续报告阶段使用。流水线全貌可参考 README_AGENTS.md 中的阶段图。
评分矩阵:Hazard = (Impact + Likelihood) × Multiplier
完整规则定义在 mantis-calibrate/SKILL.md,核心公式只有三块积木:
1️⃣ Impact(影响,1-5 分):用 CIA 三元组 + "爆炸半径"
| 分值 | 含义 |
|---|---|
| 5 | 系统性机密性/完整性崩塌(如未授权 RCE、根密钥泄露) |
| 4 | 大范围数据暴露或主要服务全面中断 |
| 3 | 部分数据暴露、临时性中断 |
| 2 | 轻微泄露;只影响单一用户自己数据的漏洞封顶 2 分 |
| 1 | 纯外观/卫生问题("代码脆弱"类发现强制为 1) |
两条关键的升降级规则:
- 安全控制绕过升档:直接绕过认证、鉴权、签名验证等核心安全控制的,Impact 至少抬到 4;
- 权限天花板:需要高权限(admin→super-admin)或仅是内网横向移动的,Impact 封顶 2;普通已认证用户利用的封顶 3。
2️⃣ Likelihood(可能性,1-5 分):看实证而非理论
评分锚定的是已被证明的可行性:在野利用或智能体写出了可武器化的 exploit 记 5 分;有公开 PoC 记 4 分;纯理论无已知利用路径记 1 分。若利用路径依赖罕见的 API、非默认配置或不常见的数据格式,还要额外扣 1-2 分(Reachability-in-Practice 修正)。
3️⃣ Context Multiplier(上下文乘数,0.1-1.0):暴露面决定生死
这是"矩阵"最有工程味道的部分——同一漏洞,放在不同的信任边界里,风险天差地别:
| 暴露面 | 乘数 | 说明 |
|---|---|---|
| EXPOSED(对外接口) | 1.0 | 不受信输入直接可达 |
| INTERNAL(内部组件) | 0.8 | 接收半可信的已解析数据 |
| PRIVILEGED(特权区) | 0.5 | 深嵌在受信任区域内 |
在此之上还会叠加一系列"连乘"修正:
- 死代码(运行路径永远不会调用)→ 乘数直接压到0.2
- 需要用户交互(CSRF、点击型攻击)→ 再乘0.7
- 仅样本/测试代码可触发 → 乘0.4,通常只能落在 MEDIUM
- 仅非默认配置可触发 → 乘0.7
- 纯 DoS 且组件可用性等级为 LOW_CRITICALITY → 乘0.5
例:内部组件(0.8) + 需要用户点击(0.7) = 0.56 —— 这样的发现天然被压在 CRITICAL 门槛之下。
最终Hazard = (Impact + Likelihood) × Multiplier,封顶 10.0。此外还要求模型在推理中讨论Risk = Hazard + Outrage(舆情/声誉风险),但舆情只写评语(outrage_commentary),不许混进数字分——防止"吓唬人"抬高分数。
27 条"理智分诊"规则:给分数踩刹车 🚦
打完分还有第二道闸门:Critical Sanity Triage。核心原则是边际能力(Marginal Capability)——漏洞给攻击者带来的"新增"能力有多大?如果攻击者本来就已经拥有同等控制力,发现就必须降档。
完整目录收录在 calibration_rules.md,按"刹车力度"分三类:
🅰️ 强制降为 LOW(封顶 2.0)——11 条
典型触发场景:
repro_failure:复现失败或未尝试复现unreachable_inputs:输入无法从信任边界触达prerequisite_shell:攻击者已拥有同等或更高权限的本地 shell("你已经是 root,还打什么 root 提权漏洞")physical_long_term:需要长期物理接触设备(故障注入、拆芯片)standard_host_attacks:宿主系统打 guest——设计如此,零边际能力
🅱️ 强制封顶 HIGH(7.9)——8 条
static_confirmation:仅静态确认、未实证复现 → Likelihood 封顶 3、乘 0.8,禁止 CRITICAL(有 ASan/崩溃日志等实证痕迹可豁免)strict_xss:所有 XSS 默认 MEDIUM/LOW,仅管理员零点击存储型 XSS 可触及 HIGHprobabilistic_llm:依赖提示注入等概率性 LLM 行为的攻击supply_chain_prerequisites/non_default_config:入口门槛极高的攻击
🅲 强制封顶 MEDIUM(5.9)——8 条
local_attack_vector:需本地 shell 的提权类self_contained_blast:爆炸半径完全锁在触发者自己租户/容器内equivalent_primitives:管理员利用 bug 下载了自己本来就能下载的文件physical_temporary:USB 插入、evil maid 等临时物理接触
优先级映射:CRITICAL 8.0-10.0(且必须是无特权攻击者 + 零点击,这条是绝对规则);HIGH 6.0-7.9;MEDIUM 3.0-5.9;LOW 0.1-2.9。多条规则同时命中时,最严的一票通过(Force-LOW > cap-MEDIUM > cap-HIGH)。
可审计:每条规则都要留下"判决记录"
这套机制的精髓之一是可审计性。校准完成后,每条发现的 JSON 里会追加一整套字段(impact_score、likelihood_score、inferred_exposure、attacker_position、mantis_risk_score、priority等),其中最值得称道的是calibration_checklist:
- 27 条规则逐一给出结论:
APPLIES/DOES_NOT_APPLY/UNKNOWN,命中规则必须附理由 sanity_triage_applied按"最严优先"顺序列出触发规则,形如"Local Attack Vector; Internal/Nested"- 规则状态不明(UNKNOWN)时不降分(保持分数保守),但会标记
Incomplete Calibration提醒人工复核
这种"评分 + 完整检查单"的设计,让人类安全专家几分钟内就能判断 AI 的打分是否讲道理,而不是只能盲信一个数字。
防"陈旧证据":STALE-EVIDENCE 守卫
在启用快照(snapshot)同步模式时,代码可能在两轮扫描之间漂移。此时如果拿旧代码上的崩溃日志当"复现成功",就会错误地给分。SKILL.md 中专门设计了STALE-EVIDENCE 守卫:发现与当前快照不匹配时,禁用死代码降权、禁止用旧堆栈日志提升 Likelihood、复现失败不强制 LOW,而是保持保守分数并打上STALE_EVIDENCE标记。宁可分数偏高一点走人工复核,也不允许"过期证据"污染评分。
有基准、有验证:评分不是玄学
项目为校准器配备了专门的评测集 reference/evals/calibrate_dataset.json,覆盖典型三档:
- 未认证 RCE(有可用 PoC、零前置)→ 期望 9.0-10.0,P0_CRITICAL
- 跨租户 IDOR 数据外泄(已认证普通用户)→ 期望 6.5-8.5,P1_HIGH
- 微秒级计时偏差(无实际影响)→ 期望 1.0-3.5,P3_LOW
对应的工具实现见 reference/tools/research_tools.py 中的score_risk与calibrate_finding——它们对输入做硬校验(风险分 0.1-10.0、影响/可能性 1-5、优先级枚举),从工程层面杜绝模型"打出一个 64 分的 CRITICAL"。工作流定义中校准节点可参考 reference/workflow.json 的calibrator配置。
快速上手:把校准器跑起来
Mantis 提供mantis-configure/mantis-launch自动化配置与启动工具。安装并运行完整流水线(内含 calibrate 阶段):
cd reference && ./install.sh python3 scripts/configure.py --auto ./run.sh path/to/code如果你想在自己的项目里复用这套思路,建议:
- 先阅读 mantis-calibrate/SKILL.md 中的 Impact/Likelihood/Multiplier 三段定义,它是可直接移植的评分 rubric;
- 把 calibration_rules.md 的 27 条规则按你的威胁模型增删(Mantis 官方也建议在威胁模型中声明
Calibration Overrides来抬升/收紧特定场景的天花板); - 仿照评测数据集构造 3-5 条"期望分数区间"用例,持续回归你的校准器。
小结
Mantis 的/mantis-calibrate用一个朴素但严格的公式——(影响 + 可能性) × 上下文乘数 + 27 条理智刹车——把 LLM 安全扫描从"CRITICAL 大爆炸"驯化成了可排序、可审计、可复核的风险清单。它的启示很简单:对抗 AI 幻觉与评分通胀,靠的不是更强的提示词,而是把评分变成一套有天花板、有例外条款、且每一步都留痕的矩阵。当最危险的 3 个问题稳定地排在报告最上面时,这套机制就赢了 ✅。
【免费下载链接】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),仅供参考