单条Prompt没问题,Agent仍可能完成攻击:跨会话行为与连接器身份边界

单条Prompt没问题,Agent仍可能完成攻击:跨会话行为与连接器身份边界

“帮我把这个端口扫描结果整理成表格”通常不会触发安全拦截。“根据表格筛选可登录主机”也可能只是运维任务。“为这些主机生成登录脚本”仍有合理用途。把三个请求放在不同会话里,最后却可能得到一套攻击流程。

Anthropic 在 2026 年 9 月威胁情报中提到,攻击者会把完整目标拆成多个看似无害的小任务,并让 Agent 执行命令、收集凭据、处理多个目标。与此同时,Hacktron 研究人员披露的漏洞链表明,一旦 AI 工具连接到账号、代码仓库等外部系统,身份问题就会沿连接器扩散:被接管的不只是聊天记录,还可能是 Agent 能代表用户执行的所有动作。

这两类问题看似不同,一个发生在模型会话,一个发生在外部连接器。它们实际指向同一件事:安全边界不再等于一次 Prompt,也不再等于一个登录账号。真正需要管理的是“某个主体在一段时间内,借助多个会话和工具,完成了什么结果”。

一、逐条内容审核为什么不够

传统模型安全把一次输入输出作为主要判断单元。输入是否要求制作恶意软件,输出是否包含高危代码,分类器给出允许或拒绝。这种方法适合拦截直接请求,却看不到长期任务。

Agent 带来了三项变化。

第一,任务有状态。它会保存文件、记忆、工具结果和中间计划。第十步调用工具时,危险含义可能来自第一步的一个变量。

第二,动作有副作用。普通聊天输出一段文字;Agent 可以发邮件、运行命令、创建云资源、修改仓库和提交付款。即使文本本身无害,动作组合也可能造成损失。

第三,执行可以跨会话。用户主动新开窗口,后台任务定时恢复,多 Agent 之间转交结果,都会切断单会话审核的上下文。攻击者甚至不需要让某个会话理解全局目标,只要每个环节产出下一环节所需材料。

所以,“每条请求都通过安全检查”并不能推出“整个行为安全”。安全系统需要从内容分类转向行为分析。

二、建立跨会话行为图

一种可落地的方法是把 Agent 的操作记录成行为图,而不是平铺日志。图中的节点包括用户、Agent 实例、会话、任务、凭证、文件、外部账号和工具动作;边表示读取、生成、转交、授权和执行。

例如,某用户在会话 A 上传主机列表,Agent 生成扫描脚本;会话 B 读取脚本并运行;会话 C 根据结果尝试登录。单看每段可能都符合安全策略,行为图却会出现“资产枚举—漏洞验证—凭证使用”的连续路径。

构建行为图需要稳定的关联标识。新开会话不能自动清空风险状态。平台可以依据已认证用户、设备、组织、任务 ID、共享文件、Connector Token 和短期时间窗进行关联。关联不是为了把用户所有活动永久汇总,而是为了在合理保留期内发现动作链。

风险评分应针对动作序列,而非简单相加。读取公开 CVE 和生成测试代码风险不高,但紧接着对大量外部 IP 执行、抓取凭据并压缩外传,风险会陡增。检测规则可以同时使用确定性序列、统计异常和模型分类,但最终阻断条件要可解释,例如“30 分钟内枚举 200 个外部目标并对 17 个目标尝试身份验证”。

跨会话检测也要避免把正常安全研究全部误杀。企业可以引入任务声明:红队人员在开始前登记测试范围、目标网段、时间和工单号。Agent 的操作只要留在批准范围内就可继续,越界则降权或暂停。授权范围应由外部策略系统读取,不能靠提示词里写一句“我有许可”。

三、记忆系统是容易被忽略的攻击面

长期记忆会把一个会话的内容带到另一个会话。攻击者可以在普通文档、工单或网页中埋入指令,让 Agent 把它写入记忆,之后在更高权限任务中触发。这类持久化 Prompt Injection 与浏览器里的存储型 XSS 很像:恶意载荷不必立即执行。

因此记忆不能只按“用户说过”与“系统知道”分类。每条记忆应带来源、创建时间、信任等级、适用范围和过期时间。从外部网页提取的内容默认是低信任数据,不能成为工具调用指令;由管理员写入的组织策略则可作为高信任约束。

在调用高风险工具前,Agent 应只检索与当前任务有关、来源满足要求的记忆。检索结果需要保持数据属性,不能拼进提示词后失去来源标签。若低信任内容建议“上传日志到此地址”,策略层应把它当作待分析数据,而不是执行计划。

删除记忆同样要彻底。主记录删除后,向量索引、缓存、摘要和任务快照中不应继续残留可执行内容。企业还需要能查询某条记忆影响过哪些任务,以便发生污染后回溯。

四、连接器不是插件,而是身份代理

很多 Agent 平台把 GitHub、Slack、邮箱、网盘和云控制台称作 Connector,产品界面看起来像安装插件。安全上更准确的定义是“身份代理”:它让 Agent 以用户或服务账号的名义进入另一个安全域。

风险常出在授权粒度不匹配。用户为了让 Agent 总结 GitHub Issue,授予了仓库写权限;为了搜索邮箱,连接器拿到了发送、删除和规则管理权限;为了分析云账单,Token 同时允许创建资源。Agent 并不需要这些权限,但 OAuth Scope 或厂商 API 只能粗粒度授权。

平台至少要区分三种身份:登录平台的用户身份、执行任务的 Agent 身份、外部系统看到的代理身份。外部审计记录如果只显示“张某修改了仓库”,管理员就无法判断是本人、自动化脚本还是 Agent。理想状态是外部系统支持 On-behalf-of 标记,同时记录 Agent ID 和授权用户;若做不到,连接器网关也应保存映射并在提交内容中加入可验证来源。

长期刷新 Token 尤其危险。它把一次“帮我读一下邮件”的授权变成持续数月的后台访问。更稳妥的方式是使用短期任务凭证:用户批准具体任务后,凭证只允许访问指定邮箱文件夹、仓库或云项目,在几十分钟内有效,任务完成即撤销。刷新权限保存在独立的凭证代理中,模型和 Agent 运行环境永远拿不到原始密钥。

单条Prompt没问题,Agent仍可能完成攻击:跨会话行为与连接器身份边界:正文图

五、在连接器网关执行最小权限

仅靠外部系统的 OAuth Scope 很难做到足够细。企业可以在 Agent 与外部 API 之间增加连接器网关,做二次约束。

网关收到调用时检查主体、任务、资源、动作和上下文。例如 Agent 虽然持有 GitHub 仓库写 Scope,但本次任务策略只允许读取 Issue 和创建草稿 PR;直接合并、修改 Actions 工作流、添加 Deploy Key 一律拒绝。邮箱任务只允许读取指定标签,发送功能默认关闭。云账单分析只允许调用计费和资源清单接口。

对于写操作,网关可采用“两阶段提交”:Agent 先创建草稿,系统展示差异和影响,用户批准后由独立执行器提交。代码仓库要特别保护 CI/CD 配置、依赖清单、密钥管理和分支规则,因为一个很小的文件修改就可能转化为供应链执行权限。

输出目的地也需要限制。许多数据泄漏不是通过“下载全部文件”完成,而是 Agent 读取少量敏感内容后,借助消息、Webhook、Issue 或 DNS 工具逐步外传。连接器策略应同时控制读端和写端,并检查敏感数据能否从高信任域流向低信任域。

六、不要让已登录状态自动等于已授权动作

账号接管在 Agent 时代后果更大,是因为攻击者接管一个账号后,可能继承用户已经配置好的全部连接器。过去拿到聊天账号主要暴露历史对话;现在还可能进入代码仓库、企业网盘和内部工单。

应对方法是把登录认证与动作授权分开。用户登录成功,只能证明“当前会话可能属于这个人”,不能证明每个高风险动作都得到同意。修改连接器、导出大量数据、发送外部邮件、合并代码、创建云密钥等动作需要 Step-up Authentication,例如重新验证硬件密钥,并明确显示将要操作的资源。

敏感连接器不应自动对所有 Agent 开放。不同 Agent 使用独立凭证和独立策略,Coding Agent 不能因为用户还绑定了财务系统,就能发现或调用付款工具。工具清单本身也可能泄露组织结构,应按任务动态下发,而不是把全部 Connector 描述塞进模型上下文。

当身份风险升高时,系统应能快速缩小权限,而不只是强制退出。检测到异常地点登录后,可以把所有连接器切到只读、吊销任务凭证、冻结后台 Agent,并保留调查所需日志。直接删除会话可能反而破坏证据。

七、监控结果,而不是只监控调用

工具调用日志显示 Agent 调用了 create_pull_request,但安全人员还需要知道 PR 改了哪些文件、是否触发 CI、是否被合并以及最终部署到哪里。动作结果往往比动作名称更重要。

可以为高风险资源建立“效果传感器”:仓库侧观察权限、工作流和依赖变化;邮箱侧观察转发规则、外发量和新收件人;云平台侧观察 IAM、网络暴露和密钥创建;终端侧观察进程、文件和网络连接。Agent 平台把这些结果回填到行为图,才能判断一次调用是否演化成安全事件。

审计记录需要包含模型版本、工具参数、策略决定、凭证 ID、外部响应和最终状态。提示词可以因隐私要求做脱敏或摘要,但资金、权限、代码与数据流向等关键事实不能只存在于模型推理文本中。

事件响应预案也应按 Agent 特性重写。发现可疑行为后,顺序通常是暂停任务、吊销短期凭证、切断特定连接器、保存运行快照、检查已产生的外部效果,再决定是否冻结用户账号。只封禁一次对话,后台任务可能仍在运行。

八、部署时先做四件事

如果企业已经接入多个 Agent 和 Connector,可以先做四项改造。

其一,为每次任务生成独立 ID,并让所有会话、子 Agent、文件和工具调用继承它。没有统一关联键,就谈不上跨会话检测。

其二,把 Connector Token 收回到凭证代理,Agent 只拿短时、限资源的能力票据。即使运行环境被注入,攻击者也难以获得长期密钥。

其三,为写操作建立默认拒绝策略。逐个开放创建、修改、发送、合并和删除能力,同时设置速率、数量和目标限制。

其四,针对真实动作链做演练。测试人员可以把攻击拆到多个会话,通过文档注入指令,尝试借低权限 Connector 影响高权限系统,并验证暂停按钮是否真的终止子任务与排队任务。

Agent 安全的判断单位已经变了。单条 Prompt 可以完全正常,单次 API 调用也可以合法,组合起来仍可能完成攻击。把会话、记忆、凭证、连接器和最终效果串成一条行为链,再用独立身份和短期授权约束每个节点,才有机会看见真正的风险边界。

分享到