Uber 开源 ADR:企业级 AI Agent 安全检测系统的架构与实战

Uber ADR 架构图

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 CodeJSONL (~/.claude/projects/)macOS, Linux
Cursor IDESQLite (state.vscdb)macOS, Linux
Cline (Claude Dev)JSON 任务文件macOS, Linux
Claude Desktop Agent ModeJSONL 审计日志macOS
OpenAI Codex CLIJSONL (~/.codex/sessions/)macOS, Linux
Warp TerminalSQLite (warp.sqlite)macOS

Sensor 每小时运行一次,平均每次扫描仅需 0.182 秒,采集四个维度的数据:用户原始提示词(揭示意图)、Agent 推理过程(展示决策链路)、MCP 工具调用序列(记录实际执行的操作)以及环境上下文(MCP 服务器配置和已安装的包)。这四个维度合在一起,构成了从意图到执行的完整因果链。

Sensor 可以通过 PyPI 安装:

bash
pip install adr-sensor

Python API 提供了直接操作遥测事件的能力:

python
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 种:

基准使用 MCPMCP 服务器数任务数威胁数覆盖技术
AgentDojo70974/17
AgentSafetyBench-170220004/17
AgentHarm-1041106/17
MCP-Artifact111993/17
RAS-Eval1875803/17
ADR-Bench13330272917/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误报数每任务成本延迟
ADR1.0000.6670.8000$0.02418.5s
ALRPHFS0.3330.4050.36634$0.0019.2s
GuardAgent0.2310.2140.22230$0.0129.4s
LlamaFirewall0.1670.1900.17840$0.45993.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 服务器。

bash
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.py

ADR Sensor 支持通过 PyPI 独立安装,可以作为企业安全监控的遥测采集组件集成到现有的 SIEM 管道中。完整的复现流程见仓库的 docs/REPRODUCIBILITY.md