没有网络边界的沙箱只是半个沙箱

没有网络边界的沙箱只是半个沙箱

💡 原文英文,约1600词,阅读约需6分钟。
📝

内容提要

运行不可信代码需同时控制计算隔离与网络出口,仅靠微虚拟机无法防止数据外泄或攻击外部系统,网络绕过可构成沙箱逃逸。有效沙箱应提供选择性连接,如仅允许特定域名或IP,并动态调整策略。Vercel通过主机防火墙检查TLS的SNI和DNS,注入凭证而不进入沙箱,支持请求转发以执行自定义策略。安全边界应默认拒绝未匹配流量,并贯穿工作负载生命周期。

🔎

延伸解读

网络边界缺失的隐患

文章强调,仅靠微虚拟机隔离计算环境并不足以防止数据外泄或对外攻击。即使代码无法逃逸虚拟机,只要网络出口不受限制,恶意程序仍可将读取到的数据发送到外部服务器,或扫描内部网络。这种网络绕过实际上构成了沙箱逃逸,因为安全边界必须覆盖所有通信路径,包括DNS、代理和身份服务。

选择性连接与动态策略

完全断网虽安全但不可行,因此沙箱需要提供选择性连接能力,例如仅允许访问特定域名或IP,并在工作负载生命周期内动态调整策略。文章以Vercel为例,说明其防火墙通过检查TLS的SNI和DNS来实施域名策略,同时结合CIDR策略控制地址范围,并支持在运行时更新策略,以适应不同阶段的需求。

凭证注入与外部策略执行

为避免凭证被沙箱内代码窃取,Vercel在主机网络边界注入凭证,使其不进入微虚拟机。此外,通过请求转发,可将请求发送到用户控制的代理,执行自定义策略,如审计、内容过滤或授权决策。这样,即使代码拥有完全root权限,也无法访问策略和密钥,从而增强了安全性。

Q&A

为什么说没有网络边界的沙箱只是半个沙箱?

因为仅靠计算隔离(如微虚拟机)无法控制不可信代码的网络访问,代码可能通过外传数据、攻击外部系统或利用内部凭据造成危害。网络边界是沙箱安全的重要组成部分,缺少它,沙箱无法完全隔离风险。

网络绕过如何构成沙箱逃逸?

即使计算边界(如VM)未被突破,如果存在未受控的网络路径(如DNS解析器、空允许列表、策略与代理解析不一致、可信包服务被滥用),不可信代码仍可借此外传数据、接收指令或访问敏感基础设施,从而绕过沙箱的隔离效果。

有效的沙箱应如何提供选择性连接?

有效沙箱应只授予工作负载所需的连接权限,例如仅允许访问特定AI提供商、特定对象存储桶或私有服务,同时阻止其他流量。策略应支持完全开放、完全隔离和细粒度控制,并默认拒绝未匹配的流量。

Vercel Sandbox如何在不进入沙箱的情况下注入凭据?

Vercel Sandbox在主机网络边界注入凭据。防火墙为沙箱创建专用证书颁发机构(CA),并添加到沙箱的受信任证书中。对于配置的目标,防火墙选择性终止TLS,添加或替换认证头,然后重新建立到上游服务的TLS连接。凭据从不进入微虚拟机,也不以明文离开主机。

Vercel Sandbox如何检查域名策略?

Vercel Sandbox的防火墙在主机上运行,通过Linux网络透明重定向出站TCP连接和DNS查询。对于域名限制的连接,防火墙检查TLS握手的开始部分,提取服务器名称指示(SNI),并对照沙箱的域名策略和CIDR策略检查目标地址。

请求转发在Vercel Sandbox中有什么作用?

请求转发将选定的HTTPS请求通过用户控制的代理发送,该代理可以执行自定义策略,如检查负载、执行业务规则、记录审计日志或进行授权决策。代理收到原始请求和Vercel签发的OIDC令牌,可进行数据脱敏、用户授权、供应链扫描、合规记录等操作。

Vercel Sandbox的防火墙如何确保代码无法绕过?

防火墙运行在主机上,位于微虚拟机外部,代码无法修改或禁用。Linux网络透明重定向所有出站TCP连接和DNS查询,防火墙保留每个连接的原始目的地,并检查所有出站流量。

沙箱的网络策略应如何随时间调整?

网络策略应该是临时的,可以动态调整。例如,工作负载开始时可以访问包注册表,在不可信执行前缩小访问范围,短暂允许输出目的地,最后完全禁止出站访问,而无需重启工作负载。

🏷️

标签

➡️

继续阅读