大规模LLM代理安全测试:从风险发现到基于证据的验证 Safety Testing LLM Agents at Scale: From Risk Discovery to Evidence-Grounded Verification
提出VERA框架,通过三阶段自增强流水线实现可执行的安全用例生成和运行时验证
前置知识
LLM Agent(大语言模型代理)
LLM Agent是将大语言模型与外部工具结合的自主系统,能够执行多轮对话、规划任务、选择工具并在实际环境中产生持久性状态变化。与传统的单轮文本生成不同,Agent具备规划、工具调用和状态演化能力,可以在软件仓库、桌面应用、网页等多个环境中执行复杂任务。
本文的核心就是测试这类系统的安全性,理解Agent与简单LLM的区别对理解本文的风险范围和测试方法至关重要。
工具执行环境(Tool Execution Environment)
LLM Agent通过与外部服务的API交互来执行实际操作,如发送邮件、搜索网页、托管代码、处理支付等。这些环境提供具体的工具接口和持久状态存储,Agent的每个工具调用都会产生真实的环境变化,如创建文件、修改数据库、发起网络请求等。
本文提出的风险分类法中,环境维度是三个正交维度之一,理解工具环境的多样性对理解VERA的组合测试用例生成机制至关重要。
可执行安全用例(Executable Safety Case)
一个可执行安全用例是一个三元组,其中g是具体的安全目标(如通过代码托管工作流泄露受保护的仓库凭证),s0是通过程序化接口动态构造的场景特定初始环境状态,Vg是一个确定性的Python程序,用于验证指定的安全违规是否通过可观察效果得以实现。
这是VERA方法的核心抽象概念,理解这个概念才能明白如何将抽象的风险分类转化为可自动化执行和验证的测试用例。
证据优先级验证(Evidence-Grounded Verification)
VERA采用验证优先级策略,优先检查环境状态sT,其次是工具调用记录,最后是代理响应。这是因为工具调用记录的是意图但不保证效果,而环境状态才是安全违规的真实证据。这种设计防止了代理口头拒绝但实际执行有害操作,或声称拒绝但已产生有害副作用的情况。
这是VERA区别于现有安全评估方法的关键创新之一,理解这个设计才能明白为什么VERA能避免误报和漏报。
多通道威胁模型(Multi-Channel Threat Model)
单通道设置中攻击者只控制用户消息,工具结果按原样返回;多通道设置中攻击者还能通过操作符将安全违规命令注入到选定的工具结果中,有四种模式:identity(不变)、append(追加)、prefix(前缀)、override(覆盖)。注入的内容可以通过邮件、代码托管、消息、支付、搜索等工具介导的渠道到达代理。
这是VERA威胁模型的核心,理解这个设计才能明白为什么VERA能探测到单通道测试无法发现的安全边界。
研究动机
现有的LLM Agent安全测试方法存在三个核心问题。第一,它们针对专家设计的安全违规进行测试,评估方式依赖于硬编码规则,这使得测试难以扩展。当Agent演化出新的能力、工具生态系统或部署环境发生变化时,扩展覆盖面需要协调修改多个系统层,导致安全数据集构建成本高昂且难以维护。第二,现有方法混淆了不安全请求、尝试行动与实际安全违规的区别,它们将不安全请求、尝试行动或意图声明视为安全违规,而忽略了有害结果是否通过执行的操作产生,并可通过其对环境的可观察效果进行分析。第三,现有方法将风险定义、环境实现、代理适配器和验证程序紧密耦合,使得扩展到新风险、工具生态系统或代理架构时需要跨多个系统层进行协调修改。
本文的目标是本文的目标是提出VERA,一个端到端的安全测试框架,通过实例化软件工程测试原则(测试预言、组合构造和基于证据的验证)来适应非确定性Agent。VERA支持异构的Agent框架,在三阶段自增强流水线上运行:自主风险发现、可执行测试用例生成和运行时自适应执行。目标是揭示生产级Agent框架的实质性安全弱点,并提供一个可维护和可扩展的安全评估基础设施。
与已有工作不同的是,本文的独特切入角度是将软件测试的成熟范式迁移到Agent安全领域,特别是解决Agent行为非确定性的挑战。与现有方法不同,VERA不是评估代理的文本输出是否合规或拒绝,而是验证安全违规是否通过执行的操作及其对环境的可观察效果实际实现。VERA通过模块化的可执行测试基础设施,将风险分类、环境实现和验证程序解耦,使得扩展覆盖面时不需要协调修改多个系统层。此外,VERA的多通道威胁模型能够探测到单通道测试无法发现的安全边界,揭示不同交互表面之间的差异性鲁棒性。
核心方法
VERA将Agent安全测试实现为三阶段自增强流水线。第一阶段是持续风险探索,通过文献驱动的探索持续发现和构建新兴风险的分类法,包括安全风险、攻击方法和工具执行环境。第二阶段是可执行测试用例构建,通过跨分类维度的组合生成可执行的安全用例,每个用例指定具体的安全目标、可编程构造的初始状态和基于可观察工件的确定性验证谓词。第三阶段是自适应执行和基于证据的验证,在隔离的沙盒中运行异构Agent,一个控制代理根据运行时观察引导多轮交互,基于证据的验证器根据环境状态和工具调用证据判断结果。
VERA的核心创新点在于将软件测试的成熟原则(测试预言、组合构造和基于证据的验证)实例化到Agent安全领域,解决Agent行为非确定性的挑战。与现有方法混淆不安全请求、尝试行动与实际安全违规不同,VERA验证安全违规是否通过执行的操作及其对环境的可观察效果实际实现。VERA通过模块化的可执行测试基础设施将风险分类、环境实现和验证程序解耦,使得扩展覆盖面时不需要协调修改多个系统层。VERA的多通道威胁模型通过配置工具网关能够探测到单通道测试无法发现的安全边界。
方法步骤详情
VERA的完整执行流程包含以下步骤。第一步是持续风险探索,从公共Agent安全文献中检索文档,Summary Agent迭代构建三个分层分类树:风险分类法R(描述可实现的危害后果)、攻击方法分类法M(描述诱导行为的机制)和环境分类法(描述代理行为的外部服务和执行环境)。每个分类法通过create、update、merge、delete四种操作收敛到稳定结构。第二步是安全目标生成,通过组合每个分类法的叶子节点生成候选安全目标,其中G是基于LLM的目标合成器,D包含格式演示和环境描述。第三步是安全用例编译,将每个选定的目标g编译成完整的可执行安全用例,其中s0是通过LLM初始化器动态构造的场景特定状态,Vg是生成的确定性验证谓词。第四步是过滤和变体生成,过滤掉成功条件依赖于内部推理轨迹或重复已接受用例的情况,每个保留的基础场景扩展为三种受控变体:良性变体、单通道变体和多通道变体。第五步是大规模沙盒执行,通过统一的执行合同和可配置工具网关在隔离的Docker Compose环境中执行每个安全用例,记录交互日志、网关日志和环境状态。第六步是自适应测试驱动,控制代理根据观察调整后续交互,包括在被拒绝时重新表述请求、在代理使用意外工具时调整任务分解、在相关内容未被检索时选择不同注入点。第七步是基于证据的验证,验证器Vg按照优先级Vg_state(sT)然后Vg_tool(τ)最后Vg_resp(τ)检查环境状态、工具调用记录和代理响应,确定是否实现了安全目标。
技术新颖性
VERA的技术新颖性体现在多个方面。首先,它将软件测试的测试预言、组合构造和基于证据的验证原则实例化到Agent安全领域,这是首次系统地将软件测试范式迁移到非确定性Agent系统。其次,VERA的证据优先级验证策略优先检查环境状态而非代理自报告,这是区别于现有方法的关键创新。第三,VERA的多通道威胁模型通过配置工具网关能够探测到单通道测试无法发现的安全边界,揭示不同交互表面之间的差异性鲁棒性。第四,VERA的模块化可执行测试基础设施将风险分类、环境实现和验证程序解耦,使得扩展覆盖面时不需要协调修改多个系统层。第五,VERA的自适应测试驱动通过观察运行时行为并调整后续交互,解决了Agent行为非确定性的挑战。
实验结果
VERA在四个生产级Agent框架(OpenClaw、Hermes、Codex、Claude Code)上的评估揭示了实质性的安全弱点。在多通道攻击下,平均攻击成功率达到93.9%,单通道攻击下为90.6%,良性任务成功率为70.5%。Claude Code达到最高的总体ESR 88.6%,Hermes紧随其后为86.6%,Codex达到84.1%,OpenClaw最低为70.3%。这些结果揭示了Agent的有用性能力(强指令遵循、灵活工具编排、长上下文推理)也使其更容易在合理任务上下文中受到对抗性操纵。VERA-Bench包含1600个可执行的安全用例,跨越124个风险类别、77种攻击方法和30个环境类别。组合验证表明,组合测试用例构造产生了有意义且可执行的安全用例,而不是退化或不兼容的组合。多通道威胁模型分析显示,工具观察通道提供了一致但适度的增量增益(平均+3.3个百分点),但存在显著的跨Agent差异。基于证据的验证分析显示,良性ESR(70.5%)低于攻击ASR(90.6-93.9%),这是因为良性验证器对sT强制执行多谓词端到端正确性,而攻击验证器只需确认特定的安全违规已通过可观察工件实现。下游任务分析显示,在VERA衍生数据上微调的Qwen3Guard在R-Judge基准上达到61.7%准确率,超过所有现成基线。
查看结构化数据
| 任务 | 指标 | 本文 | 基线 | 提升 |
|---|---|---|---|---|
| 安全用例执行成功率(ESR) | ESR (%) | 93.9 (多通道平均) | N/A | N/A |
| Claude Code框架攻击成功率 | ASR (%) | 93.1 (多通道) | 95.2 (单通道) | -2.1 (多通道vs单通道) |
| OpenClaw框架攻击成功率 | ASR (%) | 89.1 (多通道) | 82.8 (单通道) | +6.3 (多通道vs单通道) |
| VERA衍生数据微调Qwen3Guard在R-Judge上的准确率 | Accuracy | 0.617 | Qwen3Guard基础模型 | 超过所有现成基线 |
| VERA衍生数据微调Qwen3Guard在VERA基准上的F1分数 | F1 | 0.941 | Qwen3Guard基础模型 (0.637) | +0.304 |
局限与改进
作者承认的局限性包括:VERA的探索范围仅限于可以在推理时针对已部署代理进行测试的风险,纯训练阶段攻击(如微调投毒或后门注入)超出范围,因为它们无法通过代理的运行时接口进行测试。此外,每个安全用例只考虑一个目标代理,没有评估多代理场景中的风险。本文观察到的局限性包括:VERA的执行成功率在某些组合上存在显著差异,如Malware Gen × Web & Stor (71.4%) 和 Priv Escal × Travel (73.7%),这反映了当所需执行原语在环境中结构性缺失时,过滤阶段适当降低了权重但并未完全移除。此外,自适应测试驱动的效果在不同Agent之间存在显著差异,OpenClaw增加24.8个百分点,而Claude Code仅增加15.1个百分点,这反映了不同Agent的工具调用策略和指令遵循能力的差异。
独立分析的弱点
VERA的独立分析弱点包括:第一,自适应控制代理的策略基于观察运行时行为调整后续交互,但这种调整是启发式的,缺乏理论保证,可能无法覆盖所有对抗性策略。改进方向是引入更系统的搜索算法(如蒙特卡洛树搜索)或强化学习方法来优化控制策略。第二,验证器Vg是确定性Python程序,但生成过程依赖LLM,可能产生语法错误或工具调用模式不匹配,导致误判。改进方向是引入更强的验证器生成约束和后处理修复机制。第三,VERA的风险探索仅限于学术文献,没有整合实时的运营安全情报源(如CVE数据库、厂商通告、MITRE ATT&CK框架)。改进方向是扩展探索范围以包含这些实时情报源,实现部署时分类法更新。第四,VERA的多通道威胁模型考虑了四种注入模式(identity、append、prefix、override),但没有考虑更复杂的语义级注入或对抗性样本生成。改进方向是引入更丰富的注入模式选择策略。
未来方向
作者提出的未来工作方向包括:扩展VERA以支持多代理场景下的安全评估,评估代理之间的信息泄露和协作攻击。整合实时运营安全情报源(如CVE数据库、厂商通告、MITRE ATT&CK框架)以实现部署时分类法更新。开发更复杂的多通道威胁模型,包括语义级注入和对抗性样本生成。基于成果可延伸的未来工作包括:将VERA应用于更多Agent框架和后端模型,包括开源和闭源系统。开发更强大的自适应控制代理策略,引入系统搜索算法或强化学习方法。构建更大的安全用例数据集,覆盖更多风险类别、攻击方法和环境类型。开发基于VERA的自动化安全补丁生成系统,当发现安全弱点时自动生成防御策略。
复现评估
VERA的代码已在GitHub公开:https://github.com/Yunhao-Feng/Vera。VERA-Bench包含1600个可执行的安全用例,每个用例包含四个工件:attack_plan文件(记录场景目标、交互策略和威胁模型配置)、mcp_logs文件(存储完整的工具调用序列、参数、原始服务结果和返回给代理的观察)、trace.json文件(包含规范化的多轮交互轨迹,包括用户消息、代理响应和执行元数据)、verify.py文件(实现案例特定的可执行谓词)。实验在隔离的Docker Compose环境中执行,每个运行从包含目标代理、MCP中间件和相应场景所需外部服务的全新初始化沙盒开始。每个沙盒实现为12个容器的Docker Compose堆栈,包括目标代理、MCP网关和五个自托管后端服务:Mailpit(邮件)、Gitea(代码托管)、Blnk(支付和银行)、Databag(即时消息)和SearXNG(网页搜索)。当前环境通过72个MCP工具函数暴露服务族,并使用独立的网络命名空间、项目标识符和服务状态进行并行执行。算力需求方面,中位数运行使用155k输入token、3k输出token和11次工具调用,95th百分位为789k输入token、11k输出token和38次工具调用,表明大多数场景在操作上可处理,而较小子集需要更长的上下文窗口或更广泛的工具交互。复现难度中等,需要配置Docker环境和MCP服务,但提供了完整的执行工件和可重放的交互轨迹。
论文图表
图2展示了VERA执行在良性、单通道和多通道设置下,一级风险组和环境组之间的分布。每个热图单元格报告与相应组对关联的保留数据项数量。这些热图展示了数据密度的三种组合视图:Risk × Environment、Environment × Attack Method、Attack Method × Risk。保留的执行不是均匀分布在分类法上的,但它们集中在良性、单通道和多通道设置下的几个语义有意义区域,表明数据集既保留了广度又保留了场景频率的现实变化。
这张图对理解论文很重要,因为它补充了基于率的分析与绝对数据密度,展示了VERA测试语料库的分布特征。它表明数据集既保留了广度又保留了场景频率的现实变化,这有助于理解VERA组合测试用例构造的有效性。
图3展示了保留的VERA运行的执行成本和交互长度分布。面板显示总输入token分布,面板显示总输出token分布,面板显示每次执行的总工具调用计数。虚线和点状垂直线分别标记中位数和95th百分位。保留的运行通常长度适中,但表现出明显的右尾,表明大多数场景在操作上可处理,而较小子集需要更长的上下文窗口或更广泛的工具交互。中位数运行使用155k输入token、3k输出token和11次工具调用,而95th百分位为789k输入token、11k输出token和38次工具调用。
这张图对理解论文很重要,因为它展示了VERA执行的资源需求和操作可行性。中位数运行使用155k输入token、3k输出token和11次工具调用,而95th百分位为789k输入token、11k输出token和38次工具调用,表明大多数场景在操作上可处理,而较小子集保留了更长视野和更工具密集型的交互。这有助于评估VERA的实用性和可扩展性。
图4展示了现成和微调的保卫模型在VERA下游安全分类任务上的性能,报告了准确率、召回率和F1。LlamaGuard3达到0.438准确率、0.258召回率和0.310 F1,基础Qwen3Guard提高到0.670准确率、0.468召回率和0.637 F1。AgentDoG在现成基线中达到最高的召回率0.742,但其准确率仅为0.490,F1达到0.643。在VERA衍生数据上微调的Qwen3Guard在所有三个指标上都有实质性提高,达到0.930准确率、0.903召回率和0.941 F1。
这张图对理解论文很重要,因为它展示了VERA作为下游应用(如保卫模型开发)的价值。现有保卫模型在VERA基准上的有限转移表明,检测我们基准中的安全相关失败即使对竞争性保卫模型来说也是非平凡的,可能是因为保留的案例涉及更丰富的环境基础、更广泛的攻击多样性和更多样化的不安全行为实现。
表5展示了保卫模型在R-Judge上的性能,这是一个单独的安全分类基准,具有不同的提示分布和决策边界。微调的Qwen3Guard达到61.7%准确率,这是最高的,超过所有现成基线,这表明在VERA上训练使模型能够更好地匹配实际和多样化Agent设置中存在的威胁模式结构。
这个表格对理解论文很重要,因为它展示了从VERA学习到的安全判断是否能够超越VERA基准进行转移。微调的模型在R-Judge上达到最高的准确率61.7%,超过所有现成基线,这表明VERA捕获的安全信号不仅仅是基准特定的,可以支持能够泛化到外部评估设置的保卫模型。
图5展示了在VERA下游任务上微调的Qwen3Guard模型的训练动态。平滑的训练损失在优化过程中稳步下降,评估损失在第210步达到其最小值0.0387。整体轨迹表明在微调期间稳定收敛。
这张图对理解论文很重要,因为它展示了微调过程的稳定性,表明VERA衍生数据是高质量的,能够支持稳定的学习过程。训练和评估损失在整个优化过程中平滑下降,评估曲线跟踪训练趋势而没有后期不稳定性,这表明微调过程在这个任务上表现良好。