由AgentRedTeam (LX AI)
代理红队测试和OWASP LLM01
为聊天机器人设计的红队测试清单忽略了使代理变得危险的主要因素。 当模型可以调用工具、读取文件或发送消息时,提示注入成为了一条通往行动的路径,而不仅仅是文本。 OWASP的2026年GenAI LLM前10名将提示注入列为LLM01,这是开始代理评估的正确起点。
代理为什么改变注入数学
从输出到行动
在一个纯聊天机器人中,注入的目标是让模型说出它不应该说的话。影响仅限于离开模型的文本。当同一个模型可以调用工具时,注入的文本可以成为工具执行的命令。能够控制文件读取工具读取机密文档或邮件发送工具转发该文档的攻击者已经将文字技巧转化为数据泄露。因此,严重性取决于工具可以做什么,而不是回复的巧妙程度。
工具范围定义爆炸半径
爆炸半径是代理工具可以触及的所有资源的并集。如果代理仅具有对公共博客的只读API, worst-case 情况是泄露公共信息。如果代理可以调用数据库写入工具、文件系统删除工具或外部支付网关,则相同的注入可能会擦除记录、更改余额或转移资金。红队工作必须将每个工具映射到它可以影响的数据存储、服务或硬件,然后测试注入是否可以到达这些资产。
常见误解
- 假设模型的输出长度限制了损害 - 错误,因为短字符串可以触发破坏性工具调用。 - 相信过滤用户消息就足够 - 错误,因为注入可以在工具结果或系统提示中到达。 - 认为低参数模型是安全的 - 错误,当该模型与强大的工具集成时。
有关防御性编码的快速参考,请参阅OWASP关于LLM提示注入防御的备忘录。
超出聊天框的探测表面
系统提示和配置
系统提示通常包含API密钥、服务URL或内部策略语言。能够注入此区域的攻击者可能会获得直接凭证或了解进一步探测的方向。审查提示以查找任何静态密钥,并测试它们是否可以通过工具调用回显或泄露。
工具模式和参数验证
每个公开的工具都定义了一个JSON模式用于其输入。如果模式接受自由形式的字符串而没有严格的验证,攻击者可以在这些字符串中嵌入命令。例如,接受原始查询字符串的“run_sql”工具如果代理层不清理或参数化输入,则容易受到SQL注入攻击。检查代理是否对每个参数强制执行类型限制、长度限制或允许列表。
检索增强生成(RAG)管道
当代理从外部源(Web页面、电子邮件、票务系统)获取数据时,该数据成为模型上下文的一部分。控制任何这些源的攻击者可以放置模型稍后将视为可信的指令。通过污染已知的外部源并观察代理是否对隐藏命令采取行动来探测。
工具结果内的指令传播
某些设计直接将工具输出返回到下一个模型调用中,而不重新清理。如果工具返回包含新指令的文本,模型可能会在下一步遵循它。这创建了一个两阶段注入,第一阶段看似无害的数据,第二阶段是恶意命令。测试每个工具的输出路径,看看代理是否将原始结果重新输入到提示生成器中。
实用清单
- 提取系统提示并搜索硬编码的密钥。 - 列出每个工具,记录其模式,并尝试传递意外的数据类型。 - 确定用于RAG的所有外部数据源,并注入无害标记以验证范围。 - 捕获工具输出并将它们作为新输入反馈,看看代理是否将它们视为命令。 - 记录任何单个用户消息导致多个工具调用链的文档。
为了与经典注入防御进行比较,SQL注入备忘录提供了有用的模式:OWASP A03:2021 - 注入。
过度代理是伴随风险
什么是过度代理
OWASP 将过度代理放在 LLM03 的 2026 年描述中。它描述了可以在没有单独的批准步骤的情况下执行不可逆操作的代理 - 发送电子邮件、删除文件、执行代码。当模型的自主性超过其工具周围的保障时,风险就会增加。
红队关注领域
- 检查是否需要人类或单独服务的明确确认来执行破坏性工具。 - 尝试使用模型生成的中间输出将两个或多个工具链接在一起。 - 查看代理是否可以提高自己的权限,例如通过调用更新其自身 API 密钥的工具。 - 测试基于时间的触发器:是否可以使用延迟工具调用来绕过速率限制或会话超时?
示例风险矩阵
工具类别 | 典型权限 | 所需确认 | 缺失时的潜在滥用 文件读取 | 对指定文件夹的只读访问 | 无(读取通常是安全的) | 日志、源代码、配置文件的泄露 文件写入 | 创建或覆盖文件 | 是 - 用户批准或签名请求 | 插入后门、数据损坏 数据库写入 | 表的 INSERT/UPDATE/DELETE | 是 - 事务批准或 MFA | 数据丢失、金融欺诈、权限提升 外部 HTTP | 到任意域的出站网络 | 是 - 允许列表检查 | 数据泄露、C2 信标、SSRF 代码执行 | 任意 shell 或解释器 | 是 - 隔离沙盒 + 批准 | 完整主机损害、勒索软件部署
表格显示为什么红队必须验证每一行:如果确认列缺失,代理可以通过单个有毒输入从良性转变为有害。
探测报告应包含的内容
必需字段
有用的发现需要的不仅是一个布尔值“通过/失败”。记录触发链的确切用户语句、代理调用工具的有序列表以及最终的可观察效果(例如,写入文件、发送网络请求、更改数据库行)。包括工具参数的原始值以及模型的内部推理跟踪(如果您的框架暴露了它)。
严重性指南
- 低 - 公共信息泄露或可逆状态更改。 - 中 - 访问内部数据(不受监管)或需要手动重置的可逆操作。 - 高 - 监管数据更改、金融交易或执行任意代码。 - 严重 - 持久后门、数据破坏或会话结束后保持立足点的能力。
首先优先修复高和严重的发现;低严重性项可以在稍后的加固冲刺中解决。
可操作的修复提示
- 添加拒绝包含 SQL 关键字或 shell 元字符的字符串的模式级验证。 - 将破坏性工具包装在需要签名批准令牌的微服务中。 - 为出站 HTTP 调用实现出口允许列表,并记录每次尝试的连接。 - 在将工具输出重新插入模型提示之前对其进行清理 - 删除或转义任何类似指令的内容。 - 除非明确需要写入,否则使用只读副本进行任何数据库查询工具。
红队测试不是设计控制的替代品
为什么测试是补充,而不是替代,安全保障
红队工作发现已经存在于实现中的缺陷。它不能提供最小权限工具设计、确认门、或网络分段所带来的保证。将每个测试视为验证步骤:如果控制措施阻止了注入的链条,你就有证据证明它们有效;如果它们不起作用,你就有一个具体的缺陷需要修复。
优先考虑的控制措施
- 每个工具都应在一个专用的操作系统用户下运行,具有最小的文件系统功能。 - 对于任何可以修改状态的调用,需要一个单独的批准服务,记录决策,并强制执行超时。 - 应用网络策略,限制出站连接到已知的内部服务和少数外部API。 - 在休息时加密机密信息,绝不将其放在系统提示中;使用保管服务代替。 - 使用用户ID、时间戳、输入哈希和输出哈希记录每个工具的调用,以便进行法医审查。
当这些控制措施到位时,红队的发现从“我们找到了破坏它的方法”转变为“我们尝试了X,控制措施阻止了它”,这是安全成熟度更强的信号。
这不是什么
不保证完整性
本指南不保证按照这些步骤就能捕获每一种可能的注入。新技术、零日工具漏洞或未公开的代理功能可能会绕过这里描述的检查。
不是100%的解决方案
应用这些缓解措施可以降低风险,但不能消除风险。深度防御需要持续监控、定期工具链审查和更新新的OWASP发布。
永远不会错过的说法是错误的
没有任何红队方法可以声称永远不会错过一个缺陷。目标是提高攻击者的成本,并使成功的利用变得可察觉和可追踪。
不是安全编码的替代品
这些建议假设您已经遵循基本的安全编码实践——输入验证、输出编码和最小权限原则。它们在此基础上添加了特定于代理的层。
参考资料
- https://cheatsheetseries.owasp.org/cheatsheets/LLM_Prompt_Injection_Prevention_Cheat_Sheet.html - https://cheatsheetseries.owasp.org/cheatsheets/SQL_Injection_Prevention_Cheat_Sheet.html - https://genai.owasp.org/llmrisk/llm01-prompt-injection - https://owasp.org/Top10/2021/A03_2021-Injection
相关文章
- 对LLM代理进行工具滥用测试 - 浏览完整的AI微SaaS主题矩阵 →
为什么在2026年,提示注入仍然是LLM01?
因为机制没有改变:不受信任的内容到达模型并被视为指令。Agent能力使得后果变得更糟,这就是为什么OWASP将其置于列表顶部同时添加过度代理(Excessive Agency)作为伴随风险的原因。
什么使得代理比聊天机器人更具风险?
代理可以通过工具进行操作,而不仅仅是回答。注入仅在聊天机器人中产生错误文本的内容可以在代理中触发工具调用、文件写入或外部消息。影响范围是工具集,而不是回复。
我应该首先探测哪些接口?
系统提示、工具模式、检索内容和嵌入在工具结果中的指令。任何不受信任的文本进入代理上下文的地方都是潜在的注入点。
红队测试是否取代了安全设计?
不。测试揭示了现有的漏洞。最小特权工具访问、对破坏性操作的确认以及出口控制是防止逃逸的方法。红队测试是在这些控制存在之后对其进行验证。
仅供决策参考,不是经过认证的渗透测试或合规性证明。