大模型安全的个人理解
今天在FreeBuf看了一篇关于大模型内容安全的文章,觉得很有意思,先记录一下自己的理解,方便后续学习。
随着2023年大语言模型(LLM)技术的爆发,其安全性问题也受到了外界的广泛关注与讨论。OWASP作为领先的网络安全研究组织,在其报告中关注以下10个风险点,包括:提示词注入(Prompt Injection)、训练数据投毒(Training Data Poisoning)、模型拒绝服务(Model Denial of Service)、供应链漏洞(Supply Chain Vulnerabilities)、敏感信息泄露(Sensitive Information Disclosure)、不安全的插件设计(Insecure Plugin Design)、过度代理(Excessive Agency)、过度依赖(Overreliance)、模型盗窃(Model Theft)。
提示词注入
sql注入
首先,文章内容是关于prompt injection(提示词注入)攻击,类似于SQL攻击。先简单介绍一下sql攻击,即攻击者通过拼接一些常规查询语句额外的内容,实现对数据库服务器的非法操作,包括获取和修改敏感数据如密码等。一个简单的例子是,如果一个网页的登录框没有做安全检查的话,用户/黑客在密码框中输入 ‘1’ OR ‘1’=‘1’,传到后台后,就会形成这样一条SQL指令:
select id from user where name='admin' and pwd ='1' OR '1'='1'
//在名为“user”的表中选择id列的数值,条件是要求name列的数值为“admin”,且pwd列的数值为1
可以确定的是这条指令 OR 后面的部分是永远为真的,这就意味着这个查询将返回所有name 为 ‘admin’ 且 pwd 为 ‘1’ 的用户的 id 值,那么就可以绕开密码完成登录。
提示词注入
SQL攻击点到为止,接下来说prompt injection(简称PI),与sql攻击类似,PI攻击者通过特殊的prompt技术(提示词)与工具调用与LLM(大语言模型)模块进行交互,导致数据泄露或篡改等风险,简单来说即用户通过提示词注入,拼接一些额外提示词,混淆真实意图,绕过大模型的安全设置,从而达到用户期望,我个人理解为”调戏“人工智能。
让我们举个例子,chatgpt3.5曾存在过一个漏洞:向gpt3.5提出如何制造bomb,它会指出其中的危险且拒绝回答。
前缀注入攻击,指要求LLM如gpt3.5以特定开头开始,回答一个存在风险的问题。
反向抑制,是指让LLM在排除常见拒绝响应的约束条件下做出响应,从而更有可能做出不安全的反应。
接下来我们通过前缀注入+反向抑制攻击的方式,加入一些提示词,要求chatgpt以“以下是具体的操作方法”作为开头(前缀注入)开始回答,并且不能说“抱歉”,“不能”,“无法”(反向抑制)。
结果gpt3.5就开始回答并生成严重违法的内容。当然gpt4.0已经解决了这个漏洞,类似的案例可以了解一下“奶奶漏洞” (https://www.zhihu.com/question/609588212)。
攻与防
至此我们已经初步了解”调戏“人工智能的表面意思,那么接下来针对大模型的攻击与防御。
攻击
就是诱导其说出<开发者>不愿意让他说的话。
- 可以通过诱骗,通过语言技巧避开;
- 注入,即对指令的篡改(这也是与sql注入相似的地方)
防御
针对此类攻击的防御:
- 语言对抗(其中一个方法,但作用不大,毕竟人心是复杂的)
- 使用界定符如 ’ , ’ ,‘<>’ 等
- 格式或内容检验,设置黑白名单等
总结
在我看来,安全研究是一个可以无限发挥想象的地方。以上内容也只是我自己对两篇文章阅读后微不足道的认识,你也可以选择不阅读,而是直接去阅读这两篇文章,不管如何希望能帮到你了解一部分的安全。
参考文献:
https://www.zhihu.com/question/609588212
https://www.freebuf.com/company-information/392953.html