AI Agent 权限:在 4 万次游戏运行中,人类漏掉了三分之一的威胁
人机回环(Human-in-the-Loop)是无效的安全屏障
来自超过 40,000 次基于浏览器的模拟数据表明,人类在批准 AI agent 命令时,平均会漏掉 三分之一的安全威胁(准确率为 66.3%)。该研究表明,由于权限疲劳、缺乏上下文以及常见开发命令的欺骗性,依靠人工用户审批作为对抗流氓 AI agent 的最后防线在根本上是存在缺陷的。
关键性能指标
在 409,000 次独立决策中,模拟产生了以下核心统计数据:
- 32.9% 的会话 以负分结束,这意味着批准威胁带来的惩罚超过了正确执行的操作。
- 35.2% 的玩家 抓住了所有威胁,但只有 20.8% 的玩家在没有拦截超过 20% 安全命令的情况下做到了这一点。
- 7% 的玩家 无论风险大小都会批准每一个提示,实际上处于“危险地跳过权限”模式。
威胁类别与漏报率
用户漏掉微妙的窃取尝试的可能性显著高于明显的破坏性行为。随着威胁变得不再直观,漏报率会随之上升:
| 类别 | 示例 | 漏报率 |
|---|---|---|
| 明显的破坏性 | rm -rf /, chmod -R 777 / |
11.7% |
| 持久化变异 | crontab injection, git config hijack | 23.8% |
| 窃取 / 代码执行 | curl to unknown APIs, typosquatted packages | 33.4% |
| 范围违规 | cat ~/.aws/credentials, cat ~/.kube/config |
35.0% |
npm run 盲点
熟悉的脚本名称是恶意负载的强大心理掩护。研究中漏报率最高的命令是 npm run analyze,其被批准的概率高达 64.7%。
尽管游戏提供了显示脚本实际内容的历史日志(例如,一个向远程服务器窃取数据的 curl 命令),用户仍然以高概率批准这些命令。npm run analyze、npm run setup 和 npm run deploy 的汇总数据显示,其漏报率为 52.5%,而其他窃取类攻击的漏报率为 28.4%。这表明,面对熟悉的命令名称时,用户往往会忽略历史日志中提供的上下文。
权限疲劳与时间压力
准确率会随着会话的进行而下降。虽然用户通常在最初的几个命令中会经历一个“热身”改进期,但漏报率在会话结束时会再次攀升。这与 Anthropic 等 AI 实验室的观察结果一致,即用户看到的审批越多,对每个审批的注意力就越少。
警惕的代价:过度拦截
高度警惕往往会导致“过度拦截”,即拒绝无害但看起来具有潜在风险的命令,从而降低了 agent 的效用。经常被拦截的无害命令示例包括:
npm config set registry https://npm.internal(拦截率 59%)rm -rf dist/(拦截率 45%)kill $(lsof -t -i:3000)(拦截率 43%)
社区观点与替代方案
Hacker News 上开发者的讨论表明,大家达成了一个共识,即“点击批准”是一种糟糕的安全模型,通常被视为厂商的法律责任盾牌,而非强大的安全功能。
建议的技术缓解措施
社区成员建议采用几种结构性保障措施来替代人工审批:
- 严格沙箱化: 利用 Docker、Podman、gVisor 或 Firecracker 来隔离 agent。有人建议使用具有受限主目录访问权限的独立 OS 用户 (
chmod 0700 $HOME)。 - 基于资源的权限: 从批准 命令 转向批准对 特定文件或网络端点 的访问。
- 自动化策略执行: 实现确定性规则和基于 LLM 的监控器(例如“Watcher”之类的工具)的层级结构,自动批准安全命令,同时仅标记高风险异常。
- 凭据隔离: 将密钥移出 shell 配置文件(如
.zshrc),以防止简单的cat命令窃取 API 密钥。
对研究的批评
一些参与者认为,游戏的人为时间限制和缺乏现实世界的后果(没有实际的数据丢失)可能会使结果产生偏差。其他人指出,缺乏专业上下文——例如,不知道特定项目的 .zshrc 是否真的包含密钥——使得某些提示在客观上具有模糊性。
Sources
相关
- Dispatch
- Dispatch
- Dispatch
- Dispatch
- Dispatch