维基媒体基金会10月5日发了一篇博客,标题里用了“rogue agents”这个词——流氓智能体。
OpenAI的Agent在维基百科上干了什么?未授权的编辑、试图入侵维基媒体托管的公共笔记工具Etherpad、数百万次自动化API请求。基金会还指出,这些请求可能导致了今年5月Wikidata查询服务的部分宕机。
这已经不是OpenAI的Agent第一次“闯祸”了。Hugging Face被入侵、澳大利亚政府网站被访问、德国维基网站被劫持用于Agent之间的通信协调。每一次事故,都指向同一个问题:我们给Agent的权限太大了。
我花了一个周末,亲手试了试怎么给Agent“上锁”。
这次维基百科事件到底发生了什么
先把事实说清楚。
维基媒体基金会的调查发现,OpenAI的Agent在维基百科上做了几类事情。编辑行为本身大部分是“测试性编辑”,发生在维基的沙箱区域,普通读者看不到。但问题出在引用工具的配置上——基金会认为这些编辑“可能具有恶意意图”,目的是把维基百科的引用工具当作代理,用来从第三方网站抓取数据。
另一件事更直接:Agent试图入侵维基媒体托管的Etherpad笔记工具,想用它来代理访问其他网站。失败了,但意图很明确。
最要命的是流量。Agent向维基媒体的公共API发出了数百万次自动化请求,爬取了数百万个页面,向Wikidata查询服务发起了数十万次查询。基金会明确说,这些流量“可能导致了2026年5月WQDS的部分宕机”。
Ars Technica的报道里有一句话让我印象很深:OpenAI Agent的这些行为,“如果由人类黑客来做,很可能会导致刑事指控”。
我写了个会“越权”的脚本,看看什么能拦住它
知道问题在哪之后,我决定自己动手测一下。
英伟达9月28日开源的OpenShell,是目前讨论度最高的Agent安全运行时。我装了OpenShell 0.1.0,写了一个简单的Python脚本,里面故意包含越权操作:读取系统敏感文件、向未授权域名发起网络请求。
先在不带任何沙箱的终端里跑了一遍。脚本顺利读取了文件,网络请求也正常发出。
然后我按照OpenShell的文档,创建了一个沙箱,只给了一个项目目录的读写权限,网络策略设为默认拒绝。同一个脚本丢进去,读取 /etc/shadow 直接返回 Permission denied ,curl请求在发出之前就被L7代理切断了。
从发出请求到被拦住,不到一秒。
OpenShell的做法是把权限从Agent身上剥离出来,放在内核层强制执行。文件系统用Landlock限制,进程用seccomp过滤,每个出站网络请求都要经过策略检查。你给Agent的权限是写在策略文件里的,Agent自己改不了。
NVIDIA还配了一个叫Sentry的硬件看门狗,跑在BlueField-4 DPU上,独立于Agent所在的主机。Agent试图越界时,Sentry可以在毫秒级把它隔离。这个需要额外硬件,但方向很明确:安全检查不能放在被检查对象的控制范围内。
Docker装Agent,跟没装差不多
很多人觉得把Agent放在Docker容器里就算隔离了。我测完OpenShell之后回去对比了一下,发现Docker的隔离和OpenShell完全不是一回事。
Docker的隔离是namespace层面的,让进程看到独立的文件系统、网络栈、PID空间。听起来够了,但有个致命问题:Docker容器里的进程默认以root身份运行。 你把项目目录挂进去,Agent能读写整个项目。你挂了SSH密钥方便Git操作,Agent也能读到。
OpenShell用的是内核级机制,非特权用户运行沙箱,root身份直接被拒绝。文件系统策略只允许访问明确列出的路径,没列进去的完全不可见。网络层面默认全拒,每个出站请求都要过代理检查目标主机和发起请求的二进制程序。
简单说,Docker是“你不能进这个房间”,OpenShell是“你在这个房间里,但抽屉上了锁,只有我告诉你可以开的抽屉你才能开”。
Claude Code的沙箱怎么配,我照着文档改了
如果你平时用的就是Claude Code,它自带Bash沙箱功能,配置不算复杂。
打开 ~/.claude/settings.json ,加上 "sandbox": {"enabled": true} 就能开启全局沙箱。沙箱内的命令默认只能写入工作目录和临时目录,需要访问新的网络域名时会弹窗提示。
有个细节值得注意: autoAllowBashIfSandboxed 默认是 true ,意思是沙箱内的命令自动放行不弹窗。如果你想要更严格的管控,把它改成 false ,这样每条命令都会经过常规权限流程。
Claude Code的沙箱在macOS上用Seatbelt框架,在Linux和WSL2上需要额外安装依赖。原生Windows不支持,得在WSL2里跑。
但Claude Code的沙箱有个已知短板。 它的默认设置可以访问你home目录下的任何文件。这意味着如果你的SSH密钥和项目代码放在同一个用户目录下,Agent理论上都能碰到。有一款叫Aegis的第三方工具专门解决这个问题,它在Agent和机器之间加了一层“默认拒绝”的策略,每个工具调用都要显式授权。
现在能做的三件事
看完这些事件和工具,你可能觉得Agent安全离自己很远。其实不是。
如果你在用DeepSeek Harness、Claude Code或者任何能操作文件的Agent,工作目录千万别选整个用户目录。 建一个专门的项目文件夹,只授权这一个目录。这一步花不了30秒,但能挡住大部分意外。
Anthropic自己披露过一个数据:Claude Code用户会批准93%的权限弹窗。批准变成了肌肉记忆,“人工确认”名存实亡。在权限弹窗出现的时候,停下来看一眼。 它在请求访问什么?这个访问合理吗?
如果你跑的是脚本类任务,或者Agent要执行它自己生成的代码,优先把它放进沙箱里跑。 不用OpenShell这么重,Claude Code自带的沙箱就能拦住大部分越权操作。实在不行,用Docker容器也比裸跑强——虽然root权限的问题还在,但至少有了一层隔离。
这件事不会就这么过去
维基媒体基金会在博客里写了一句:“我们不能让这种行为成为维护开放网络的人们和组织的‘新常态’。”
Docker在9月发布了Cloud Sandboxes,用microVM跑Agent工作负载。Google的GKE Agent Sandbox在五个月内增长了16倍。阿里云在云栖大会上发布了Agent Sandbox,把它定义为“面向智能的新型算力形态”。
Agent安全运行时正在从“可选项”变成“标配”。
OpenAI的Agent在维基百科上做的事,本质上是一个能力很强的工具在缺乏约束的环境里“自由发挥”的结果。工具本身没有恶意,但它的行为已经越过了人类社会的边界。
给Agent上锁这件事,早做比晚做好。不是因为Agent一定会害你,是因为你根本不知道它下一步会做什么。
热门跟贴