生成式AI安全最佳实践 - 抵御OWASP Top 10攻击 (下)
今天小李哥将开启全新的技术分享系列,为大家介绍生成式AI的安全解决方案设计方法和最佳实践。近年来生成式 AI 安全市场正迅速发展。据IDC预测,到 2025 年全球 AI 安全解决方案市场规模将突破 200 亿美元,年复合增长率超过 30%,而 Gartner 则预估到 2025 年约 30% 的网络攻击将利用生成式 AI 技术。与此同时,Capgemini 的调查显示,近 74% 的企业认为 AI 驱动的安全防护至关重要,加上 Cybersecurity Ventures 报告指出,与生成式 AI 相关的安全事件年增长率超过 20%,这充分表明企业和安全供应商正面临日益严峻的安全挑战,并加大投入以构建更全面的防护体系。今天要介绍的就是如何设计生成式AI应用安全解决方案,抵御OWASP Top 10攻击。未来也会分享更多的AI安全解决方案,欢迎大家关注。
目前我们生活中有各色各样的生成式 AI应用,常见的场景之一就是生成式AI对话助手。然而在部署之前,通常还要对应用进行评估,其中包括了解安全态势、监控和日志记录、成本跟踪、弹性等问题。在这些评估中,安全性通常是最高优先级。如果存在无法明确识别的安全风险,我们就无法有效解决这些风向,这可能会阻碍生成式AI应用向生产环境部署的进度。
在本文章中,小李哥将向大家展示一个自己设计的生成式应用的真实场景,并演示如何利用 OWASP安全框架,基于大语言模型应用常见的Top 10安全攻击来评估应用的安全态势,以及实施缓解措施。下图就是一个生成式AI应用的安全解决方案最佳实践,我们将继续从左到右详细介绍本方案中使用到的安全方案细节。
应用控制层
应用控制层通常容易受到诸如 LLM01:2025 提示注入、LLM05:2025 输出处理不当以及 LLM02:2025 敏感信息泄露等风险的影响。外部人员可能会频繁尝试构造意料之外的输入来操控 LLM,从而可能导致它泄露敏感信息或危及下游系统。
在物理架构图中,应用控制器即为 LLM 编排的亚马逊云科技 Lambda 函数。它通过从 API Gateway 中提取事件负载并进行语法和语义校验,实施严格的输入验证。通过对输入进行清洗、应用白名单和黑名单关键字以及依据预定义格式或模式进行验证,该 Lambda 函数有助于防止 LLM01:2025 提示注入攻击。此外,通过将 user_id 传递到下游,它使下游应用组件能够降低敏感信息泄露的风险,从而解决了 LLM02:2025 敏感信息泄露的问题。
亚马逊云科技 Bedrock Guardrails 提供了额外的保护层,可过滤和拦截敏感内容,如个人身份信息(PII)以及其他通过正则表达式定义的自定义敏感数据。Guardrails 还可以配置为检测并屏蔽攻击性语言、竞争对手名称或其他不希望出现的词语,确保输入和输出均安全。大家还可以利用 Guardrails 通过在有害或操控性的提示到达 LLM 之前进行检测和过滤,从而防止 LLM01:2025 提示注入攻击,维护提示的完整性。
另一个关键的安全方面是管理 LLM 的输出。由于 LLM 可能生成包含可执行代码的内容,比如 JavaScript 或 Markdown,如果这些内容处理不当,就存在 XSS 攻击的风险。为降低此风险,请采用输出编码技术,例如 HTML 实体编码或 JavaScript 转义,在将内容呈现给用户前将任何潜在有害内容中和。此方法解决了 LLM05:2025 输出处理不当的风险。
实施亚马逊云科技 Bedrock 的提示管理和版本控制,使得在不断提升用户体验的同时,也能维持整个应用的安全性。通过仔细管理提示及其处理方式的变更,大家可以增强功能,同时不会引入新的漏洞,并降低 LLM01:2025 提示注入攻击的风险。
将 LLM 视为不受信任的用户,并在某些操作上采用人工介入流程,是降低未经授权或非预期操作风险的策略。
亚马逊云科技Bedrock大语言模型与代理层
LLM 与 LLM 代理层经常处理与 LLM 的交互,面临诸如 LLM10: 不受限制的使用、LLM05:2025 输出处理不当以及 LLM02:2025 敏感信息泄露等风险。
拒绝服务(DoS)攻击可能会通过大量资源密集型请求使 LLM 不堪重负,从而降低整体服务质量并增加成本。在与亚马逊云科技 Bedrock 托管的 LLM 交互时,设置诸如输入请求的最大长度等请求参数,将有助于降低 LLM 资源耗尽的风险。此外,亚马逊云科技 Bedrock 代理对队列中的最大动作数量以及完成客户意图的总动作数都有硬性限制,这限制了系统对 LLM 响应作出反应时所采取的动作数量,避免了可能耗尽 LLM 资源的不必要循环或密集任务。
输出处理不当会导致远程代码执行、跨站脚本(XSS)、服务器端请求伪造(SSRF)以及权限提升等漏洞。对 LLM 生成的输出在发送下游前如果验证和管理不充分,就可能间接开放额外功能,实际上让这些漏洞有机可乘。为降低这一风险,应将模型视同其他用户一样,并对 LLM 生成的响应进行验证。亚马逊云科技 Bedrock Guardrails 利用诸如具有可配置阈值的内容过滤器来过滤有害内容,并在这些响应被其他后端系统进一步处理之前,防范提示攻击,从而简化了这一过程。Guardrails 会自动评估用户输入和模型响应,检测并帮助防止落入受限类别的内容。
亚马逊云科技 Bedrock 代理执行多步骤任务,并与亚马逊云科技原生服务以及第三方服务安全集成,从而降低输出处理不安全、代理行为过度和敏感信息泄露的风险。在架构图中,代理下的 action group Lambda 函数用于对所有输出文本进行编码,使其自动无法被 JavaScript 或 Markdown 执行。此外,action group Lambda 函数会解析代理每一步执行时从 LLM 得到的每个输出,并相应地控制输出处理,确保在进一步处理前其内容安全。
敏感信息泄露是 LLM 面临的一大风险,因为恶意的提示工程可能会导致 LLM 无意中在响应中泄露不该公开的细节,从而引发隐私和机密性问题。为缓解这一问题,应通过亚马逊云科技 Bedrock Guardrails 中的内容过滤器实施数据清洗措施。
另外,还应根据 user_id 实施自定义数据过滤策略,并执行严格的用户访问策略。亚马逊云科技 Bedrock Guardrails 有助于过滤被认为敏感的内容,而亚马逊云科技 Bedrock 代理则通过允许大家在预处理和后处理模板中实施自定义逻辑来剥离任何意外信息,进一步降低了敏感信息泄露的风险。如果大家已为 LLM 启用了模型调用日志记录,或者在应用中实施了自定义日志逻辑,将 LLM 的输入和输出记录到亚马逊云科技 CloudWatch 中,那么诸如 CloudWatch 日志数据保护等措施在屏蔽 CloudWatch 日志中识别出的敏感信息方面就显得十分重要,从而进一步降低敏感信息泄露的风险。
代理插件控制层(action group Lambda函数)
代理插件控制层经常需要与内部和外部服务集成,并对内部和外部数据源以及第三方 API 应用自定义授权。在这一层面,LLM08:2025 向量与嵌入薄弱性以及 LLM06:2025 代理行为过度的风险开始显现。不受信任或未经验证的第三方插件可能会以意外代码的形式引入后门或漏洞。
对与外部系统进行插件集成交互的 action group Lambda 函数所使用的亚马逊云科技身份与访问管理(IAM)角色,应用最小权限访问原则,有助于缓解 LLM06:2025 代理行为过度和 LLM08:2025 向量与嵌入薄弱性的风险。从物理架构图可以看出,代理插件层的 Lambda 函数便是关联了一个最小权限的 IAM 角色,用以安全访问和与其他内部亚马逊云科技服务进行交互。
此外,在确定用户身份后,通过将 user_id 传递给下游层(如代理插件层),以应用基于用户的访问控制,从而进一步限制数据平面的访问。虽然这个 user_id 参数可在代理插件控制层 Lambda 函数中用于自定义授权逻辑,但其主要作用在于为第三方插件提供细粒度的访问控制。应用所有者有责任在 action group Lambda 函数中实施自定义授权逻辑,将 user_id 参数与预定义规则相结合,为第三方 API 和插件应用合适的访问级别。此方法将确定性的访问控制包裹在非确定性的 LLM 周围,使得对哪些用户可以访问和执行特定第三方插件实现了细粒度控制。
将基于 user_id 的数据授权与 IAM 角色的最小权限相结合,一般可最大限度地降低 LLM08:2025 向量与嵌入薄弱性以及 LLM06:2025 代理行为过度的风险。
RAG知识库数据存储层
RAG 数据存储层负责安全地从各类第一方和第三方数据源中检索最新、精准且受用户访问控制的知识。默认情况下,亚马逊云科技 Bedrock 使用亚马逊云科技管理密钥加密所有与知识库相关的数据。或者,大家也可以选择使用客户管理的密钥。在为知识库设置数据摄取作业时,还可以使用自定义的亚马逊云科技密钥管理服务(AWS KMS)密钥对作业进行加密。
如果大家决定在亚马逊 OpenSearch Service 中使用向量存储作为知识库,亚马逊云科技 Bedrock 可将大家选择的 KMS 密钥传递给它进行加密。此外,在生成查询知识库响应的会话中,也可以使用 KMS 密钥对会话进行加密。为了便于安全通信,亚马逊云科技 Bedrock 知识库在与第三方向量存储进行交互时,会使用 TLS 加密,前提是该服务支持并允许 TLS 加密传输。
关于用户访问控制,亚马逊云科技 Bedrock 知识库使用过滤器来管理权限。大家可以利用元数据和过滤功能,在知识库上构建分段访问解决方案。在运行时,应用必须对用户进行身份验证和授权,并在查询中包含该用户信息,以保持准确的访问控制。为了使访问控制保持最新,大家应定期重新同步数据,以反映权限的任何变化。另外,用户组也可以作为一个可过滤属性进行存储,从而进一步细化访问控制。
这种方法有助于缓解 LLM02:2025 敏感信息泄露和 LLM08:2025 向量与嵌入薄弱性的风险,确保只有授权用户才能访问相关数据。
总结
在本文中,大家了解了如何利用亚马逊云科技生成式 AI 安全范围矩阵,从安全共享责任的角度对生成式 AI 应用进行分类。我们回顾了一个常见的生成式 AI 助手应用架构,并利用 OWASP 针对大语言模型的 Top 10 框架评估了其安全态势,同时展示了如何利用亚马逊云科技服务控制和服务应用 OWASP Top 10 对 LLM 威胁的缓解措施,从而强化生成式 AI 助手应用的架构。想了解更多关于如何使用亚马逊云科技 Workshops for Bedrock 构建生成式AI应用的信息,请继续关注。