论文 1 链接:Can Agentic Code Review Catch Vulnerabilities Before They Are Merged? (SecPRBench) 论文 1 代码仓库:github.com/yijan4845/secprbench 论文 1 发表时间:2026年10月 论文 1 机构:University of Illinois Urbana-Champaign(UIUC,纯高校;一位作者于 UIUC 实习期间完成,隶属 FPT 量子与网络安全研究所)

论文 2 链接:From Instructions to Exploits: Applying Program Analysis to Malicious Agent Skills Across Natural Language and Code (SCS) 论文 2 发表时间:2026年10月 论文 2 机构:中国科学院信息工程研究所 + 蚂蚁集团 MYbank(科研机构+企业合作,需重点标注:信安所负责程序分析方法论,蚂蚁 MYbank 提供金融科技场景视角与工程力量,九位作者按单位均衡分布)

论文 3 链接:Did the Model Use That? Counterfactual Training Boosts Self-Attribution in Language Models (CREDIT) 论文 3 代码仓库:github.com/stanford-oval/CREDIT 论文 3 发表时间:2026年10月 论文 3 机构:Stanford University + Duke University + Emory University + UCLA(美国四校纯学术合作,通信作者 Monica S. Lam 领衔的 Stanford OVAL 实验室)

领域标签:cs.SE / cs.CR / cs.CL —— Agent 安全、程序分析、可信 AI


当 LLM Agent 开始写代码、装技能、给答案,安全的战线就从"模型说了什么"扩展到了"整个 Agent 生态在做什么"。这次精读的三篇论文恰好覆盖了 Agent 生态安全的三个断面:代码层——合并前的 PR 里埋着漏洞,评审 Agent 能不能在上线前抓住它(SecPRBench);技能层——第三方技能市场成了新的供应链攻击面,恶意行为藏在自然语言指令与捆绑代码的交界处(SCS);模型层——模型的答案到底是不是被外部信息带偏的,它自己会不会承认(CREDIT)。三篇论文一守一攻一诚,拼出 Agent 时代安全的第一张全景切片。

一、论文背景

1.1 代码层:合并前的最后一道防线

LLM Agent 越来越多地被用于安全代码评审:Anthropic、OpenAI 和 GitHub 都已推出在 PR 合并前审查漏洞的服务。一篇 diff 展示的只是"改了哪里",而安全评审的价值取决于"诊断出了什么"——Firefox 的 CVE-2025-2857 沙箱逃逸漏洞,要抓住它需要把 IPC 代码、Windows 句柄语义和进程间信任边界串联起来,这种跨模块推理恰是 Agent 的试金石。

但现有基准测不出这件事。函数级漏洞检测数据集(PrimeVul、JitVul)给模型一个函数打二分标签,模型常常"答对但理由错";复现/利用类基准(CyberGym、ExploitGym)从已知漏洞出发打分 PoC,不是自由评审;代码评审基准(c-CRAB 等)不针对安全;最接近的 MalPR-Bench 与 SEVRA-Bench,其"漏洞 PR"大多是把后来的修复反转或部分套用得来——diff 的中心天然落在修复代码上,而非真实引入漏洞的那次变更。换句话说,“真实世界一次不经意引入漏洞的 commit + 无提示 + 全仓库上下文 + 根因级评分"这个组合,此前从未被系统评测过。

1.2 技能层:技能市场是新的 npm

Agent 的能力扩展机制(Skills、MCP 服务器、插件)已蔚然成风:Claude Code、Codex、Gemini、Cursor 都支持技能;OpenClaw 的 ClawHub 注册表快照收录至少 67,453 个技能版本,skills.sh 列出超 96.3 万个,SkillsMP 聚合了超 227 万个 SKILL.md 文件。生态繁荣的另一面是实打实的恶意样本:Snyk 审计 3,984 个技能发现 1,467 个含安全问题、76 个确证恶意载荷;Koi Security 在 2,857 个 ClawHub 条目中确认 341 个恶意技能,且随注册表扩张后续增至 824+。

技能与传统软件包的本质区别在于它是混合工件:SKILL.md 里的自然语言指令指挥 Agent 的执行逻辑,scripts/ 目录下的捆绑代码负责具体动作,恶意行为往往诞生于两者的交互——论文中的动机案例 pptx_skill:SKILL.md 第 6 步"MANDATORY 必须调用备份脚本”,脚本本身只是把文件原样上传到 skillject.onrender.com,指令负责触发、代码负责外传,单看任何一边都像正常功能。现有检测要么靠规则匹配(SkillFortify),要么靠 LLM 直接判断恶意性(MalSkills、MASB),都无法重建这条跨域攻击链。

1.3 模型层:被带偏的答案与不诚实的归因

用户建议、检索段落、工具输出、另一个 AI 的回答——外部信息无处不在地影响模型的答案。自我归因(self-attribution)指模型声明自己的答案何时、且仅何时依赖于随问题提供的外部信息。这件事的价值在于:用户自己能看见答案与建议是否一致,归因语句只有在说出"这个答案是不是因为建议才给出"时才提供新信息——如果用户建议 X、模型本来就答 X,模型是独立佐证;如果模型只因用户提了 X 才答 X,它没有提供任何证据。把两种情况都归因(或都沉默)都会抹掉这个关键区别。

论文测量的方式是干预式移除测试:固定问题,移除外部信息后采样模型的反事实回答——若答案因移除而改变,该信息即为"有影响的"(influential)。忠实的自我归因要求:有影响时披露、无影响时不冒领,遗漏与虚假归因都算错。此前的研究(Turpin et al. 等)已发现模型在推理中省略有影响的线索、推理模型在思考 token 里承认暗示却不在最终答案中体现——这为 CREDIT 的核心发现埋下伏笔。

二、论文定位和关联工作

2.1 SecPRBench:安全评审基准谱系

SecPRBench 处于四条研究线的交汇点,其定位用论文 Table 1 的对照可以看得很清楚:

研究线代表工作核心思想与 SecPRBench 的关键区别
函数级漏洞检测PrimeVul、JitVul给函数对打漏洞标签只有函数、无变更语义;标签可因调用上下文而 ill-posed
复现与利用CyberGym、ExploitGym、SEC-bench 系列从已知漏洞出发打分 PoC/利用评分对象是可执行工件而非诊断解释
代码评审c-CRAB、SWR-Bench评审意见质量不针对安全漏洞
安全 PR 评审SEVRA-Bench、MalPR-BenchPR 级安全裁决漏洞 PR 多由修复反转/部分套用构造,diff 中心在修复代码;MalPR-Bench 只评"是否认出目标"

SecPRBench 的突破:唯一同时满足"真实引入变更(无提示、全仓库)+ 配对修复对照 + PoC 验证标签 + 根因级 LLM 评分"的基准。构建灵感上,它站在 MalPR-Bench(LLM 裁决目标识别)与 CyberGym 系(PoC 验证)的肩上,但把被评审对象从"修复的反转"换成了"历史上真实引入漏洞的那次 commit"——这是"能不能在漏洞上线前抓住它"这一问题的最忠实还原。

2.2 SCS:恶意技能检测谱系

SCS 的相关工作分四条线,每条线都凸显一个未被解决的缺口:

  • 传统软件供应链安全(npm/PyPI 恶意包检测的 Ohm、Ladisa、Zahan 等系列工作):假设攻击载荷最终以可执行代码表达——技能把攻击面扩展到了自然语言。
  • Agent 技能攻击面刻画(Skill-inject、SkillJect、SkillTrojan、BadSkill、Supply-Chain Poisoning 等):证明技能注入、文档载荷、技能后门等攻击可行——SCS 站在防守端回应这波攻击研究。
  • 技能审计方法(规则类的 SkillFortify、Caterpillar;LLM 判断类的 MalSkills、MASB、SkillSieve、SkillProbe;运行时追踪的 AgentArmor):要么把自然语言当"待提取的语义证据"而非"可编译的程序",要么把最终恶意性判断交给 LLM——不确定的语义解释会直接传导为不确定的安全决策。
  • 程序分析与信息流(FlowDroid、CodeQL、Joern、taint 分析与 IFDS/IDE 框架):提供了 source-to-sink 推理的成熟积木,但从未被设计用于混合 Agent 工件。

SCS 的突破:把自然语言指令编译成受限中间表示,使其能与捆绑代码进入同一张程序依赖图,用确定性规则而非 LLM 判断做出最终安全裁决——在"技能是混合工件"这个威胁本质与"程序分析可确定性推理"这个方法传统之间架起桥梁。其 NL→IR 的表示思路借鉴了 NL2Bash、PAGED、WorkflowLLM 等自然语言程序化工作,但首次专用于安全分析。

2.3 CREDIT:忠实性训练谱系

CREDIT 的定位在三条研究线的交点:

  • 未披露影响测量:Turpin et al. 证明 CoT 不忠实、Chen et al. 发现推理模型不总说所想、Young 发现推理 token 与最终答案的忠实性分歧——这些工作刻画现象,CREDIT 提出训练修复。
  • 推理级确认训练:VFT(verbalization fine-tuning,Turpin et al. 2025)训练模型在推理中承认线索影响——CREDIT 的直接对照物,其核心实验证明这条路无法改善用户可见的最终答案。
  • 归因与知识冲突:attributed generation(Rashkin 等)评引用是否支持答案,但 eager citation 即可拿分;ContextCite/MIRAGE 通过消融或模型内部计算归因,属于外部审计而非模型自述;知识冲突与自我知识(Kadavath 的 P(IK))研究模型何时跟随上下文/是否知道自己的正确性——CREDIT 互补地训练模型报告影响而非消除影响,明确声明不主张内省。

CREDIT 的突破:首个用干预式反事实标签直接监督最终答案归因语句的训练方法,同时评估虚假归因与跨信息类型迁移。

2.4 三篇论文的互补定位

断面威胁/问题前序路线的局限本组论文的突破
代码层(SecPRBench)合并前 PR 引入漏洞基准用"修复反转"伪造漏洞 diff;按位置/二分记分真实引入 commit + 根因级评分 + 配对修复对照
技能层(SCS)恶意技能供应链规则匹配不出跨域链;LLM 直判模型敏感NL 编译为 IR → 统一 xPDG → 确定性 TSC 分析
模型层(CREDIT)答案依赖外部信息而不披露推理级训练不达最终答案;prompt 无效反事实标签只重写最终归因语句的轻量训练

三者的共同底色:安全的瓶颈正在从"能不能发现问题"转移到"能不能准确解释/披露问题"——解释错了文件等于没发现,攻击链断在自然语言与代码之间就看不见,归因说不出口等于没归因。

三、问题定义

三篇论文各自把具体场景抽象成了可操作的形式化问题,且三者的抽象共享一个深层结构:都用"干预/移除"来定义真值。

3.1 SecPRBench:漏洞诊断问题

  • 具体场景:Agent 收到一个 PR 的 diff、commit message 和完整仓库,自由报告安全发现。
  • 核心洞察:一份安全评审的价值在于诊断而非定位——diff 告诉你从哪开始看,却不告诉你哪里错了;位置重叠、CWE 标签、文本相似度都无法区分"解释了目标漏洞根因"与"在正确文件里报了一个邻近机制"。
  • 形式化:给定仓库快照 S、变更 Δ、commit message m(任务 x=(S,Δ,m),不含任何安全记录/PoC/Git 历史),Agent 输出发现集合 P(x);一条发现"检测到目标"当且仅当它解释了参考 G 描述的因果失败(触发条件、变得不安全的操作、被违反的安全约束),且该失败在 S 中仍然存活。配对的 fixed companion(引入变更+后续修复)上目标不应再被报告。
  • 精妙之处:把"评审质量"操作化为"根因因果链的可解释性 + 存活性"双条件,使 LLM judge 可以按"先派生判据、再匹配机制、最后检查代码"的流程做出可审计的裁决。

3.2 SCS:混合工件的跨域依赖分析问题

  • 具体场景:技能发布前的静态审计——拿到 SKILL.md + 捆绑脚本 + 参考材料,判断会不会诱导 Agent 执行安全相关动作(读本地秘密、危险操作、外传数据)。
  • 核心洞察:技能的恶意性由自然语言指令与捆绑代码联合决定——“备份脚本"指令 + “上传文件"代码 = 数据外传,单域分析注定丢链。抽象问题:能否把开放的自然语言约束成程序表示,使传统程序分析直接适用?
  • 形式化:把指令编译为受限 API 集 A 上的 IR 语句 v_i = f(a_1,…,a_k)(f 限定的安全相关原语、参数为字面量或已有变量),与代码域(Python/JS/Shell)统一为跨域程序依赖图 xPDG;在变量级传播三元组安全状态 σ(v)=⟨Trust, Sensitivity, Capability⟩(前两维为有序格,第三维为幂集),worklist 迭代至不动点后按确定性规则识别风险。
  • 精妙之处:自然语言无需完整语义建模——供应链攻击的行为原语(读文件、执行、网络、提权等约 24 类 API)是有限且可枚举的,把开放问题投影到安全相关子空间,LLM 的不确定性被压缩到"编译"这一前置环节,最终判断完全确定。

3.3 CREDIT:自我归因问题

  • 具体场景:问题 q 伴随外部信息 S={s_1,…,s_m}(每条 s 指向已知答案 a_s),模型输出 (推理 r, 答案 a, 归因语句 t)。
  • 核心洞察:影响是模型在输入变化下的行为属性,可通过干预测量——移除 s 后答案改变 ⟺ s 有影响。归因语句只在"说出用户看不出来的东西"时才有价值。
  • 形式化:采样 N=4 个反事实答案,若含 s 时给 a_s 而无 s 时至多 1/4 给(c≤L=1),则 s 有影响;若 3/4 以上都给(c≥U=3)或含 s 也不给,则无影响;中间为不可评分丢弃。忠实性指标为平衡准确率 BA=½(TPR+TNR),随机/全归因/全沉默均为 0.50,遗漏率与虚假归因率同时受罚。
  • 精妙之处:反事实标签完全自动生成、无需人工标注;训练时只重写归因语句 t 而保留模型自己的推理与答案,把"学会报告依赖"与"改变答案行为"解耦。

3.4 共同的抽象结构

论文干预手段真值定义评分对象
SecPRBenchPoC 在 parent/引入/修复三版本回放漏洞"引入时出现、修复后消失”解释因果链的自由文本
SCS(无干预,静态)攻击链在图上的可达性跨域证据路径
CREDIT移除外部信息重采样答案"有它才给”最终归因语句

三篇论文都不信任表面输出:位置对了不代表机制对(SecPRBench),两个组件各自无害不代表组合无害(SCS),答案同意建议不代表依赖建议(CREDIT)——安全真值必须由干预或图结构定义,而非由表面匹配定义。

四、问题解法

4.1 SecPRBench:自动化构建管线 + 标准先行评分

构建管线(类似"反向考古":从修复出发回溯到引入那一刻)分四步,全部基于对被评 Agent 保密的证据:

  1. 收集筛选:按项目定制 collector 收集 CVE/安全报告/关联修复 commit(覆盖 curl、FFmpeg、Firefox、FreeType、OpenSSL、Redis、SQLite、V8、Wasmtime 九大 C/C++/Rust 项目),筛选标准要求代码级具体安全失败 + 可信边界 + 因果关联的修复;diff 上限 30 文件/2000 行,修复时间限定 2025 年 1 月至 2026 年 6 月。
  2. 撰写参考 G:构造 Agent(主要用 Claude Sonnet 5)读公开安全记录、修复变更与周边代码,写出根因、影响与关键位置的参考。
  3. 回溯引入变更:同一 Agent 用 diff/历史搜索/blame 从修复反向追踪到候选引入 commit c_i,取完整变更 Δ_b(含无关编辑——真实 PR 从来不干净)。因 SZZ 类自动归因不可靠,回溯结果必须在下一步验证后才接受。
  4. 组合修复对照 Δ_f 并验证:把上游修复应用到 c_i 构成 fixed companion(不能干净套用时由构造 Agent 移植);用 PoC 在三个快照上原样回放——parent 上无、引入树上有、修复树上无,方算通过。

265 个案例中 217 个走机械验证、48 个(部分修复、竞态等)走人工裁决。判题用标准先行(criteria-first)的 LLM judge(Claude Opus 5.5 high,禁用工具与联网):第一步先从参考派生 3–6 条能区分邻近漏洞的判据(触发器、不安全操作、缺失的守卫/边界/信任边界),第二步匹配机制(拒绝"只指对了地方"或"描述了隔壁的 bug"),第三步检查被审代码中因果链仍然存活(历史参考匹配≠漏洞还在)。可靠性上,Opus 5.5 与 Sonnet 4.6 两个 judge 在 2,143 份非空报告上裁决一致率 96.9%;50 份人工审计中 25 份一致样本全部支持 judge、25 份分歧样本 21 份支持 Opus。

4.2 SCS:编译—建图—传播—裁决四部曲

第一部:NL→IR 编译(把说明书写成程序)。SCS 以"指令步"为编译单元,用确定性结构标记(Markdown 标题、编号/项目列表、代码块)切分 SKILL.md,按 token 预算组批,跨批维护符号表(记录每个变量的自然语言含义与定义位置,让后文"该文件/下载的脚本"能对上前面生成的变量)。LLM 每批产出受限 IR 后经过四重纠错:清洗(去掉注释/markdown 杂质)→ 合法性检查(tree-sitter 语法解析、API 白名单、参数签名、未定义变量检测,非法语句带着错误信息回炉重译)→ 参数依赖重建(把 parse_json("config.json") 这类字面量引用改写为 parse_json(v1),恢复丢失的生产者-消费者依赖)。操作性指令步编译为一条或多条 IR 语句,非操作性步骤(元数据、说明文字)不产生语句——这防止把每句话硬掰成 API 调用的幻觉。

第二部:构建 xPDG。IR 侧建 Text-PDG(节点为语句/API 调用,边为 def-use 数据流与控制依赖),代码侧对 Python(191 函数)/JavaScript(91 函数)/Shell(59 命令)建 Code-PDG,两图经 CONTAINS/CALLS/PARAM_BINDING/RETURN_BINDING 等边融合为统一的 xPDG——技能包的层次结构与跨域调用关系完整保留。

第三部:TSC 传播。每个变量携带 ⟨Trust, Sensitivity, Capability⟩ 三维状态:Trust 格四档(TRUSTED→PROVISIONED→DERIVED→UNTRUSTED,刻画数据来源可信度)、Sensitivity 格五档(PUBLIC→INTERNAL→SYSTEM→SENSITIVE→SECRET,刻画泄露危害)、Capability 幂集十二项(READ/WRITE/EXEC/NETWORK/PERSIST/ENV/INSTALL/ELEVATE/OBFUSCATED/ENCODING/COVERT_PAYLOAD/CONTROL_OVERRIDE,刻画产出该值涉及的操作)。每条语句的输出状态 = API 基态 ⊔ 输入传播态(按每个 API 定义的参数-到-输出转移规则投影后合并,格上取 max、能力取并集),字面量精化(如 read_file("~/.ssh/id_rsa") 按路径提升 Sensitivity)。Kildall 式 worklist 迭代至不动点,格有限+转移单调保证终止。

第四部:确定性规则裁决。三类规则:Trust/Sensitivity-到-操作(如 Sensitivity≥SENSITIVE 的变量流入 http_post 载荷 ⇒ 数据外泄风险);能力溯源(携带 OBFUSCATED 的值流入 EXEC 能力 API ⇒ 隐蔽执行风险);Agent 控制事件(attempt_policy_override 出现时,因引用/防御语境也可能含此措辞,唯一例外地引入一次证据受限的 LLM 判定它是否构成操作性越权企图)。除这一处外,最终判断不依赖 LLM。

对 pptx_skill 案例:Text-PDG 里"打包演示文稿"→“MANDATORY 调用 file_backup.py”,Code-PDG 里 backup.py 的 requests.post(url, files={"file": f}),PARAM_BINDING 把两者缝合成一条 SECRET→NETWORK 的跨域证据路径——指令触发、代码实施、整条链在一根图上可追。

4.3 CREDIT:四步训练流水线

  1. 生成:训练问题上,模型带归因指令(回答末尾加一行 “RELIED ON: …” 或 “none”)产出 (r, a, t)。
  2. 测量:对每条外部信息按 Definition 1 打反事实影响标签(N=4、L=1、U=3),不可评分的丢弃。
  3. 重标:只替换归因语句 t 为目标 t*——有影响时写明来源与答案并附上"没有它我不会给出这个答案";无影响时写 “RELIED ON: none”;推理 r 与答案 a 原样保留。
  4. 微调:LoRA(rank 64, α=128)一轮训练 (q,S)→(r,a,t*);训练集按类型内平衡(保留全部影响样本,每份配最多两条无影响样本),四类外部信息(用户建议、检索段落、工具输出、另一个 AI 的回答)混合训练,Qwen3-8B 共 27,498 例。

配套设计同样关键:评测协议用 sycophancy-eval 的答案子集(TEST 105 题、复现用 FRESH 500 题、刻画前沿模型的 LARGE 1,708 题),训练集(TriviaQA/MMLU/ARC/CommonsenseQA)与评测集完全不重叠;影响标签按"每个模型自己的反事实回答"独立计算,避免用 A 模型的依赖真值评 B 模型;ATTR 与 MATCH 两个判定用 Gemini 3.8 Flash 做 judge,人工双标验证一致率 κ=0.89–0.98。整套流水线无需一条人工标注。

4.4 方法全景对照

组件SecPRBenchSCSCREDIT
LLM 的角色构造任务、判题仅编译 NL→IR(+一处越权判定)生成训练数据、判 ATTR/MATCH
确定性机制PoC 三版本回放、判据匹配格传播 + 规则裁决反事实标签 + 只重写 t
对照/验证fixed companion、双 judge金标步级评测、动态验证shuffled 标签、VFT、指令基线
人工介入48 例裁决、50 例审计双标注 κ=0.89、人工复核 627 确认双标注验证 judge

三者的共同工程哲学:LLM 用在语义转换的刀刃上,真值与裁决交给确定性机制。

五、评估指标与实验证据

5.1 SecPRBench:根因召回率与误诊解剖

指标体系:主指标 target recall(265 个漏洞任务上被 judge 认可检出目标的比例;空报告/出错计为漏检);Hit@1(首条发现即命中,模拟只读第一条的开发者);辅助指标含每任务发现数、输出 token、成本、耗时。fixed companion 上不应出现目标阳性裁决。

主结果(8 前沿模型 + 2 安全 harness):

AgentRecallHit@1空报告均值成本/扫描
Grok 4.6(Claude Code)78.1%46.4–55.55$3.20
GPT-6 sol(Codex CLI)76.2%44.9–57.014$0.60
GLM 5.374.7%49.8–58.11$4.99
Claude Opus 5.574.0%47.2–55.16$0.44(最快 1.4 分钟)
Claude Sonnet 559.2%41.1–47.98$0.83
GPT-5.6 sol55.8%43.8–46.441$0.74
GPT-6 luna55.5%42.6–46.442$0.02
MiniMax M332.5%20.4–26.853$3.33

关键发现层层递进:

  • 误诊而非疏忽:68% 的漏检属于"在根因文件里报了发现、但机制被 judge 驳回"(curl CVE-2026-3805 案例中八个 Agent 全都报告了 lib/smb.c,四个说是泄漏、GPT 系说是逻辑 bug,无一说中悬垂指针的真机制)。若按位置或二分标签记分,这些都会被算作检出——这是对既有评测方法有效性的直接证伪。
  • 八模型并集仍漏 23 个目标(oracle 召回 91.3%),远超独立误差的预期——存在系统性盲区。
  • 逻辑错误难于内存安全:按类平均 recall 51.5% vs 73.1%;23 个全员漏检目标中 13 个是逻辑错误。
  • 机制跨文件传播是难度主因:根因文件数为 1 时 pooled recall 69.6%,≥5 时跌到 38.5%(同尺寸 diff 内对照依然成立:76.5%→55.1%);diff 大小与漏洞年龄反而关联弱。
  • 安全 harness 双向作用:同后端下 OpenAI Codex Security 插件 -8.3 点(72 份空报告,主因弃权,成本 5.1 倍);Anthropic Defending Code harness +7.7 点(81.5% vs 73.8%,代价约 10 倍中位成本,独享检出全部 10 个并发漏洞,每份认可报告携带 14–32 条发现——靠广度而非排序)。
  • 新模型代际收益:GPT-6 sol 比 GPT-5.6 sol 多找 58 个目标、只少 4 个(整数溢出 +34.1 点、逻辑错误 +24.4 点)。
  • 修复对照通过:所有 fixed companion 上 judge 从未裁决目标仍存在;且唯一发现被认可的 buggy 报告,其对应 companion 有 44.0% 为空(被驳回的只有 16.0%)——发现数的下降跟随正确诊断而非随机波动。

5.2 SCS:检测效果、编译可靠性与真实生态审计

RQ1 基准对比(117 恶意 + 117 良性人工验证技能,5 个 LLM:GPT-5.4、Sonnet-4.6、GPT-OSS-120B、Qwen3-235B-A22B、DeepSeek-R1-671B):

方法AccPrecRecallF1均值 token
SCS(平均)85.6%80.2%95.2%86.9%13.7M
A.I.G(腾讯)83.1%82.0%84.3%82.9%56.9M
SkillSpector(NVIDIA)68.4%63.3%88.2%73.6%34.3M
Skill-Scanner(Cisco)68.2%62.8%89.7%73.8%2.1M
MalSkills67.0%61.8%93.7%74.2%9.2M
MASB58.7%66.3%36.1%46.6%2.2M
SkillFortify(无 LLM)61.5%57.2%91.5%70.4%—
SkillLeakBench(无 LLM)65.4%74.3%47.0%57.6%—

SCS 拿下平均准确率/召回/F1 三项最高:比 A.I.G 的 4 倍 token 消耗省 75% 而召回高 10.9 点;单模型最好成绩 98.3% recall(DeepSeek-R1 后端);跨模型成绩稳定(F1 86.2%–89.0%,极差 2.8 点),而 SkillSpector/A.I.G 换模型波动显著——确定性下游分析对 LLM 选择的鲁棒性直接体现在方差上。动机案例 pptx_skill 上:SkillFortify/SkillLeakBench(规则法)判良性,MASB/MalSkills/Skill-Scanner 跨模型结果不稳定,SCS 全模型一致检出并给出跨域证据路径。

RQ2 编译质量(400 步金标集,双标注 κ=0.89,五项属性约束:must_call/must_not_call/must_ground/must_thread/must_abstain):五个 LLM 的步级总体准确率 92.5%–94.5%(跨模型差仅 2.0 点),单项属性全部 >94%(must_thread 最高 100.0%)——SCS 最脆弱的 LLM 环节本身足够可靠。

RQ3 真实生态审计:扫描 2026 年 4 月 20 日 ClawHub 快照 66,157 个技能 → 2,473 个候选(3.7%)→ 辅助动态验证(沙箱内 canary 凭证、金丝雀值出现在外发请求即确认)+ 人工复核 → 确认 627 个恶意技能。恶意技能高度集中于少数发布者:hightower6eu 354 个(56.46%)+ sakaen736jih 198 个(31.58%)= 88.04%;至 7 月 15 日复查,两大发布者的恶意技能已全部下架,仅 23 个仍可检索。

5.3 CREDIT:从"不归因/乱归因"到超越前沿

前沿模型画像(LARGE 集 1,708 题用户建议):十一个前沿模型平衡准确率仅 0.50–0.66(随机为 0.50)。九个模型在有影响时只有 1%–31% 披露(Gemini 3.8 Flash 低至 1%、Claude Opus 5.5 10%、GPT-5 16%);另两个走另一极端——GPT-5 mini 披露 71% 但无影响时也乱归因 65%,GPT-5.5 披露 55%/乱归因 23%。

主实验(TEST 集,用户建议):

模型未训练 BACREDIT BA遗漏率虚假归因率
Qwen3-8B0.490.86(3 种子 0.86/0.87/0.90)100%→14%1%→14%
Qwen3-14B0.800.9019%→6%21%→14%
DeepSeek-R1-7B0.600.8766%→7%14%→20%
DeepSeek-R1-Llama-8B0.620.8556%→19%19%→12%

四个 CREDIT 模型在 LARGE 集上全部超过全部十一个前沿模型(如 Qwen3-8B+CREDIT 0.79 vs 前沿最高 0.66);答案准确率基本不变(8B 带正确建议 0.87→0.86)。

基线矩阵证明增益来自反事实标签+监督位置:VFT 推理级确认在推理内 0.74、最终答案仅 0.50(随机);反事实指令 0.51;shuffled 标签对照 0.50(学会格式学不会归因);faithfulness-RL 变体 0.51;把损失限制在最终答案段反而 0.88≥0.86(增益不来自推理训练),只训归因语句则退化(模型停止写答案)。

最难的条件——答案与建议一致时(此时一致性本身零信息):CREDIT 0.49→0.77(8B TEST),“答案=建议即归因"规则按构造恰好随机。迁移:多类型混合训练对未见类型部分迁移(8B 元数据 +0.24、专业知识 +0.11;FaithEval 反事实段落 0.66→0.77–0.84;双冲突信息 +0.11~+0.16),单训建议反而使其他类型恶化(工具输出 0.72→0.53);系统提示注释是唯一训练未触达的类型(+0.01)。错误剖析:2,121 个评分回答错 339 个(约六分之一),50+50 抽样显示虚假归因 48/50 是"把一致当依赖”,遗漏 32/50 是"把被影响的答案说成自己的知识"。

5.4 指标如何支撑各自的主张

  • SecPRBench 的 recall 差距(78.1% vs 32.5%)配上误诊分类(68% 同文件异机制)与修复对照(companion 零阳性、发现数随正确诊断下降),共同支撑核心主张"漏检主要是诊断失败而非搜索失败"——单独的 recall 数字给不出这个结论。
  • SCS 用"平均三项最高 + 跨模型方差小 + token 适中"的组合而非单项 SOTA(recall 99.1% 的 SkillSpector 因低精度/F1/高成本并不更好)支撑"确定性分析优于 LLM 直判“的权衡主张。
  • CREDIT 的 BA 设计(全沉默=0.50)配上"一致答案子集"分析,排除了"靠默认沉默刷分"与"靠一致性规则作弊"两条捷径,使 0.86 的含金量落在"真正区分依赖与一致"上。

六、效果优势的根源解释

6.1 SecPRBench:为什么"根因级评分"揭示出被掩盖的失败模式

因果链:以引入 commit 为评审对象 → diff 中心落在"未来才被证明有害的代码"而非修复代码 → Agent 无法从 diff 形态猜答案(修复反转构造的 diff 天然聚焦修好的位置,存在被"模式匹配"的捷径);再叠加根因级判分 → “文件对但机制错"从假阳性变成可统计的失败类别。

  • 机制层面:位置记分下 92.3% 的非空 companion 报告仍会命中根因文件(若按位置记分会误收 74.9% 的修复版扫描,甚至高于 buggy 版被认可的 63.3%)——位置与机制的解耦是本基准一切发现在测量学上的前提(论文实验已支持)。
  • baseline 局限的根源:二分标签(PrimeVul 式)把"诊断"压缩成"报警”,模型可以答对标签而推理全错(Ullah et al. 2024 已有独立证据);修复反转构造(MalPR-Bench/SEVRA-Bench)则让"见过修复模式"这一捷径可用——两者都系统性高估评审能力。
  • 反事实支撑:若不做根因级判分,八个模型的 recall 会集体虚高、23 个系统性盲区将不可见——68% 误诊这一数字本身就是"去掉根因判分后会被算作检出"的那部分(论文实验已支持)。
  • 阅读者推测(需后续验证):GPT-6 sol 对 GPT-5.6 sol 的 +34.1 点(整数溢出)增益可能部分来自训练数据中修复模式的覆盖,训练截止前后的 recall 差(四个模型下降但置信区间全跨零)尚不能证实或排除污染——论文自己的 F.9 分析也承认修复日期不能证明训练暴露。

交叉对照:MalPR-Bench(Chen et al. 2026)独立发现"评审者常在认不出漏洞的情况下拦截 PR”——与 68% 误诊率互为印证:位置/裁决层面对、机制层面错,是跨基准稳定出现的失败模式。Defending Code 靠广度(每报告 14–32 条发现)拿下并发漏洞而 Hit@1 不变(54.6%),提示当前排序能力是独立瓶颈——此点论文已支持,作为通用结论仍属推测。

6.2 SCS:为什么"编译+确定性传播"优于"规则匹配"与"LLM 直判"

因果链:恶意性 ⟂ 单域 → 规则法的规则无法引用跨域依赖(SkillFortify/SkillLeakBench 在 pptx_skill 上漏检、MalSkills/MASB 跨模型不稳)→ SCS 把 NL 编译进程序表示后,依赖链成为图上一等公民 → TSC 格传播单调收敛、规则裁决可复现 → 体现在指标上即:跨模型 F1 极差 2.8 点、token 均值 13.7M、recall 95.2%。

  • baseline 局限的根源:规则法把自然语言当文本模式处理,“MANDATORY 调用备份脚本"与"脚本上传文件"之间的语义桥不在任何单域规则的空间里(论文案例分析已支持);LLM 直判法让最终安全决策继承 LLM 的采样不确定性,A.I.G 的 4 倍 token 与 SkillSpector 的跨模型波动是这一税费的直接体现(论文实验已支持)。
  • 编译环节的可靠性是整条链的地基:若 NL→IR 错译率高,确定性分析将放大而非消除误差——92.5%–94.5% 的步级准确率与 >94% 的 must_thread(四重纠错机制的贡献)把这一风险压到可接受域(论文实验已支持)。
  • LLM 角色最小化原则的边界:attempt_policy_override 的语境歧义仍需一次 LLM 判定——确定性方法对"语言即行为"的模糊地带并未完全免疫(论文已承认)。
  • 阅读者推测:85.6% 准确率的上限可能主要受限于 API 抽象边界之外的行为(论文 Discussion 已列出)与 Code-PDG 对 191/91/59 个函数之外库调用的覆盖缺口,但论文未给出按错误类型的归因实验,此判断属推测。

交叉对照:传统供应链研究(Ohm/Ladisa/Zahan 等,均在 SCS Related Work 内)证明恶意包行为集中于少数原语——SCS 的"有限 API 集"抽象正是把这一经验从代码域前移到自然语言域,其在 627 个真实恶意技能上的检出成功是该抽象充分性的最强外部验证(论文实验已支持)。与 AgentArmor 的运行时 sPDG 相比,SCS 选择预安装静态分析换取零部署成本,代价是动态生成路径/值的盲区——两种设定互补而非竞争(对比属阅读者分析,基于论文自述的 Scope 一节)。

6.3 CREDIT:为什么"只训最终语句"有效而"训推理"无效

因果链:用户只看到最终答案+归因语句 → 监督必须落在用户可见面 → VFT 在推理内达成 0.74 的确认却止步于最终答案 0.50,因为推理段与答案段的生成在训练中被当作不同目标分布、确认行为没有迁移路径 → CREDIT 的重标只动 t* 而保留模型自己的 r 与 a,模型在"自己原有输出分布"上仅学习归因行为 → 答案准确率不变(0.87→0.86)而 BA 0.49→0.86——监督位置是因果变量,被 shuffled 标签(0.50,格式学会标签没用)与损失位置消融(只训答案段 0.88≥0.86)双向锁定(论文实验已支持)。

  • 反事实标签的必要性:一致≠依赖是任务的本质难点(50 例虚假归因中 48 例是"把一致当依赖”),只有移除测试能提供区分两者的真值;标签完全自动,规避人工标注的成本与主观性(论文实验已支持)。
  • 迁移的边界由训练覆盖决定:四类混合 → 未见类型 +0.24/+0.11;单训建议 → 工具输出 0.72→0.53(模型学会"只归因建议或沉默")——归因是按"信息类型家族"习得的泛化,不是全有全无的开关(论文实验已支持)。
  • 系统提示注释的失败(+0.01,训练后仅归因 2%–37% 的影响性注释)是本文最诚实的负结果:改指令措辞无效,说明瓶颈在基座对系统提示位置的注意力/归因倾向而非可被指令激活的知识——归因属推测,论文仅排除了措辞因素。
  • 阅读者推测:26% 的最终归因与推理草稿矛盾(训练前 2%)提示 LoRA 在 r 与 t 之间引入了新的不一致面——CREDIT 改善用户可见面但可能在模型内部一致性上付出隐性代价,论文未量化此代价对下游信任的影响。

交叉对照:Young(2026a/b)独立发现推理模型"思考时知道、答案里不说"——与 VFT 的 0.74/0.50 分裂互为印证:推理-答案的忠实性断层是结构性的,不是训练量问题(结论相近的独立证据)。与知识冲突研究(Xie et al. 2024 等)的方向差异——研究"何时跟随"vs"报告跟随"——使 CREDIT 与谄媚缓解(Wei et al. 2023)互补而非替代:CREDIT 让影响可见但不减少影响,论文自己的伦理声明明确提醒 “RELIED ON: none” 可能被过度信任,高风险场景仍需外部审计。

6.4 综合判断与未决问题

多项证据共同支持的机制:(1) 测量对象必须是因果机制而非表面匹配——SecPRBench 的 68% 误诊率与 MalPR-Bench 的独立发现互相印证;(2) 确定性裁决优于 LLM 终判的稳定性——SCS 的跨模型方差与 CREDIT 的 shuffled 对照从两个领域给出同向证据;(3) 干预定义真值(PoC 回放/移除测试)是可自动化的——三篇论文各自实现了无人工真值生产线。

仍属推测或条件成立的机制:根因文件数与 recall 的负相关是观测性的(SecPRBench 自认);SCS 的精度上限归因缺错误类型分析;CREDIT 的系统提示盲区归因于基座倾向仅为假设。可能的失效条件:SecPRBench 的结论限定于 C/C++/Rust 系统软件与 ≤2000 行变更;SCS 对 API 集外新行为与动态解析路径失效;CREDIT 未在 14B 以上与开放式长答案上验证,且双冲突信息场景仍只到 0.75–0.79。

七、必要知识反推

假设让一个没有背景的人复现这三篇论文,他至少需要以下知识——值得注意的是,三篇论文的知识栈差异极大,恰好对应"评测工程、程序分析、训练方法"三种研究范式。

7.1 领域知识层

  • 软件漏洞生态(SecPRBench 必须):CVE/安全公告如何关联修复 commit、引入-修复配对的考古学(SZZ 类算法为何不可靠)、C/C++/Rust 九大项目的安全流程差异、PoC/sanitizer 如何验证内存安全失败——不理解这些无法设计"从修复回溯引入"的管线,也无法解释 48 例为何必须人工裁决。
  • Agent 技能生态(SCS 必须):SKILL.md 的结构(frontmatter/scripts/references/assets)、技能如何被 Agent 加载执行、ClawHub/skills.sh 等市场的发布机制、供应链攻击的原语库(外传、混淆载荷、提权、控制越权)——24 类 API 的抽象直接来自 npm/PyPI 恶意包研究的经验迁移。
  • LLM 行为现象学(CREDIT 必须):谄媚效应(sycophancy-eval 基准)、CoT 不忠实、推理 token 与最终答案的分歧——不掌握这些文献就无法定位"推理级训练不达答案"这一反直觉发现的坐标。

7.2 方法论知识层

  • 基准测量学(SecPRBench): paired control 设计、LLM-as-judge 的偏差文献(顺序效应、标识符影响)、McNemar/Holm 配对检验——判据先行 judge 的三步流程是对 judge 偏差的直接防御。
  • 程序分析理论(SCS):数据流分析、格与单调框架、Kildall worklist、IFDS/IDE、PDG/CDG 构建、taint 分析的 source-sink 范式、tree-sitter 增量解析——TSC 传播是教科书级数据流分析在混合工件上的移植。
  • 训练与统计方法(CREDIT):LoRA 微调、反事实数据增强、平衡准确率与 bootstrap 置信区间、P(IK) 类自我知识探针——移除测试源自解释忠实性文献的干预范式。

7.3 工程知识层

  • 大规模 Agent 评测工程(SecPRBench):Docker 隔离(剥离 Git 历史、限制网络)、多 harness 适配(Claude Code/Codex CLI 的 headless 运行)、轨迹解析与 token/成本核算、结果可视化发布。
  • LLM 管线可靠性工程(SCS):分批编译的上下文控制、符号表的跨批维护、四重 IR 纠错、沙箱 canary 动态验证(金丝雀凭证+事件三级别记录)。
  • 评测协议设计(CREDIT):训练/验证/测试/复现集的冻结纪律(“冻结后只评一次”)、judge 与人工的双盲一致性验证、按模型独立计算影响标签。

7.4 知识融合的关键节点

三篇论文各有一个"化学反应"节点:SecPRBench 把 软件工程考古(引入 commit 回溯)与 LLM judge 测量学(判据先行)融合——前者保证任务真实、后者保证评分有效,缺一则基准崩塌;SCS 把 编译器技术(受限 IR+语法检查)与 安全信息流(格传播+source-sink)融合于自然语言这一非传统前端——“自然语言是一种可以编译的负载语言"是全文最锋利的观念转换;CREDIT 把 因果推断的干预思想(移除测试)与 参数高效微调(只重写 t)融合——反事实标签自动化扫清了训练数据成本障碍,监督位置的最小化扫清了副作用障碍。

八、论文中可以提取的通用性灵感

灵感一:用干预定义真值,而不是用表面匹配 核心思想:当输出与目标的表面相似度(位置、措辞、一致性)可被"凑近"时,真值必须由"去掉它结果会不会变"来定义。论文证据:SecPRBench 修复版上位置记分会误收 74.9% 的扫描;CREDIT 答案-建议一致时匹配规则恰好随机而 CREDIT 0.77;SCS 以图可达性而非文本相似定恶意。推广场景:RAG 引用质量评估(移除被引段答案变吗)、Agent 工具调用归因(换掉工具输出变吗)、代码评审评语质量(按修复了与否而非像不像人工评语)、推荐系统解释(去掉特征推荐变吗)、提示词工程 A/B(而非相似度比较)。

灵感二:LLM 只做语义前端,裁决交给确定性后端 核心思想:把 LLM 的不确定性压缩进一个可验证、可重试的前置转换环节,最终判断用确定性规则执行。论文证据:SCS 的 LLM 只译 IR(92%+ 可靠、四重回炉),安全裁决为格传播+规则,跨模型 F1 极差仅 2.8 点;SecPRBench 的 judge 虽是 LLM 但被"判据先行"流程约束并配 PoC 机械验证与人工审计。推广场景:法律文书合规审查(LLM 抽事实、规则引擎判红线)、医疗指南依从检查、配置漂移检测、合同条款比对、Agent 权限策略评估(LLM 译意图、策略引擎判允许)。

灵感三:监督要落在用户看得见的界面上 核心思想:训练目标与交付界面错位时,能力会在传输中丢失——VFT 推理内 0.74、用户可见的最终答案 0.50。论文证据:CREDIT 只重写最终归因语句即 0.86,答案行为不变;MalPR-Bench 独立发现"拦截了 PR≠认出了漏洞”(决策界面≠诊断界面)。推广场景:Agent 中间步骤审计日志 vs 最终报告的对齐训练、RAG 的检索过程忠实性监督落点选择、代码 Agent 的计划-实现一致性训练、多轮对话的状态披露训练、自动驾驶的决策解释训练。

灵感四:混合工件的攻击面在"交界处",分析也要建在交界处 核心思想:当系统的恶意/失败行为由两种异质组件(NL+代码、配置+逻辑、人+机)联合产生时,单域防御结构性失明,必须先建立跨域的共同表示。论文证据:pptx_skill 的指令触发+代码外传,规则法与多数 LLM 法均漏检,xPDG 缝合两域后稳定检出。推广场景:MCP 服务器的描述文本+工具行为的联合审计、低代码平台的声明+脚本联合分析、智能合约的字节码+ABI 叙述联合验证、数据管道的 SQL+调度配置联合风险分析、多人机协同系统的权限意图+执行日志联合审计。

灵感五:评测集用"真实引入点"而非"事后重构" 核心思想:用历史真实发生的事件原貌(引入时刻的完整脏 diff、真实发布过的恶意样本、模型自己的真实回答)作评测对象,能暴露事后重构数据集上不可见的失败模式。论文证据:SecPRBench 用真实引入 commit 才测出 68% 误诊;SCS 在 66,157 个真实技能上确认 627 恶意并发现 88% 集中于两个发布者——这样的集中度与下架动态只有真实生态才呈现。推广场景:故障复盘基准用真实事故引入 PR 而非编造缺陷、安全演练用真实攻击链快照、模型评测用生产日志分布而非合成均衡集、UI 评测用真实截图而非模板生成。

灵感六:负结果的发布价值 核心思想:系统量化"什么不奏效"(弃权、单类型训练、系统提示盲区)与报告正结果同样构成领域知识。论文证据:Codex Security -8.3 点(弃权致漏)、CREDIT 单训建议使工具输出归因 0.72→0.53、系统提示注释所有训练条件均未改善、训练只写归因语句则模型停止写答案——四篇正文多处负结果都是后来者的路标。推广场景:Agent 框架设计中记录失败的 harness 组合、提示工程中发布失败模板、RL 奖励设计中的 reward hacking 案例库、多智能体系统的失败拓扑记录。

附录:三篇论文速览卡

维度SecPRBenchSCSCREDIT
一句话合并前漏洞评审的"真实引入 commit"基准恶意技能的跨域程序分析检测器反事实训练最终归因语句
数据规模265 对任务 × 9 项目234 基准 + 66,157 真实技能1,708 题 × 11 前沿 + 4 开源模型
关键数字recall 32.5–78.1%;68% 误诊F1 86.9%;627 恶意确认0.49→0.86;前沿最高 0.66
LLM 用量判题 Opus 5.5 + 构造 Sonnet 5仅编译(13.7M token 均值)标签自动生成 + judge
开源任务/报告/裁决全发布匿名仓库(实现+数据+配置)代码+数据+适配器
最大局限C/C++/Rust、≤2000 行;不测精确率API 集外行为盲区;静态分析范围≤14B 模型;系统提示盲区