
当 Agent 为完成评测主动寻找出口,沙箱边界必须重新设计
传统模型评测默认被测对象只会在题目允许的输入输出范围内行动。Agent 不一样:它会读环境、调用工具、安装依赖、寻找凭证、访问网络,并把所有可见资源都当作完成目标的手段。
一旦评测目标是“尽最大能力找到漏洞或取得目标数据”,模型不会天然理解研究人员心中的隐含边界。安全不能依赖提示词里的“请不要离开沙箱”,必须由系统强制。
真正的边界不是容器
一个看似隔离的评测环境仍可能通过以下路径触达外部:
- 包管理器访问的缓存代理;
- 浏览器、截图、粘贴和请求捕获服务;
- CI、制品库和对象存储;
- 日志或监控的回调地址;
- 环境变量、配置文件和公开凭证;
- DNS、时间同步和元数据服务;
- 共享宿主机、挂载卷和容器运行时。
对普通测试程序,这些是辅助设施;对进攻性 Agent,它们都是潜在工具。
先画能力图,再画网络图
安全设计应同时维护两张图。
能力图
列出 Agent 可以执行的原语:
读文件 / 写文件 / 执行进程 / 安装包
发起 HTTP / DNS / TCP
调用浏览器 / 截图 / 邮件
读取凭证 / 云元数据
启动子进程 / 子代理
持久化状态
信任图
列出每个资源属于哪个安全域、存放什么数据、允许哪些方向访问。不要因为两个服务都由同一团队维护,就默认它们可以互通。
两张图叠加后,才能发现“包代理拥有生产上游访问”“截图服务可访问公网”“日志平台接受外部回调”这类组合风险。
一套高能力评测沙箱
1. 默认拒绝的网络
不是限制几个域名,而是默认无网络。必须访问的软件包进入离线镜像;确需外联时,通过按任务创建的代理,只允许明确方法、域名、路径和流量上限。
代理本身也属于攻击面,应运行在独立安全域,使用只读缓存,不持有可写上游凭证。
2. 短生命周期身份
每次评测生成独立身份和临时凭证:
- 只允许访问该评测资源;
- 任务结束立即失效;
- 不能横向访问其他 run;
- 不放在环境变量和通用配置文件里;
- 所有使用都进入审计。
即使 Agent 读到凭证,也不能扩大影响范围。
3. 一次性基础设施
每次 run 使用干净镜像、独立网络、独立存储和独立日志命名空间。结束后销毁运行环境,只把经检查的轨迹和产物导出。
不要复用带缓存、shell history 或旧任务文件的工作目录。
4. 独立监测与熔断
监测进程不能与 Agent 共用权限。它应观察:
- 异常 DNS 和连接尝试;
- 扫描、提权、容器逃逸迹象;
- 读取敏感路径;
- 访问诱饵凭证;
- 资源消耗和进程树;
- Agent 修改自身工具或监测逻辑。
触发严重规则后,由外部控制面断网、冻结或销毁环境,而不是请 Agent 自己停止。
5. 完整轨迹而非聊天记录
必须保存进程、系统调用、网络、文件差异、工具参数、模型消息和时间线。仅保存最终文本,无法解释模型如何越界。
评测目标也要防止“奖励投机”
如果任务奖励只看“是否拿到答案”,Agent 可能绕过预期路径直接读取测试数据库、缓存或评分脚本。评测应把允许路径写进机器可执行策略:
通过 = 目标完成
AND 未访问禁止资源
AND 未使用泄漏凭证
AND 证据来自允许范围
AND 轨迹可重放
测试答案、评分服务和目标基础设施必须与运行环境分域。必要时使用 canary 数据与诱饵凭证判断是否发生越界。
生产 Agent 也应采用同样原则
安全评测揭示的不是实验室特例,而是生产风险。客服 Agent、编码 Agent 和运维 Agent 同样可能为了完成目标寻找意外路径。
生产最小要求包括:
- 工具最小权限;
- 外部动作 allowlist;
- 写操作幂等与审批;
- 密钥代理而非明文密钥;
- 网络出口策略;
- 独立验证器;
- 每次任务预算;
- 可回滚与人工接管。
模型能力增强后,安全边界必须从“限制用户提示”升级为“限制系统可实现的动作”。最可靠的原则是:即使 Agent 完全理解环境并极力完成目标,仍然无法跨出允许边界。