打开网易新闻 查看精彩图片

2024年供应链攻击事件同比增长47%,而开发者让AI代理自动执行代码的比例从年初的12%飙到年末的61%。这两个数字撞在一起,等于把钥匙交给一个可能随时发病的临时工。

谷歌工程师Filip Strzebonski最近公开了他的解法:一个200行的bash脚本,用Linux容器工具BubbleWrap把AI代理关进"玻璃房"。不是虚拟机,不是Docker,不是新建用户——开发体验几乎不变,但AI就算"精神错乱"也碰不到你的SSH密钥和加密钱包。

为什么是现在:AI代理终于"能用"了

为什么是现在:AI代理终于"能用"了

Strzebonski在博客开头写得直白:「世界正在崩塌,一切都在被黑,所有依赖项可能都在偷密钥和挖矿,而我也是问题的一部分。」

他铺垫这个方案很久了,但直到最近才动手。转折点很具体:LLM代理终于好用到他愿意放手,不用盯着每一条命令。这像什么?以前请了个实习生,你得站在背后看他打字;现在实习生能独立干活了,你反而要开始担心他会把公司电脑格式化。

传统隔离方案在这个场景下都很别扭。单独用户账户?权限管理麻烦。虚拟机?资源开销大,文件共享费劲。Docker?构建镜像拖慢迭代速度。Strzebonski要的隔离是"透明的"——你几乎感觉不到它的存在,直到AI真的搞砸什么事。

BubbleWrap的核心 trick 是选择性重挂载:把宿主系统的关键目录以只读方式映射进去,工作目录和AI需要的缓存目录保持可写,其他一切对沙箱内进程不可见。

脚本解剖:200行代码买了什么保险

脚本解剖:200行代码买了什么保险

isolate脚本的结构很直白。开头检查是否已在隔离环境中,防止套娃;接着检测TIOCSTI是否禁用——这是个能往其他终端注入输入的古老Linux特性,被禁用说明系统基础安全做得还行。

打开网易新闻 查看精彩图片

然后是目录白名单。只读挂载的包括:/bin、/usr/bin、/etc、/nix(他用NixOS)、以及个人配置里的工具链和git配置。可写挂载的只有六样东西:Rust的.cargo缓存、Claude的配置目录、当前工作目录、GPG代理套接字,还有可选的窗口管理器套接字。

最后一行exec bwrap把参数数组扔给BubbleWrap,启动隔离环境。

关键设计在"最小可写集"。Strzebonski解释:「如果Slopus(他给AI起的绰号,slop+octopus)精神错乱发作,或者拉进来一个挖矿恶意软件,能造成的损害是有限的。」

具体有多有限?脚本把$HOME/.gnupg设为空目录且权限0700,意味着AI根本看不到你的GPG密钥。SSH密钥默认不在白名单里,除非你显式加进去。浏览器cookie、密码管理器套接字、加密货币钱包——这些常见攻击目标对隔离环境里的AI都是黑洞。

工程妥协:为什么不是"真隔离"

工程妥协:为什么不是"真隔离"

这个方案有明显漏洞,Strzebonski自己列了出来。

首先是X11/Wayland的剪贴板。隔离环境能访问显示服务器,意味着AI理论上可以读取或篡改剪贴板内容。你在密码管理器里复制了个密钥,AI下一秒就能"看到"。

其次是/proc和/sys的暴露。BubbleWrap默认挂载的proc文件系统包含大量系统信息,足够聪明的恶意代码能从中推断出不少东西。Strzebonski提到可以进一步用Landlock或seccomp限制,但"还没弄"。

最实际的限制:这个脚本是为他的NixOS工作站量身定做的。/nix目录的只读挂载、$HOME/nix/dot的配置路径、Niri窗口管理器的套接字检测——换个发行版或桌面环境,得改不少地方。

打开网易新闻 查看精彩图片

但他认为这些妥协值得。「我不追求理论上完美的隔离,我要的是'足够好'且不影响效率的隔离。」这态度很产品经理:先解决80%的风险,剩下的20%看攻击者有没有动机专门针对你。

社区反应:从"我也想要"到"这不够"

社区反应:从"我也想要"到"这不够"

Hacker News上的讨论很快分成了几派。

实用派在问:有没有现成的封装?Strzebonski的脚本是"展示思路",真要推广需要处理不同发行版的差异、IDE集成、以及AI代理 increasingly 需要的网络访问(他的方案默认没碰网络命名空间)。

安全派在挑刺:BubbleWrap不是为这种场景设计的,它原本的用例是运行不受信任的应用程序,而不是"半信任但可能出错"的自动化代理。有人推荐gVisor或Firecracker,但资源开销和开发体验折损都更大。

最有趣的反馈来自用Claude Code的开发者:「我已经习惯让它自动跑测试和重构了,但每次它建议执行shell命令,我还是要看一眼。这个脚本能让我少看多少眼?」

Strzebonski的回应很直接:「能让你从'每条命令都审'变成'只在它访问新目录时看一眼'。」

他把这套方案放在了GitHub上,附带一个"自动隔离"包装器——检测到.claude.json就自动启用隔离,无需手动调用脚本。截至发文,仓库已获得2300星标,Issues里最多的是"求支持macOS"和"求支持VS Code集成"。

一个细节:他在脚本注释里把配置文件路径藏进了/dev/null的只读绑定,这样即使AI能读到隔离环境内的文件,也看不到项目特定的额外配置在哪。这种"防御性偏执"贯穿整个设计——假设AI会尝试逃逸,然后让它即使成功也拿不到多少东西。

你的AI代理现在能自动执行多少行代码而不需要你盯着?如果这个数字超过50,你可能也需要一个玻璃房了。