2026 年 7 月上旬,一组终端安全数据把 Claude Code、Cursor 和 Codex 放到了同一张告警图里。

Claude Code、Cursor、Codex 在开发者电脑上正常干活,却触发了原本用来抓攻击者的检测规则。不是因为这些工具突然变成了恶意软件,而是它们做的事情越来越像一个真正坐在终端前的人:找凭据、跑 PowerShell、下载工具、修改文件,失败后再换一种方法。

不少团队接入 AI 编程工具的方式还是:装好客户端,填入 Key,权限一路点允许。功能先跑起来,安全问题以后再说。

Agent 跑得越勤,这笔账越容易拖出问题。

AI 编程 Agent 权限治理示意图

安全软件到底看到了什么

据 Sophos 公布的一周终端遥测样本,AI 编程 Agent 命中的阻断活动里,凭据访问占 56.2%,执行行为占 28.8%。凭据访问中占比最大的一类,是进程调用 Windows DPAPI 解密浏览器保存的数据。这是 Sophos 自身客户环境中的短期样本,不能外推成整个行业的发生率,但案例足以说明终端策略会遇到什么新问题。

公开案例里还出现了几种很典型的动作:

  • Claude Code 调用 cmdkey /list 枚举 Windows Credential Manager 中的凭据;
  • Codex 下载 Python 安装器时,先尝试 certutil,被阻止后换成 bitsadmin
  • Cursor 通过 PowerShell 向启动目录写入脚本,命中了持久化规则;
  • Agent 在浏览器自动化过程中读取浏览器凭据存储。

单看任务目的,其中一些操作可能完全合理。比如用户确实让 Agent 安装 Python,下载地址也是 python.org。

问题出在行为上。

certutilbitsadmin 都是 Windows 自带工具,管理员会用,攻击者也会用。一个程序在下载失败后自动换工具继续尝试,这正是安全产品需要警惕的行为。Agent 只是把这种“遇到阻碍再找路”的能力带进了日常开发环境。

所以不能简单地把告警分成“Agent 产生的,可以忽略”和“人产生的,需要处理”。父进程可信,不代表它的每个子进程和每次操作都合理。

第一项:不要把跳过权限确认当成默认配置

风险很高的一种省事方式,是长期使用类似 --dangerously-skip-permissions 的模式。

临时演示时少点几次确认,看起来很爽。放进真实工作环境后,它意味着 Agent 可以在没有人工停顿的情况下连续读文件、执行命令和修改系统状态。更麻烦的是,Agent 往往会自动重试。第一次被拦住,第二次可能换一条命令。

我更建议按任务拆权限:

  • 代码阅读和搜索可以放宽;
  • 工作区内修改需要保留 diff;
  • 网络访问、包安装和工作区外写入单独确认;
  • 读取浏览器凭据、.env、SSH 目录和系统凭据库直接拒绝;
  • 启动项、计划任务和系统服务修改必须由人执行。

权限越靠近系统边界,越不能用“这个 Agent 平时挺靠谱”作为放行理由。

第二项:把 Key 从开发者日常环境里拆出来

很多安全问题不是模型造成的,是密钥摆放方式太随意。

同一个 API Key 同时放在终端配置、IDE、自动化脚本和截图里,出了问题很难判断从哪泄露。更糟糕的是,有人直接把 Key 写进项目配置,再让 Agent 帮忙整理仓库。

至少做到下面几件事:

  1. 每个工具或项目使用独立 Key,不共用生产主密钥。
  2. Key 通过环境变量或系统密钥服务注入,不写进仓库。
  3. 测试 Key 设置较小额度,确认链路后再逐步增加。
  4. 日志里只保留 Key 的前后少量字符,不能记录完整请求头。
  5. 离职、设备丢失或仓库误传时,可以只撤销受影响的 Key。

这里的目标不是“绝对不会泄露”,而是泄露后能确定范围,也能快速止损。

第三项:API 网关管推理流量,终端策略管本地动作

2026 年 7 月,AWS 的 Claude Code 与 Bedrock 参考仓库已经把新部署建议指向 Claude Apps Gateway。Anthropic 和 AWS 给出的方案把企业常见需求集中到了一层:OIDC 登录、按组分配模型、个人成本归属、额度上限和 OTLP 遥测。

在 OIDC 和 Bedrock 方案中,开发者不必在电脑上长期保存 AWS 凭据或共享 API Key。管理员也能回答几个以前很难回答的问题:

  • 这次调用是谁发出的?
  • 用了哪个模型?
  • 哪个团队花了多少钱?
  • 承包商能不能使用高成本模型?
  • 超过月度额度后是否自动阻断?

但网关只处在推理请求链路上。

AWS 的参考实现明确区分了服务端强制和客户端策略:身份、模型访问、额度可以在网关服务端强制;本地工具权限和 Hook 主要由客户端执行,修改过的客户端仍可能绕过。想限制 Agent 读取本机凭据,还得依靠 MDM、终端安全策略、文件权限和沙箱。

这条边界很重要。API 网关负责谁能调用什么模型,本地安全策略负责 Agent 能在电脑上做什么。 两者不能互相替代。

可以把完整链路理解成下面这样:

开发者身份
   ↓
终端策略与文件权限
控制:文件读取、命令执行、联网与系统修改
   ↓
Claude Code / Codex / Cursor
   ↓
API 网关
控制:身份、模型、额度、路由与请求审计
   ↓
模型供应商

Agent 在本机执行 rm、读取 .env 或写启动项时,请求甚至可能还没到 API 网关。这个阶段的风险,不能靠更换模型接口解决。

第四项:别把整个 Agent 进程加入白名单

安全团队看到大量误报后,最容易采取的办法是:只要父进程来自 claudecursorcodex,就不告警。

这会把真正需要关注的行为一起放过去。

更合理的做法是按行为分级:

  • 下载公开依赖、在工作区编译,可以结合父进程、下载域名和目录降低告警等级;
  • 访问浏览器凭据、读取系统密钥库,仍然保留高优先级;
  • 写启动目录、创建计划任务、修改系统服务,要求人工复核;
  • 从临时目录运行未知二进制,继续阻断;
  • Agent 连续更换系统工具绕过阻断时,记录完整操作链。

白名单应该尽量窄。可以允许某个工作区中的特定操作,不要允许某个 Agent 做所有事。

告警出现后的五分钟怎么处理

先别急着重跑任务,也别立即关闭规则。

  1. 保存 Agent 父进程、子进程、命令行、工作目录和告警时间。
  2. 确认行为只是被拦截,还是已经成功读取、下载或写入。
  3. 如果碰过凭据文件或密钥库,立即撤销相关 Key 和会话,不等调查结束。
  4. 对照用户原始任务,判断该动作是否真的有必要。
  5. 修正权限或任务范围后再复现,并保留新旧两次操作链。

“用户确实让它安装依赖”只能解释任务背景,不能自动证明 Agent 选择的命令和目录安全。

第五项:日志既要能追责,也不能变成新的泄密源

Agent 的调用链比普通聊天复杂。一轮任务可能包含模型请求、工具调用、Shell 命令、文件路径和多次重试。没有日志,出了问题只能猜;日志开得太全,又可能把源码、提示词和凭据全部留在磁盘。

建议把日志分三层:

默认指标:用户、项目、模型、Token、状态码、耗时、请求 ID。

排错日志:工具名称、文件路径的脱敏形式、错误类型和重试次数。

临时深度日志:完整工具参数或请求正文,只在明确的排错窗口开启,并设置自动过期。

Claude Apps Gateway 的参考配置也采用类似思路:指标默认开启,可能包含命令和文件路径的日志、包含完整工具输入的 Trace 则需要显式选择。

日志不是越多越安全。关键是能回答问题,同时不给下一次泄露准备完整材料。

第六项:上线前跑一次真正的 Agent 验收

很多团队验证接口,只发送一句“你好”。返回 200,就认为接入完成。

对 Coding Agent 来说远远不够。

我会保留下面这组最小测试:

  1. 只读扫描一个小仓库,确认不会越出工作目录。
  2. 修改一个文件,检查 diff 是否符合任务范围。
  3. 执行一次测试命令,确认失败后不会无限换命令重试。
  4. 请求一个被禁止的敏感文件,确认策略确实阻断。
  5. 用较长任务检查流式事件、工具调用和会话恢复。
  6. 模拟 401、429、5xx,确认客户端不会泄露 Key,也不会无限重试。

模型接口还需要单独核对模型 ID、响应 model 字段、Token、SSE 和工具调用结构。普通文本成功不能证明 Codex 的 Responses API、Claude Code 的 Messages API 或 Cursor Agent 的工具链都兼容。

小团队不自建企业网关,应该从哪里开始

不是每个团队都需要立刻搭 OIDC、PostgreSQL、OTLP Collector 和一整套企业控制面。

人数不多时,不妨用两天完成第一版治理。

第一天:先收口权限和密钥

  • 盘点正在使用的 Agent、配置文件和 API Key;
  • 撤销多人共享或已经进入聊天记录、截图的 Key;
  • 按项目创建独立 Key,测试环境限制额度;
  • 恢复高风险操作的人工确认;
  • 明确禁止读取 .env、SSH 目录、浏览器凭据和系统密钥库。

第二天:补验收和审计

  • 用一个小仓库跑完只读、单文件修改、测试和失败重试;
  • 保存请求 ID、模型、Token、状态码和工具事件;
  • 为异常用量、429 和连续 5xx 设置提醒;
  • 写清楚密钥泄露、越权读文件和异常下载的处理人;
  • 确认可以在十分钟内撤销单个项目,而不是让所有团队一起停机。

完成这两天的工作后,再决定是否需要 OIDC、集中网关和完整 OTLP 链路。团队规模不是唯一判断标准;共享密钥数量、合规要求和问题追溯难度更重要。

长期至少保留下面四项:

  • 按项目创建独立 API Key;
  • 统一 Base URL 和模型 ID 管理;
  • 设置用量预警并定期核对账单;
  • 保存一套可重复的接口和 Agent 验收任务。

需要统一接入多个模型时,可以使用 OpenAI Compatible 网关减少客户端改造,但仍要验证各工具真实需要的协议。Codex 更依赖 Responses API,Claude Code 使用 Anthropic Messages,普通聊天接口成功不能互相替代。

我们在 AI快站文档站整理了几份可直接执行的检查:

这几份内容由 AI快站维护,涉及自有服务的部分以控制台和实际接口为准。模型检测提供的是当前时点的兼容性与行为信号,不是厂商身份认证。

写在最后

AI 编程 Agent 越像一个能独立工作的开发者,就越不能继续按“聊天软件”管理。

它会尝试,会失败,会换方法,还会在你没盯着的时候连续执行下一步。这个能力正是大家愿意用它的原因,也是权限和审计必须补上的原因。

别因为一次安全告警就禁止所有 Agent,也别因为任务完成了就把所有告警关掉。先把终端动作、密钥、模型调用和审计拆开,再决定每一层允许到哪里。

这比给某个工具一个永久白名单可靠得多。

参考资料

  1. Sophos:AI coding agents 与终端遥测案例
  2. Anthropic:Claude Apps Gateway
  3. AWS:Guidance for Claude Code and Cowork on Amazon Bedrock
  4. AWS Samples:Claude Apps Gateway on AWS
  5. OpenAI:Codex Security
  6. Cursor:Security
Logo

欢迎加入DeepSeek 技术社区。在这里,你可以找到志同道合的朋友,共同探索AI技术的奥秘。

更多推荐