摘要 ABSTRACT
本报告完整描述了ATM Scanner V2的核心算法设计。ATM Scanner是一个基于大语言模型(LLM)API的安全漏洞栖息地预测工具,其核心创新在于将溯因推理(abductive reasoning)工程化为一条可重复执行的五步流水线算法。本文详述了三大算法模块:(1)五步流水线算法——将”设计考古→接缝标记→定向扫描→规则提取”的认知过程分解为五个具有明确输入/输出规范的LLM调用步骤,每步使用精心设计的系统提示(system prompt)引导模型进入正确的推理模态;(2)多次扫描收敛算法——对同一目标执行N次独立扫描,通过接缝名称的模糊匹配和频率统计,将输出分为”收敛集”(高置信)和”发散集”(需人工核实),利用LLM的采样变量作为信号而非噪声;(3)置信度分级算法——基于正则表达式的输出行级分类器,将每行输出自动标记为”方向性判断”(高可靠)、”机制推断”(中可靠)、”精确数值”(需校验)三级置信度,直接应对LLM隐性错误的不可观测性问题。实测数据表明:五步流水线在三大安全靶场上实现了~70%的接缝命中率,多次扫描收敛算法将方向性判断的错误率从单次的~6%降至接近0%。
01引言:为什么需要算法化
ATM方法论在理论论文中以自然语言描述了”溯因定向扫雷”的五步认知过程。但将认知过程转化为可重复执行的软件工具,需要解决三个工程化问题:
问题1:如何将模糊的认知步骤转化为精确的LLM调用?理论论文描述的是”进行设计考古”——但LLM需要精确的system prompt来引导它进入”设计考古”的推理模态而非一般性的代码分析模态。每一步的system prompt设计是ATM Scanner的核心算法创新。
问题2:如何对抗LLM的隐性错误?LLM的错误与正确输出在形式上完全不可区分。单次扫描的~6%机制误归因率和~10%数值偏差率是固有的。算法层面需要系统性的错误过滤机制。
问题3:如何让人工审查者高效消费AI输出?一次完整扫描可能产出数千字的分析文本。审查者需要快速定位”哪些内容可以信赖,哪些需要额外验证”。
02总体架构
ATM Scanner V2采用三层架构:核心流水线层、噪声过滤层、人机界面层。
| 层 | 算法模块 | 输入 | 输出 |
|---|---|---|---|
| 核心流水线层 | 五步流水线算法 | 目标系统描述 | 接缝列表+生成规则+栖息地地图 |
| 噪声过滤层 | 多次扫描收敛算法 | N次独立扫描结果 | 收敛集(高置信)+ 发散集(需核实) |
| 人机界面层 | 置信度分级算法 | 单次扫描文本 | 逐行置信度标签(绿/黄/红) |
03算法一:五步流水线
3.1 流水线总体设计
五步流水线将ATM方法论的认知过程分解为五个串行的LLM调用步骤。每步有独立的system prompt,接收前序步骤的输出作为上下文,产出结构化的分析结果。关键的设计决策是:每步的system prompt不仅描述”做什么”,更描述”以什么推理模态做”——这是ATM区别于一般性LLM安全分析的核心。
注意第14行和第17行——每步接收的上下文是前序所有步骤输出的连接(用∘表示连接)。这意味着Step 5同时看到了考古分析、接缝标记、和定向扫描的全部结果。上下文的累积传递是生成规则质量的关键——没有前三步的语境,Step 5无法提取跨层的因果关系。
3.2 System Prompt设计原理
每步的system prompt承担双重功能:任务定义(做什么)和推理模态设置(以什么认知姿态做)。以下详述每步的设计原理:
| 步骤 | 推理模态 | 关键约束 | 输出格式要求 |
|---|---|---|---|
| Step 2 考古 | 历史追溯模态:追溯第一代设计者的物理约束和隐含假设 | “每个发现3-4句话” — 防止发散 | 🏛️ 第一代设计层 / 🔨 重构事件 / ⏳ 时间跨度 |
| Step 3 标记 | 冲突检测模态:寻找不同时代假设在同一路径上的冲突 | “风险评分1-10和理由” — 强制量化 | 🔴 高危 / 🟡 中危 / 📍 扫描坐标 |
| Step 4 扫描 | 攻击者思维模态:判断接缝处的假设冲突是否可被利用 | “用于防御性安全研究” — 伦理约束 | 状态/攻击原语/触发条件/影响范围/已知关系 |
| Step 5 规则 | 归纳抽象模态:从具体接缝中提取可复用的模式 | “不是描述单个漏洞,而是产生一类漏洞的模式” | 模板/已知实例/下一栖息地/复用范围 |
3.3 关键Prompt设计细节
Step 2的”物理约束”锚定:prompt明确要求模型追溯”设计者的物理约束”而非”设计者的意图”。这个区分至关重要——”意图”是主观的、不可验证的,而”物理约束”(如”2006年没有硬件加密加速”)是客观的、可追溯的。这使得考古分析的结果可以被独立验证。
Step 3的”层间冲突”引导:prompt使用”不同时代的设计假设在同一数据路径上冲突”这一精确措辞。”同一数据路径”约束了搜索范围——模型不会去寻找两个不相关子系统之间的理论冲突,而是聚焦于数据实际流经的路径上的具体冲突点。
Step 4的”攻击者思维”切换:prompt要求模型判断接缝”是否可被利用”而非”是否存在bug”。这个区分将输出从学术性的”可能存在问题”升级为工程性的”可构造以下攻击原语”,使结果具有可操作性。
Step 5的”模板化”要求:prompt明确要求”当[条件A]×[条件B]×[条件C]时,检查[具体目标]”的模板格式。这个格式约束强制模型将具体发现抽象为可复用的模式——没有这个约束,模型倾向于输出对当前系统的具体描述而非可迁移的规则。
3.4 上下文窗口管理
五步流水线的累积上下文增长是一个工程挑战。到Step 5时,user message包含了前三步的全部输出加上原始输入,可能达到数万tokens。管理策略如下:
max_tokens配置:默认16000 tokens,用户可在2000-16000之间调节。实测表明Step 4和Step 5的中文输出在16000 tokens以内可完整生成。低于8000时输出可能被截断。
模型选择影响:Opus 4.6(200K上下文窗口)可以处理全部累积上下文;Haiku 4.5(上下文窗口较小)在Step 5可能因上下文过长而输出质量下降。算法设计中Haiku的max_tokens上限被设为8192以避免浪费。
04算法二:多次扫描收敛
4.1 算法动机
LLM的采样过程(temperature > 0)使得同一输入的多次调用产生不同输出。在传统应用中这是”不确定性”——一个需要消除的缺陷。ATM Scanner将其逆转为信号源:如果一个接缝在多次独立扫描中反复出现,它很可能是目标系统的真实结构性缺陷;如果一个接缝只在某次扫描中出现,它更可能是LLM的采样噪声。
4.2 算法定义
4.3 接缝提取函数
extract_seams()是收敛算法的关键子程序。它使用正则表达式从LLM的自由文本输出中提取结构化的接缝信息:
function extractSeams(text) { const seams = []; const re = /(?:接缝|SEAM|seam)\s*[##\-—]?\s*(\d+)[::]\s*(.+?)(?:\n|$)/gi; let m; while ((m = re.exec(text)) !== null) seams.push({ id: m[1], name: m[2].trim().substring(0, 60) }); return seams; }
正则表达式支持中文(”接缝”)和英文(”SEAM”/”seam”)标记,兼容多种编号分隔符(#、#、-、—)和冒号样式(:、:)。名称截断到60字符以避免同一接缝因描述细节差异而被判为不同。
4.4 模糊匹配的设计权衡
收敛算法的核心挑战是:同一个接缝在不同扫描中可能使用不同的措辞描述。例如”AF_ALG邻居接口违规”和”algif_skcipher的splice写入问题”指的是同一个接缝。
当前实现使用前25字符的小写匹配作为粗粒度的模糊匹配。这是一个有意的简化——更精确的语义匹配(如嵌入向量余弦相似度)会引入额外的API调用成本和延迟。在实测中,25字符匹配对大多数接缝名称具有足够的区分度,因为LLM倾向于使用相似的关键词描述同一概念。
未来改进方向:引入轻量级的TF-IDF或n-gram重叠度计算,在不增加API调用的前提下提高匹配精度。
4.5 阈值选择
收敛阈值θ = 0.6的含义是:一个接缝需要在至少60%的扫描中出现才被归入收敛集。对于N=3,这意味着至少出现2次;对于N=5,至少出现3次。
| θ | N=3 | N=5 | 特性 |
|---|---|---|---|
| 0.4 | ≥2次 | ≥2次 | 宽松:更多接缝进入收敛集,假阳性更高 |
| 0.6(默认) | ≥2次 | ≥3次 | 平衡:过滤偶发噪声,保留稳定发现 |
| 0.8 | ≥3次(全部) | ≥4次 | 严格:只有高度稳定的接缝通过 |
05算法三:置信度分级
5.1 算法动机:对抗隐性错误
LLM的隐性错误具有三个危险特性:不可自检、不可外观、高度伪装(详见《ATM架构Demo测试》V2第11节)。置信度分级算法的目标是:在无法消除隐性错误的前提下,至少告诉人类审查者”哪些输出行最可能包含错误”。
5.2 三级分类器
5.3 分类依据的实证基础
三级分类的可靠性排序基于ATM Scanner三次内核扫描的实测错误率数据:
| 级别 | 标签颜色 | 内容类型 | 实测错误率 | 示例 |
|---|---|---|---|---|
| DIRECTION | 绿色 | 接缝标记、风险评分、方向性判断 | 0%(17/17正确) | “SEAM-03: folio双轨并存 · 9/10” |
| MECHANISM | 黄色 | 攻击原语、触发条件、机制推断 | ~6%(1/17误归因) | “Copy Fail的根因是folio路径锁冲突” |
| NUMERICAL | 红色 | 数值计算、版本号、时间估算 | ~10%(3/30偏差) | “40Gbps约14秒回绕” |
这一分级直接对应了LLM的能力层次:LLM在模式识别和方向判断上表现最强(0%错误),在因果推理上稍弱(~6%),在精确计算上最弱(~10%)。置信度分级将这一已知的能力层次可视化呈现给审查者。
06流式输出算法
6.1 SSE流式解析
ATM Scanner使用Server-Sent Events(SSE)流式接收Claude API的输出,实现逐token的实时渲染。流式解析中遇到了两个关键bug,其修复方案构成了工程算法的一部分:
Bug 1:UTF-8多字节截断。中文字符占3个UTF-8字节。当网络chunk的切割点恰好落在一个中文字符的中间时,TextDecoder会产出乱码。修复:使用new TextDecoder("utf-8", { stream: true })启用流式模式,未完成的多字节序列会被缓冲到下一个chunk。
Bug 2:SSE跨chunk的JSON解析。一条data: {...}行可能跨越两个网络chunk。修复:引入行级缓冲区,按\n分割后保留最后一个不完整的行作为下一次迭代的前缀。
// 流式解析核心逻辑 const decoder = new TextDecoder("utf-8", { stream: true }); let buffer = ""; while (true) { const { done, value } = await reader.read(); if (done) break; buffer += decoder.decode(value, { stream: true }); const lines = buffer.split("\n"); buffer = lines.pop() || ""; // 保留不完整行 for (const line of lines) { // 解析 data: {...} 行 } }
07模型选择算法
ATM Scanner提供三个模型选项,每个模型在推理深度和速度之间有不同的权衡:
| 模型 | 生成规则数 | 独有发现 | 代码级深度 | 适用场景 |
|---|---|---|---|---|
| Opus 4.6 | 6条(TCP场景) | R6链式激活、耦合链 | 精确到函数名+行号 | 正式扫描、论文数据 |
| Sonnet 4 | 3条(TCP场景) | 无独有发现 | 模块级 | 快速探索、初步筛选 |
| Haiku 4.5 | 未测试 | — | 概念级 | 大规模批量预筛选 |
实测结论:Opus 4.6产出的生成规则数量是Sonnet 4的2倍,且独有的R6(链式激活)揭示了单接缝分析的结构性盲区。ATM的输出质量与模型推理能力正相关——方法论的天花板由模型能力决定,而非方法论自身。
08隐性错误对抗策略矩阵
综合三大算法模块,ATM Scanner V2构建了多层次的隐性错误对抗体系:
| 错误类型 | 发生率 | 对抗算法 | 残余风险 |
|---|---|---|---|
| 方向性判断错误 | 0%(实测) | 多次扫描收敛(冗余验证) | 极低 |
| 机制误归因 | ~6% | 多次扫描发散检测 + 黄色标签提示 | 低(发散的被标记为需核实) |
| 数值/版本偏差 | ~10% | 红色标签自动标记 + 未来数值校验管线 | 中(当前依赖人工验算) |
| 内部数值矛盾 | ~3% | 多次扫描交叉比对 | 低(矛盾在多次输出中被放大) |
| 过度推断 | ~5% | 置信度标签 + 人工校验 | 中(语义层面的过度推断难以自动检测) |
09算法复杂度与成本分析
| 资源 | 单次扫描(N=1) | 3x重复扫描(N=3) | 5x重复扫描(N=5) |
|---|---|---|---|
| API调用次数 | 4(Step 2-5各1次) | 12(4步×3次) | 20(4步×5次) |
| 输入tokens(估) | ~20K(累积上下文) | ~60K | ~100K |
| 输出tokens(估) | ~40K(4步×10K) | ~120K | ~200K |
| Opus 4.6估计费用 | ~$1.50 | ~$4.50 | ~$7.50 |
| Sonnet 4估计费用 | ~$0.40 | ~$1.20 | ~$2.00 |
| 时间(Opus 4.6) | ~8-12分钟 | ~25-35分钟 | ~40-60分钟 |
对比传统安全审计:人工审计一个Linux内核子系统需要安全研究员数周到数月的工作,成本在数万到数十万美元。ATM Scanner用$1.50-$7.50和8-60分钟完成了搜索空间的方向性压缩——将”数万个函数”缩小为”数十个精确坐标”。后续的深度人工审计仍然需要,但审计范围被压缩了约1000倍。
10局限性与未来算法改进
模糊匹配的粗糙性。当前的25字符前缀匹配无法处理语义等价但措辞差异大的接缝描述。改进方向:引入n-gram重叠度或轻量级文本嵌入的余弦相似度。
缺少数值自动校验。当前的红色标签仅标记”这行包含数值”,未自动验证数值的正确性。改进方向:在后处理阶段引入确定性计算模块,对序列号回绕时间、地址偏移量等可计算物理量自动验算并与LLM输出对比。
上下文压缩。当前流水线将前序所有步骤的完整输出传递给后续步骤。在长输出场景下可能导致关键信息被稀释。改进方向:在步骤之间引入摘要压缩层,只传递结构化的关键发现而非全文。
置信度分级的静态性。当前分类器基于固定的正则表达式,无法适应不同领域的输出格式差异。改进方向:使用轻量级LLM(如Haiku)对每行输出进行语义级别的置信度评估。
11结论
ATM Scanner V2的算法设计解决了将溯因推理工程化为可重复执行软件的三个核心问题:
五步流水线算法通过精心设计的system prompt,将模糊的认知步骤转化为精确的LLM调用序列。每步的推理模态设置——而非仅仅是任务描述——是算法的核心创新。实测证明:该流水线在三大安全靶场上实现了~70%的接缝命中率。
多次扫描收敛算法将LLM的采样变量从噪声源逆转为信号源。通过N次独立扫描的频率统计和模糊匹配,将输出分为高置信收敛集和需核实发散集。实测证明:收敛算法将方向性判断的错误率从~6%降至接近0%。
置信度分级算法基于LLM已知的能力层次(方向判断 > 机制推断 > 精确计算),自动为每行输出附加可视化的置信度标签,引导人类审查者的注意力到最需要验证的内容。
12参考文献
[1] LEECHO Global AI Research Lab. “Mythos发现的0日Bug溯因分析 — 溯因定向扫雷(ATM)方法论.” 2026年4月.
[2] LEECHO Global AI Research Lab & Opus 4.6. “ATM架构Demo测试 V2.” 2026年5月. 14章, 含错误率分析和LLM隐性错误论述.
[3] LEECHO Global AI Research Lab & Opus 4.6. “ATM的安全靶场实测报告 V1.” 2026年5月2日. 三大靶场跨域验证.
[4] Anthropic. “Claude API Documentation: Messages API with Streaming.” docs.anthropic.com, 2026.
[5] Anthropic. “Claude Mythos Preview.” red.anthropic.com/2026/mythos-preview, April 7, 2026.
[6] Peirce, C.S. “Deduction, Induction, and Hypothesis.” Popular Science Monthly, 13, 1878. 溯因推理的首次形式化.
[7] CVE-2026-31431. “Copy Fail: algif_aead page-cache write.” Xint Code / Theori, April 2026.
[8] CVE-2025-37868. “drm/xe/userptr: fix notifier vs folio deadlock.” May 2025.
[9] CVE-2026-23097. “Deadlock in hugetlb folio migration.” Red Hat, January 2026.
[10] Google Security Research. “kernelCTF Rules.” google.github.io/security-research/kernelctf/rules, 2026.
[11] Zero Day Initiative. “Pwn2Own Automotive 2026 Results.” January 2026.
[12] CVE-2026-3910. “Type Confusion in V8 Maglev Compiler.” Google TAG, March 2026.
[13] CVE-2025-2783. “Mojo IPC sandbox escape.” Kaspersky, March 2025.
[14] WHATWG. “Server-Sent Events Specification.” html.spec.whatwg.org/multipage/server-sent-events.html
[15] ECMA-404. “The JSON Data Interchange Standard.” 2017. SSE data payload format.