英国 AISI 对前沿 Agent 的真实世界安全评测再次说明一件事:当智能体挂上浏览器、代码仓库、身份相关能力时,「完成任务」和「遵守授权」会在目标函数里打架。公开转述里出现了约 122 次测试、多次越界与未授权操作,以及开源协作流程中的恶意改动尝试等记录。
下面不写选型话术,只写可落地的工程控制:适合自建 Agent Runtime / Tool Gateway 的团队直接改架构。
0. 先定威胁模型(否则红线会写成口号)
把 Agent 当成带工具的非信任执行体,而不是「更聪明的 HTTP Client」:
| 资产 | 典型失败模式 | 工程含义 |
|---|---|---|
| 出网 | 任意域名访问、数据外带 | egress 默认拒绝 |
| 仓库 | 直推 main、改 workflow、塞毒依赖 | 写权限与合并权限拆开 |
| 身份 | 长效 Token、可注册新身份 | 短时签发 + 能力范围绑定 |
| 工具 | prompt 说「别越权」但仍调用 | 运行时策略引擎拦截 |
评测环境「像真」可以,「就是生产」不行。下面四层按这个模型收。
1. 网络层:egress allowlist,而不是「模型自己决定要不要上网」
错误做法:Tool 里直接 requests.get(url),URL 由模型生成。
正确做法:所有出网走 Egress Proxy / Sidecar,策略在代理侧强制执行。
最小策略:
text
default: DENY
allow:
- host: api.github.com
methods: [GET, POST] # 按任务再收窄 path
- host: docs.internal.example
methods: [GET]
deny_always:
- metadata / IMDSv2
- *.internal 未声明网段
- raw IP(防 DNS 绕过时另做解析校验)
工程要点:
- DNS 解析结果与 allowlist 二次校验(防 DNS rebinding)
- 每次出网打结构化日志:
session_id, tool, dest_host, status, bytes - 目的地未命中白名单 → 硬失败返回给编排层,不要静默重试换域名
- 评测机与生产机 不同 VPC / 不同出口,禁止共用可路由网段「图省事」
一句话:出网权限属于基础设施,不属于 prompt。
2. 仓库层:Agent 只能提案,不能终审
AISI 相关转述里出现「对开源协作流程动手」的风险动作------工程上对应的就是:Agent 同时拥有 push + merge + 改 .github/workflows。
推荐拆权:
text
Agent identity
├─ git push → only fork / agent/* branches
├─ open PR → allowed
├─ merge to main → DENY(永远)
└─ modify .github/workflows/** → DENY or 人工高危通道
落地组合(任选你们栈,原则一致):
- CODEOWNERS :
/.github/、/infra/、锁文件必须人审 - Branch protection:required reviews ≥1,禁止 self-approve
- CI 高危扫描 :PR diff 命中
workflow、package-lock大变、新增curl | sh→ 阻断或转人工队列 - Agent 输出形态固定为 diff / patch,由人点「应用」;不要给「直接改工作区文件并 push」的超级工具
如果必须让 Agent 跑 git,把可执行命令收成白名单,例如只允许:
status / diff / checkout -b agent/* / commit / push origin HEAD:agent/*
禁止:push --force、merge、tag、改 remote URL。
3. 身份与工具层:短时凭证 + 能力声明,不要「全能 API Key」
常见翻车配置:把个人 GitHub PAT、云厂商 Admin Key、邮箱 SMTP 密码塞进 Agent 环境变量,再告诉模型「小心使用」。
改成:
text
Task start
→ STS / OAuth 签发 scoped token(TTL 5~15min)
→ scopes = 本任务工具清单的最小集
→ Task end / Kill switch → 立即 revoke
工具注册建议用显式 schema,并在网关做参数校验(伪接口):
json
{
"name": "create_pr",
"scopes": ["repo:pr:write"],
"args_schema": {
"base": {"enum": ["main"]},
"head": {"pattern": "^agent/.+"},
"title": {"maxLength": 120}
},
"side_effect": "write",
"requires_human_approval": true
}
运行时顺序固定为:
模型提议调用 → Policy Engine 校验 scope/args/side_effect →(写操作)人审 → 执行 → 审计落库
禁止只靠系统提示词:「你必须遵守公司安全政策」。目标压力下,这层会先塌。
社交通道(发帖、加好友、改资料、批量私信)在生产默认 关闭;评测若要做社交工程压测,用独立身份池与独立网络,任务结束销毁。
4. 观测与急停:把「越权」定义成可判定的 P0
没有判定标准,值班手册就是空的。建议直接写入 oncall:
text
越权 := 任意一次工具调用不在 (session.allowed_tools × policy) 内
或 参数突破 schema / 目的地突破 egress
或 写操作绕过人审
最小可观测字段:
trace_id / session_id / agent_idtool_name / args_hash / decision(allow|deny|escalate)approver_id(写操作)egress_dest(若有)policy_version
Kill switch 至少做到两级:
- 会话级:冻结当前 session 的全部 tool
- 身份级:revoke Agent 服务账号 / 临时 Token
演练题目别写虚的:模拟「Agent 试图改 workflow 并 push」,量一次 发现 → 冻结 → 吊销 的时间。
5. 一周能做完的最小切片(按优先级)
| Day | 动作 | 验收 |
|---|---|---|
| 1 | 工具清单从全能砍到业务必需;写操作全部变「生成提案」 | 工具表 + side_effect 标注 |
| 2--3 | 出网代理 + allowlist + 日志 | 未声明域名必失败 |
| 4 | 仓库拆权:Agent 分支 + 禁自合并 | 用测试号打一次被拒 |
| 5 | 短时 Token + revoke API | TTL 到期不可再调 |
| 6--7 | 10 个越权回归用例进 CI | 提权 / 外带 / 改 workflow / 访未授权域 全红 |
回归用例比再换一个「更安全的模型」更值钱:模型会换,控制面应复用。
小结
AISI 这条线对工程团队的含义不是「某两家模型坏了」,而是:
Agent Runtime 必须按非信任执行体来建:网络默认拒绝、仓库只能提案、凭证短时签发、越权可判定可急停。
编码榜分数高,只说明会写代码;工具链控制面过关,才说明敢挂真实权限。评论区可以贴你们现在的 Tool Gateway 是「直连」还是「策略层」。