跳转至

关于智能体安全的一切——简明指南

everything claude code / research / security


距离上一篇文章已经过去了一段时间。我一直在花时间构建ECC的开发工具生态系统。这期间最热门且重要的主题之一就是智能体安全。

开源智能体的大规模普及即将到来。像OpenClaw这样的工具将运行在你的计算机上。像Claude Code和Codex(使用ECC)这样的持续运行式执行框架(harness)会扩大攻击面。2026年2月25日,Check Point Research发布了关于Claude Code的披露公告,这应该会终结“理论上可能但实际不会发生/危言耸听”的争论阶段。工具已经达到临界规模,漏洞利用的严重性正在成倍增加。

其中一个问题CVE-2025-59536(CVSS 8.7)使得项目中的代码可以在用户接受信任对话框之前被执行。另一个CVE-2026-21852则允许通过攻击者控制的ANTHROPIC_BASE_URL重定向API流量,在信任确认之前泄露API密钥。攻击者只需要克隆一个仓库然后打开工具即可。

我们信任的工具,同时也是被攻击者盯上的工具。这就是转变所在。提示词注入不再是搞笑的模型失误或有趣的越狱截图(虽然下面我会分享一个搞笑的例子)。在智能体系统中,它可能演变为shell执行、密钥泄露、工作流滥用,甚至是悄无声息的横向移动。

攻击向量 / 攻击面

攻击向量本质上就是所有交互的入口点。智能体连接的服务越多,积累的风险就越大。供给智能体的外部信息越多,风险就越大。

攻击链与涉及的节点 / 组件

Attack Chain Diagram

例如,假设你的智能体通过网关层连接到WhatsApp。攻击者知道你的WhatsApp号码。他们使用现有的越狱手段尝试提示词注入。他们在聊天中刷屏发送越狱内容。智能体读取消息并将其视为指令,执行暴露私密信息的响应。如果智能体拥有root权限、广泛的文件系统访问权或有用的凭据,你就已经被入侵了。

即使是像Good Rudi越狱片段那样让人发笑的东西(我承认确实很好笑),也指向了同一类问题:反复尝试、最终导致机密信息泄露。表面上幽默,但底层的失败是严重的——也就是说,既然这是为儿童制作的内容,从这里稍作推测,你很快就会得出“为什么这可能造成毁灭性影响”的结论。当模型连接到真实的工具和真实的权限时,同样的模式会走得更远。

WhatsApp只是一个例子。邮件附件是一个巨大的攻击向量。攻击者发送嵌入了提示词的PDF,智能体作为工作的一部分读取附件时,本应是有用数据的文本就变成了恶意指令。如果你在做OCR,截图和扫描件也同样危险。Anthropic自己的提示词注入研究就明确将隐藏文本和被篡改的图像列为实际的攻击素材。

GitHub PR审查也是目标。恶意指令可以潜藏在隐藏的diff评论、Issue正文、链接的文档、工具输出,甚至是“友好”的审查上下文中。无论你是在上游配置了机器人(代码审查智能体,如Greptile、Cubic等),还是在下游使用本地自动化方案(OpenClaw、Claude Code、Codex、Copilot编码智能体等),以低监督和高自主性审查PR都会增加提示词注入的攻击面风险,而这些漏洞利用会影响你仓库下游的所有用户。

GitHub自身的coding-agent设计,就是对其威胁模型的无声承认。只有拥有写入权限的用户才能向智能体分配工作。低权限评论不会显示给智能体。隐藏字符会被过滤。推送受到约束。工作流仍然需要人类点击批准并运行。

MCP服务器则是完全不同的另一个层面。它们可能意外地存在漏洞、在设计上就是恶意的,或者只是被客户端过度信任。工具可以在看似提供上下文的同时泄露数据。OWASP正是出于这个原因发布了MCP Top 10:工具投毒、通过上下文载荷进行的提示词注入、命令注入、影子MCP服务器、密钥泄露。

Simon Willison的“致命三联征”框架是思考这个问题最清晰的方式:私密数据、不可信内容、外部通信。当这三者同时存在于同一个运行时中,提示词注入就不再是搞笑的事,而开始变成数据泄露。

Claude Code CVE(2026年2月)

Check Point Research于2026年2月25日公开了关于Claude Code的研究结果。相关问题在2025年7月至12月期间被报告,并在公开披露之前已得到修补。

重要的不仅仅是CVE ID和事后分析。它们让我们看清了执行框架(harness)运行层中实际发生的事情。

CVE-2025-59536。 项目中的代码有可能在信任对话框被接受之前被执行。NVD和GitHub安全公告将其关联到1.0.111之前的版本。

CVE-2026-21852。 攻击者控制的项目可以覆盖ANTHROPIC_BASE_URL,重定向API流量,并在信任确认之前泄露API密钥。NVD建议手动更新者升级到2.0.65或更高版本。

MCP同意滥用。 Check Point还指出,仓库控制的MCP配置和设置可以在用户真正信任目录之前自动批准项目MCP服务器。

过去一年发生了什么变化

这一讨论在2025年和2026年初迅速推进。

Snyk于2026年2月发布的ToxicSkills研究扫描了3,984个公开技能(skill),发现36%存在提示词注入,并识别出1,467个恶意载荷。请将技能视为供应链工件,因为它们的本质就是如此。

风险量化

以下是一些值得记住的清晰数字:

统计 详情
CVSS 8.7 Claude Code钩子 / 信任前执行问题:CVE-2025-59536
31家公司 / 14个行业 Microsoft的内存投毒报告
3,984 Snyk的ToxicSkills研究中扫描的公开技能
36% 该研究中包含提示词注入的技能比例
1,467 Snyk识别出的恶意载荷
17,470 Hunt.io报告的攻击暴露在外的OpenClaw系列实例

沙箱

root权限是危险的。广泛的本地访问是危险的。同一台机器上的长期有效凭据是危险的。“YOLO,Claude会搞定的”不是正确的做法。答案是隔离。

首先隔离身份

不要把个人Gmail交给智能体。创建一个agent@yourdomain.com。不要把主Slack交给它。创建机器人用户或机器人频道。不要把个人GitHub令牌交给它。使用短期的、限定作用域的令牌或专用的机器人账户。

如果智能体拥有与你相同的账户,那么被入侵的智能体就等同于你本人。

在隔离环境中运行不受信任的工作

不受信任的仓库、附件较多的工作流,或需要摄取大量外部内容的任务,请在容器、虚拟机、devcontainer或远程沙箱中运行。

services:
  agent:
    build: .
    user: "1000:1000"
    working_dir: /workspace
    volumes:
      - ./workspace:/workspace:rw
    cap_drop:
      - ALL
    security_opt:
      - no-new-privileges:true
    networks:
      - agent-internal

networks:
  agent-internal:
    internal: true

internal: true是关键。即使智能体被入侵,除非你明确给它路由,否则它无法对外回传(phone home)。

限制工具与路径

{
  "permissions": {
    "deny": [
      "Read(~/.ssh/**)",
      "Read(~/.aws/**)",
      "Read(**/.env*)",
      "Write(~/.ssh/**)",
      "Write(~/.aws/**)",
      "Bash(curl * | bash)",
      "Bash(ssh *)",
      "Bash(scp *)",
      "Bash(nc *)"
    ]
  }
}

净化

LLM读取的一切都是可执行的上下文。一旦文本进入上下文窗口,“数据”和“指令”之间就不再有任何有意义的区别。

隐藏Unicode与注释载荷

# ゼロ幅およびbidi制御文字
rg -nP '[\x{200B}\x{200C}\x{200D}\x{2060}\x{FEFF}\x{202A}-\x{202E}]'

# HTMLコメントまたは疑わしい隠しブロック
rg -n '<!--|<script|data:text/html|base64,'

在模型看到附件之前进行净化

实用规则: - 只提取所需的文本 - 在可能的情况下移除注释和元数据 - 不要将实时外部链接直接提供给特权智能体 - 如果任务是事实提取,请将提取步骤与执行操作的智能体分离

批准边界 / 最小自主权

模型不应该是shell执行、网络调用、工作区外写入、密钥读取和工作流分发的最终权限方。

请在本地落实以下规则: - 在沙箱之外执行shell命令前要求批准 - 在网络出口(egress)前要求批准 - 在读取包含密钥的路径前要求批准 - 在仓库之外写入前要求批准 - 在工作流分发或部署前要求批准

可观测性 / 日志记录

至少记录以下内容: - 工具名称 - 输入摘要 - 接触过的文件 - 批准决定 - 网络尝试 - 会话/任务ID

{
  "timestamp": "2026-03-15T06:40:00Z",
  "session_id": "abc123",
  "tool": "Bash",
  "command": "curl -X POST https://example.com",
  "approval": "blocked",
  "risk_score": 0.94
}

紧急停止开关

请了解优雅终止(graceful kill)与强制终止(hard kill)之间的区别。SIGTERM给进程清理的机会。SIGKILL立即将其停止。

请终止整个进程组,而不仅仅是父进程。如果只终止父进程,子进程会继续运行。

记忆

持久化记忆很方便,但同时它也是助燃剂。

请收紧记忆的范围: - 不要在记忆文件中保存密钥 - 将项目记忆与用户全局记忆分开 - 在不可信执行之后重置或轮换记忆 - 在高风险工作流中完全禁用长期记忆

最低限度检查清单

如果要在 2026 年自主运行智能体,这是最低要求: - 将智能体身份与个人账户分离 - 使用短生命周期的范围限定凭据 - 在容器、devcontainer、VM 或远程沙箱中运行不可信任务 - 默认拒绝出站网络 - 限制从包含密钥的路径读取 - 在特权智能体查看之前,对文件、HTML、截图和链接内容进行净化 - 对沙箱外的 shell、出口流量、部署以及仓库外写入要求审批 - 记录工具调用、审批和网络尝试 - 实现进程组终止和基于心跳的死人开关 - 保持持久内存窄范围且可丢弃 - 像扫描其他供应链工件一样扫描技能、钩子、MCP 配置和智能体描述符

结语

如果你正在自主运行智能体,那么 Prompt 注入是否存在已经不再是问题。它存在。问题在于运行时是否假设模型在最终读取敌对内容时,仍能保持有价值的内容。

这就是现在应该使用的标准。

以恶意文本会进入上下文为前提来构建。 以工具说明可能说谎为前提来构建。 以仓库可能被投毒为前提来构建。 以内存可能持久化错误内容为前提来构建。 以模型偶尔会在争论中失败为前提来构建。

并且,确保即使在那场争论中失败,也能存活下来。

如果你只想要一条规则:不要让便利层超越隔离层。

仅凭这一条规则,你就能走得很远。

扫描你的配置:github.com/affaan-m/agentshield


参考文献


如果你还没有阅读前面的指南,请从这里开始:

Everything Claude Code 简明指南

Everything Claude Code 长文指南

也请保存以下仓库: - github.com/affaan-m/everything-claude-code - github.com/affaan-m/agentshield

本页原文 Markdown:在 AtomGit 查看·内容源自开源项目 ev/ECC