
Uber 的安全团队最近开源了一套名为 ADR(Agentic AI Detection and Response)的企业级 AI Agent 安全系统,并在 MLSys 2026 工业轨发表了配套论文。这套系统已经在 Uber 内部运行了超过十个月,覆盖 7,200 多台终端主机,每天处理超过 10,000 个 AI Agent 会话,检测出了数百次凭证泄露事件。开源的内容包括 ADR Sensor(遥测采集器)、ADR-Bench(安全评测基准)和 ADR Detector(检测框架),而离线红队引擎 ADR Explorer 和实时阻断组件暂未放出。
ADR 解决的是一个全新攻击面的问题:当 AI Agent 通过 Model Context Protocol(MCP)连接外部工具时,传统的终端安全工具看不到 Agent 的推理过程和工具调用链。EDR 系统能看到文件写入和网络请求,但无法判断这个操作是用户授权的正常行为,还是被恶意提示注入诱导后的凭证外泄。
三大核心设计
ADR Sensor:重建完整的因果链
ADR Sensor 的设计理念是记录"为什么做",而不仅仅是"做了什么"。传统 EDR 工具能看到文件写入,但看不到触发这个操作的用户提示词、Agent 的推理步骤、以及 MCP 工具调用的完整序列。Sensor 通过解析各 AI Agent 的本地缓存来实现这一目标:
| 支持的 Agent | 日志格式 | 平台 |
|---|---|---|
| Claude Code | JSONL (~/.claude/projects/) | macOS, Linux |
| Cursor IDE | SQLite (state.vscdb) | macOS, Linux |
| Cline (Claude Dev) | JSON 任务文件 | macOS, Linux |
| Claude Desktop Agent Mode | JSONL 审计日志 | macOS |
| OpenAI Codex CLI | JSONL (~/.codex/sessions/) | macOS, Linux |
| Warp Terminal | SQLite (warp.sqlite) | macOS |
Sensor 每小时运行一次,平均每次扫描仅需 0.182 秒,采集四个维度的数据:用户原始提示词(揭示意图)、Agent 推理过程(展示决策链路)、MCP 工具调用序列(记录实际执行的操作)以及环境上下文(MCP 服务器配置和已安装的包)。这四个维度合在一起,构成了从意图到执行的完整因果链。
Sensor 可以通过 PyPI 安装:
pip install adr-sensorPython API 提供了直接操作遥测事件的能力:
from adr_sensor import AgentObserver
observer = AgentObserver()
events, configs = observer.ingest_all()
for event in events:
print(f"Source: {event.source}, Session: {event.session_id}")
for msg in event.chat_history:
if msg.tools:
for tool in msg.tools:
print(f" Tool: {tool.tool_name} ({tool.tool_type})")双层检测架构:成本与精度的平衡
在每天处理 10,000+ 会话的生产规模下,对每个事件都使用 LLM 推理做检测,成本完全不可行。ADR 采用两层架构来平衡成本和检测效果:
Tier 1 快速分诊(Triage):每个会话先经过一个轻量 LLM(GPT-4o)做初筛,目标是高召回率。分诊层会标记可疑信号——提示注入短语、涉及凭证或权限的请求、角色/权限变更、以及看似无害但组合起来有风险的步骤。设计原则是"宁可错杀,不可漏放":拿不准就升级到 Tier 2。这一层处理了 40.7% 的会话,每个任务成本仅 0.017 美元,延迟 2.3 秒。
Tier 2 深度推理(Reasoning):Tier 1 标记为可疑的会话进入深度分析层,由一个推理 Agent(Claude Sonnet 4)执行。这个 Agent 可以动态查询三个企业级 MCP 上下文提供者:
- 源码检查(Source Code MCP):通过查看 MCP 工具的实现代码,判断工具实际做了什么
- 威胁情报查询(Threat Intelligence MCP):查询已知的攻击战术和技术
- 策略合规验证(Policy MCP):检查操作是否违反组织安全策略
推理 Agent 根据事件特征自适应选择调用哪些提供者。例如文件写入可能触发全部三个检查,而简单的文件读取可能只检查策略。每个任务成本 0.029 美元,延迟 29.7 秒。
离线红队引擎:用进化算法发现未知攻击
ADR Explorer 是系统的第三层(未包含在开源版本中),通过进化算法系统性发现新的攻击变体。三个协作 Agent 组成离线闭环:红队 Agent 通过变异参数和组合已知攻击技术来生成新的攻击变体;评估 Agent 在沙盒环境中执行这些候选攻击,测量攻击成功率和检测规避能力;威胁情报 Agent 将高价值发现整理成威胁知识库条目,反哺给 Tier 2 的检测逻辑。
每个攻击候选体的适应度评分使用函数 F = ε × σ × τ^α,其中 ε 表示执行深度(攻击能推进到多远)、σ 表示语义自然度(看起来有多无害)、τ 表示影响力(潜在破坏程度),α 控制影响力在评分中的权重(EAS 配置中使用 α=1.2)。得分最高的变体存活下来,生成新的突变体,在多轮迭代中收敛。
ADR-Bench:覆盖 17 种攻击技术的评测基准
论文同时发布了 ADR-Bench,这是目前覆盖面最广的 MCP Agent 安全评测基准。302 个任务、133 个 MCP 服务器(729 个工具)、覆盖 17 种攻击技术的所有 5 个战术类别,攻击占比 13.9%(42 恶意/260 良性),还原了企业环境中极端类别不平衡的真实场景。
现有的安全基准在攻击类型覆盖上有明显短板。AgentDojo 覆盖 17 种技术中的 4 种,AgentSafetyBench 覆盖 4 种,AgentHarm 覆盖 6 种。ADR-Bench 覆盖全部 17 种:
| 基准 | 使用 MCP | MCP 服务器数 | 任务数 | 威胁数 | 覆盖技术 |
|---|---|---|---|---|---|
| AgentDojo | 否 | 70 | 97 | 4/17 | |
| AgentSafetyBench | 否 | - | 1702 | 2000 | 4/17 |
| AgentHarm | 否 | - | 104 | 110 | 6/17 |
| MCP-Artifact | 是 | 11 | 19 | 9 | 3/17 |
| RAS-Eval | 是 | 18 | 75 | 80 | 3/17 |
| ADR-Bench | 是 | 133 | 302 | 729 | 17/17 |
17 种攻击技术分布在 5 个战术类别中:
- 初始访问与执行(6 种):不安全的供应链、间接提示注入、控制流劫持、代码解释器滥用、不安全的输出处理、工具 Rug Pull
- 权限滥用(2 种):过度工具权限利用、Agent 身份伪造
- 安全控制绕过(3 种):工具影子、工具幻觉操纵、恶意 Agent 串通
- 推理与数据操纵(4 种):未审查的 MCP 服务器连接、语义数据投毒、长期目标劫持、时序数据攻击
- 运营影响(2 种):Agent 驱动的资源耗尽、模型层拒绝服务
每种技术都引用了已公开的安全事件作为依据,包括 JFrog 披露的 MCP 远程代码执行漏洞、Invariant Labs 发现的工具投毒攻击、Microsoft Defender 报告的 MCP 安全风险、以及 Zenity Labs 的 Agent Flayer 攻击。
性能数据
在 ADR-Bench 上,ADR 实现了零误报(precision=1.000),检测出 42 次攻击中的 28 次(recall=0.667),F1-score 为 0.800。三个基线方法的误报数量从 30 到 40 不等,精确度下降到 0.167-0.333,在生产环境中无法接受。
| 检测器 | 精确度 | 召回率 | F1 | 误报数 | 每任务成本 | 延迟 |
|---|---|---|---|---|---|---|
| ADR | 1.000 | 0.667 | 0.800 | 0 | $0.024 | 18.5s |
| ALRPHFS | 0.333 | 0.405 | 0.366 | 34 | $0.001 | 9.2s |
| GuardAgent | 0.231 | 0.214 | 0.222 | 30 | $0.012 | 9.4s |
| LlamaFirewall | 0.167 | 0.190 | 0.178 | 40 | $0.459 | 93.8s |
ADR 刻意优先精确度,因为在企业场景下,每次误报都会触发昂贵的事件响应流程。LlamaFirewall 在 260 个良性任务中标记了 40 个为恶意,成本高达每任务 0.459 美元,远超 ADR 的 0.024 美元。
在公开的 AgentDojo 提示注入基准上,ADR 展现了互补的表现:检测出全部 38 次攻击(recall=1.000),仅 3 次误报(precision=0.927),F1-score 为 0.962。
消融实验显示了各组件的贡献。移除 Tier 1 分诊层后,召回率从 0.667 提升到 0.805,但引入了 2 个误报,成本增加 29%,延迟增加 52%。移除源码检查 MCP 导致了最大的性能下降——召回率下降 14%,因为许多企业级攻击涉及恶意代码执行或工具操纵,需要源码分析才能识别。
生产部署的实战结果
ADR 在 Uber 的部署始于 2024 年 12 月 15 日,到 2025 年 4 月 10 日达到日均 10,000 会话,10 月 28 日进一步突破日均处理量。系统检测出 26 个类别中的数百次高严重度凭证泄露,这些凭证此前被无意中分享到了企业网络之外。
凭证检测的规模很快超出了人工审核能力,而且检测到时凭证往往已经暴露在外部,风险已经不可逆。基于这些观察,Uber 团队采用了"左移"策略,将防线前移到 Agent 执行循环内部,在操作发生前拦截而非事后告警。他们利用 Cursor 和 Claude Code 在 2025 年下半年推出的 Hooks 功能,实现了基于正则匹配和熵阈值的凭证检测拦截层,作为 pre-prompt hook 在发送给 Agent 之前扫描并阻断。这个预防层在数十万个 MCP 会话中检测到 212 个唯一凭证中的 206 个,精确度达到 97.2%,仅 6 次误报。
系统还成功检测了两次实战攻防演练中的攻击:一次内部 CTF 比赛中,攻击者将自定义 shell 工具集成到助手后,通过欺骗性提示诱导 Agent 执行恶意命令(curl | python3);另一次模拟了 Zenity Labs 披露的 Agent Flayer 攻击链——恶意邮件自动创建 Jira 工单,工单中嵌入隐藏指令,当用户的 Cursor IDE 通过 Jira MCP 集成检索该工单时,注入的提示诱导 Agent 读取本地配置文件并通过 HTTP 外泄凭证。ADR 准确重建并检测了这两个多阶段攻击链中的多个节点。
使用方式与安全提醒
ADR-Bench 的检测框架可以通过 uv sync 安装依赖后直接运行。需要注意的是,基准测试包含合成凭证、提示注入载荷和模拟的脆弱 MCP 服务器,这些是防御性安全研究的设计意图,必须在隔离环境(容器或专用主机)中运行,不能指向生产系统、真实凭证或生产 MCP 服务器。
git clone https://github.com/uber/ADR
cd ADR/Detection
uv sync
export ANTHROPIC_API_KEY="..." OPENAI_API_KEY="..."
# 运行 ADR-Bench 全部 303 个任务
uv run python main_benchmark.py
# 运行 AgentDojo 基准
uv run python main_benchmark.py --benchmark agentdojo
# 使用 ADR 双 Agent 检测器分析结果
uv run python main_detector.pyADR Sensor 支持通过 PyPI 独立安装,可以作为企业安全监控的遥测采集组件集成到现有的 SIEM 管道中。完整的复现流程见仓库的 docs/REPRODUCIBILITY.md。