ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Gondolin安全设计解析:AI代码沙箱的威胁模型、四大安全保证与“安全包络“操作守则

Gondolin安全设计解析:AI代码沙箱的威胁模型、四大安全保证与“安全包络“操作守则 Gondolin安全设计解析AI代码沙箱的威胁模型、四大安全保证与安全包络操作守则【免费下载链接】gondolinExperimental Linux microvm setup with a TypeScript Control Plane as Agent Sandbox项目地址: https://gitcode.com/gh_mirrors/go/gondolinGondolin 是一款AI 代码沙箱Agent Sandbox工具它把 AI Agent 生成的不可信代码跑在一个真实的 Linux micro-VM 里同时由你信任的 TypeScript 控制面接管虚拟机全部的网络与持久化 I/O。本文基于官方 docs/security.md 逐层拆解它的安全设计威胁模型、四大安全保证以及如何操作才不越出安全包络safe envelope。 一句话理解核心思想不可信代码跑在真 Linux VM 里但 VM 的 I/O 表面积网络 持久化由宿主机代码中介mediate——策略执行点永远在你信任的一侧。威胁模型先想清楚防谁、护什么安全设计的第一步不是写规则而是画边界。Gondolin 的威胁模型非常克制攻击者是谁攻击者说明Guest 内运行的代码shell 脚本、二进制、解释型代码——通常就是 Agent 生成的、可能已被提示注入prompt injection的产物Guest 连接的远程服务器包括恶意重定向malicious redirect的下游站点官方特别提醒AI Agent 是出色的逆向工程师只要提示得当它们逃沙箱的手段会非常有创意——这正是需要真实 VM 边界而非单纯进程隔离的原因。要保护的资产宿主密钥Host secrets交给宿主应用的 API key、token宿主网络localhost 服务、云元数据端点如 169.254.x.x、内网 RFC1918 地址段宿主文件系统除非你显式挂载否则 Guest 看不到信任假设也是设计边界✅ 信任宿主 Node.js 进程 Gondolin 库、QEMU 的 VM 边界⚠️ 按供应链程度信任Guest 镜像❌不防恶意宿主、同机恶意本地用户能碰到 Unix socket、QEMU 逃逸漏洞、侧信道、完全的 DoS 隔离明确 Non-Goals 是这篇 安全设计文档 最值得新手学习的部分不承诺防御的东西就不装样子。架构速览Guest 被当作敌对的一方----------------------- 宿主机可信 ------------------------ | Node.js 进程策略 真实密钥 VFS provider | | | | ------------------- QEMU 进程边界 -------------------- | | | Guest Linux VM不可信代码 | | | | - eth0 有网卡但流量被宿主拦截并重新分类 | | | | - /data 看似普通目录实则由宿主 provider 应答 | | | | - 通过 sandboxd 执行任意进程 | | | ------------------------------------------------------ | --------------------------------------------------------------Guest 侧只有几个小守护进程sandboxdguest/src/sandboxd/main.zig执行宿主下发的命令sandboxfsguest/src/sandboxfs/main.zigFUSE 文件系统把文件操作通过 virtio-serial RPC 转发给宿主sandboxsshguest/src/sandboxssh/main.zig仅限 loopback 的宿主↔Guest 转发器sandboxingressguest/src/sandboxingress/main.zig入口网关转发器/initguest/image/init挂载 tmpfs、拉起网络与服务Guest 被视为敌对adversarial宿主是唯一的策略执行点——这句话是理解后面所有保证的钥匙。四大安全保证Gondolin 真正强制执行的1️⃣ 计算隔离Guest 代码不直接跑在宿主内核上QEMU 的启动参数是刻意最小化的见 host/src/sandbox/controller.ts-nodefaults、-no-reboot、-nographic只挂 virtio 设备根文件系统以qcow2 写时复制COWoverlay挂载——Guest 的写入不会污染基础镜像保证除非发生 QEMU 逃逸那属于宿主被攻破Guest 进程无法直接触达宿主内核、内存或文件系统。2️⃣ 网络出口限制没有裸 NAT只有分类放行这是整套设计最精巧的部分。Gondolin不给 Guest 提供原始 NAT而是由宿主自己实现一个用户态网络栈host/src/qemu/network-stack.ts host/src/qemu/net.ts对每条出站 TCP 流做首字节嗅探分类分类结果处理匹配显式tcp.hosts映射转发到指定上游窄例外通道httpHTTP/1.x 请求行宿主解析请求、过策略、用fetch重放tlsClientHello宿主做受控 TLS MITMhost/src/mitm.ts取出内层 HTTP走同一策略管道ssh版本 banner仅当显式开启 SSH 出口时走代理通道其他一切直接拒绝unknown-protocol再加几道防线UDP 全禁只留 DNS/53默认synthetic模式下宿主直接回合成 A 记录Guest 无法拿 DNS 当出站通道内网段默认封死127/8、10/8、172.16/12、192.168/16、链路本地、100.64/10 及 IPv6 对应段blockInternalRanges: true见 host/src/http/hooks.ts——这是防云元数据窃取的关键防 DNS rebinding策略在请求前和建连时两处各查一次 IP重定向由宿主自己跟随每一跳都重新过策略保证Guest 开不了任意 TCP 隧道、用不了 UDP、也绕不过 DNS 技巧或重定向去够到被封的网络。3️⃣ 密钥非暴露真实密钥从不进入虚拟机防密钥泄露最强的办法是——根本不给。Gondolin 的做法详见 docs/secrets.mdGuest 环境变量里只有占位符如random-marker.secret_nameGuest 发出 HTTP 请求时宿主钩子扫描出站 header仅在目标主机命中该密钥的 allowlist 时把占位符替换成真实值占位符出现了但目标主机不在允许列表 →整个请求被阻断连Authorization: Basic的 base64user:pass都能解开、替换、再编码回去保证只要密钥只走这条通道Guest 从进程环境、磁盘、内存里都读不到真实值——因为它从未进过 VM。4️⃣ 文件系统限制宿主文件访问显式且可编程默认 VM 只有镜像基础根文件系统 /init创建的若干 tmpfs/tmp、/root、/var/log等 可选的 FUSE 挂载点。可编程挂载的路径是Guest 的sandboxfs把 Linux VFS 操作翻译成 RPC → 宿主FsRpcServicehost/src/vfs/rpc-service.ts校验后分发给 providerMemoryProvider纯内存默认推荐用于/workspaceRealFSProvider真实宿主目录ReadonlyProvider等包装器只读、挂载路由、自定义策略保证你不挂载Guest 就摸不到宿主文件而且宿主能改变目录的行为不只是换个位置 bind。安全包络操作守则别亲手拆掉自己的保险箱官方把如何不破坏上述保证的操作规则称为 safe envelope。新手最容易翻车的都在这张清单里网络策略 ✅用精确 allowlist少用*——api.github.com优于*.github.com保持blockInternalRanges: true确需内网目标时用allowedInternalHosts做窄例外假设被允许的宿主能收到 Guest 读到的一切数据——Gondolin 防的是发到别的机器防不住上传到已放行机器httpbin 这类会回显 header 的服务就是现成的外泄通道放行多个主机时用onRequest/onResponse钩子加审计tcp.hosts是降安全等级的例外通道映射保持窄HOST:PORT、用短期凭据、且它不走 HTTP 钩子和密钥替换密钥管理 密钥只通过createHttpHooks({ secrets: ... })传入——别挂~/.aws、.env别塞进VM.env默认只替换 header放 body 里的占位符不会被替换query 替换需显式开启replaceSecretsInQuery: true别指望占位符猜不出——安全性靠的是没有宿主替换就无用所以自定义占位符要高熵避免和正常请求数据撞车文件系统与镜像 ️临时工作区默认用MemoryProvider必须暴露宿主目录时用ReadonlyProvider(RealFSProvider(...))别挂整个家目录在/下挂自定义 provider 可能盖掉发行版 CA 证书本地 MITM CA 的私钥~/.cache/gondolin/ssl要当敏感数据保管需要按运行隔离时把mitmCertDir指到临时目录高保障场景自己构建镜像并校验 SHA-256gondolin build --verify保持 QEMU 更新——VM 边界是地基诚实的边界已知限制与锋利边缘docs/limitations.md 和安全文档都坦白了边界选型前建议读一遍⚠️ 中介网络 ≠ 安全网络对放行主机Guest 仍可上传任意可读数据⚠️ 最强保证依赖 QEMU 无逃逸漏洞⚠️ 同机同权限的本地攻击者可以碰 virtio Unix socket⚠️ 有 buffer 上限但没有完整的资源治理DoS 隔离有限不支持 HTTP/2、HTTP/3、QUIC/WebRTC镜像构建目前仅支持 Alpine结语Gondolin 的安全设计给了新手三个可迁移的思路先写威胁模型再写代码、让不可信侧的每个 I/O 都过可信侧的分类器、密钥最好的存放位置是不在对方手里。想动手体验最快的入口是 CLInpx earendil-works/gondolin bash深入阅读可从 架构总览、网络栈 和 SDK 指南 入手所有策略钩子的实现都集中在 host/src/http/hooks.ts是理解整套中介模型的最佳源码入口。【免费下载链接】gondolinExperimental Linux microvm setup with a TypeScript Control Plane as Agent Sandbox项目地址: https://gitcode.com/gh_mirrors/go/gondolin创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表