局域网 Agent 零信任实践:网关分流与沙箱逃逸防护

从需求到上线:一次内部 Agent 网关的零信任改造
去年第四季度,我们团队接到一个典型的混合办公需求:在保证代码安全的前提下,让分布在三个城市的研发成员能通过本地 Agent 调用云端大模型完成自动化测试。初始方案直接暴露了 API 密钥和沙箱控制端口——直到某次安全演练中,攻击者通过钓鱼邮件拿到了某员工的 VPN 权限,15 分钟内横向移动到了模型调用链路。
阶段一:密钥与流量的物理隔离
核心问题出在 配置分层缺失:开发者在 .env 文件硬编码了 LiteLLM 的密钥,而该密钥同时拥有生产环境模型权限。重构时我们确立了三条边界: 1. 网关层:部署 LiteLLM Proxy 实现多密钥聚合,按部门隔离配额 2. 传输层:所有内部通信强制 mTLS,即使在同一 VLAN 也需验证设备指纹 3. 沙箱层:SWE-agent 补丁评分低于 B+ 的工具禁止在敏感目录执行
关键决策点是放弃传统的 IP 白名单,改用 声明式策略:
# 网关策略片段示例
access_control:
- resource: "claude-3-opus"
allowed_groups: ["qa-auto"]
max_context: 8k
rate_limit: 30/分钟
密钥管理的技术细节补充: - 采用 HashiCorp Vault 动态签发短期密钥,有效期默认 2 小时 - 网关层缓存最近 5 分钟内的密钥撤销状态,避免 Vault 不可用时的服务中断 - 开发环境密钥强制绑定 GitLab CI 流水线 ID,防止本地测试滥用
阶段二:SWE-agent 的沙箱强化
原版沙箱存在两类风险: 1. 通过 subprocess.call 间接执行 /bin/sh 的逃逸尝试 2. 模型生成临时脚本后的持久化漏洞
我们基于 OpenClaw 的补丁评分机制做了定制: - 静态分析:AST 解析检测可疑的系统调用链 - 动态拦截:对 /tmp 的写操作强制追加不可执行标记 - 熔断日志:任何绕过尝试会立即触发设备级下线
沙箱逃逸防护的增强措施: 1. 文件系统隔离:为每个会话创建 OverlayFS 挂载点 2. 系统调用过滤:通过 seccomp 限制 clone/fork 等危险操作 3. 资源限制:单个进程最多创建 3 个子进程,CPU 使用不超过 30%
实际测试发现,这增加了约 15% 的延迟,但将逃逸成功率从 7% 降至 0.3%。
阶段三:上线后的观测体系
通过 ClawBridge 实现了三层监控: 1. 流量审计:记录所有模型调用的输入输出哈希(不含敏感数据) 2. 异常检测:当单个密钥的请求突变超过 2σ 时自动冻结 3. 成本预警:按部门划分的 token 消耗实时可视化
可观测性实施方案: - 使用 OpenTelemetry Collector 聚合网关和沙箱指标 - 关键日志同时写入 Elasticsearch 和冷存储,保留 180 天 - 仪表盘重点关注: - 跨部门密钥借用率(应低于 5%) - 沙箱拒绝操作的 TOP 10 原因 - 模型响应时间 P99 分位
一个意外发现是:零信任策略反而降低了 22% 的误调用率——因为严格的权限边界迫使开发者更规范地设计提示词。
下一步行动与风险提示
当前方案仍有两处待优化: 1. 设备指纹与 HR 系统同步存在 4 小时延迟(计划引入实时 Webhook) 2. 部分 Legacy 工具链尚未适配新的策略引擎(建立兼容层沙箱)
上线前必须验证的五个场景: 1. 密钥轮换期间现有会话的平滑过渡 2. 网关集群脑裂时的自动恢复能力 3. 沙箱进程崩溃后的资源泄漏检测 4. 监控系统本身被攻击时的告警通路 5. 跨国办公场景下的 TLS 证书延迟影响
建议实施前重点检查: - [ ] 所有依赖 os.system 的脚本已替换为受限 API - [ ] 网关故障转移测试覆盖密钥同步中断场景 - [ ] 沙箱的 CPU 配额限制是否影响耗时任务 - [ ] 设备指纹采集不依赖易篡改的浏览器指纹 - [ ] 审计日志包含足够的上下文用于事后溯源
(正文汉字统计:1287)
更多推荐




所有评论(0)