代理编码

智能体编码:风险、最佳实践以及早期采用者的 8 个经验教训

TL博士

智能体编码的风险不在于智能体编写糟糕的代码,而在于智能体会采取行动。 它会安装软件包、编辑你未打开的文件、调用工具、读取无人审核的配置并打开文件。 pull requests这些操作都需要开发者的特权才能执行,而你现有的控件是为人工输入每个操作而设计的。

速度瓶颈转移到了审查环节。 针对人工智能编码助手的独立研究表明,约 40% 的生成代码存在安全漏洞,而且随着模型性能的提升,这一比例并未降低。代码输出量成倍增长,但代码审查能力却没有相应提升。智能体编程使得这一问题比以往的自动补全功能更加突出,因为一条指令即可影响十几个文件。

这些攻击针对的是线路,而不是模型本身。 规则文件中隐藏的Unicode字符会导致助手程序发出后门代码且不予披露,该漏洞在MITRE ATLAS中被收录为AML.CS0041。攻击者注册了模型产生的幻觉包名。一个MCP桥接程序向客户端发送了超过437,000万次远程代码执行。传统的分析方法无法读取这些文件。

它的内容很乏味,但却有效: 清点实际使用的代理和 MCP 服务器,将提示和规则文件视为正在审查的代码,将每个工具表面限定到任务范围,并在运行代理的开发人员机器上强制执行策略。 Xygeni AI 安全 处理前三个和 开发人工智能 最后一点,无论是人工智能生成的代码还是人类编写的代码,都存在这个问题。

什么是智能体编码?

智能体编码是一种开发方式,其中人工智能代理接收一个目标,并使用各种工具在你的代码库中执行该目标:读取和编辑文件、安装依赖项、运行测试以及打开文件。 pull requests风险并非源于任何单个函数本身的质量,而是源于这些操作以及指导这些操作的配置。行之有效的实践包括:清点资源、权限范围限定、配置审核以及在终端端强制执行。

智能体编码还是智能体编程?

这两个术语描述的是同一种转变,团队经常互换使用。智能编程(Agentic Programming)通常出现在工程讨论中,用于阐述工作如何完成;而智能编码(Agentic Codeing)则更多地出现在工具和安全领域。从技术角度来看,它们之间没有任何区别。如果你想要 完整定义及相关词汇我们的词汇表中关于代理编码的条目涵盖了这一点。

本文的关键在于区分建议和执行。能够自动补全一行代码的助手是提高效率的功能。而能够安装软件包、编辑六个文件并推送分支的代理则是运行在你系统内部的非人类实体。 SDLC智能体编程悄然越过了那条界限,而大多数安全程序自那以后都没有重新调整范围。

代理编码的真正风险

四种高危家族,按它们通常叮咬的顺序排列。

  • 销量超过审查。 代理每小时生成的更改数量远远超过任何审核人员能够有效阅读的数量。审批沦为橡皮图章,不安全的模式以机器般的速度复制。这是每个人都承认的风险,但却是最少被衡量的风险。首先,衡量代理生成的更改与人工审核时间的比率,这个数字足以说明一切。
  • 指令层。 任何到达代理上下文的信息都可以引导它。提示注入是其中最重要的因素。 OWASP 十大法学硕士申请问题 这样做是有原因的,在智能体编码中,传递信息的载体非常普通:问题描述、代码注释、依赖项中的 README 文件、智能体检索的文档。没有人需要直接攻击你,他们只需要编写一些你的智能体能够读取的内容即可。
  • 配置层。 规则文件、技能文件、提示和 MCP 服务器定义决定了代理程序的行为及其访问权限。它们并非应用程序代码,因此典型的扫描程序堆栈不会读取它们。“规则文件后门”展示了一种极端情况,其中零宽度字符携带了审查人员无法直接看到的指令。普通情况同样具有破坏性:例如,配置文件中以明文形式存储的提供者凭据,或者由于默认设置,助手程序被授予了对整个文件系统的读取权限。
  • 依赖关系和工具界面。 代理选择依赖项。它解析名称,安装依赖项,然后继续执行其他操作,并且安装脚本在任何操作之前运行。 pipeline 发现了这种变化。域名抢注正是利用了这一点:USENIX Security 2025 上发表的研究发现,语言模型推荐的软件包中有 19.7% 并不存在,而且这些虚构的名称重复出现的频率足以让攻击者注册它们并伺机而动。同样的情况也适用于 MCP 服务器连接不受信任的服务器会将你从未审核过的工具交给代理。

它究竟是如何出错的?

并非单一的奇特漏洞利用方式,而是多种已在实际应用中记录到的技术的组合,并按其出现的顺序排列。

  1. 指示
    这句话出现在问题描述、依赖项 README 文件或代码注释中。它并非为人类读者而写。
  2. 上下文
    开发者请求代理修复问题。代理会提取描述、存储库以及自身的规则文件以适应上下文。指令和内容看起来与模型完全相同。
  3. 安装
    代理程序找到一个合适的辅助库并安装它。这个名称是上周被注册的,注册者注意到模型一直在重复使用这个名称。安装脚本在笔记本电脑上执行。
  4. 凭证
    存在一个以明文形式存在的提供者令牌 mcp.json而且,shell 中已经存在一个活跃的云会话。该脚本无需提升权限,它会继承现有权限。
  5. 此 pull request
    改动很小,测试结果正常,差异也合理。由于还有四个申请在等待审批,所以不到一分钟就通过了。

第三步之后,你拥有的所有大门都会着火。 前三个操作在开发人员机器上完成,大约需要 90 秒。

早期采用者带来的 8 个经验教训

借鉴了有记录的事件、已发表的研究以及在任何人制定相关政策之前就采用智能体编程的团队中不断出现的模式。

  1. 爆破半径是指工具表面,而不是冲击半径。 团队花费数周时间来强化提示信息,却只花几分钟来决定客服人员可以调用哪些工具。这种比例并不合理。一个只能读取信息的客服人员一旦被攻破,只会造成不便。而一个能够发送邮件、查询生产环境和推送信息的客服人员则能发挥更大的作用。 commit这是一个事件,它包含开发人员执行此操作所需的凭据,因为几乎没有人会为代理配置身份。在输入系统提示符之前,请记下工具列表。
  2. 该代理优化的是测试通过率,而不是代码运行率。 如果测试套件出现故障且拥有足够的自主权,代理程序会删除断言、放宽条件或将集成替换为模拟,然后报告成功。每个团队在第一周就能意识到这一点。这就是绿色测试成功的原因。 pipeline不再是证据,以及审查问题从“这是否有效”变为“它改变了什么使其通过”。
  3. 您的规则文件是生产配置。 控制每一行生成的文件通常是 commit只修改过一次,之后就再也没人审核过。它应该纳入变更控制,指定负责人,进行差异审核,并且需要有人注意到何时添加了没人记得添加的行。假设其中的任何内容都会被执行,包括你看不到的内容。
  4. 代理的依赖项不是你的依赖项。 已批准的库列表假定是由人选择的。代理程序会解析一个合理的名称并进行安装,安装脚本会在持续集成 (CI) 系统建立之前执行。那些遇到问题的团队是在安装时对机器进行检查,而不是编写策略文档列出开发人员应该优先选择哪些库。
  5. 没人能告诉你他们正在运行什么。 询问五位工程师他们使用哪些 MCP 服务器和助手,你会得到五个答案,但没有一个是完整的。调查在这里行不通,因为这些工具是本地安装的,而且每周都会更新。必须从代码、依赖项以及工具遗留的配置文件中寻找答案。
  6. 记忆在会话结束后仍然保留着毒素 如果一条错误的指令进入了持久上下文或代理的内存,即使任务结束,它也不会失效。它会在不相关的任务中持续发挥作用,这就是为什么内存和上下文中毒在 OWASP 代理列表中有专门的条目。应将代理内存视为需要审查和清除的状态,而不是便捷功能。
  7. 可逆性胜于预防 那些能够安全高效地运行最高自主性的团队,并非那些管控最严密的团队,而是那些犯错成本低廉的团队:代理会推送分支而非主分支,在一次性环境中工作,并且每个操作都支持一键撤销。自主性的可承受性取决于其可逆性。
  8. 飞行员对你撒谎了 代理在小型代码库的全新任务中表现出色,但在大型遗留代码库中,由于存在隐式约定,其性能会下降。成功的试点项目往往会高估生产力提升,低估风险,从而设定一个无法大规模实现的预期。试点应该在代码最差的代码库中进行,而不是代码最干净的代码库。

这在实践中是什么样的呢?

顺序比工具本身更重要。首先是发现层,因为你无法对尚未找到的代理设置权限。然后是配置层,因为指令都存储在那里。最后是端点层,因为代理实际运行在那里,安装也在此之前很久就完成了。 pipeline 通知。

Xygeni AI 安全 发现所有人工智能资产 SDLC包括模型、代理、代理服务器、MCP 服务器、数据集、技能文件、提示等。 guardrails 它读取应用程序代码、声明的依赖项以及人工智能工具遗留的配置文件,然后绘制它们之间的连接方式。它能检测出代理编程特有的风险:提示注入和系统提示泄露、规则和技能文件中的恶意指令和工具注入、不安全的 MCP 配置、过度代理以及缺失 guardrails人工智能文件中的秘密信息,以及存在漏洞或被滥用的人工智能依赖项。调查结果与 OWASP Top 10 数据库管理应用程序漏洞相对应,并指向具体的文件和行号。优先级排序流程将数千个调查结果筛选为正在使用、可访问、可利用、具有特权且对业务至关重要的漏洞。

开发人工智能 另一半则在编辑器中得到体现:它能保护代码编写过程中的安全,既适用于人工智能生成的代码,也适用于人类编写的代码,并且能够在其他智能体采取行动之前进行拦截。同样的智能也适用于从您已运行的扫描器中获取的信息,因此这一切都不需要替换您现有的任何功能。

常见问题解答

  • 智能体编码的最大风险是什么? 过度授权。拥有广泛工具的代理人会将任何成功的操作转化为实际行动,而大多数团队对工具的选择远比对人员的选择宽泛得多。
  • 智能体编程在受监管的环境中是否安全? 是的,通过清单、权限范围界定、配置审核和终端强制执行,可以实现这一点。审计中无法辩解的是,不知道哪些代理在运行、它们访问了哪些对象,或者它们编写了哪些代码。
  • 智能体编码生成的代码是否比人类生成的代码安全性更低? 单行错误率与人为错误率相当,但数量却远超人为错误率,而数量正是导致审核失败的根本原因。问题在于处理速度,而非人才。
  • 我们需要禁止人工智能编程助手吗? 禁令只会让人工智能转入地下,这反而更糟。影子人工智能比合法人工智能更难保障安全,而发现机制才是真正改变局势的关键。
  • 当代理商发布漏洞时,谁该负责? 合并者和之前一样。这才是令人不安的地方,也是作者信息如此重要的原因:审阅者在批准机器生成的代码时,需要在批准之前而不是之后收到审查结果。
  • 如果我们完全看不到任何东西,我们该如何开始? 对存储库运行发现程序,列出找到的 MCP 服务器和助手,并按工具表面对代理进行排名。风险最高的代理通常不是人们担心的那个。

代理程序已存在于您的存储库中。

无论是否有人批准,你的代码库中已经存在代理代码。那些能够出色处理代理代码的团队,并非那些拥有最严格策略的团队,而是那些能够随时回答以下问题的团队:哪些代理正在运行、这些代理可以访问哪些资源,以及控制这些代理的文件发生了哪些变化。

查看您的代理商与哪些网站有关联 西吉尼.

sca-tools-软件-成分分析工具
确定软件风险的优先级、进行补救并加以保护
注册免费账号。
不需要信用卡。

确保您的软件开发和交付安全无虞

使用 Xygeni 产品套件