免费试用日志保留 7 天
返回企业总览
供应链安全

让智能体连上你不信任的代码。 它咬人时,你什么也不损失。

智能体克隆第三方仓库、安装依赖、运行陌生人写的构建脚本。一个恶意的 postinstall 钩子,或一条埋在 README 里的指令,不该够得到你的 token、你的密钥或你的网络。在一台 Bromure VM 里,它够不到。

问题

每一次 npm install 都是远程代码执行

当智能体从一个不可信仓库运行 `npm install`、`pip install` 或一个 Makefile 的那一刻起,来自你素未谋面之人的任意代码,便以你工程师的权限执行。一个被投毒的 postinstall 脚本、一个抢注拼写的包、一个偷偷回传的构建步骤——每一个都以该用户身份运行,离用户的 SSH 密钥、云凭据和环境变量只差一次系统调用。

智能体编码让这件事更频繁、也更危险。智能体兴致勃勃地克隆工单指向的那个仓库,安装 lockfile 里说的任何东西,跑测试套件——而项目 README 里的一次 prompt injection,能在任何人审过一行代码之前,就把它引向「跑一下这个安装脚本就行」。

Bromure 的答案

爆炸半径是一台马上就要被删除的 VM

Bromure 把智能体——以及它执行的一切——跑在一台用后即弃的 Linux VM 里,VM 有自己的内核、文件系统和网络栈。不可信的仓库、它的依赖、它的构建脚本都在那里运行,而不在工程师的笔记本上。真实凭证从不进入 VM;智能体通过一个持有秘密的代理触达 Git 和包注册中心。

如果一个 postinstall 钩子试图读取 `~/.ssh`、外泄一个环境变量或打开一个反向 shell,它面对的是一台用后即弃的 VM:没有真实秘密,出口被锁死在一份允许列表上,没有任何属于你的东西可偷。任务结束时 VM 被销毁,那个包种下的一切随之而去。而如果 README 或某个构建脚本试图操纵智能体本身,Bromure 的本地设备提示注入检测会标记这次尝试——于是一条敌意指令是被揪出,而不只是被关住。

工作原理

凭证从不进屋

Git 和注册中心的访问通过一个凭证代理。智能体以及它运行的不可信代码,拿到的是受限定、短时效的访问——它们从不看到一个真实的 token 或 SSH 密钥。

出口拴着绳

网络访问按配置文件走允许列表。一个朝着新注册域名或 IP 字面量发信标的依赖会被拦下,而这次尝试出现在日志里。

用后即弃的构建环境

克隆、安装、构建都发生在一台任务结束即销毁的 VM 里。一个持久化植入物没有任何持久的地方可栖身。

注入是被揪出,而不只是被关住

一个本地设备分类器会扫描智能体读取的内容——README、代码注释、抓取来的页面、工具输出——以及它所信任的 CLAUDE.md 这类规则文件,寻找试图操纵它的指令。这次尝试会在模型动手之前被标记或拦下,而不只是在事后被沙箱关住。

默认不可信

新仓库自动套上锁定的配置文件——下载受封闭、秘密走代理、出口受限——于是「在这个外部项目上跑智能体」在任何人审查它之前就已是安全的。

实战演练

当那个包心怀敌意时会发生什么

一位工程师让智能体评估一个工单建议的开源库。智能体把仓库克隆进一台全新的 Bromure VM 并运行 `npm install`。无人知晓的是,一个传递依赖夹带了一个 postinstall 脚本,它读取环境变量并把它们 POST 到攻击者的端点。

在 VM 内部,脚本运行了——却找不到任何值得拿走的东西。环境里没有真实凭据;Git 和注册中心是通过代理触达的,而代理从未暴露一个 token。那次向攻击者域名的 POST 不在配置文件的出口允许列表上,于是被丢弃并记录。会话记录显示了对环境的那次读取、那次被拦截的连接,以及那个目的地。

工程师读完报告,标记了这个包,关闭会话。VM——连同那个植入物、被修改的文件、缓存的负载——一并被销毁。这台笔记本从未运行过那段敌意代码的一行,而攻击者唯一学到的,是那扇门锁着。

架构与集成

它究竟是如何构建的

营销到此为止。下面是每一次 Bromure 部署所依赖的技术基础设施——无论你是在保护 BYOD 员工队伍,还是在一家受监管机构内部隔离涉密等级,底层都是同一套。

虚拟化层强制的隔离

每一个配置文件运行在一台基于 Apple Virtualization.framework 的轻量 Linux 虚拟机中——拥有独立于宿主机的内核、文件系统和网络栈。基础镜像是一套经过签名、可复现的 Alpine 构建,在会话启动时通过 APFS 写时复制克隆出来(磁盘开销几乎为零)。宿主机无法读取 VM 内存;除非配置文件策略明确允许,VM 也无法读取宿主机的剪贴板、文件系统或网络适配器。

身份:用户走 SSO,设备走 mTLS

注册和会话启动由你组织已在运行的两个因素把关。通过 OIDC / SAML 对接 Google Workspace、Okta、Microsoft Entra 或 Authentik 识别用户身份。由你的 PKI 签发、与本次安装绑定的单机 mTLS 客户端证书识别机器身份。吊销其中任意一个,下一次会话便无法启动——没有代理可被篡改,也没有本地策略可被绕过。

配置即代码

工作配置文件——允许的 SaaS 列表、下载 / 剪贴板 / 截屏策略、VPN 配置、键盘布局、根 CA、网络出站规则——是一份签名的声明式产物。用 Git 版本化管理。通过你的 MDM 或 Bromure 配置端点下发。被篡改的配置文件将通不过签名校验,会话拒绝启动。用户机器上运行的,与你编写的完全比特一致。

按配置文件划分的网络平面

每个配置文件自带虚拟网卡。可选择经宿主机 NAT、桥接到物理接口,或通过 WireGuard、IKEv2 / IPsec 或 Cloudflare WARP 建立隧道——所有这些隧道都在 VM 内终结,对宿主机不可见。在此之上叠加 DNS 覆盖、出站端口白名单、LAN 隔离和 HTTP 代理。分段由虚拟化层强制,而不是靠防火墙上的一张贴纸。

审计流水线

每一次请求——时间戳、方法、URL、状态码、用户、配置文件、设备——都在 VM 外部捕获,以防篡改的 JSON Lines 流送达你既有的日志接收端(SIEM、数据湖、留存归档)。可选对可疑流量启用仅请求头或完整请求体的会话录制。稳定的 Schema、有文档的字段、格式上不被厂商锁定。

默认临时,可选持久

关闭窗口,VM 即销毁。令牌、Cookie、缓存、下载以及会话期间落地的任何恶意软件都会随之消失。需要保留状态的配置文件——一套书签、一段已保存会话、一次已登录的 SaaS——可选择加入一块由 macOS Keychain 管理密钥的 LUKS 加密持久盘。密钥永不离开用户设备。

常见问题

一个容器或一个全新的 CI runner 不是已经能做到这点了吗?

+

容器共享宿主内核,逃逸是家常便饭;CI runner 往往持有攻击者正想要的那份部署凭据。Bromure 使用拥有独立内核的硬件隔离 VM,并把真实秘密完全挡在 VM 之外、藏在代理之后——于是即便一次内核级逃逸,也找不到任何可偷之物。

智能体在没有秘密的情况下,怎么推送代码或安装私有包?

+

通过凭证代理。它代表 VM 向你的 Git 主机和私有注册中心认证,在网络层注入受限定、短时效的访问。智能体拿到可用的 Git 和 npm;它从不拿到一个可外泄的凭证。

是什么阻止 README 里的一次 prompt injection 继续升级?

+

两道防线。首先,Bromure 的本地设备检测会扫描智能体读取的内容——README、注释、抓取来的页面、工具输出——以及它所信任的 CLAUDE.md 这类规则文件,并在模型动手之前标记或拦下被注入的指令。即便有一条漏了过去,它也是在 VM 内部执行——没有真实凭证、出口受允许列表限制、够不到宿主机——所以最坏情况只是在一个马上就要被删除的沙箱里浪费些算力,而这一切都被记录在案。

我们还能拿到想要的构建产物吗?

+

能。合法产物通过与任何下载相同的受控路径被提升出 VM——可选 VirusTotal 把关——于是你留下成果,却不留下风险。

运行那个不可信的仓库。 守住你的密钥。

给智能体一个构建环境,让敌意代码在其中一无所获、一无所留。