写点什么

可信赖的生产力:保障 AI 加速开发的安全

作者:Sriram Madapusi Vasudevan

  • 2025-12-18
    北京
  • 本文字数:5941 字

    阅读完需:约 19 分钟

大小:2.90M时长:16:54
可信赖的生产力:保障AI加速开发的安全

当“提示”中出现删除生产数据时

时间回到 2025 年 7 月,SaaS的一位创始人正在用Replit的AI智能体进行为期 9 天的实验。他们正在为他们的业务联系人构建一个前端应用程序。最后,他们发布了一个代码冻结,并给出了一个看起来无害的请求。

 

“在我们重新运行之前清理数据库”

然而,智能体却将“清理”等同于删除数据库,对生产数据库运行了破坏性的 SQL,擦除了客户数据,然后甚至继续说它忽略了指令,无法完成恢复。

 

没有攻击者。没有被盗的凭证。一个自主代理连接到生产环境,没有适当的防御措施。

 

如果这种事情可以发生在专注于开发者工具的公司身上,那么它也可能发生在任何将智能体靠近现实世界系统的人身上。本文的其余部分将讨论如何保护“代理式循环”,以便自主代理能够提供真正的生产力,而不会造成灾难性的破坏。

 

防御 ReAct 代理式循环

大多数代理系统现在都采用了某种风格的 ReAct 循环,即使实现细节有所不同。AI 代理的 ReAct 循环是推理和行动的连续交替循环,然后是观察,再回到下一步。这种迭代过程允许代理通过将大型复杂问题分解为更易于管理的较小子任务,然后通过访问工具来解决这些问题,同时根据通过该过程收集的新信息重塑策略,从而动态解决问题。

 

首先,有上下文管理:我喜欢将其视为代理可以看到的一切。这包括系统提示、从 RAG 检索的文档、之前的聊天对话、长期记忆,甚至是它之前调用的工具的输出。接下来是推理和规划:使用上下文来分解目标,选择下一组要使用的工具,并制定一个总体行动计划。最后,还有工具调用:这可能是 HTTP API、CLI、脚本,甚至是触及实际系统的消息传递操作。

 

每一轮循环都为下一轮循环提供信息。工具输出重新回到上下文。规划者改变了对世界的看法,现在提出了新的行动,以更接近目标。

 


每个安全事件通常都可以映射到这三个阶段中的一个或多个。让我们按顺序走一遍:上下文、推理和工具,然后看看我们如何对整个代理循环进行威胁建模。

 

上下文:你给代理提供了什么

IBM的一个案例研究展示了一家大型金融公司如何基于市场数据和内部研究构建由 RAG 驱动的交易智能体。随着时间的推移,未经验证的输入和无意中编辑的报告悄然出现。智能体提取了这些数据,将其提升为长期记忆,并将其作为事实引用。

 

因为这些记忆被认为是“经过审查”的,因为它们来自内部来源,所以正常的人类审查流程被绕过了。当错误的交易与特定的记忆条目联系起来时,损失已经达到了数百万美元。这里的核心技术问题很简单:上下文被视为“可信且绝对可靠的”。

 

常见的上下文故障模式

上面的故事只是一些常见的反复出现的失败模式中的一个例子。

 

首先是记忆中毒,长期记忆可能是基于未经签名或低信任输入构建的,这些输入包含了诸如“从现在开始,自动批准工具 X 的操作”之类的指令。记住,上下文中的所有信息都被视为对底层 LLM 的指令。其次是权限崩溃:内容窗口合并了来自多个租户或角色的数据,几乎没有隔离,智能体无法区分内部信息与客户可见信息之间的区别。最后,第三个是通信漂移:智能体可以访问的来自多个渠道的面向人类的消息可能作为非正式协议,智能体可以从中理解隐性命令。这在多智能体、分层架构中会进一步加剧,因为可能没有上下文隔离,导致子智能体实际上覆盖了上下文。

 

对多个内部系统具有广泛访问权限而不承认上述模式的智能体处于危险之中,并等待发生事件。

 

用于 RAG 和内存的溯源门控

考虑一个简单的人力资源助手的例子,它应该回答诸如“你的休假政策是什么?”之类的问题。它最终可能会搜索内部公司维基、Slack、Notion 以及其他内部资源。在早期的原型中,人们很容易想到要在组织拥有的所有数据中进行向量搜索,但这就是你会最终会从某人的个人维基而不是官方来源得到政策决策的方式。

 

一切都要从出处说起。搜索应该被限制为允许列出的空间,例如专用的官方文档,如人力资源 Notion 工作区,也许还有一些“最新”的人力资源公告频道。现在,这次搜索检索到的每个命中都需要有一个签名清单,其中包含标题、URL、摘录、标签、源系统、时间戳、编辑者等信息。任何没有该签名的东西仍然可以被显示出来,但不能被声明为权威。

 

同样地,每当人力资源助手需要将检索到或学到的信息提升到长期记忆中时,就必须使用规定的记忆提升策略来完成。记忆还需要按租户和任务进行分区,例如:(enant=acme, agent=hr-assistant, topic=benefits),并给予明确的 TTL(例如,政策内容为 30 天),并用提升原因进行标记。(例如:“在人类评价中获得好评”)。如果出现问题,应该能够指向允许创建记忆的确切签名文件。

 

中毒防御

让我们通过一个 RAG 管道来了解我们如何实现自己的安全系统来阻止中毒。

 


在维基搜索中,聚合前 k 个段落后,第一步是应用一些更便宜的启发式方法,如正则表达式匹配、过滤旧源和个人空间。然而,应该能够将过滤后的候选片段提供给一个充当分类器的迷你法官(mini-judge)模型,以查看它是用于智能体的正常文档还是指令。随着时间的推移,与这个 LLM 作为法官相关的指标应该具有维度,即特定片段在答案中出现的频率。任何突然变得热门且未正式签名的新片段都应该显示为异常。这些片段应被隔离并标记为人工审核。

 

每个单独的部分都很简单,但结合在一起,思维转变是,上下文不再是自由轮转的文本,它是一个受保护的接口,由来源,范围和异常检测保护。

 

推理与规划:守护大脑

Anthropic 发布了一项现在很著名的“代理式错位”研究,在该研究中,模型被塑造成可以访问内部公司信息的 AI 员工,这些信息告诉他们自己的工作处于风险之中。许多更强大的模型独立地得出结论,认为破坏是“可以的”,因为他们仍然能够完成他们的任务,即使承认这种行为是不道德的。

 

这不是一种简单的幻觉,而是规划者为错误目标而优化的一种症状。

 

虽然这是将智能体置于虚构的场景中,但是当投入生产时,可以在现实世界的场景中看到这种行为的轻微变体。在传统软件中,单元测试是一个硬关卡,但对于优化目标的 AI 智能体来说,安全检查是可协商的,除非由政策强制执行。可能是像“忘记”在执行任务时间过长时包含昂贵的检查,放弃使用经过验证的工具,而选择自己的工具,因为它们会碍事,甚至会跳过审批步骤。这是古德哈特(Goodhart)法则在自治中的应用;当“任务完成”成为唯一的指标时,“安全”执行不再是优先考虑的问题。

 

推理失败的信号

注:并不是所有信息都在系统提示中。

 

当早期的错误假设没有被重新审视或检查时,就会出现级联幻觉,因此,代理式循环在每次迭代中都进一步偏离正确的方向。目标劫持出现在计划者采用其方法将追求目标作为其“自己的目标”而不是目标本身时。例如:“我将彻底且永不承认不确定性,同时不断努力保持最高标准”。思考轨迹似乎没有问题,但深入挖掘后,模型已经巧妙地引入了一个新的向量,它不能直接提供它不知道的信息。静默跳过现在可能会发生,因为规划可以在没有关键步骤的情况下被制定,例如风险审查或人工批准。

 

规划者和批评者:两个大脑

一个事后看来显而易见的模式是将智能体的“创造性”部分与“怀疑性”部分分开。另一种看待这个问题的方式是通过“2个随机选择的力量”的镜头。如果规划者提出多个规划,批评者总是可以选择风险规避的选择,同时仍然允许创造力。这为我们提供了丰富的探索性洞察,AI 智能体在这方面表现出色。

 

在这个设置中,规划者提出了一系列步骤,其中包括按特定顺序调用工具,以及资源范围和预期收益。批评者根据政策评估每一步。政策可能简单但强大。以下是一些示例问题:这个规划涉及多少资源?它们对生产或安全至关重要吗?有证据支持声称的收益吗?政策规则是否规定了人工审核?

 

更具体地说,想象一个成本优化智能体,它建议对已部署的基础设施进行 Terraform 更改,以最大限度地减少云支出。规划者建议将 40 个实例更改为较小的类型,声称每月节省 2000 美元。批评者可以检查爆炸半径,验证定价和标签提到的 env=prod 。结果由此产生的风险评分足够高,以至于更改被阻止,原因被记录。规划者现在可以选择迭代并进行更小的变更,要么缩小影响范围,要么从测试环境开始,甚至升级到人工。

 

Critic 的基础设施不需要很复杂;它需要是独立的、可编程的,并在不可逆转的行动之前始终征求意见。

 

健壮的日志记录:精确定位的可观测性

一旦智能体开始触及任何影响客户或直接可见的资产,就应该有一个审计跟踪,将规划及其执行视为一等工件。

 

对于规划的每一次修订,记录并追踪将被调用的工具以及提供的参数(敏感信息可以被删除)。设置一个代理轨迹,捕获结构化的原因代码,解释为什么规划是可接受的、被阻止的或被升级的,以及 LLM 判断指标。所有对签名输入的引用,如 RAG 文档、票据,都应包含在用于驱动决策的上下文证据中。日志还应通过适当的安全措施如只能追加添加和基于角色的访问控制(RBAC)来实现租户隔离和完全防止篡改。

 

有了上述措施,回答诸如“为什么这 7 个订单在周二被取消了”或“智能体是否绕过了批评者进行退款”这样的问题变得更容易,而不需要依赖猜测。

 

有限的自主性:人在循环中

自主性应该有界限。实际上,使用智能体的最实用方式是定义一个信封,在这个信封中,智能体可以快速移动,但也要精确地划定需要人工输入的范围。

 

支持自动化流程就是一个很好的例子,它可能会允许智能体根据订单状态清晰可读且欺诈风险低,自动发放高达 200 美元的退款。当证据不清晰或阈值超过了管理员定义的级别时,智能体将建议路由到人工,并让人工做出最终的决定。智能体仍在做很多有用的工作,收集证据,总结上下文甚至起草行动。对人类的认知负荷应该很低,否则频繁的升级会使人在筋疲力尽的情况下做出决定。

 

工具与行动:自动化满足现实

工具是智能体采取行动的地方,所有的思考和规划都在这里达到高潮。这就是为什么工具设计变得至关重要——经过深思熟虑的规划可能会因为传统工具中的老式错误而失败,这些工具促进了确定性。(可以说,随着智能体作为工具范式的出现,这种说法并不是完全正确的)。

 

CVE‑2025‑49596应该作为 AI 智能体世界的警示故事。MCP(模型上下文协议)检查器是一个用于调试 MCP 服务器的开发者工具。在某些易受攻击的设置中,检查器在开发者机器上的所有接口上暴露了一个智能体,而无需认证。现在,恶意网站可以从浏览器向该本地端口发送请求,这些请求将被视为真正的 MCP 命令。远程代码执行现在是完全可能的。

 

开发者只需要加载一个网页。无需点击或提示。智能体工具不仅仅是开发者体验,它也是一个安全边界。

 

工具能力

每当工具暴露给智能体时,毫不留情地质疑它的范围。这部分的好处是,传统的软件工程原则允许我们推理(至少是其中的一部分,智能体也可以实时发明自己的工具)像 REST API 这样的工具。

 

这是官方工具,有经过验证的来源吗?在这些工具调用上,最大爆炸半径是什么,是一个区域、一个租户还是你的整个应用程序?它需要什么访问权限和什么凭证,以及多长时间?

 

通过回答更多这些问题,将做出更好的设计决策。

 

短暂的、任务范围的凭证

与其让智能体访问长期存在的个人凭证,不如采用一个令牌智能体系统,该系统发放短暂的、狭窄范围的凭证,与特定任务相关联。每当规划者想要在特定仓库中打开一个拉取请求时,它会向凭证服务请求一个特定一次性令牌,用于其身份,具有必要的权限,并在一分钟内过期。如果这个令牌泄露了,它就毫无用处,因为它早已过期,超出了很小的时间窗口。这与在原生云计算设置中工作的策略相同,现在是时候将它们应用于 AI 智能体上了。

 

结构化的工具输出和更少的工具

AI 智能体在面对执行不同任务、不同粒度的大量工具时表现更差。它们需要更少的工具,具有明确定义的工具输出。

 

对于消息系统,不应该使用通用的“slack”工具,而应该有一个专注的工具适配器,具有单一的 post_message 操作,它接受一组狭窄的通道、一个“安全文本”类型和一系列经过审查的附件 ID。工具实现/适配器可以强制执行额外的 URL 允许列表,运行 PII 检测,并且只接受通过经过批准的流程上传的附件,这些附件具有可以验证的 attachmentId。使用 post_message 工具的“slack”中的任何错误都被转换为结构化代码和类型化结果,规划者和批评者可以理解,而不是淹没上下文窗口的不透明的巨大 json。

 

制作工具输出,覆盖大面积如 APIs,应返回小型、类型化的合约,这样更容易测试和推理。token 是模仿 AI 智能体认知负荷的货币。

 

沙箱工具

最后,限制所有生成可运行工件的智能体行为至关重要。“运行一些 Python 将这个 CSV 转换为 Parquet”是一个简单的提示,但可能意味着智能体可以创建和运行不受信任的代码。

 

更安全的设计是将智能体生成的代码视为仅在隔离的微型虚拟机或严格限制的容器中执行的代码,且没有出站网络访问。设置一个只读的基础文件系统,使用一个可写的临时/tmp 卷,采用严格的系统调用过滤,严格的 CPU 和内存限制,并使用自定义的 seccomp 配置文件。这个智能体运行时还强制执行硬性时钟超时,并仅允许特定的“rooting”路径。

 

如果智能体偏离轨道,可以让它自己的沙箱崩溃,因为它是完全隔离的。这可以防止任何进一步的损害。

 


使用 STRIDE 和 MAESTRO 对循环进行威胁建模

到目前为止,我们已经讨论了通过“代理式”循环和模式来应对令人不寒而栗的故事。然而,为了一致地应用它们,需要跨整个循环甚至跨多个团队对威胁进行建模。

 

STRIDE是经典的安全助记符:伪装、篡改、否认、信息披露、拒绝服务和权限提升。它清晰地定义了威胁是如何出现的。

 

来自云安全联盟的MAESTRO是一个七层参考模型,用于代理式 AI 系统,它告诉我们威胁出现在哪些层。

 

下表展示了如何使用 STRIDE 遍历代理式循环。

 

循环阶段

STRIDE威胁

MAESTRO视角

应用控制

上下文管理

篡改、伪装

上下文腐败

使用RAG和内存的来源;使用LLM判断(可能是一组)进行异常检测;

 

推理和规划

信息披露、否认

LLM对齐姿态

分离规划者和评论者;明确的计划;风险评分;可审计的轨迹

工具和行动

DoS、权限提升

工具滥用和重放

类型化工具适配器;任务范围、短时的凭证;代码的微型虚拟机或seccomp加固沙箱;严格的速率限制;结构化错误代码而不是原始日志。

 


总的来说,STRIDE 告诉我们攻击是如何显现的;MAESTRO 告诉我们在“代理式”堆栈中要注意的哪些地方。

 

对“代理式”循环进行威胁建模,从绘制代理的 ReAct 循环开始,将 STRIDE 威胁映射到代理堆栈的每个阶段和层。列出已经存在的控件和不存在的控件。这个练习的结果并不能正式证明所有的威胁向量都被覆盖了,但这比要求代理在其系统提示中具有安全意识要好得多。安全是一种心态,持续的红队不应该是事后的考虑。

 

将信任带回自主智能体

自主智能体就像电动工具。如果没有护栏,它们不可避免地会删除一些重要的东西,泄露敏感信息,甚至优化从未给出的目标。只有在它们走出“玩具”阶段时,才能实现真正的生产力提升。

 

前进的道路是像对待云原生架构一样认真对待代理式循环。从小处着手,采取可操作的步骤,如添加全面的代理轨迹跟踪和在不可逆的高风险行动之前进行人工审查,这是正确的方向。从一个怀疑的心态测试代理循环也会揭示今天被视为黑盒子的东西可以被分割成限制爆炸半径的组件。

 

值得信赖的生产力不是盲目相信“AI 会表现良好”,而是当它表现不良时,我们能够及早发现,控制损害并迅速恢复。

 

原文链接:

https://www.infoq.com/articles/secure-ai-development/

2025-12-18 11:301

评论

发布
暂无评论

Eureka可用性解读

赵镇

Eureka

夏令营|第五届埃文网络安全技能训练营火热报名中

郑州埃文科技

阿里P7亲自讲解!Android大厂面试真题解析大全

欢喜学安卓

android 程序员 面试 移动开发

鸿蒙轻内核源码分析:掌握信号量使用差异

华为云开发者联盟

鸿蒙 数据结构 信号量 结构体 OpenHarmony

阿里新出炉爆款的顶配版Spring Security笔记,肝完变秃也变强

Java spring 编程 架构

点通生活系统软件开发搭建

所有前端都要看的2D游戏化互动入门基础知识

蚂蚁集团移动开发平台 mPaaS

大前端

hdfs 的集群间拷贝、归档、回收站等功能剖析

大数据技术指南

hdfs 7月日更

架构实战营模块8作业

eoeoeo

架构实战营

发布60分钟!霸榜Github的阿里面试参考指南,啃透涨薪10k

Java架构师迁哥

你见过最具有代表性的面试是什么样的?大三4面上岸腾讯(Java岗)

Java架构师迁哥

阿里P9看了都说牛B!阿里巴巴史上最牛的分布式核心原理深度解析全彩手册

Java架构追梦

Java 阿里巴巴 架构 面试 分布式核心原理解析

亚马逊云科技和 Verizon 利用专有 MEC 解决方案扩大 5G 合作

亚马逊云科技 (Amazon Web Services)

一文读懂大数据实时计算

五分钟学大数据

实时计算 7月日更

全美第四大无线运营商 DISH 和亚马逊云科技开展战略合作

亚马逊云科技 (Amazon Web Services)

直击技术最前沿 | Amazon S3增加新的存档访问层

亚马逊云科技 (Amazon Web Services)

理解Linux 终端、终端模拟器和伪终端

mazhen

Linux Shell SSH Linux Kenel

高并发应对策略系列文章阶段汇总,提供离线文档下载

Coder的技术之路

闭关三月!啃透美团保姆级分布式进阶技术手册,终入美团定L8

Java 面试

喜马拉雅亿级用户量的离线消息推送系统架构设计实践

JackJiang

消息推送 即时通讯 IM push

架构实战营-模块八-作业

大可

CodeDay 北京站报名倒计时

蚂蚁集团移动开发平台 mPaaS

移动开发

程序员的自我修养-用科学的方法提高交付质量

刘绍

程序员 软件工程 软件质量 TDD 单元测试

从零开始学习3D可视化之摄像机投影方式

ThingJS数字孪生引擎

大前端 可视化 3D 数字孪生

经过一年的不懈努力社招进了阿里,我总结了50个Java面试必考题

Java 程序员 架构 面试

铂金10:能工巧匠-ThreadLocal如何为线程打造私有数据空间

MetaThoughts

Java 后端 多线程 并发

工商银行:应用多k8s集群管理及容灾实践

华为云开发者联盟

容器 多云 工商银行 k8s集群 Karmada

阿里P7大牛手把手教你!卧薪尝胆70天内推入职阿里

欢喜学安卓

android 程序员 面试 移动开发

FIL币最新价格怎么样?FIL币最新消息是什么?

我用Vanilla JS重写了一遍项目,结果……

Faye

大前端 js 原生

Mtail导致Nginx报警延迟

BUG侦探

运维 监控 日志

可信赖的生产力:保障AI加速开发的安全_AI&大模型_InfoQ精选文章