Cerberus 场景聚焦:用本地安全网关给 AI Agent 的每一次工具调用加一道锁
一个让人后背发凉的场景
假设你在生产环境跑着 Claude Code 或 Codex,它正奉命执行一个自动化任务。AI 读到了一篇文档,文档里建议先检查 ~/.ssh/id_rsa 是否存在——Agent 照做了,还顺手把文件内容传给了某个外部服务。这不是入侵,是你的 Agent 被提示注入利用了。等你发现的时候,密钥已经在别人手里了。
这不是耸人听闻。AI 编码 Agent 的本质就是「把机器钥匙交给一个自主行动的程序」——它执行 shell 命令、读写文件、发送网络请求,而且是以毫秒级的速度,在你喝杯咖啡的工夫就能跑完几十步操作。一个 rm -rf、一个不经意的 git push、一次 .env 泄露,都在 Agent 的一次工具调用中完成,而传统的安全方案根本跟不上这种节奏。
这个问题怎么解?Cerberus 给出了一个答案:在 Agent 的工具调用边界上,装一个本地安全网关。
痛点对比:Agent 安全的三条路
| 维度 | 传统 EDR/杀毒软件 | 手动 review 所有操作 | Cerberus 本地安全网关 |
|---|---|---|---|
| 检测粒度 | 文件/进程级,看不到 Agent 的工具调用 | 零漏报,但人根本跟不上 Agent 的速度 | 工具调用级,PreToolUse 全拦截 |
| 响应速度 | 秒/分钟级 | 依赖人类反应(分钟/小时) | 毫秒级,在工具执行前完成判定 |
| 上下文感知 | 无,只看单个系统事件 | 完整但有认知负担 | 看完整会话状态 + 4 维度风险分 |
| 秘密泄露检测 | 依赖已知签名 | 人能发现但发现时已晚 | 上下文匹配 + 编码变体检测 |
| 本地部署 | 部分支持 | N/A | 完全本地,无外部 API |
| 终端体验 | 弹出系统警报 | 打断工作流 | 原生 Agent 权限提示,不离开终端 |
传统的安全方案要么粒度太粗(看不到 Agent 的工具调用),要么速度太慢(等人工发现时早就出事了)。Cerberus 的设计选择非常聪明:它把自己放在 Agent 和操作系统之间,在工具调用的边界上做安全和判定。
快速上手:5 分钟装好安全网关
Cerberus 的安装出奇简单:
npm i -g @cerberussec/core
然后把它接入 Claude Code:
cerberus init # 默认为 Claude Code,项目级
启动网关和仪表盘:
cerberus engine # 打开 http://127.0.0.1:9000/
完成。现在你用 Claude Code 执行的每一次工具调用,都会先经过 Cerberus 的安全检查。终端里该做什么还做什么——阻止或放行都在 Claude Code 的原生权限提示中完成,完全不需要切窗口。
核心功能拆解
1. 四信号风险引擎:不是在查毒,是在判案
Cerberus 的核心是一个聚合四个信号的风险引擎。每次工具调用触发前,它会计算:
| 信号 | 检测对象 | 判定逻辑 |
|---|---|---|
| Policy(策略) | 命令白名单/黑名单 | rm -rf 直接 BLOCK;cat ~/.ssh/* 触发 HITL |
| Behavioral(行为) | 调用模式 | 连续高频写 ~/.aws/credentials → 异常行为分↑ |
| Content(内容) | 工具结果中的秘密 | 检测 base64/hex/url 编码的密钥变体 |
| Injection(注入) | 工具结果中的对抗内容 | 启发式分类器(可选 DeBERTa 模型升级) |
四个信号加权汇总成一个风险分,而绝对禁止的操作(如 chmod 777 *)有一个硬性下限,不会被其他低分信号稀释。
2. 秘密泄露检测:抓到的是”正在出去”的密钥
这个设计的精妙之处在于执行时序。Cerberus 的 PreToolUse 拦截了工具调用的请求,PostToolUse 才是秘密检测的战场——当一个工具调用返回了结果,Cerberus 检测该结果中是否出现了之前上下文中的秘密(如 .env 文件内容),并记录”会话污染状态”。当下一个工具调用试图将含秘密的数据发出去时,PreToolUse 的 Content 信号会把这个调用截停。
这意味着 Cerberus 不是在看文件里有没有秘密,而是在看键盘按下去之前的内容匹配——它知道 .env:4 的密钥已经加载进了上下文,所以当 outbound 网络请求携带了该密钥(原始、base64、hex 或 url 编码)时,它会在请求发出前拦住。而且秘密值永远不会写入日志或磁盘。
3. 两种审批模式,适用于不同的 Agent 工作流
Cerberus 支持 terminal 和 dashboard 两种审批模式。默认是 terminal:
- BLOCK:终端直接拒绝,Claude Code 显示被拦截原因,可自动打开调查页面
- HITL(人工参与):Claude Code 的原生权限提示,附带 Cerberus 的判定理由——你在终端里 approve/deny
- AUDIT:静默记录到风险时间线,不在终端显示
- ALLOW:完全放行,无提示
如果需要集中管理审批,改成 AG_APPROVAL_SURFACE=dashboard 模式,HITL 调用会挂起在引擎的 socket 上,等你在 Web 仪表盘上操作:
cerberus pending # 列出待审批的调用 cerberus approve# 放行 cerberus deny # 拒绝
4. 取证仪表盘:像回放录像一样追查 Agent 的每一步
Web 仪表盘(http://127.0.0.1:9000/)的 Replay 功能是让我眼前一亮的设计。它能按时间线重放整个 Agent 会话的每次工具调用,标注每个调用的风险因子——是策略违规、行为异常、内容携带秘密还是注入检测触发。这比看日志追查有效率得多。
横向对比
| 特性 | Cerberus | Prompt Guard (Meta) | 系统级 HIDS |
|---|---|---|---|
| 安装复杂度 | npm i -g + cerberus init | 需集成到推理管道 | 部署 agent 在每台机器 |
| 检测面 | PreToolUse + PostToolUse 全链路 | 只检测 prompt 注入 | 系统调用级,无 Agent 语义 |
| 审批回传 | 原生 Agent 权限提示 | 无 | 无 |
| 许可证 | Apache-2.0 | Llama 社区许可 | 各异 |
| Agent 适配 | Claude Code / Codex / Cursor / Cline | 通用推理层 | 无 |
Cerberus 的独特定位在于它不是替换传统安全方案,而是填补了Agent 工具调用边界这个空白——传统方案看不见这个层面,而 Cerberus 正好卡在那个位置。
注意事项
- 看得到工具调用,看不到 LLM prompt:这是设计决策不是缺陷。Cerberus 抓的是提示注入的利用阶段(工具调用携带恶意载荷外传),而不是注入本身。所以它不能防御数据管道污染和 RAG 中毒。
- 秘密检测高置信但不是 100%:新型秘密格式、跨多次调用的分片编码,都在已知局限之内。
- Codex CLI 没有原生 ask 接口:需要用
AG_APPROVAL_SURFACE=dashboard模式,审批从仪表盘进行。 - 仅支持 macOS / Linux:Cline adapter 明确标注 macOS/Linux only。
- 当前 v0.1.0:项目还很新(1 star),但 README 非常详尽且架构设计成熟,值得关注。
总结
Cerberus 解决的是一个真实且迫切的问题:AI 编码 Agent 正在变得强大、自主、快速——但安全控制的”无人环路”也越来越明显。Cerberus 的方案不是在 Agent 外面加围墙,而是在它每次伸手做事之前,放一个能看懂上下文的安全检查站。对于已经在生产环境使用 Claude Code 或 Codex 的团队,这个本地安全网关值得一试。
相关链接: