瑞士开发团队 Renuo 分享使用 Claude Code、OpenCode 等 AI 代理时的安全风险及应对策略。
随着 Claude Code、OpenCode、Antigravity 等 AI 编码代理被越来越多团队引入开发流程,其背后的安全风险也开始浮出水面。瑞士软件公司 Renuo 在将这些工具用于内部项目和自研产品(一个集成在 Redmine 中的 AI 代理)后,系统梳理了常见攻击面、真实事故案例,以及几种务实但各有缺陷的缓解策略。
大多数 AI 编码代理以启动它们的用户身份运行,能够读取与写入文件系统、执行任意 Shell 命令,并继承环境中的全部凭据。由于大模型本身易受「提示注入」影响——恶意指令可能藏在代码注释、README 文档或网页内容中——这一组合形成了真实的攻击面。
Renuo 将风险归纳为四类:
Renuo 团队在调研中收集到几个典型案例:
REDMINE_API_KEY 环境变量,并开始从生产环境拉取数据。nctl delete app 删除已有应用;好在执行前请求了确认。Renuo 表示,团队尚未遇到严重事故,主要原因是「不放手让代理在无人看管时运行,并坚持使用测试环境」。这些案例与 Johann Rehberger 在 39c3 大会演讲《Agentic ProbLLMs: Exploiting AI Computer-Use and Coding Agents》中展示的提示注入导致远程代码执行与凭据窃取的场景相互印证。
Renuo 列出四种常见的应对思路,并坦承每种都存在不足。
直接要求 LLM「不要做危险操作」在概率模型面前并不可靠。代理可能「忘记」约束,也可能被注入的提示覆盖。
让代理在每一步都请求确认,理论上最安全,实际却带来「审批疲劳」:开发者反复点击「同意」后,注意力会显著下降,反而更易放行危险操作。作者还提到,自己在试用 Antigravity 时曾误将「所有 Bash 命令」加入白名单,导致代理连续执行未授权操作,必须手动终止。
Claude Code 与 OpenCode 等都支持基于模式匹配的允许/拒绝规则,例如允许 git commit * 但拒绝 git push *。但 Renuo 指出三类问题:
Read(.env) 禁止读取,代理仍可通过 cat .env、grep . .env、python -c "print(open('.env').read())" 等方式绕过。.claude/settings.local.json 还会被加入全局 ~/.config/git/ignore,变更甚至不会在 git status 中显示。将代理运行在虚拟机、Docker 容器或专门的沙箱工具中,是目前 Renuo 认为最稳妥的方向——通过限制文件系统、网络与凭据的可访问范围,把「爆炸半径」控制在一个可丢弃的环境内。文章在此处的具体配置细节被截断,但其核心结论是:在开发体验与安全性之间取得平衡,需要的不是更聪明的提示词,而是更强的运行时隔离。
综合来看,Renuo 的实践经验传达出一个清晰的信号:AI 编码代理的能力越强,权限边界就越需要被显式管理,单纯依赖模型「听话」既不可靠也不可持续。