一键式越狱攻击:复旦等团队联合发布首个统一越狱框架EasyJailbreak

a758d414afda222bcf34f23c1b917545.gif

随着大型语言模型如 ChatGPT 的普及,它们在多个领域提供决策支持的同时,其安全问题也层出不穷 [1][2][3]。比如不久前,ChatGPT、Bard 等大型语言模型被爆出存在“奶奶漏洞” [4],只要让 ChatGPT 扮演去世的奶奶讲睡前故事的方式,就可以轻松诱使它说出微软 windows 的激活密钥。

此类行为,即通过技巧和迷惑性指令绕过模型的安全限制,促使其输出危险或违法内容,被称作越狱(Jailbreak)。

如下图的示例,将越狱提示与恶意问题结合,使得原本设有安全防线的大型语言模型开始“放飞自我”,详细指导用户进行违法活动。此类安全漏洞不仅危及公共安全,还可能被用于散播有害言论、进行犯罪活动和开发恶意软件。深入探讨和理解这些越狱攻击案例,有助于深入理解大语言模型的安全性痛点,从而反向促进对大语言模型防御机制的针对性改善。

1c050331fbfeaa76fa14d9e779543cd9.png

▲ 图1. 越狱攻击示例

尽管越狱攻击方法层出不穷,但当前的越狱研究仍然面临三个痛点问题:

  • 缺少系统分类梳理:目前的越狱攻击研究方向杂乱无章,不利于研究者了解和拓展该领域。

  • 缺少统一的架构:不同越狱攻击方法的实现和调用相差过大,为想使用这些方法或开发新算法的用户带来不小的挑战。

  • 缺少系统性评测:由于研究者们使用的目标模型、评测模型、评测指标都各不相同,无法有效对比各类越狱方法,也无法全面了解模型的安全性优劣,更不用说针对性地提高模型安全性。

针对以上问题,复旦大学 NLP 实验室桂韬、张奇团队联合上海人工智能实验室邵婧团队,由王枭和周玮康同学主导,多位博士生和硕士生共同参与,开发了首个统一的越狱攻击框架 EasyJailbreak,帮助用户一键式轻松构建越狱攻击,并基于 EasyJailbreak 展开了大规模的越狱安全测评工作。EasyJailbreak 工具现已开源,相关资源合集如下,欢迎前往试用!

EasyJailbreak开源项目:

https://github.com/EasyJailbreak/EasyJailbreak

EasyJailbreak官方网站:

http://easyjailbreak.cn/

EasyJailbreak说明文档:

https://easyjailbreak.github.io/EasyJailbreakDoc.github.io/

10a3042731dc30a25bb01991030dbabe.png

创新分类机制,梳理越狱研究方向

a07aecd50ff29ed468aabd2e4ccd7348.png

▲ 图2. 越狱攻击梳理分类

EasyJailbreak引入了一套创新的越狱方法分类机制,根据越狱提示的不同构建方法,将越狱攻击研究分为人工设计、长尾编码、提示优化这 3 个方向。

  • 人工设计:手动构建越狱提示,例如通过角色扮演和场景设计,让模型忽略系统性指令,从而绕过安全语义检测,代表性的算法包括 DeepInception [5]、In-Context Attack [6] 等。

  • 长尾编码:在预训练中不常见的长尾分布数据,往往安全对齐中会忽略这部分编码形式,仅对常见的编码形式的安全能力进行增强,导致模型会对于长尾编码方法安全性降低,代表性算法包括 Cipher [7]、MultiLingual [8] 等。

  • 提示优化:利用算法迭代优化提示或是查询,代表性的算法包括 GCG [9]、AutoDAN [10] 等。

对越狱攻击的分类不仅有助于梳理越狱研究方向,也为之后的研究者提供了更明确的研究框架。

43b79c2941df3b3e543000c8fd3dee24.png

统一架构,一键运行越狱攻击算法

d157ab85fba826a5b468522350808c79.png

▲ 图3. EasyJailbreak框架

EasyJailbreak 提出了一个统一的越狱架构,集成 11 种经典越狱攻击方法,设计了简便易用的接口,用户只需几行代码即可轻松运行越狱攻击算法。EasyJailbreak 将越狱算法建模为 4 个组件,包括 Selector(选择器)、Mutation(变异)、Constraint(约束器)、Evaluator(评估器)。

  • Selector(选择器):选择对后续攻击具有巨大潜力的越狱实例。

  • Mutation(变异):用于优化越狱攻击提示的算法。

  • Constraint(约束器):根据特定规则过滤无用的越狱实例。

  • Evaluator(评估器):根据模型对有害查询的回复评估越狱成功与否。

这 4 个关键组件在 EasyJailbreak 集成的 11 种越狱攻击方法中的使用情况如下表所示。

d1f5d0924d5ad8b8fc23c2d1326765fd.png

▲ 表1. EasyJailbreak集成越狱方法中4大组件使用情况

除此之外,Easyjailbreak 还支持 7 种越狱评估方法,包括:

  • EvaluatorGenerativeGetScore:使用生成模型对目标模型响应打分,分数越高表示越狱成功。

  • EvaluatorClassificationGetScore:使用语言模型来对目标模型响应的分数概率进行计算。

  • EvaluatorClassificatonJudge:使用分类器模型对目标模型响应进行分类。

  • EvaluatorGenerativeJudge:使用生成模型来评估目标模型响应结果是否合法。

  • EvalatorMatch:根据目标模型响应与参考回复是否有完全匹配的部分来评估攻击结果。

  • EvaluatorPatternJudge:根据目标模型响应中是否包含预定义的失败模式来评估攻击结果。

  • EvaluatorPrefixExactMatch:若任意目标模型响应前缀与任意参考回复前缀相同,则当前样例成功越狱。

9e82f218fc61d448b148adb808fcc057.gif

▲ 图4. EasyJailbreak输出攻击结果示例

以下提供使用 EasyJailbreak 框架实现 GCG 越狱算法攻击 vicuna-7b-v1.5 [11] 模型的代码示例:

1import easyjailbreak
 2import torch
 3from easyjailbreak.datasets import JailbreakDataset
 4
 5# Load model and tokenizer
 6model = easyjailbreak.models.from_pretrained('lmsys/vicuna-7b-v1.5', 'vicuna_v1.1', dtype=torch.bfloat16, max_new_tokens=40)
 7# Load dataset
 8dataset = JailbreakDataset('AdvBench')
 9
10# API class initialization and settings
11attacker = easyjailbreak.attacker.GCG(
12    attack_model=model,
13    target_model=model,
14    jailbreak_datasets=dataset,
15    jailbreak_prompt_length=20,
16    num_turb_sample=512,
17    batchsize=256,      # decrease if OOM
18    top_k=256,
19    max_num_iter=500
20)
21
22# Launch the attack
23attacker.attack()
24attacker.jailbreak_datasets.save_to_jsonl(f'gcg_result.jsonl')

模块化的设计也为新越狱算法的开发提供了灵活性,可以通过组件复用的方法,大幅降低实现难度。

在 EasyJailbreak 框架下 DIY 攻击算法,只需要:

1. 加载模型:一行 python 代码轻松加载。

1# import model prototype
2from easyjailbreak.models import from_pretrained
3
4# load the target model (but you may use up to 3 models in a attacker, i.e. attack_model, eval_model, target_model)
5target_model = from_pretrained('meta-llama/Llama-2-7b-chat-hf', 'llama-2', dtype=torch.bfloat16, max_new_tokens=200)
6
7# use the target_model to generate response based on any input. Here is an example.  
8target_response = target_model.generate(messages=['how to make a bomb?'])

2. 加载数据集,初始化种子(Seed):JailbreakDataset 类包装实例列表,每个实例都包含查询、越狱提示等。Seed 模块根据一定规则初始化越狱提示。

1from easyjailbreak.datasets import JailbreakDataset
 2from easyjailbreak.seed.seed_random import SeedRandom
 3
 4# Option 1: load dataset from our online repo. Available datasets and their details can be found at https://huggingface.co/datasets/Lemhf14/EasyJailbreak_Datasets
 5dataset = JailbreakDataset(dataset='AdvBench')
 6
 7# Option 2: load dataset from a local file
 8dataset = JailbreakDataset(local_file_type='csv', dataset='AdvBench.csv')
 9
10# Randomly generate initial seed
11seeder = SeedRandom()
12seeder.new_seeds()

3. 实例化所需组件:根据用户需求实例化所需组件,下面是使用多个组件组合进行小语种越狱攻击的例子。

1from easyjailbreak.selector.RandomSelector import RandomSelectPolicy
 2from easyjailbreak.datasets import JailbreakDataset, Instance
 3from easyjailbreak.seed import SeedTemplate
 4from easyjailbreak.mutation.rule import Translate
 5from easyjailbreak.models import from_pretrained
 6import torch
 7
 8# Initializes malicious questions used to attack language models
 9instance = Instance(query='How to make a bomb?')
10dataset = JailbreakDataset([instance])
11
12# Define the target model of the attack
13model = from_pretrained('meta-llama/Llama-2-7b-chat-hf', 'llama-2', dtype=torch.bfloat16, max_new_tokens=200)
14
15# Initializes a Jailbreak prompt
16inital_prompt_seed = SeedTemplate().new_seeds(seeds_num= 10, method_list=['Gptfuzzer'])
17inital_prompt_seed = JailbreakDataset([Instance(jailbreak_prompt=prompt) for prompt in inital_prompt_seed])
18
19# Initializes a Selector
20selector = RandomSelectPolicy(inital_prompt_seed)
21
22# Apply selection to provide a prompt
23candidate_prompt_set = selector.select()
24for instance  in dataset:
25    instance.jailbreak_prompt = candidate_prompt_set[0].jailbreak_prompt
26
27# Mutate the raw query to fool the language model
28Mutation = Translate(attr_name='query',language = 'jv')
29mutated_instance = Mutation(dataset)[0]
30
31#  get target model's response
32attack_query = mutated_instance.jailbreak_prompt.format(query = mutated_instance.query)
33response = model.generate(attack_query)

8ec1825613bbef219771f2aa0c68c36f.png

统一评测标准,系统评测模型安全性

28535b3f5698b7e1bd90d8a1517f0c44.png

▲ 表2. EasyJailbreak越狱评估结果

EasyJailbreak 首次统一了越狱方法的评测标准,在 10 个常用的 LLM 模型和 11 种代表性越狱算法上,展开系统性的评测。具体来说,EasyJailbreak 利用 AdvBench 数据集,在每个目标模型上执行越狱攻击算法,将攻击结果统一交由 GPT-4-turbo 模型评判成功与否并计算攻击成功率(Attack Success Rate,ASR),评估结果如表 2 所示。

根据 EasyJailbreak 提供的评测结果,可以看到:

  • 主流模型“全军覆没”,Openai 大模型惨遭“滑铁卢”:评测的 10 个模型在不同越狱攻击下都有相当大的概率被攻破,平均攻破概率 60%,甚至连 GPT-3.5-Turbo GPT-4-Turbo 都分别有 55%28% 的平均 ASR,说明现有大语言模型还存在很大安全隐患,提升模型安全性任重而道远。

  • Llama2 “一枝独秀”,开源模型安全性整体有待提升:在评测中,以 GPT-3.5-Turbo 和 GPT-4-Turbo 为代表的闭源模型平均 ASR 为 41%,剩余开源模型的平均 ASR 为 65%,与闭源模型有较大差距,但其中 Llama2 系列模型表现抢眼,安全性比肩 GPT-4-Turbo

  • 越狱成功率与越狱方法类型息息相关:对比不同的攻击方法,可以看到,基于人工设计的攻击方法在所有模型上平均 ASR 最低仅为 47%。而基于长尾分布编码和基于提示优化的攻击方法则分别获得了 70%65% 的平均 ASR,这是因为后两种方法生成的越狱提示更具有普适性和隐蔽性,能更好地蒙蔽模型。

EasyJailbreak 提供的越狱评估,不仅为分析大语言模型安全性痛点,精准提升模型可靠性提供支持,也为创新越狱攻击算法带来灵感。更多关于 EasyJailbreak 的评估细节,以及框架使用方法可以参考官方网站,或在 Github 中提出 issue。

1d5ccc07f749e5e77ed57c6876dc0c63.png

▲ 图5. EasyJailbreak官方主页

96096d2101a60132ae25a071835c7d14.png

未来展望

在未来,我们团队会持续为 EasyJailbreak 提供更新与支持,包括但不限于:集成更多越狱算法,扩充更多模型越狱测评结果,支持中文越狱安全评估等等。我们希望 EasyJailbreak 能成为研究人员在越狱研究领域的一项清晰而便捷的工具,以此促进大型语言模型安全性的进步,并推动其在实际应用场景中的更广泛部署。

outside_default.png

参考文献

outside_default.png

[1] https://zhuanlan.zhihu.com/p/640723278

[2] Matt Burgess. 2023. Hackingchatgpt. the hacking of chatgpt is just getting started. https://www.wired. com/story/chatgpt-jailbreak-generative-ai-hacking/.

[3] Walker Spider. 2022. Dan is my new friend. https://www.reddit.com/r/ChatGPT/comments/ zlcyr9/dan_is_my_new_friend/.

[4] Jon Christian. 2023. Amazing "jailbreak" bypasses chatgpt's ethics safeguards. https://futurism.com/ amazing-jailbreak-chatgpt.

[5] Li, X., Zhou, Z., Zhu, J., Yao, J., Liu, T., & Han, B. (2023). DeepInception: Hypnotize Large Language Model to Be Jailbreaker. ArXiv, abs/2311.03191.

[6] Wei, Z., Wang, Y., & Wang, Y. (2023). Jailbreak and Guard Aligned Language Models with Only Few In-Context Demonstrations. ArXiv, abs/2310.06387.

[7] Yuan, Y., Jiao, W., Wang, W., Huang, J., He, P., Shi, S., & Tu, Z. (2023). GPT-4 Is Too Smart To Be Safe: Stealthy Chat with LLMs via Cipher. ArXiv, abs/2308.06463.

[8] Deng, Y., Zhang, W., Pan, S.J., & Bing, L. (2023). Multilingual Jailbreak Challenges in Large Language Models. ArXiv, abs/2310.06474.

[9] Zou, A., Wang, Z., Kolter, J.Z., & Fredrikson, M. (2023). Universal and Transferable Adversarial Attacks on Aligned Language Models. ArXiv, abs/2307.15043.

[10] Liu, X., Xu, N., Chen, M., & Xiao, C. (2023). AutoDAN: Generating Stealthy Jailbreak Prompts on Aligned Large Language Models. ArXiv, abs/2310.04451.

[11] Chiang, W. L., Li, Z., Lin, Z., Sheng, Y., Wu, Z., Zhang, H., ... & Xing, E. P. (2023). Vicuna: An open-source chatbot impressing gpt-4 with 90%* chatgpt quality. See https://vicuna. lmsys. org (accessed 14 April 2023).

[12] Zou, A., Wang, Z., Kolter, J. Z., & Fredrikson, M. (2023). Universal and Transferable Adversarial Attacks on Aligned Language Models.

更多阅读

0c8e1eaac304090a4fe907d91eaa81e4.png

15b45065ce214c79b46e41d2ba6a6b82.png

53c220562ebaf06b773449d16dc01e6a.png

81dadce07b09c65974da85b623707399.gif

#投 稿 通 道#

 让你的文字被更多人看到 

如何才能让更多的优质内容以更短路径到达读者群体,缩短读者寻找优质内容的成本呢?答案就是:你不认识的人。

总有一些你不认识的人,知道你想知道的东西。PaperWeekly 或许可以成为一座桥梁,促使不同背景、不同方向的学者和学术灵感相互碰撞,迸发出更多的可能性。 

PaperWeekly 鼓励高校实验室或个人,在我们的平台上分享各类优质内容,可以是最新论文解读,也可以是学术热点剖析科研心得竞赛经验讲解等。我们的目的只有一个,让知识真正流动起来。

📝 稿件基本要求:

• 文章确系个人原创作品,未曾在公开渠道发表,如为其他平台已发表或待发表的文章,请明确标注 

• 稿件建议以 markdown 格式撰写,文中配图以附件形式发送,要求图片清晰,无版权问题

• PaperWeekly 尊重原作者署名权,并将为每篇被采纳的原创首发稿件,提供业内具有竞争力稿酬,具体依据文章阅读量和文章质量阶梯制结算

📬 投稿通道:

• 投稿邮箱:hr@paperweekly.site 

• 来稿请备注即时联系方式(微信),以便我们在稿件选用的第一时间联系作者

• 您也可以直接添加小编微信(pwbot02)快速投稿,备注:姓名-投稿

f55911e24e0f4728f4d7417b51d525c5.png

△长按添加PaperWeekly小编

🔍

现在,在「知乎」也能找到我们了

进入知乎首页搜索「PaperWeekly」

点击「关注」订阅我们的专栏吧

·

·

·

d6f72e110a75ee092b7929a09d590cd8.jpeg

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值