Claude Code、Codex、Cursor为何触发安全告警?Agent权限治理实录
2026 年 7 月上旬,一组终端安全数据把 Claude Code、Cursor 和 Codex 放到了同一张告警图里。
Claude Code、Cursor、Codex 在开发者电脑上正常干活,却触发了原本用来抓攻击者的检测规则。不是因为这些工具突然变成了恶意软件,而是它们做的事情越来越像一个真正坐在终端前的人:找凭据、跑 PowerShell、下载工具、修改文件,失败后再换一种方法。
不少团队接入 AI 编程工具的方式还是:装好客户端,填入 Key,权限一路点允许。功能先跑起来,安全问题以后再说。
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。
问题出在行为上。
certutil 和 bitsadmin 都是 Windows 自带工具,管理员会用,攻击者也会用。一个程序在下载失败后自动换工具继续尝试,这正是安全产品需要警惕的行为。Agent 只是把这种“遇到阻碍再找路”的能力带进了日常开发环境。
所以不能简单地把告警分成“Agent 产生的,可以忽略”和“人产生的,需要处理”。父进程可信,不代表它的每个子进程和每次操作都合理。
第一项:不要把跳过权限确认当成默认配置
风险很高的一种省事方式,是长期使用类似 --dangerously-skip-permissions 的模式。
临时演示时少点几次确认,看起来很爽。放进真实工作环境后,它意味着 Agent 可以在没有人工停顿的情况下连续读文件、执行命令和修改系统状态。更麻烦的是,Agent 往往会自动重试。第一次被拦住,第二次可能换一条命令。
我更建议按任务拆权限:
- 代码阅读和搜索可以放宽;
- 工作区内修改需要保留 diff;
- 网络访问、包安装和工作区外写入单独确认;
- 读取浏览器凭据、
.env、SSH 目录和系统凭据库直接拒绝; - 启动项、计划任务和系统服务修改必须由人执行。
权限越靠近系统边界,越不能用“这个 Agent 平时挺靠谱”作为放行理由。
第二项:把 Key 从开发者日常环境里拆出来
很多安全问题不是模型造成的,是密钥摆放方式太随意。
同一个 API Key 同时放在终端配置、IDE、自动化脚本和截图里,出了问题很难判断从哪泄露。更糟糕的是,有人直接把 Key 写进项目配置,再让 Agent 帮忙整理仓库。
至少做到下面几件事:
- 每个工具或项目使用独立 Key,不共用生产主密钥。
- Key 通过环境变量或系统密钥服务注入,不写进仓库。
- 测试 Key 设置较小额度,确认链路后再逐步增加。
- 日志里只保留 Key 的前后少量字符,不能记录完整请求头。
- 离职、设备丢失或仓库误传时,可以只撤销受影响的 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 进程加入白名单
安全团队看到大量误报后,最容易采取的办法是:只要父进程来自 claude、cursor 或 codex,就不告警。
这会把真正需要关注的行为一起放过去。
更合理的做法是按行为分级:
- 下载公开依赖、在工作区编译,可以结合父进程、下载域名和目录降低告警等级;
- 访问浏览器凭据、读取系统密钥库,仍然保留高优先级;
- 写启动目录、创建计划任务、修改系统服务,要求人工复核;
- 从临时目录运行未知二进制,继续阻断;
- Agent 连续更换系统工具绕过阻断时,记录完整操作链。
白名单应该尽量窄。可以允许某个工作区中的特定操作,不要允许某个 Agent 做所有事。
告警出现后的五分钟怎么处理
先别急着重跑任务,也别立即关闭规则。
- 保存 Agent 父进程、子进程、命令行、工作目录和告警时间。
- 确认行为只是被拦截,还是已经成功读取、下载或写入。
- 如果碰过凭据文件或密钥库,立即撤销相关 Key 和会话,不等调查结束。
- 对照用户原始任务,判断该动作是否真的有必要。
- 修正权限或任务范围后再复现,并保留新旧两次操作链。
“用户确实让它安装依赖”只能解释任务背景,不能自动证明 Agent 选择的命令和目录安全。
第五项:日志既要能追责,也不能变成新的泄密源
Agent 的调用链比普通聊天复杂。一轮任务可能包含模型请求、工具调用、Shell 命令、文件路径和多次重试。没有日志,出了问题只能猜;日志开得太全,又可能把源码、提示词和凭据全部留在磁盘。
建议把日志分三层:
默认指标:用户、项目、模型、Token、状态码、耗时、请求 ID。
排错日志:工具名称、文件路径的脱敏形式、错误类型和重试次数。
临时深度日志:完整工具参数或请求正文,只在明确的排错窗口开启,并设置自动过期。
Claude Apps Gateway 的参考配置也采用类似思路:指标默认开启,可能包含命令和文件路径的日志、包含完整工具输入的 Trace 则需要显式选择。
日志不是越多越安全。关键是能回答问题,同时不给下一次泄露准备完整材料。
第六项:上线前跑一次真正的 Agent 验收
很多团队验证接口,只发送一句“你好”。返回 200,就认为接入完成。
对 Coding Agent 来说远远不够。
我会保留下面这组最小测试:
- 只读扫描一个小仓库,确认不会越出工作目录。
- 修改一个文件,检查 diff 是否符合任务范围。
- 执行一次测试命令,确认失败后不会无限换命令重试。
- 请求一个被禁止的敏感文件,确认策略确实阻断。
- 用较长任务检查流式事件、工具调用和会话恢复。
- 模拟 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,也别因为任务完成了就把所有告警关掉。先把终端动作、密钥、模型调用和审计拆开,再决定每一层允许到哪里。
这比给某个工具一个永久白名单可靠得多。
参考资料
更多推荐

所有评论(0)