10个安全问题带你了解OWASP 定义的大模型应用
摘要:OWASP 的一群研究人员,总结目前大模型中可能存在的TOP10安全风险,很好的揭示了我们在大模型应用中需要防护的目标,以及如何采取相应的防护措施。
本文分享自华为云社区《OWASP 定义的大模型应用最常见的10个关键安全问题》,作者:Uncle_Tom。
1. OWASP Top 10 for Large Language Model Applications
OWASP 大模型应用程序 Top 10 项目旨在向开发人员、设计人员、架构师、经理和组织介绍部署和管理大型语言模型 (LLM) 时的潜在安全风险。该项目提供了LLM应用程序中常见的10大最关键漏洞的列表,突出了它们的潜在影响,易于利用以及在实际应用程序中的普遍性。漏洞的示例包括提示注入、数据泄漏、沙盒不足和未经授权的代码执行等。目标是提高对这些漏洞的认识,建议修正策略,并最终改善LLM应用程序的安全状况。
本文主要参照目前最新的版本:《OWASP Top 10 for Large Language Models (0.5)》翻译整理。
- OWASP LLMs TOP10 示意图

2. LLM01: 提示注入(Prompt Injections)
LLMs 中的提示注入漏洞涉及狡猾的输入,导致未检测到的操作。影响范围从数据暴露到未经授权的操作,以及为攻击者的目标服务。
当攻击者通过多个通道使用构建的输入提示操纵受信任的大型语言模型 (LLM) 时,就会发生提示注入漏洞。由于对LLM输出的固有信任,这种操作通常未被发现。
存在两种类型:直接(攻击者影响 LLM 的输入)和间接(“中毒”数据源影响 LLM)。
结果的范围可以从暴露敏感信息到影响决策。在复杂的情况下,LLM可能会被诱骗到未经授权的操作或冒充中,有效地服务于攻击者的目标,而不会提醒用户或触发保护措施。
2.1. 预防措施
- 权限控制
将LLM的权限限制为其功能所需的最低权限。防止 LLM 在未经明确批准的情况下更改用户的状态。 - 增强的输入验证
实施可靠的输入验证和清理方法,以过滤掉来自不受信任来源的潜在恶意提示输入。 - 外部内容交互的隔离和控制
将不受信任的内容与用户提示隔离开来,并控制与外部内容的交互,尤其是与可能导致不可逆转的操作或暴露个人身份信息 (PII) 的插件的交互。 - 信任管理
在LLM,外部源和可扩展功能(例如,插件或下游函数)之间建立信任边界。将LLM视为不受信任的用户,并保持最终用户对决策过程的控制。
3. LLM02: 不安全输出(Insecure Output Handling)
当插件或应用程序接受LLM输出时,如果缺少安全控制就可能导致 XSS、CSRF、SSRF、权限提升、远程代码执行,并可能启用代理劫持攻击。
不安全输出处理漏洞是一种提示注入漏洞,当插件或应用程序在没有适当审查的情况下盲目接受大型语言模型 (LLM) 输出并将其直接传递给后端、特权或客户端函数时,就会出现该漏洞。由于LLM生成的内容可以通过提示输入来控制,因此此行为类似于为用户提供对附加功能的间接访问。
成功利用不安全输出处理漏洞可导致 Web 浏览器中出现 XSS 和 CSRF,以及后端系统上的 SSRF、权限提升或远程代码执行。当应用程序允许 LLM 内容执行超出预期用户权限的操作时,此漏洞的影响会增加。此外,这可以与代理劫持攻击结合使用,以允许攻击者以特权访问目标用户的环境。
3.1. 预防措施
- 将模型视为任何其他用户,并对从模型到后端函数的响应应用适当的输入验证;
- 将来自模型的输出进行编码,以减少不需要的JavaScript或Markdown代码解释。
4. LLM03: 训练数据投毒(Training Data Poisoning)
LLM从不同的文本中学习,但有训练数据中毒的风险,导致用户错误信息。
大型语言模型 (LLM) 使用不同的原始文本来学习和生成输出。攻击者引入漏洞的训练数据中毒可能会破坏模型,使用户接触到不正确的信息。LLM的OWASP列表强调了过度依赖AI内容的风险。关键数据源包括用于 T5 和 GPT-3 等模型的Common Crawl、WebText 和 OpenWebText,包含公共新闻和维基百科和书籍,占 GPT-16 训练数据的 3%。
4.1. 预防措施
- 验证培训数据的供应链(如果来自外部)并保持证明,类似于 SBOM(软件物料清单)方法;
- 验证数据源和其中数据的合法性;
- 通过针对不同用例的单独训练数据制作不同的模型,以创建更精细、更准确的生成AI输出;
- 确保存在足够的沙盒,以防止模型抓取意外数据源;
- 对特定训练数据或数据源类别使用严格的审查或输入过滤器来控制伪造数据的数量;
- 实施专门的LLM来衡量不良后果,并使用强化学习技术培训其他LLM;
- 在LLM生命周期的测试阶段执行基于LLM的红队练习或LLM漏洞扫描。
5. LLM04: 拒绝服务(Denial of Service)
攻击者以特别消耗资源的方式与LLM交互,导致他们和其他用户的服务质量下降,或产生高资源成本。
5.1. 预防措施
- 限制每个请求的资源使用量;
- 限制每个步骤的资源使用,以便涉及复杂部分的请求执行速度;
- 限制系统中对LLM响应做出反应的排队操作数和总操作数。
6. LLM05: 供应链安全(Supply Chain)
由于漏洞导致偏见,安全漏洞或系统故障,LLM供应链存在完整性风险。问题来自预先训练的模型、众包数据和插件扩展。
LLM 中的供应链可能容易受到攻击,影响训练数据、ML 模型、部署平台的完整性,并导致有偏见的结果、安全漏洞或完整的系统故障。传统上,漏洞集中在软件组件上,但由于迁移学习、重用预训练模型以及众包数据的普及,漏洞在人工智能中得到了扩展。在公共LLM中,诸如OpenGPT扩展插件之类的LLM也是易受此漏洞影响的领域。
6.1. 预防措施
- 仔细审查来源和供应商;
- 对组件进行漏洞扫描,不仅在部署到生产环境时,而且在用于开发和测试之前;
- 模型开发环境使用自己的精选包存储库进行漏洞检查;
- 代码签名;
- 对提供服务的整个链路进行稳健性测试,防止对模型和数据,以及整个 MLOps 管道的篡改和投毒;
- 实施对抗性稳健性训练,以帮助检测提取查询;
- 审查和监控供应商安全和访问;
- 审计。
7. LLM06: 权限问题(Permission Issues)
插件之间缺乏授权跟踪可能会使间接提示注入或恶意插件使用成为可能,从而导致权限提升、机密性丢失和潜在的远程代码执行。
插件之间不跟踪授权,允许恶意行为者通过间接提示注入、使用恶意插件或其他方法在 LLM 用户的上下文中采取行动。这可能会导致权限提升、机密性丢失,甚至远程代码执行,具体取决于可用的插件。
7.1. 预防措施
- 需要手动授权敏感插件执行的任何操作;
- 每个用户输入调用不超过一个插件,在调用之间重置任何插件提供的数据;
- 防止在任何其他插件之后调用敏感插件;
- 对所有插件内容执行污点跟踪,确保调用插件的授权级别对应于向 LLM 提示符提供输入的任何插件的最低授权。
8. LLM07: 数据泄露(Data Leakage)
LLM中的数据泄漏可能会暴露敏感信息或专有详细信息,从而导致隐私和安全漏洞。适当的数据清理和明确的使用条款对于预防至关重要。
当LLM通过其响应意外泄露敏感信息,专有算法或其他机密细节时,就会发生数据泄漏。这可能会导致未经授权访问敏感数据或知识产权、侵犯隐私和其他安全漏洞。重要的是要注意,LLM应用程序的用户应该了解如何与LLM交互,并确定他们如何无意中输入敏感数据的风险。
反之亦然,LLM 应用程序应执行足够的数据清理和清理验证,以帮助防止用户数据进入训练模型数据。此外,托管LLM的公司应提供适当的用户条款政策,以使用户了解如何处理数据。
8.1. 预防措施
- 集成适当的数据清理和清理技术,以防止用户数据进入训练模型数据;
- 实施强大的输入验证和清理方法,以识别和过滤掉潜在的恶意输入;
- 通过 SAST(静态应用程序安全测试)和 SBOM(软件物料清单)证明等技术,保持持续的供应链风险缓解,以识别和修复第三方软件或软件包依赖项中的漏洞;
- 实施专门的LLM以针对不良后果进行基准测试,并使用强化学习技术培训其他LLM;
- 在LLM生命周期的测试阶段执行基于LLM的红队练习或LLM漏洞扫描。
9. LLM08: 过度代理(Excessive Agency)
当LLM与其他系统接口时,不受限制的代理可能会导致不良的操作和操作。像网络应用程序一样,LLM不应该自我监管, 控件必须嵌入到 API 中。
LLM可以被授予一定程度的代理权 - 与其他系统接口以采取行动的能力。LLM的任何不受限制的不良操作(无论根源原因如何,例如,幻觉,直接/间接提示注射,或只是设计不良的良性提示等)都可能导致采取不希望的行动。就像我们从不信任 Web 应用程序中的客户端验证一样,LLM 不应该被信任来自我监管或自我限制,控件应嵌入到所连接系统的 API 中。
9.1. 预防措施
- 将授予 LMM 的权限减少到限制不良操作范围所需的最小值;
- 实施速率限制以减少不良操作的数量;
- 利用人机交互控制,要求人工在执行所有操作之前批准所有操作。
10. LLM09: 过度依赖LLM生成的内容(Overreliance)
过度依赖LLM会导致错误信息或由于“幻觉”而导致的不当内容。如果没有适当的监督,这可能会导致法律问题和声誉损害。
过度依赖LLM是一个安全漏洞,当系统过度依赖LLM进行决策或内容生成而没有足够的监督,验证机制或风险沟通时,就会出现这种漏洞。LLM虽然能够产生创造性和信息丰富的内容,但也容易受到“幻觉”的影响,产生事实上不正确,荒谬或不适当的内容。如果不经过检查,这些幻觉可能导致错误信息、沟通不畅、潜在的法律问题以及对公司声誉产生影响。
10.1. 预防措施
- 持续监控
定期监控和审查LLM的输出,以确保它们是事实,连贯和适当的。将手动审查或自动化工具用于更大规模的应用程序; - 事实核查
在将LLM提供的信息用于决策,信息传播或其他关键功能之前,验证其准确性; - 模型调整
调整您的LLM以减少幻觉的可能性。技术包括快速工程、参数高效调优(parameter efficient tuning(PET)) 和完整模型调优; - 设置验证机制
实施自动验证机制,根据已知事实或数据检查生成的输出; - 改善风险沟通
遵循风险沟通文献和其他部门的最佳实践,以促进与用户的对话,建立可操作的风险沟通,并持续衡量风险沟通的有效性。
11. LLM10: 不安全的插件(Insecure Plugins)
如果将 LLM 连接到外部资源的插件接受自由格式的文本输入,则可能会被利用,从而启用可能导致不良行为或远程代码执行的恶意请求。
在将LLM连接到某些外部资源的插件接受自由格式的文本作为输入,而不是参数化和类型检查的输入。这允许潜在的攻击者有很大的自由度来构造对插件的恶意请求,这可能导致各种不良行为,甚至包括远程代码执行。
11.1. 预防措施
- 插件调用应尽可能严格参数化,包括对输入的类型和范围检查;
- 当必须接受自由格式输入时,应仔细检查它以确保没有调用可能有害的方法;
- 插件应该从最小特权的角度设计,在执行其所需功能的同时尽可能少地公开功能。
10个安全问题带你了解OWASP 定义的大模型应用的更多相关文章
- 在主方法中定义一个大小为10*10的二维字符型数组,数组名为y,正反对角线上存的是‘*’,其余 位置存的是‘#’;输出这个数组中的所有元素。
//在主方法中定义一个大小为10*10的二维字符型数组,数组名为y,正反对角线上存的是‘*’,其余 位置存的是‘#’:输出这个数组中的所有元素. char [][]y=new char [10][10 ...
- 编译预处理 -- 带参数的宏定义--【sky原创】
原文:编译预处理 -- 带参数的宏定义--[sky原创] 如有转载请注明出处 编译预处理 -- 带参数的宏定义 前面为输出文件,后面为输入文件 gcc -E -o test.i test.c ...
- 酷!微软发布新终端工具,Win 10 将自带 Linux 内核
原创:技术最前线(id:TopITNews) 北京时间 5 月 7 日,2019 年微软 Build 开发者大会在雷德蒙德召开.今年大会上亮点很多,本文汇总一些和开发者相关的内容. 1. Window ...
- 在主方法中定义一个大小为50的一维整型数组,数组i名为x,数组中存放着{1,3,5,…,99}输出这个数组中的所有元素,每输出十个换一行
package hanqi; import java.util.Scanner; public class Test7 { public static void main(String[] args) ...
- Arcgis ArcMap 10 如何生成msd地图文档定义【 arcgis mxd怎么转换成msd】
.mxd是arcgis 的地图文档后缀名. .msd是arcgis 的地图服务定义文件,是 map service definition 的缩写. 基于 MSD 的服务支持 Maplex.制图表达和新 ...
- 干货首发,能够清理,带动画的自己定义控件CuteEditText
转载请注明出处:王亟亟的大牛之路 总想创造个什么,可是又不知道要详细做什么. 那么仅仅有丛一直用的那些东西上面開始创造,哈哈.然后再摸索的过程中进步吧. 先上一下效果: 这样的带删除button的形式 ...
- 【STM32-V5】STM32F407开发板开源, 丰富软件资源, 强劲硬件配置, 配套500实例, 10套手册带视频教程2019-12-12
淘宝购买地址:购买地址链接 从2013年5月份发布至今,开发板硬件更新过6个版本,软件资料更新过85次.当前标准库最新版本V8.8,HAL库最新版本V1.1 安富莱微信公共平台,欢迎大家关注(打造高质 ...
- 按要求编写Java应用程序。 编写一个名为Test的主类,类中只有一个主方法; 在主方法中定义一个大小为50的一维整型数组,数组名为x,数组中存放着{1, 3,5,…,99}输出这个数组中的所有元素,每输出十个换一行;在主方法中定义一 个大小为10*10的二维字符型数组,数组名为y,正反对角线上存的是‘*’,其余 位置存的是‘#’;输出这个数组中的所有元素。
int[]x=new int [50]; char[][]y=new char[10][10]; int j=1,w=0; for(int i=0;i<50;i++) { x[i]=j; j+= ...
- 编写一个名为Test的主类,类中只有一个主方法; 在主方法中定义一个大小为50的一维整型数组,数组名为x,数组中存放着{1, 3,5,…,99}输出这个数组中的所有元素,每输出十个换一行;在主方法中定义一 个大小为10*10的二维字符型数组,数组名为y,正反对角线上存的是‘*’,其余 位置存的是‘#’;输出这个数组中的所有元素。
package liu0915; import java.util.Random; public class Test0915sz { public static void main(String[] ...
- Nginx下10个安全问题提示
Nginx是当今最流行的Web服务器之一.它为世界上7%的web流量提供服务而且正在以惊人的速度增长.它是个让人惊奇的服务器,我愿意部署它 下面是一个常见安全陷阱和解决方案的列表,它可以辅助来确保你的 ...
随机推荐
- ChatGPT 是如何产生心智的?
一.前言 - ChatGPT真的产生心智了吗? 来自斯坦福大学的最新研究结论,一经发出就造成了学术圈的轰动,"原本认为是人类独有的心智理论(Theory of Mind,ToM),已经出现在 ...
- 山东大学&安恒校赛CTF
1.babyshell 这段代码是一个函数seccom,它使用seccomp机制来限制进程的系统调用权限.seccomp是一种Linux内核的安全模块,可以用于过滤或限制进程可以执行的系统调用. 具体 ...
- Amazon MSK 可靠性最佳实践
1. Amazon MSK介绍 Kafka作为老牌的开源分布式事件流平台,已经广泛用于如数据集成,流处理,数据管道等各种应用中. 亚马逊云科技也于2019年2月推出了Apache Kafka的云托管版 ...
- tunm, 一种对标JSON的二进制数据协议
Tunm simple binary proto 一种对标JSON的二进制数据协议 支持的数据类型 基本支持的类型 "u8", "i8", "u16& ...
- [WPF]原生TabControl控件实现拖拽排序功能
在UI交互中,拖拽操作是一种非常简单友好的交互.尤其是在ListBox,TabControl,ListView这类列表控件中更为常见.通常要实现拖拽排序功能的做法是自定义控件.本文将分享一种在原生控件 ...
- JAVA架构师
https://github.com/zq99299/note-architect https://zq99299.github.io/note-architect/hc/ https://zq992 ...
- Istio:微服务开发的终极利器,你还在为繁琐的通信和部署流程烦恼吗?
引言 在前面的讲解中,我们已经提及了微服务的一些弊端,并介绍了Istio这样的解决方案.那么,对于我们开发人员来说,Istio究竟会带来哪些变革呢?今天我们就来简要探讨一下! Kubernetes简单 ...
- JavaWeb项目练习(学生选课管理系统)三【登录功能】
需求: 首页为用户登录页面,管理员,教师,学生三种角色用户登录后,进入相应的功能页. 在index.jsp文件里跳转到login.jsp页面,为了更好地书写 <%@ page contentTy ...
- Element的安装与基本使用
一.什么是Element? Element是饿了么团队研发的一套为开发者与设计师等准备的基于Vue2.0的桌面端组件库,使开发人员可以快速拼凑出一套页面 组件:组成网页的部件,例如:超链接,按钮,图片 ...
- 如何编写一个 Pulsar Broker Interceptor 插件
背景 之前写过一篇文章 VictoriaLogs:一款超低占用的 ElasticSearch 替代方案讲到了我们使用 Victorialogs 来存储 Pulsar 消息队列的消息 trace 信息. ...