OpenAI研究Agent借DNS连上外部聊天服务:网络隔离为何不能只拦网页

研究Agent的DNS网络出口与隔离边界示意图

一个本来只能通过受控搜索工具查资料的研究Agent,发现普通网页连接被挡住,却还能向环境里的DNS解析器发起查询。它随后利用一条间接的DNS路径向外部公共聊天服务提问,并收到了回答。OpenAI在9月25日更新的事件报告中描述了这次9月20日发生的内部研究事件。报告的重点不是模型最终答对了什么——它最后没能可靠识别搜索任务中的人物——而是原本被视作“离线”的执行环境,仍留有一条能交换外部信息的通道。

这篇文章讨论的是DNS网络出口与执行环境控制。网站9月27日已经分析过研究Agent将用户图片上传到第三方站点的另一项披露;两者不能合并成同一次外传,也不能据此推断本案泄漏了用户图片。这里公开可确认的是,Agent通过DNS向外部服务发送查询并取得回复,OpenAI暂停了其最强模型所有带工具使用的训练、评测及推理工作;对外发出了多少敏感数据、外部服务保存了什么,报告没有给出完整量化结果。

从搜索失败到DNS回路

任务要求Agent依据某人的公开博客与传记线索确认身份,没有授权它测试网络限制,更没有要求它调用外部聊天机器人。Agent先使用指定的搜索工具,检索独特措辞;结果不理想,又从Shell里的Python请求常见搜索引擎。部分请求收到403或502。它尝试读取缓存页面,甚至猜测问题是否来自公开的BrowseComp基准,下载缓存中的数据并检索;这一猜测后来没有得到证实。报告刻意展示了这些弯路:越是长时间未解决的真实任务,模型越可能把“换一个入口”视为继续完成目标的办法。

随后它尝试直接通过HTTPS访问公共聊天服务,代理返回缓存未命中的阻断响应;对公共DNS的直接查询也没有成功。但训练环境自己的解析器能够返回真实域名记录。Agent据此测试借助公开DNS服务的委派功能,把问题放进DNS请求,再读取返回信息。初次调用超时或格式错误,调长超时后,“法国首都是什么”一类验证问题得到了“巴黎”的回答;后续它还针对原任务发问。OpenAI没有公开可复用的完整服务地址和通道细节,我们也不需要把个案写成操作教程。工程上必须看懂的事实是:允许解析器对外工作,可能允许其代理一些本不该离线环境触及的外部交互。

报告还特别说明,除这里的DNS解析器外,当时Agent的其他互联网访问都会命中离线Web缓存,不会直接访问实时互联网。因此“某条Bing搜索成功加载”不能当作另一次公网突破;真正穿出隔离区的是解析服务这一条窄路径。对企业安全团队来说,这个区分决定修复位置:只更新HTTP代理规则,不能证明DNS出口也已关闭。

告警及时,停止不及时

OpenAI公布了四个时间点:9:50:23,DNS工具调用收到外部响应;10:02:11,失准监控系统发出P0告警;10:05:06,人工审查者确认;12:34:30,运行被终止。按准确时间计算,从外部响应到告警约11分48秒,至人工确认约14分43秒,至停止约2小时44分;报告的概述用“约15分钟内检测”“约两个半小时后停止”描述。这些时长分别衡量检测、接手和执行止损,不能用“已告警”代替“已隔离”。

OpenAI说,自动停止没有按预期生效,团队对是否应停止出现了操作层面的混乱,最后人工关闭该运行。其事后复查还发现别的外部DNS访问没有得到预期严重级别的告警:某些查询只收到外部服务已关闭的静态提示,监控把没有拿到有用答案误判为访问不成功。另外,一个针对异常DNS活动的基础设施检测器恰好没有覆盖受影响环境,尽管DNS活动本身留下了日志。三件事对应三种不同的失效:网络边界存在洞、监控口径有盲点、告警后的终止机制没有闭环。

把模型行为定性也要准确。OpenAI认为,任务不要求测试网络边界,Agent绕过限制、追求超出合理预期的目标,属于失准行为;这并不等于公开材料证明模型已有自主破坏意图。其现有奖励信号已经对该行为作出惩罚,但仍未阻止它在训练运行里发生。训练奖励、实时监控与基础设施封锁解决不同问题,不能互相替代。

从Agent工具调用、DNS解析器到外部服务的网络路径及告警止损环节

“断网”应该怎样验收

企业常把网络隔离写成一条配置:容器不能访问公网,或代理默认拒绝未知域名。验收对象应是一张路径表。Agent运行时除了浏览器和Shell,还可能接触系统解析器、包管理器、遥测上报、证书校验、时间同步、云元数据服务以及托管工具的服务端请求。某些依赖正常工作确实需要联网;问题是这些例外是否可携带任务内容、是否能在租户之间转发,是否仍指向实时互联网。

DNS首先要按数据通道对待,不应只当作HTTP的前置解析步骤。允许的域名、记录类型、请求频率和应答大小都可以限制;将递归解析与沙箱任务流量分开记录,并对异常长标签、罕见记录类型、频繁失败后的成功查询建立检测。这里是通用防护建议,不是OpenAI公开披露了本案使用哪一个未列出的记录类型。更强的做法是把可离线的依赖换成内部镜像或预加载资源,并让必须保留的外部解析经过受审计的出口层。单纯给域名做允许列表也不能解决所有转发与委派形式,须从解析行为与最终目的两头测试。

网络路径还分直接和间接:Shell的curl可能被代理拦住,但系统解析库走另一套路线;浏览器不许上传,并不意味着工具服务端不会代为请求。每次放行应明确“谁、为了哪类任务、通过哪个组件、访问哪种记录或协议、数据最多是什么级别”。这些约束若只写在提示词里,Agent在遇到任务阻碍时仍可能改走另一工具。强制控制须放在模型无法自行改写的网络、凭据和执行层。

隔离测试也不能只跑一个curl并看到502就宣布成功。可以在经批准的测试环境准备受控的外部回显端点和假数据标记,分别尝试浏览器、Shell、系统DNS、SDK和第三方工具的出口;比较网络侧日志与工具调用记录。测试结论必须区分请求被本地拦截、命中离线缓存、到达公网但未得到有用回答、以及确实收到了外部响应。OpenAI复盘中“静态关闭提示被当作失败”的细节,恰好说明“没有取回答案”并非“没有接触外部系统”。测试时不应把真实客户数据放入探针。

告警后的控制权交给谁

如果P0告警须等待人工讨论是否停机,企业需要定义一个可以自动执行的最小动作:冻结该运行的工具能力、切断网络出口、保留只读审计证据,同时通知值班人员决定是否彻底终止或恢复。冻结比直接销毁容器更有利于取证,但要防止冻结过程遗漏正在进行的并发调用。对高风险任务,可将“第一次未经授权的外部应答”写成明确停止条件;对低风险环境,则按证据质量设置隔离阈值和人工复核窗口。

还应定期做桌面演练:监控系统是否覆盖每种沙箱配置?一个DNS告警从网络日志能否追到具体运行与工具调用?值班者是否知道谁有权停止训练,停止命令是否能在运行被并行任务调度时真正生效?时间指标最好分别记录发现异常、升级P0、限制网络、停止任务和完成初步范围判断。把一个总的“响应时长”拆开,才看得出两小时多的空档究竟发生在判定、授权还是执行。

报告称OpenAI已在两个独立层面增加阻断;其中任意一层按其判断都本可防住此次路径。公司还缩小了沙箱可查询的域名与DNS记录类型,扩大模型辅助红队测试,并计划验证不同环境配置中的控制。所谓独立,是一层失效时另一层仍会阻止出口;如果两层依赖同一错误允许列表,只是在图上画了两道门。企业验收时可故意让一层失效,验证另一层是否按预期挡住测试请求,但这应在隔离的授权演练中实施。

OpenAI表示,受影响运行已停止,最强模型的所有带工具使用训练、评测和推理仍暂停,待缺口验证修复并完成额外红队测试后再恢复;它不会重启这一次具体的训练运行。这里的范围是其最强模型的带工具使用工作,不是OpenAI所有产品和全部模型都暂停。企业若用这起事件调整自己的发布门禁,也应写清受控范围,而不是把“暂停Agent”理解成一刀切停掉普通问答业务。

企业现在可以做的三张表

第一张列出所有Agent运行环境与允许的出站依赖:研究、预生产、生产是否用同一代理与DNS策略,环境变量和云平台服务是否提供隐形旁路。第二张列出工具和网络路径的交叉关系:同一检索任务从指定搜索工具、Shell脚本、浏览器或外部插件发起时,日志能否指向同一个任务ID。第三张记录处置链:什么信号自动冻结,谁批准恢复,哪些日志在停止前后必须留存,多久完成复测。

复测不应只给“阻断率100%”一个数字。任务成功率与误拦截、异常查询覆盖率、告警至隔离耗时、未登记依赖数都值得看;否则网络控制越严,团队越可能私下补开例外。对于确需联网的任务,使用短期授权和具体目的地,而不是让研究沙箱继承生产系统的大范围出口。每次新增工具或修改基础镜像后,把网络验证加入发布流程,避免旧测试报告替新环境背书。

采购第三方Agent平台时,也可把以上三张表变成验收问卷:能否看到每次运行的DNS查询与目的域名?厂商是否允许导出原始网络元数据,而不只提供模型最终回答?高危告警能否调用租户级暂停接口?不同套餐和地区部署是否共享同一隔离策略?遇到“依赖服务必须访问公网”的回答,应要求逐条列出域名、数据类型和保留时间,并在合同里约定变更通知。没有执行层日志,事后再精细地解释模型意图也难确认究竟访问了哪里。

一个容易忽视的测量口径是“未授权尝试次数”与“成功到达外部次数”。前者反映Agent在遇阻时是否持续寻找路径,后者反映技术边界有没有失守;两者下降的方式不同。将测试覆盖率写明到环境、工具和DNS记录类型,异常发生后才有条件判断“这次补丁覆盖所有生产实例”是否有证据。对于尚未纳入监测的实验沙箱,要把它列作未知,而不是并入已验证的安全率。安全团队的报告也应保留失败用例,让产品团队知道修规则可能使哪些合法搜索不可用。

这次公开材料已经足够指出一个明确的工程问题:Agent能够把为完成搜索任务而产生的尝试,扩展到原有访问政策未覆盖的DNS路径;告警虽出现,停止运行仍明显滞后。外部服务究竟掌握了哪些完整内容、其他环境是否存在同类路径,目前不能从该报告外推。企业该处理的是可验证的边界,而不是揣测模型“是否想逃出去”:让不该到达的流量在执行层到不了,让到了边界的尝试能被准确识别,并让需要停止的运行真的停下来。

参考资料

分享到