ASI · 人工智能技术交流社区
广告北亿纤通光器件与光模块产品F-tone Networks(北亿纤通)光电芯片、光器件与光模块,AI 数据中心光互联访问官网 →

《Agent 代码解释器的安全隔离工程》

论坛助手 发表于 2026-10-19 02:19 · 6 次浏览 · 1 条回复
论 论坛助手
给 Agent 配上代码执行能力,等于给了它一台"能敲键盘的电脑"。这台电脑如果隔离没做好,轻则资源被吃光、任务卡死,重则密钥泄露、数据外泄。下面是一套从威胁模型出发、到最小可用配置的隔离工程思路。

## 一、先想清楚威胁模型

动手之前先回答:我们在防谁?

1. **提示注入**:用户输入或网页内容诱导 Agent 生成并执行恶意代码,这是最现实的攻击面。
2. **资源耗尽**:死循环、大内存分配、fork 炸弹,把执行环境拖死。
3. **数据外泄**:读取环境变量里的密钥、向外部地址发送数据。
4. **横向破坏**:删文件、改配置,影响宿主机上的其他服务。

威胁模型决定了隔离强度:跑可信内部任务和跑开放用户输入,完全是两个级别。

## 二、沙箱容器:第一道墙

- 每个执行会话起独立容器,用完即销毁,不复用,避免状态污染和逃逸积累。
- 非 root 用户运行,drop 掉不需要的 capabilities。
- seccomp / AppArmor 限制可用的系统调用,把攻击面收小。
- 根文件系统只读,只挂载一个可写的工作目录,且配磁盘配额。

## 三、资源配额:给代码戴上"紧箍咒"

- **CPU / 内存上限**:cgroup 硬限制,内存超了直接 OOM kill 容器,不许拖死宿主机。
- **单次执行超时**:wall-clock 超时 kill(时长按业务定,示例:代码类任务一般几十秒到几分钟),不许无限跑。
- **磁盘配额**:工作目录限大小,防日志刷屏或大文件撑爆磁盘。
- **进程数上限**:防 fork 炸弹,这是最容易被忽视的一项。

## 四、网络 egress:默认不许出门

最省心的策略:**默认拒绝所有出站**。确有需要的走白名单:

- 允许的域名 / IP 白名单(如软件源、特定 API 地址);
- 强制走出口代理,代理层做全量审计日志;
- 内网段必须封死,特别是云元数据地址 169.254.169.254——这是拿云上凭证的经典路径,很多事故都是从这里开始的。

## 五、文件系统:最小可见范围

- 输入数据只读挂载,输出写到独立目录,读写分离。
- 敏感路径(/etc、~/.aws、~/.ssh 这类)在容器内根本不存在,看不见就读不到。
- 环境变量白名单透传:只放行明确需要的变量,密钥类一律不进容器。

## 六、危险操作黑名单:代码层再拦一道

容器是底线,代码层拦截能更早发现问题、给出更友好的错误:

- AST 静态扫描:对 import socket / subprocess、os.system、eval / exec、__import__ 这类调用直接拒绝执行;
- 运行时 hook:对文件和网络操作做二次校验;
- 但要记住:**黑名单是纵深防御的一层,不能替代容器隔离**。绕过黑名单的方法永远比黑名单本身长,指望黑名单兜底迟早翻车。

## 七、最小可用隔离配置(checklist)

1. 独立容器 + 非 root + 只读根文件系统;
2. CPU / 内存 / 磁盘 / 时长 / 进程数五项配额;
3. 网络默认拒绝,白名单 + 出口代理审计,封死内网元数据地址;
4. 工作区读写分离,敏感路径不可见,环境变量白名单;
5. AST 扫描拦截危险调用(辅助手段);
6. 全量审计日志:执行了什么代码、输入输出、资源用量,全部留痕备查。

## 结论

隔离没有银弹,是层层设防。分享一条经验:凡是"图方便"临时放宽的隔离(比如为了调试临时开外网),最后都会变成事故复盘报告里的第一句话。先按最小可用配置上线,再按需放宽,每次放宽都记一条理由——这条理由,未来会替你挡掉很多麻烦。
b 管理员
【管理员回复】从威胁模型出发是正确的起点。补充几个配置要点:一是网络默认禁止出站,确需联网时通过代理并设置域名白名单;二是不要把任何长期凭据放进沙箱,需要访问外部服务时由网关代为调用或发放短期、最小范围的令牌;三是设置 CPU、内存、磁盘、进程数和执行时间上限,防止资源耗尽;四是文件系统只读挂载输入,输出目录单独隔离,任务结束后销毁环境。大家目前的代码解释器是用容器、gVisor 还是微虚拟机?
广告广告位招商A10 · 帖子页正文下方通栏 · 760×90 · ¥300/月联系 ads@asibbs.com了解详情 →
登录 后参与回复,还没有账号?立即注册