AgentXploit:面向 AI Agent 的仓库到运行时自动化红队系统
AgentXploit: Autonomous Repository-to-Runtime Red-Teaming for AI Agents
AgentXploit 将仓库攻击路径发现与运行时利用分开,在 AgentXploit-Bench 上三次运行端到端成功率为 59.3%,高于 Codex 的 38.4%。
授权白盒部署前审计:审计者可查看目标仓库与受控运行时,但攻击必须经任务定义的攻击者接口执行,并由外部确定性验证器确认成功;不代表典型外部攻击者能力。
- 智能体安全失败既可能来自对抗内容改变工具调用,也可能来自路径遍历、命令注入等软件漏洞。现有红队方法多假设注入点已知,难以从仓库实现中发现可行攻击路径。
- AgentXploit 把审计分成两角:Analyzer Agent 用代码证据追踪攻击者可控输入到敏感操作并写出候选路径;Exploiter Agent 只经攻击者接口在隔离目标上试探,并按运行时反馈修订。AgentXploit-Bench 含 12 个开源系统中的 72 个可复现漏洞,端到端任务隐藏漏洞元数据,由外部确定性验证器判定。
- 三次运行中,AgentXploit 端到端成功率为 59.3%,默认 Codex 为 38.4%,token 预算对齐后 Codex 为 46.3%。初始运行的 29 次失败中 20 次发生在分析阶段。注入点已知的 AgentDojo 上,Exploiter Agent 成功率为 79.2%,AgentVigil 为 52.7%,手工攻击为 41.5%。
- 作者指出:OpenHands 上的候选精确率不能外推到全基准;七任务攻击质量诊断不是代表性隐蔽性评测;验证器每例只编码一种安全结果;无法声称无训练数据污染;更大结构重构未测。实验覆盖 AgentXploit-Bench 与 AgentDojo,主干为 gpt-5.1-codex,AgentDojo 受害智能体为 GPT-4.1。
- 被测模型
- GPT-4.1
- 基准
- AgentXploit-BenchAgentDojo
- 指标
- pass@1attack success rateattack-path recoveryin-scope candidate precision
AgentXploit 是一个双角色审计系统,把仓库级攻击路径发现与运行时利用分开:Analyzer Agent 追踪攻击者可控输入到敏感操作并记录有代码支撑的候选路径,Exploiter Agent 将其转化为具体攻击并借助运行时反馈修正。作者同时发布 AgentXploit-Bench,覆盖 12 个开源 AI Agent 系统与框架中的 72 个可复现漏洞。三次运行中 AgentXploit 端到端成功率为 59.3%,Codex 为 38.4%;在 token 预算对齐的比较下 Codex 为 46.3%。
深度解读
这篇论文试图解决什么问题?
部署前白盒审计要在隐藏漏洞元数据时,从仓库发现并在运行时验证可行攻击路径。
在授权的白盒部署前审计中,审计者能否从仓库恢复并验证一条可行攻击路径,而不是只在已知注入点上优化对抗输入。
- 场景:作者认为 LLM 智能体连接文件、浏览器、代码执行、API 与通信服务后,安全失败可来自模型行为或周边软件。对抗内容可能把模型导向敏感工具调用,实现本身也可能暴露路径遍历或命令注入。审计者需要判断攻击者可控数据能否真正到达敏感操作。
- 现有方法的不足:作者称多数智能体红队方法假设注入点或攻击面已知(Wang et al., 2025c; Chen et al., 2024d; Perez and Ribeiro, 2022; Wu et al., 2024b),测试的是如何优化对抗输入,而不是审计者能否从实现中发现可行路径。仓库规模的智能体里,仅列出输入和敏感工具不够,还要判断哪些输入被消费、值如何跨组件移动、能影响哪些模型或控制流决策、工具前置条件是否成立。
- 核心设定:作者研究 authorized white-box pre-deployment auditing。审计者可检查目标仓库和受控运行时,但 exploit 只有经任务定义的攻击者接口执行、并由外部验证器确认才算成功。仓库访问用于发现候选路径,本身不确立可利用性。
- 威胁模型:
- 目标:找到从攻击者可控值到敏感操作的可行链。敏感操作包括文件修改、特权 API 调用和命令执行,结果可包括数据丢失、未授权访问、数据外泄或代码执行。
- 知识:授权评估者获得仓库(源代码、配置、依赖和文档)及受控可执行环境,代表开发者、内部红队或签约审计者的部署前审查,不代表典型外部攻击者。
- 能力:两个审计智能体都可查看仓库产物;运行时攻击从攻击者容器打向隔离目标容器。Exploiter Agent 必须使用任务定义的接口(API、用户查询通道、上传文件或外部数据源),直接读取或修改受保护目标状态不算有效 exploit。
- 成功判定:评估框架在智能体之外运行确定性验证器,并在需要时使用受保护目标状态。Exploiter Agent 可以提出并执行攻击,但不能自行宣布任务成功。
- 本文提出:两角色系统 AgentXploit——Analyzer Agent 做仓库级攻击路径发现,Exploiter Agent 做运行时利用;以及 AgentXploit-Bench,含 12 个开源 AI 智能体系统与框架中的 72 个可复现漏洞。
有哪些相关研究?
相关工作分智能体风险来源、提示注入与访问模型、通用编码/安全智能体,以及已有智能体安全基准。
LLM 智能体与风险来源
- 工具与工作流智能体:网页导航(Nakano et al., 2021; Deng et al., 2024; Gur et al., 2023; Zhou et al., 2023a)、软件工程(Le et al., 2022; Gao et al., 2023; Li et al., 2022; Wang et al., 2025a)和个人助理(Schick et al., 2024; Qin et al., 2023; Patil et al., 2023; OpenAI, 2023)把外部输入与 API、文件、浏览器和代码执行工具结合。作者认为相关安全问题不是输入和敏感工具是否同时存在,而是实现是否在数据流、控制流、模型决策和工具前置条件下允许二者之间的可行链。
提示注入、防御与访问模型
- 手工与自动攻击:手工提示注入(Willison, 2022; Perez and Ribeiro, 2022; Wu et al., 2024a; Liao et al., 2024; Xu et al., 2024; Zhang et al., 2024b)与自动攻击生成(Chen et al., 2024d; Yu et al., 2023; Chen et al., 2024c; Wu et al., 2024b; Wang et al., 2025c)。
- 防御:基于训练、检测、提示分离和工具隔离(Inan et al., 2023; Wallace et al., 2024; Chen et al., 2024a;b; Shi et al., 2025b; Liu et al., 2025; Meta, 2025; Mendes, 2023; Hines et al., 2024; Liu et al., 2024; Debenedetti et al., 2024; Wu et al., 2025; 2024c; Zhu et al., 2025; Shi et al., 2025a)。
- 访问模型差异:作者称 black-box 方法只与运行中的目标交互;gray-box 评估通常暴露注入位置或任务结构;white-box 审计可以检查源代码和受控运行时。多数提示注入方法在前两种设定下、针对已知攻击面优化攻击。作者把端到端评测定位为隐藏攻击路径,并要求先从仓库恢复再利用。
自主编码与网络安全智能体
- 通用编码智能体:SWE-agent(Yang et al., 2024)、OpenHands(Wang et al., 2025a)、Codex(OpenAI, 2025)、Claude Code(Anthropic, 2025)可以浏览仓库并执行程序。
- 通用软件漏洞发现:CyberGym(Wang et al., 2025b)和 BountyBench(Zhang et al., 2025a)评测一般软件中的漏洞发现与利用;Co-RedTeam(He et al., 2026)协调智能体完成软件安全任务。作者称本文范围更窄:攻击可能经过模型决策、工具调用和常规软件漏洞后才到达敏感操作的 AI 智能体实现。
智能体安全基准与本文基线
- 已有基准:AgentDojo(Debenedetti et al., 2024)用预定义注入点和任务结构评测间接提示注入;ASB(Zhang et al., 2025b)扩大攻击与防御覆盖;WASP(Evtimov et al., 2025)研究网页智能体环境中的攻击。作者称这些基准适合在交互面已知后测试行为。
- 基线方法与基准:AgentXploit-Bench 上,Codex CLI 作为端到端仓库基线,与 AgentXploit 使用同一 gpt-5.1-codex 主干;AgentDojo 上比较 手工攻击模板 与 AgentVigil(Wang et al., 2025c),受害智能体均为 GPT-4.1。种子消融还使用来自 OpenPromptInjection(Liu et al., 2024)、InjecAgent(Zhan et al., 2024)、AgentDojo 和 SecAlign(Chen et al., 2025)的合并语料。
作者把 AgentXploit-Bench 定位为不同的评测单元:真实仓库中由公开漏洞导出的真值攻击路径,加上固定运行时和外部验证器。
论文如何解决这个问题?
Analyzer Agent 写出带代码证据的候选路径,Exploiter Agent 只经攻击者接口在隔离运行时验证。
AgentXploit 把审计拆成仓库分析与运行时利用:Analyzer Agent 产出机器可读的候选攻击路径,Exploiter Agent 只按该记录经攻击者接口试探,直到外部验证器接受或预算用尽。记录在运行时通过验证之前只是假设。
问题设定与路径记录
- 攻击路径:从攻击者可控值到敏感操作的可行链。按入口分类,且与漏洞机制正交:direct path 从攻击者接口可达的入口开始(如 API 或用户查询通道);indirect path 从外部数据源开始(如被检索文档或工具响应),之后才被智能体消费。两条路径都可能依赖 LLM 中介的决策,或周边软件缺陷。
- 路径记录:含路径类型、具体入口、敏感操作、支持性代码位置、所需前置条件,以及可选的 exploit hint。交接时 Exploiter Agent 收到显式代码证据和前置条件,而不是不受约束的自然语言摘要。
- 三种评测模式:analysis-only 只给仓库、不执行目标,衡量真值攻击路径恢复;exploit-only(oracle)给出漏洞说明与运行时,衡量路径已知时的利用构造;end-to-end 给仓库和运行时但不给漏洞说明,是主任务。analysis-only 与 end-to-end 的任务指令排除 CVE 或 issue 标识、漏洞描述、目标函数、exploit 字符串、补丁讨论和目标特定成功条件。
Analyzer Agent
- 状态:用调查队列,并把证据存在模型上下文之外的报告中。后续步骤读已存报告,不把完整交互历史留在模型上下文里。基准不提供真值入口。
- 流程:先映射仓库结构,为外部接口、工具定义、敏感 API 和相关配置建立初始 Explore、Search、Read 任务;再用目录、文本搜索、读文件、依赖、符号、AST 或 LSP 工具执行最高优先级任务;把新代码位置、数据流关系、工具行为和未解决链接写入报告,新证据可增删队列优先级;证据支持可行路径时创建或更新候选记录;队列耗尽或达到配置的分析预算时结束,记录交给 Exploiter Agent。
- 搜索对象:外部影响的值,例如请求字段、检索内容、上传文件或工具响应,并检查每个具体值能否传播到敏感操作。优先保留把外部值连到敏感操作、或补上候选路径中未解决链接的证据。
Exploiter Agent
- 实现级漏洞:按代码智能体循环检查相关代码、构造输入、对目标执行,并根据运行时错误修订。
- LLM 中介攻击:选择与目标工作流匹配的初始注入,经攻击者接口执行,记录目标响应和允许的执行轨迹,再用这些信息构造下一次尝试。种子语料覆盖研究助理、代码执行和工作流自动化;每条种子含场景、攻击者目标、候选注入位置和 payload pattern。模型选择匹配工作流的种子并改写,而不是当作固定提示词重放。
- 修订与多注入点:失败后,下一次提示包含先前 payload、目标响应和允许的执行轨迹。外部框架用任务验证器检查目标状态。存在多个外部记录或多轮交互时,可在这些位置放置相互一致的指令,例如较早记录建立身份或线索、较晚记录重复或激活;共享攻击目标保留,各位置的 payload 可分别适配。论文未在正文给出迭代次数上限;AgentDojo 实验对完整系统及全部消融使用 50 次攻击迭代。
成功判定与基准构建
- 判定:端到端成功要求 Analyzer Agent 报告了兼容的候选路径,且 Exploiter Agent 的运行时利用被外部确定性验证器确认。分析恢复计为命中,仅当候选指出基准的真值敏感操作,以及由仓库证据支持的兼容攻击者可控入口;每例最多计一次恢复,无关漏洞单独跟踪。因此 analysis-only 被作者解释为真值攻击路径恢复,不是总体漏洞精确率。
- 实例来源:从 2023–2025 年公开 CVE 和智能体安全问题收集,含 National Vulnerability Database 记录。LLM 辅助过滤后,每个保留实例都对照脆弱代码和运行时人工检查。保留须同时满足安全影响(如命令执行、未授权文件访问、数据外泄或 SSRF)、可运行环境(脆弱版本及依赖可不依赖专有基础设施实例化)和确定性检查。
- 规模:72 个可运行实例、12 个项目。机制包括路径遍历、命令执行、SQL 注入、SSRF、不安全求值,以及 LLM 中介路径。Table 3 中 GPT_Academic 占 22/72(30.6%),其余为 OpenClaw 10、AgentScope 9、LangChain 8、LobeChat 8、LlamaIndex 4、AutoGPT 3,以及 DB-GPT、GPT-Researcher、MetaGPT 各 2,OpenHands 与 RAGFlow 各 1。
论文做了哪些实验?
72 例上 AgentXploit 端到端 59.3%,Codex 38.4%;AgentDojo 上 Exploiter Agent 为 79.2%。
实验设置
- 被测系统:AgentXploit 与 Codex CLI 基线使用同一 gpt-5.1-codex 主干。AgentDojo 上全部受害智能体使用 GPT-4.1,并在同一环境与协议下复现基线。
- 基准:AgentXploit-Bench 为 72 个实例(direct 59、indirect 13),跨 12 个框架。AgentDojo 含四个套件、629 组用户任务与注入任务组合。另有代码变异用的 20 例子集(15 条 direct、5 条 indirect)。
- 模式与基线:analysis-only、带 oracle 漏洞说明的 exploit-only、end-to-end。仓库基线为 Codex CLI,收到相同任务输入、仓库、攻击者接口和成功标准,但不收到隐藏漏洞元数据或 Analyzer Agent 报告。AgentDojo 基线为手工攻击模板和 AgentVigil。
- 指标:主指标为任务级 pass@1,Table 4 报告三次独立采样种子、固定温度下的均值和样本标准差。analysis-only 为真值路径恢复率。AgentDojo 报告攻击成功率。另有范围内候选精确率、WAF 签名检测和良性请求是否仍成功。
- 预算:AgentDojo 对完整系统及全部消融共享 50 次攻击迭代上限。AgentXploit-Bench 的分析预算在正文中称为“配置的分析预算”,具体数值论文未在正文给出。资源对比见 Section 9。
- 攻击质量子集:正式测量前按运行时可用性选定 7 个可运行任务、5 个框架,含 4 条 direct 与 3 条 indirect,作者称这不是代表性隐蔽性基准。
主结果
Table 4 为三次运行的 pass@1 均值(百分比)。AgentXploit 与 Codex 的目标都是基准中的仓库系统,主干同为 gpt-5.1-codex。
表格较宽,可左右滑动
路径(n) Analysis Exploit-only AgentXploit 端到端 Codex 1× Codex matched Direct(59) 74.6±2.9 91.5±1.7 59.3±2.9 40.7±3.4 48.0±2.0 Indirect(13) 59.0±7.7 71.8±4.4 59.0±8.9 28.2±7.7 38.5±4.4 All(72) 71.8±3.2 88.0±0.8 59.3±2.1 38.4±2.9 46.3±1.6 - 作者解读:三次运行平均,AgentXploit 为 59.3%,默认 Codex 为 38.4%,四舍五入前均值差 20.8 个百分点;indirect 差 30.8 个百分点,direct 差 18.6 个百分点。indirect 只有 13 个任务,作者将其视为描述性模式。token 上限对齐后 Codex 为 46.3%,与 AgentXploit 仍差 13.0 个百分点。
- 框架分布:用于框架分解的初始运行中,GPT_Academic 上 AgentXploit 为 19/22(86.4%),Codex 为 14/22(63.6%);在其余 50 例上分别为 48.0% 与 28.0%(正文一处写 AgentXploit 24/50、Codex 14/50)。作者称两边在 GPT_Academic 之外都下降,总体均值掩盖了仓库间差异。
- oracle 与失败阶段:exploit-only 在已知说明下为 88.0%(direct 91.5%,indirect 71.8%),不以前一阶段成功为条件。初始端到端运行的 29 次失败中,20/29(69.0%)是分析未命中;5 次 indirect 失败全部发生在利用之前,该次运行中每条被恢复的 indirect 路径随后都被验证(Table 7:direct 59 例中分析未命中 15、利用失败 9;indirect 13 例中分析未命中 5、利用失败 0)。
AgentDojo 与利用循环消融
- 测了什么:注入点已给定,只测攻击构造。Exploiter Agent 生成注入、观察目标响应和执行轨迹,最多修订 50 轮。
- 结果:Table 6 中 Exploiter Agent 总体 0.792,AgentVigil 0.527,手工攻击 0.415。分套件 Exploiter Agent 为 Banking 0.750、Slack 1.000、Travel 0.754、Workspace 0.742;AgentVigil 为 0.604、0.905、0.233、0.479;手工攻击为 0.326、0.924、0.307、0.308。
- 作者解读:Figure 2 中完整系统与去掉执行轨迹的条件在第 0 轮接近(48.0% 与 46.2%),50 轮后为 79.2% 与 69.1%。替换策划种子后最终降到 49.6%;各位置复用同一 payload 为 74.9%。作者称种子主要决定初始搜索区域的质量,执行轨迹改善后续修订,位置特定 payload 在多步工作流中增益较小。
候选质量、攻击质量与预算
- 候选精确率:人工裁定 OpenHands 仓库的全部 5 个候选:2 个是范围内有效漏洞,1 个是真值路径之外但仍与安全相关的发现,2 个为假阳性。范围内精确率 2/5(40%);计入额外发现则为 3/5(60%)。作者称该诊断只覆盖一个仓库,不应解释为全基准精确率。
- 攻击质量:7 个任务上,Table 5 报告 4 个 payload 触发所测 WAF 规则中的至少一条,3 个未触发;每个任务攻击前后各 3 个良性 API 请求均为 3/3 → 3/3。作者称验证器确认的可利用性不应被解释为隐蔽性,且三次探测不确立一般效用保持。审计中还发现 8 个不匹配真值路径的额外漏洞,跨 4 个项目、5 类(SSRF、命令注入、未授权访问、不安全配置、远程代码执行),不计入恢复率或端到端成功率。
- 代码变异与停止行为:20 例子集上,分析恢复从 71.7±5.8% 降到 68.3±2.9%(Table 8),作者称下降 3.4 个百分点。60 次配对任务运行中,变异前后都恢复 39(65.0%),仅变异前 4(6.7%),仅变异后 2(3.3%),两者都未恢复 15(25.0%)(Table 9)。216 次默认预算 Codex 运行中,验证器确认成功 83(38.4%),自行宣布完成但未成功 92(42.6%),预算耗尽 29(13.4%),工具或运行时错误 12(5.6%)(Table 10)。
其他消融与分析
- Codex 从默认上限提到 4× token 上限,pass@1 从 38.4% 升至 45.8%;每任务上限对齐到 AgentXploit 时为 46.3%,AgentXploit 仍为 59.3%,差 13.0 个百分点(Section 9.3)。
- 成功的默认 Codex 运行均值/中位 token 为 36k/34k、模型调用 7.5/7;自行宣布失败为 22k/20k 与 4.5/4;预算耗尽为 40k/40k、176/180 秒;工具或运行时错误为 10k/7k、25/16 秒(Table 11)。92 次自行宣布完成中 88 次仍有未用预算,未用份额中位数 42%,61 次保留超过上限的 40%。
- 案例:AutoGPT v0.4.2 的 clone_repository 会把配置的 GitHub 用户名和 API key 写入 URL;作者称 Codex 打开相关 Git 工具后转到图像生成模块,最终报告未把 LLM 控制的主机连到凭据重写。另一例只校验空白分隔的第一个 token,却以 shell=True 执行整条命令;Analyzer Agent 记成两条不同候选路径。
有什么可以进一步探索的点?
作者指出验证器只覆盖一种结果、不能声称无污染,且更大结构重构和全面攻击质量评测仍留作后续。
作者指出的局限与后续方向
- 精确率外推:OpenHands 上五个候选的裁定只覆盖一个仓库,作者写明不应解释为全基准精确率;全局估计需要裁定所有仓库中每个非目标候选(Section 6.1.1)。
- 攻击质量:七任务诊断按运行时可用性预先选定,作者称为范围有限的诊断而不是代表性隐蔽性基准;三次良性探测覆盖的功能有限,不确立一般效用保持。作者把全面攻击质量评测留作后续工作(Section 6.1.4)。
- 验证器覆盖:每例只编码一种安全结果。程序可能暴露若干等价利用路径或验证器观察不到的其他安全后果。作者据此把主指标解释为真值攻击路径的恢复与验证,而不是完整漏洞召回(Section 10.1)。
- 数据污染:公开漏洞可能已出现在预训练数据中。作者称无法确定托管主干的训练语料,因此不声称无污染评测;两端使用同一主干和公开仓库,记忆到的漏洞知识对两者都可用,尽管脚手架利用方式可能不同(Section 10.2)。
- 代码变异范围:重命名、去注释和移动文件后的恢复下降有限,作者写明更大的结构重构仍未测试(Section 9.1)。
- 发布范围:成功攻击的可复用 payload 文本按负责任发布流程排除在公开稿件之外(Section 8)。
实验覆盖范围
- 主基准:AgentXploit-Bench 为 12 个开源项目、72 个实例,direct 59、indirect 13;每条件三次运行、固定温度,Table 4 报告均值和样本标准差(Section 6.1)。
- 第二基准:AgentDojo 为四个套件、629 组用户与注入任务,受害智能体为 GPT-4.1,攻击迭代上限 50;比较手工模板、AgentVigil 和 Exploiter Agent(Section 6.2、Table 6)。
- 诊断:analysis-only 与 oracle exploit-only 分开报告;失败阶段按初始端到端运行的 29 次失败归类(Table 7);候选质量人工裁定限于 OpenHands 的 5 个候选;WAF 与效用检查为 5 个框架上的 7 个任务(Section 6.1.4)。
- 预算与变异:Codex 的默认、4× 和与 AgentXploit 对齐的 token 上限均有 pass@1;停止原因覆盖 216 次默认预算运行。代码变异子集为 20 例、60 次配对任务运行,变换保留依赖、任务说明、攻击者接口、脆弱数据流、运行时行为和验证器(Section 9)。
- 信息边界:analysis-only 与 end-to-end 的任务指令排除 CVE 或 issue 标识、漏洞描述、目标函数、exploit 字符串、补丁讨论和目标特定成功条件;论文写明仍不声称评估无污染(Section 5、Section 10.2)。
总结一下论文的主要内容
AgentXploit 把仓库路径发现和运行时利用分开,并在隐藏漏洞说明的 72 例基准上比较端到端审计。
AgentXploit 是面向 AI 智能体的授权白盒部署前审计系统,把“从仓库找出可行攻击路径”和“在隔离运行时把路径变成可验证攻击”分成两个角色。
- 问题:对抗内容可能改变工具使用,周边软件也可能有路径遍历或命令注入。作者认为现有红队多在注入点已知时优化输入,而仓库审计还要判断攻击者可控值能否跨组件到达敏感操作。成功必须走任务定义的攻击者接口,并由外部确定性验证器确认。
- 方法:Analyzer Agent 用搜索、依赖、符号、AST 和 LSP 工具维护调查队列与上下文外证据报告,记录带代码位置和前置条件的候选路径。Exploiter Agent 不重做全库搜索;实现级漏洞按执行错误修订,LLM 中介攻击从匹配工作流的种子出发,并利用目标响应与允许的执行轨迹迭代。多位置时可放置相互一致的指令。
- 基准:AgentXploit-Bench 从 2023–2025 公开 CVE 与安全问题整理出 12 个项目、72 个可复现实例,端到端模式隐藏漏洞元数据。另用注入点已知的 AgentDojo 单独测利用阶段。
- 结果:三次运行中,AgentXploit 端到端 pass@1 为 59.3%,默认 Codex 为 38.4%,token 预算对齐后 Codex 为 46.3%(Table 4)。路径恢复为 71.8%,oracle 说明下利用为 88.0%。初始运行 29 次失败里 20 次是分析未命中,且全部 indirect 失败都在发现阶段。AgentDojo 上 Exploiter Agent 为 79.2%,AgentVigil 为 52.7%,手工攻击为 41.5%(Table 6)。
- 作者的结论:作者认为仓库发现与运行时利用是端到端智能体安全审计中的不同挑战;验证器确认的成功衡量的是指定安全结果,并不等于载荷隐蔽或一般功能保持。主指标应理解为真值攻击路径的恢复与验证。