夜雨聆风学习资料网

ARTICLE · 1116421

AI编码代理需要一个机密安全的上下文边界

AI编码代理需要一个机密安全的上下文边界

AI编码代理在搜集上下文时可能无意中读取本地敏感凭证并发送至外部。传统的代码提交安全检查已不足够,团队必须在模型提示词提交前建立零信任的本地过滤机制,确保代理上下文的安全边界。

译自:AI coding agents need a secrets-safe context boundary[1]

作者:Taylor Luttrell-Williams

AI编码代理在软件开发和交付中扮演着重要角色,这是有充分理由的。它们可以调查漏洞、追踪依赖关系、重构服务并提出修补建议,而开发者无需手动搜集所有相关的上下文。这种能力源于代理对上下文的巨大需求。为了做出明智的决策,代理会读取源代码、配置文件、终端输出、错误消息、环境信息等等……而且是很多很多。

“安全、具代理性的开发取决于许多团队仍然缺乏的一项安全控制:防止机密泄露给AI编码代理并成为模型上下文。”

从安全角度来看,当代理在寻找上下文的过程中无意中触及机密时,这就成了问题。

多年来,开发者一直被教导不要将API密钥、数据库凭证和Token提交到Git。但氛围编程工作流为机密在提交、代码评审或CI任务之前逃逸开发环境开辟了另一条途径。根据其权限、配置和提供商架构,AI编码代理可能会读取本地文件或接收粘贴的内容,然后这些内容会被包含在发送给AI服务的数中,在这个过程中,开发者可能永远不会发现他们的凭证发生了泄露。

从本地文件到外部系统的无声路径

某些形式的机密泄露是显而易见的。例如,排查身份验证失败的开发者可能会将失败的API调用(包含Token)粘贴到聊天窗口中。尽管很严重,但这类泄露本质上是人为的。

更具影响力的逃逸途径则更加悄无声息。一个旨在理解项目的代理可能会检查其工作目录中的文件,包括被忽视的.env文件、云凭证配置文件、SSH配置或敏感的应用程序日志。在这种情况下,从代理的角度来看,并没有什么不对劲;它正在做它被设计来做的事情:收集上下文以解决手头的任务。

“氛围编程工作流为机密在提交、代码评审或CI任务之前逃逸开发环境开辟了另一条途径。”

但一旦机密成为该上下文的一部分,它就可能会流经组织直接控制之外的系统。根据工作流的不同,它可能会出现在模型提供商日志、网关遥测、提示词历史记录或调试记录中。轮换凭证至关重要,但它并不能消除这些系统中可能已经存在的副本。

这改变了机密泄露的实际定义。问题不再局限于进入仓库的内容,还包括自主工具在开发者机器上运行时读取和转发的内容。

为什么传统安全关卡不再足够

大多数应用程序安全程序都是围绕持久检查点构建的:提交、拉取请求、构建和部署。在代理时代,这些检查点仍然很重要,因为它们可以检测到达版本控制系统的机密,并防止不良更改[2]合并和部署。

它们本身无法阻止机密在代码到达仓库之前被包含在代理提示词中[3]。

这突显了一个重要的时间差。2025年Verizon数据泄露调查报告[4]显示,修复GitHub仓库中发现的泄露机密的中位时间为94天。在代理驱动的工作流中,检测和响应需要发生得更早,而不是在凭证暴露之后。而且,应该在它即将跨越从本地上下文到外部模型的边界的那一刻。

不良行为者已经理解了这种多孔边界的价值。最近的供应链攻击活动(包括Mini Shai-Hulud)一直在开发者和CI环境中搜寻凭证和配置数据,包括AI编码工具配置文件。这些活动表明,代理配置和代理可访问的本地上下文是有价值的目标。AI coding agents可以扩大会话期间可访问的本地数据,使代理的上下文收集机制也成为一个有吸引力的目标。

将代理上下文视为出口面。

安全的心智模型不应将AI代理视为单纯的代码编辑器,而应将其视为自动化数据移动系统。它的输入可以远超开发者正在积极编辑的源文件,其输出可能涉及外部服务。

这就需要对代理上下文采取零信任方法。在向代理的工作集发送提示词或添加文件之前,组织应评估其是否包含敏感材料。控制应该是确定性的:识别可能的机密、阻止或脱敏它,并为开发者提供明确的修复途径。

“要求LLM决定是否传输凭证并不能建立可靠的安全边界。”

至关重要的是,控制应当独立于模型。要求LLM决定是否传输凭证并不能建立可靠的安全边界。专用的机密检测可以根据已知的凭证模式和策略检查提示词和文件,应用确定性策略(例如在检测到凭证形状的值时阻止提示词或文件读取)。例如,Sonar的机密检测[5]与专用的代理插件[6]一同发布,将这种本地检查引入Claude Code、GitHub Copilot、Codex和Cursor等工具中,以便在提示词或文件读取传输给模型提供商之前标记凭证。

分层构建防御,不打扰你的氛围编程工作流

合规的工作流不涉及迫使开发者在安全开发和有用自动化之间做出选择,而是在机密可能逃逸的几个点放置快速控制:

  • • 在编辑器中: 使用IDE集成的机密检测在编写凭证时对其进行标记。
  • • 在模型提交或代理文件访问之前: 在代理支持的地方,在本地扫描提示词提交和文件读取,并根据策略阻止有风险的操作。
  • • 在命令行中: 在终端驱动的工作流中检查生成的代码片段和本地更改。
  • • 在拉取请求和CI中: 检测到达仓库的机密,并使用评审、质量门禁和部署控制来阻止不安全的更改继续推进。
  • • 在事件响应中: 快速轮换暴露的凭证,调查下游日志和访问,并通过策略和培训减少再次发生。

在提交前层构建防御是一项新兴需求,需要兼顾安全性和可用性。机密检测必须足够快,才能在开发者工作流中运行;引入漫长暂停的扫描器可能会被开发者绕过或禁用,它还必须具有可管理的误报率,否则开发者可能会停止信任它。

团队还应明确其代理权限和上下文规则,因为广泛的代理权限会增加编码会话期间可访问的敏感本地上下文的数量。考虑以下问题:代理可以读取哪些目录?默认情况下是否排除了.env文件、凭证库、主目录配置和生产日志?组织是否通过批准的网关路由提示词?提供商级别适用哪些保留、记录和审计设置?记录并执行这些答案,而不是将其留给单个开发者偏好。

机密安全必须左移。

在不阻碍AI辅助开发的情况下防止机密泄露,确保氛围编程开发的生产力承诺不会带来重大的安全影响。

随着代理变得越来越自主,安全标准必须跟随代理上游移动。关键在于在机密成为上下文之前、当它仍然是本地的、可见的且更容易控制的时候阻止它。在代理时代,代码评审和CI级别的检查将仍然是必不可少的安全网。尽管如此,对于以代理为中心的开发,第一道防线必须左移[7]:移至AI编码工具决定读取什么和传输什么的那个瞬间。这正是现代开发团队现在需要实施的控制。

引用链接

[1] AI coding agents need a secrets-safe context boundary: https://thenewstack.io/ai-agent-context-boundary/[2] 防止不良更改: https://thenewstack.io/protect-sensitive-data-and-prevent-bad-practices-in-apache-kafka/[3] 代理提示词中: https://thenewstack.io/ai-codebase-maturity-model/[4] 2025年Verizon数据泄露调查报告: https://www.verizon.com/business/resources/reports/2025-dbir-data-breach-investigations-report.pdf[5] 机密检测: https://www.sonarsource.com/solutions/secrets-detection/[6] 代理插件: https://github.com/SonarSource/sonarqube-agent-plugins[7] 必须左移: https://thenewstack.io/why-testing-must-shift-left-for-microservices/

相关学习资料