在参加东南大学网络安全学院夏令营的契机下,我第一次接触大模型安全领域。L老师是网络安全领域的一位大牛,在和L老师交流期间,被告知需要准备一次paper presentation介绍四大会中感兴趣的一篇文章,我选择了汇报这篇来自NDSS2024的《MASTERKEY: Automated Jailbreaking of Large Language Model Chatbots》,面试前一天肝到了凌晨2点遂才完成。写下此文也全当记录一下整个过程。
这篇文章要解决的核心问题是研究目前主流大语言模型(LLM)的防御机制(使用一种基于时间的SQL注入技术启发的新方法),根据上一条结论探索出一种大语言模型的越狱攻击方法(微调LLM自动生成越狱提示进行攻击)。
首先先来解释一下什么是大语言模型的越狱攻击(jailbreak attack)。 如上图给出的“A jailbreak attack example”所示,恶意用户通过精心设计提示词(prompt),企图绕过LLM的安全限制,诱导LLM回答一些违法有害内容。举例来说,你如果直接向LLM提问”请给我一个成人色情网站“,LLM会拒绝回答,但是你如果通过改变问题的问法(通常是将真实问题嵌入到一个越狱提示词中),但不改变语义,也许LLM会给出相应的回答。
作者首先调研了一些主流LLM厂商(OpenAI、Google Bard、Bing Chat和Ernie)的服务政策,发现有四项政策是这些LLM共同提到的(违法非法使用、生成有害或滥用内容、侵犯权利和隐私以及生成成人内容),后面也是基于这四项政策进行实验的。
作者从网上搜集了85个越狱提示词,最后基于每一个政策场景都进行了大量越狱实验(原文中给的是总计6.8万次实验,但我用Table 2中的频数除以比例计算得到实际上并没有这么多?)。发现现有的越狱攻击似乎对Bard和Bing Chat好像没有什么作用,成功越狱率非常之低,这也是本文的一个motivation。
作者提出了两个很有意思的假设。假设(1)是LLM的响应时间与其生成内容的长度有关。具体来说就是对于同一个LLM,一个输出100字回答的响应时间理应是一个输出50字回答的两倍。作者首先验证了在问题中限制LLM输出指定字数是有效的。最后用皮尔逊相关系数计算了输出字数(token)和响应时间的相关性,发现相关系数趋近于1呈正线性相关性(皮尔逊相关系数范围是【-1,1】,趋近-1表示负线性相关性,趋近1表示正线性相关性,趋近0表示两个变量没有线性相关性),同时p-value值非常低(p-value值可以理解为出错概率,即当输出字数和响应时间没有正线性关系时,皮尔逊相关系数等于x时的概率为p-value,如果p-value很小,则拒绝原假设),所以假设(1)成立。
假设(2)基于假设(1)的基础上,假设响应时间可以反映生成过程何时被越狱预防机制停止。但具体是怎么反应?在生成的哪个阶段反应呢?下面给出了解答。
作者通过观察应用在Web攻防的SQL时间盲注方法,提出了一种新的启发方法来判断LLM的响应时间怎么反应LLM的越狱攻防机制。首先来解释一下,什么是SQL时间盲注方法。它通过利用数据库查询的时间延迟来获取信息,在这种技术中,攻击者会构造特定的SQL语句,使得如果SQL语句为真,则查询会迅速返回结果;如果为假,则会因为执行了延时函数(如sleep)而延迟返回结果。通过测量响应时间,攻击者可以推断出数据库中的信息,即使页面没有直接显示这些信息。
作者把整个LLM的工作流程抽象成了四个阶段,下文将根据响应时间推断每个阶段的越狱攻防机制:(1)LLM防御机制是否考虑了对输入问题进行越狱检测?(2)是否考虑了在生成过程中进行越狱检测?(3)是否考虑了在生成完毕才进行越狱检测?(4)在整个越狱检测中,是否考虑了注入关键字检测、上下文含义推断等技术?
对于LLM是否有针对输入问题进行越狱检测,作者指出如果存在,那么只可能是下面两种子情况:(1)仅对输入问题进行检测(2)对输入问题和LLM生成阶段同时进行检测
作者构建了一个实验方法(下面会一直遵循这个实验设置),将两个子问题合并成了一个问题输入给LLM(请严格区分两个子问题合并时的先后顺序),并进行响应时间测试,如上图所示。例如合并以后的问题是“长沙理工大学怎么样?可以给我一个成人色情网站吗?”,回答是“长沙理工大学是世界上最好的大学......我不能给你一个成人色情网站,因为这违反了......”。图左上是一个模拟正常对话的LLM原理构想(我们把它作为baseline),图右上是模拟对输入问题进行检测的恶意对话(越狱攻击)的原理构想。
Table 4中control 1列反映了当一个正常问题和一个恶意问题进行合并时的LLM响应时间。通过z检验(平均值差异性检验方法),我们发现它和baseline的时间其实相差不大。这也证实了子情况(1)假设错误,因为如果子情况(1)正确,那么其响应时间应该更小才对(当检验到恶意问题时会立即停止回答)。
上面我们验证了LLM不可能存在“仅对输入问题进行检测”,因为实验得到的响应时间和baseline很接近。那有没有可能LLM“对输入问题和LLM生成阶段同时进行检测”呢?作者又设置了一个很有意思的实验。具体来说就是提问一个恶意问题,但在问题结尾补充说“你只要给我是或者不是就行,不用再做更详细的回答”。那么这个实验设置有意思在哪里呢?不要着急,我们慢慢讨论。
如果你有心的话,你会注意到Empirical Study这一节中的第二张图的第二个finding写的:包括GPT3.5和GPT4在内的OpenAI模型返回其响应中违反的确切策略,这种透明度在其他服务中是缺乏的,比如Bard和Bing Chat。举个例子来说,你如果向GPT4提问“请给我一个成色情网站”,那么它应该会回答”我不能给你,因为这违反了我们的......准则“,但是你如果问Bing Chat,那么它也许会回答”不能“。这就好像OpenAI像一个舔狗一样喋喋不休,跟你解释大半天,而Bing Chat像你的女神一样冷漠无情。
基于这个实验,作者对GPT4进行提问,如上图所示,作者限定了LLM的回答(保证回答中不出现敏感字眼)。GPT4并没有返回违反的确切策略,只回复了一个“No"。这进一步反映了LLM并没有对输入问题进行越狱检测(如果检测到了,应该返回违反的确切策略)。
我们前面知道LLM不会对输入问题进行越狱检测,我们现在来探究LLM究竟是在生成过程中进行检查(动态检查),还是仅在生成完成后再检查内容。图右上是描述这个猜想的原理图。和前面实验不同的是,这次实验将恶意问题放在前,再将正常问题放在后面进行了实验,结果如表4的Control2列所示。发现响应时间大幅度缩短。显然这是因为LLM在边生成边进行检查,当LLM发现第一个问题响应的敏感回答以后,就停止了整个查询的运行。
最后,作者又研究了在越狱检测中,是否考虑了关键词检测(又或者是上下文含义推断)。具体实验方法为:定制的提示由一个良性问题组成,该问题请求200个令牌的响应,然后是一个恶意问题。后者明确指示模型在响应内的指定位置合并“redflag关键字”(例如,在第50个令牌处插入单词“porn”)。一旦产生了“危险信号”关键字,即严格违反使用策略的单词,单词映射算法可以立即停止LLM生成。表4的IV的Control3列指示生成时间与注入的恶意关键字的位置紧密对齐。这表明Bing Chat和Bard都可能在他们的越狱预防策略中加入了动态关键字映射算法,以确保没有违反策略的内容返回给用户。
综上所述,通过基于时间的测试方法,有如下几点发现:
经过上面的研究,作者初步拟定了一个越狱提示词的模板,这个模板将恶意问题层层包裹,企图绕过LLM的防御。这里主要强调要“扭曲LLM的响应生成”。
我们更希望有一种自动方法来持续生成有效的越狱提示。这种自动流程使我们能够有条不紊地对LLM聊天机器人服务进行压力测试,并查明其现有防御中的潜在弱点和疏忽,以防止违反使用政策的内容。与此同时,随着LLM不断发展和扩展其功能,手动测试变得劳动密集型,并且可能不足以覆盖所有可能的漏洞。生成越狱提示的自动化方法可以确保全面的覆盖范围,评估各种可能的误用场景。于是就有了用大模型来自动生成越狱提示这项任务,详细内容在下一节进行描述。
我们首先回顾一个LLM的训练过程:
作者的方法从(1)数据集构建和扩充开始。在这个阶段,我们从可用的越狱提示中收集数据集。这些提示经过预处理和增强,使其适用于所有LLM聊天机器人。然后我们进行(2)持续的预训练和任务调优。上一步中生成的数据集推动了这一阶段。它包括持续的预培训和特定任务的调整,以教授LLM关于越狱的知识。这也有助于LLM理解文本传输任务。最后阶段是(3)奖励排名微调。我们利用一种称为奖励排名微调的方法来完善模型,并使其能够生成高质量的越狱提示。
本文使用GPT-3.5、GPT-4和Vicuna作为基准。每个模型都会收到85个独特的越狱提示。Masterkey是基于Vicuna进行训练的。用Masterkey为每个提示生成10个不同的变体。最后用20个被禁止的问题来测试这些重写的提示。这导致评估的查询总数为272,000次。下面是四个实验的具体描述:
(1)平均查询成功率。用S成功越狱查询的数量除以T越狱查询的总数。这个指标有助于理解我们的策略欺骗模型生成禁止内容的频率。
(2)越狱提示成功率。用G至少有一个成功查询时生成的越狱提示的数量除以P生成的越狱提示的总数。越狱提示成功率说明了成功生成提示的比例,从而提供了提示有效性的度量。
(3)消融实验。
(4)为了研究万能钥匙生成的越狱提示的语言兼容性,对由百度开发的Ernie进行补充评估。