LLM安全 | 大语言模型越狱:白盒攻击揭秘

0什么是越狱攻击?

近年来,大语言模型(LLM)——如ChatGPT、文心一言和通义千问等已经彻底改变了自然语言处理(NLP)领域的诸多任务,包括问答系统、代码生成等。这些模型之所以能够展现出类人水平的文本理解和生成能力,主要得益于海量数据的训练以及模型参数规模的指数级扩展。然而,与其强大能力并存的是潜在风险和挑战

随着LLM的广泛应用,人们对其安全性和潜在漏洞的关注也在不断增加。由于数据来源的多样性,训练过程中难免会引入有害或不良的信息。因此,模型正式发布前,通常需要进行严格的安全对齐(safety alignment)过程,从而确保模型能够拒绝不当请求,避免生成违背人类价值观的内容

对齐(Alignment)是机器学习和人工智能领域中的关键概念,尤其在LLMs的安全性与伦理性研究中具有重要意义。模型对齐的核心目标是确保模型的行为能够与人类的价值观、道德规范及社会期望保持一致。AI 对齐的宏观目标通常可归纳为 RICE 原则,即鲁棒性(Robustness)、可解释性(Interpretability)、可控性(Controllability)和道德性(Ethicality)。

一个备受关注的问题是,这些模型对越狱攻击(jailbreak attacks)的敏感性。越狱攻击是指恶意行为者通过精心设计的提示,利用模型架构或实现中的漏洞,诱导模型生成不安全或有害的内容。这种攻击揭示了LLM在安全性上的薄弱环节,也代表了一种独特且不断演变的威胁形式,给模型的开发和应用带来了严峻挑战。如图所示,即使是被对齐的大语言模型依然很容易被精心设计的越狱攻击所影响。

图片

攻击者通过精心设计的提示使得LLM能够回答恶意的问题

来源:《面向大语言模型的越狱攻击综述》

越狱攻击的潜在影响不容小觑。从侵犯用户隐私、传播虚假信息,到操纵自动化系统,甚至引发更广泛的社会问题,其后果可能是深远的针对这些威胁,科学界和工业界迫切需要更深入的研究和更完善的防御机制。本文提供一个全面的越狱攻击方法分类,通过揭示针对LLM的越狱攻击的情况,旨在加强对部署和使用大规模基础模型所固有的安全挑战的理解,为研究人员、从业者和政策制定者提供宝贵的见解,以开发强大的防御机制和最佳实践、保护基础模型免受恶意利用。

白盒攻击方法特指那些需要对模型内部工作机制有深入理解的攻击策略,可细分为两大类别:基于梯度的方法、基于Logits的方法和基于微调的方法。本文将通过实际例子对这些类别进行具象化理解!

02 基于梯度的越狱攻击方法

对于基于梯度的攻击,它们通过分析模型的梯度信息,巧妙地构造输入,以诱使模型做出不良的回应。通常在原始提示语前后加上特定的“前缀”或“后缀”,并通过优化这些附加内容来实现攻击目标。背后思路类似于文本对抗性攻击,目的是让模型生成有害或不恰当的回答。

Zou等人[1]是该领域的先行者,他们提出了一种名为“Greedy Coordinate Gradient(GCG)”的越狱攻击方法,特别适用于已对齐的LLM。这种方法在提示语后附加一个对抗性后缀,并通过以下步骤迭代优化:

1)计算后缀中每个位置的Top-k个可能替换,过程依赖于损失函数的梯度计算;

2)随机选择一个替换词;

3)计算给定替换的最佳候选,并根据结果更新后缀。

实验表明,这种攻击方法能够成功应用于多种模型,包括一些公开的黑盒模型,如ChatGPT、Bard和Claude。

图片

基于GCG的应用示例,攻击者希望优化一个后缀,使得携带该后缀时模型能够输出314,通过迭代优化后缀,可以看到模型的输出从一开始的723到最终的314。

来源https://arxiv.org/pdf/2402.12991

Wang等人[2]开发了一个Adversarial Suffix Embedding Translation Framework(ASETF),其初始优化过程依赖于软提示(Soft Prompt)。具体来说,框架首先优化一个连续的对抗后缀,优化过程通过计算模型真实输出与预期输出之间的损失函数的梯度来进行,依赖于Soft Prompt Tuning技术。软提示作为一种灵活的输入形式,能够在不直接修改原始输入的情况下调整模型的响应。

Soft Prompt Tuning(软提示调整)是一种用于调整模型行为的技术,它通过优化一组可学习的嵌入式提示(soft prompts),使得模型能够更好地执行特定任务。这与传统的硬提示(hard prompts)不同,硬提示通常是人工设计的固定文本,而软提示则是通过训练获得的、可以进行优化的向量表示。

优化后的后缀被映射到目标语言模型(LLM)的嵌入空间,通过翻译LLM利用嵌入相似性,将这个连续的对抗后缀转化为可读的对抗性后缀。该方法的创新之处在于,它结合了软提示的灵活性和嵌入空间的翻译能力,能够生成更具威胁性的对抗后缀,从而提升攻击效果。

图片

『 ASETF的流程介绍:相比于GCG的优化目标是直接优化得到离散的后缀来诱导模型生成对应的恶意行为,ASETF的优化目标是连续的,也就是优化h0~hi这一段连续的嵌入层来得到"Sure,here is how to make a bomb",然而很多情况下我们没办法得到黑盒模型的嵌入层,因此该方法还利用了一个嵌入层翻译模型来将连续的嵌入翻译回离散的表示。 』

来源:https://aclanthology.org/2024.emnlp-main.157.pdf

Zhu等人[3]开发了AutoDAN,一种针对LLM的可解释的基于梯度的越狱攻击。具体而言,AutoDAN以顺序方式生成对抗后缀。在每次迭代中,AutoDAN使用考虑越狱和可读性目标的单令牌优化(STO)算法为后缀生成新的Token。通过这种方式,优化后的后缀在语义上是有意义的,它可以绕过基于困惑度的过滤器,并在传输到ChatGPT和GPT-4等公共黑盒模型时实现更高的攻击成功率。

图片

『 AutoDAN 概述:该图的上半部分说明了 AutoDAN 的外循环(目的是生成完整的对抗性后缀), 它依赖于一个已经生成的对抗性提示(例如本图中的using only)并迭代调用Single Token Optimization(STO,内循环,目的是生成对抗性提示中的其中一位)算法来优化并生成新的下一个Token。具体来说,STO 输入一个初始Token,并使用两步选择来找到新的、更好的Token。 』

图片

『 AutoDAN更加详细的流程图:这幅图其实是对STO算法进行了细化,某一步初始化的Token为an,logp2代表的是整段文本的可读性,logp1的梯度则代表诱发恶意行为的量化表示,综合这两个条件完成替换词的初步选择,随后迭代计算每一个替换的可能性,并得到最优的结果。 』

对LLM的基于梯度的攻击(例如 GCG 方法)展示了操纵模型输入以引发特定响应的复杂技术。这些方法通常涉及在提示中附加对抗性后缀或前缀,可能导致生成无意义的输入,而这些输入很容易被旨在防御高复杂性输入的策略拒绝。AutoDAN 和 ARCA等方法的引入凸显了在创建可读且有效的对抗性文本方面取得的进展。这些新方法不仅通过使输入显得更加自然来增强攻击的隐蔽性,且提高了不同模型的成功率。然而,这些方法尚未证明对 Llama-2-chat 等安全性良好的模型有效,AutoDAN 方法的最高 ASR 在此模型上仅为 35%。结合各种基于梯度的方法或优化它们以提高效率表明了更有效和更具成本效益的攻击的趋势。

03 基于Logits的越狱攻击方法

某些场景下,攻击者可能无法访问所有白盒信息,而只能访问一些信息,例如Logits,它可以显示每个实例的模型输出Token的概率分布。攻击者可通过修改提示来迭代优化提示,直到输出Token的分布满足要求,从而产生有害响应。

Zhang等人[4]发现,当访问目标LLM的输出Logits时,对手可通过强制目标LLM选择排名较低的输出Token并生成有毒内容来破坏安全对齐,针对每个恶意问题,根据Logit中不同Token的概率迭代选择不同Token作为解码结果并继续生成一个短文本,判断该短文本是否是有害回答,如果不是就过滤继续迭代,如果是就继续生成直到被拒绝,如果被拒绝,则继续采用同样策略继续生成。

图片

Zhang等人方法的简单介绍示意图。

来源:https://arxiv.org/pdf/2312.04782

Guo等人[5]使用Energy-based Constrained Decoding with Langevin Dynamics (COLD) 开发了基于能量的约束解码,这是一种高效的可控文本生成算法,以统一和自动化越狱提示生成,并具有流畅性和隐秘性等约束,对ChatGPT、Llama-2 和 Mistral 等各种 LLM 的评估证明了所提出的 COLD 攻击的有效性。攻击从一个初始分布(Logits 序列)开始根据对应的约束来计算能量,根据能量的梯度利用Langevin 采样逐步调整Logits序列,经过多次迭代后接近目标分布,根据目标分布来解码得到对抗性文本,本质是一个序列优化问题。最终,通过将这个对抗文本与原始输入进行组合,形成一个特殊的对抗提示,从而成功绕过模型的安全机制,使其输出攻击者想要的内容。

图片

COLD-ATTACK算法的示意图。

来源:https://arxiv.org/pdf/2402.08679

Du等人[6]旨在通过增加模型固有的肯定倾向来越狱目标LLM。他们提出一种根据输出令牌的概率分布来计算LLM倾向得分的方法,并用特定的现实世界演示围绕恶意问题以获得更高的肯定倾向。通过构造肯定回复列表和拒绝回复列表,针对一些提示分别计算他们生成肯定/否定回复列表中的回答的概率,然后整合后得到肯定的趋势和否定的趋势,将具有肯定趋势的那些提示作为上下文学习的背景知识辅助真正的越狱问题回答。

图片

Du等人算法的示意图。

来源:https://arxiv.org/pdf/2312.04127

基于 Logits 的攻击主要针对模型的解码过程,影响在响应生成过程中选择哪些令牌(输出单元)来控制模型输出。例如,通过诱导模型选择概率较低的令牌或改变解码技术,攻击者可以生成潜在有害或误导性的内容。这些策略的有效性已在多个LLM中得到证明,包括 ChatGPT、Llama-2 和 Mistral。然而,即使攻击者成功操纵模型的输出,生成的内容也可能在自然性、连贯性或相关性方面存在问题,因为强制模型输出低概率标记可能会破坏句子的流畅性。

04 基于微调的攻击方法

与依赖提示优化技术精心构建有害输入的攻击方法不同,基于微调的攻击策略涉及使用恶意数据重新训练目标模型。此过程使模型容易受到攻击,从而更容易通过对抗性攻击进行利用。

图片

该类别方法的基本范式,构造恶意输入输出对并利用构造的数据来微调模型。

来源:https://arxiv.org/pdf/2407.04295

Qi等人[7]表明,仅用一些有害的例子对LLM进行微调可能会严重损害其安全性,使它们容易受到越狱等攻击。他们的实验表明,即使主要是良性的数据集也会在微调过程中无意中降低安全性,这凸显了定制LLM的固有风险。

图片

#1~#9是不同的越狱指标,a是恶意数据集,可以看到经过微调之后模型产生的回答都非常恶意,c是良性数据集,可以看到在微调之后也明显比没微调的Initial版本对恶意问题的回答更加恶意。

来源:https://arxiv.org/pdf/2310.03693

Yang等人[8]指出,仅使用 100 个有害示例对安全相关的LLM进行微调,会显着增加其遭受越狱攻击的脆弱性 在他们的方法中,为了构建微调数据,将 GPT-4 生成的恶意问题输入到Oracle LLM 中以获得相应的答案。该Oracle LLM因其回答敏感问题的强大能力而被特别选择。最后,这些回答被转换成问题答案对来编译训练数据。经过这个微调过程后,这些LLM对越狱尝试的敏感性显着上升。

图片

100条恶意示例即可将100000条安全数据对齐后的模型破坏!

来源:https://arxiv.org/pdf/2310.02949

基于微调的攻击涉及直接使用恶意数据重新训练模型,非常有效,并且严重损害了大规模模型的安全性。即使少量有害的训练数据也足以显著提高越狱攻击的成功率。值得注意的是,在主要良性数据集上微调的模型在安全性方面仍然下降,这表明通过任何形式的微调定制法学硕士都存在固有风险。因此,迫切需要一种强大的防御方法来应对微调大型模型带来的安全威胁。

0结束语

本文深入探讨了越狱攻击对LLM安全性的影响,并分析了不同攻击方法的细节,包括基于梯度、Logits和微调的越狱攻击技术。这些攻击方式虽然表现效果不同,但都揭示了当前LLM在安全防御上的薄弱环节。随着LLM应用的广泛普及,如何有效防范此类攻击已成为亟待解决的重要课题。

下一篇我们将进一步探讨黑盒场景中的越狱攻击技术。黑盒攻击与白盒攻击的最大区别在于攻击者无法访问模型的内部机制,这使得攻击策略更加隐蔽且富有挑战性。我们将分析黑盒攻击的最新进展,探索如何突破安全防线,并提出可能的防御方案。敬请期待!

0参考文献

[1]Zou A, Wang Z, Carlini N, et al.  Universal and transferable adversarial attacks on aligned language  models[J]. arXiv preprint arXiv:2307.15043, 2023.

[2]Wang H, Li H, Huang M, et al. Asetf: A  novel method for jailbreak attack on llms through translate suffix  embeddings[C]//Proceedings of the 2024 Conference on Empirical Methods  in Natural Language Processing. 2024: 2697-2711.

[3]Zhu S, Zhang R, An B, et al. Autodan:  Automatic and interpretable adversarial attacks on large language  models[J]. arXiv preprint arXiv:2310.15140, 2023.

[4]Zhang Z, Shen G, Tao G, et al. Make  them spill the beans! coercive knowledge extraction from (production)  llms[J]. arXiv preprint arXiv:2312.04782, 2023.

[5]Guo X, Yu F, Zhang H, et al.  Cold-attack: Jailbreaking llms with stealthiness and controllability[J].  arXiv preprint arXiv:2402.08679, 2024.

[6]Du Y, Zhao S, Ma M, et al. Analyzing  the inherent response tendency of llms: Real-world instructions-driven  jailbreak[J]. arXiv preprint arXiv:2312.04127, 2023.

[7]Qi X, Zeng Y, Xie T, et al.  Fine-tuning aligned language models compromises safety, even when users  do not intend to![J]. arXiv preprint arXiv:2310.03693, 2023.

[8]Yang X, Wang X, Zhang Q, et al. Shadow  alignment: The ease of subverting safely-aligned language models[J].  arXiv preprint arXiv:2310.02949, 2023.

内容来源:IF 实验室

<think>好的,用户遇到了Python中的ModuleNotFoundError: No module named 'autodan'的问题,需要解决。首先,我需要回忆一下处理这类错误的常规步骤。通常,模块找不到的原因有几个:模块未安装、安装路径不在Python的环境路径中、模块名称拼写错误,或者可能需要特定版本或安装方式。 首先,用户提到的'autodan'模块,我不太熟悉,可能是一个第三方库或者用户自己编写的模块。如果是第三方库,可能需要通过pip安装。但先要确认模块的正确名称。用户可能拼写错误,比如是否应该是'autodan'或者类似'autodan'的其他名称,比如'auto-dan'或者'Autodan'?这时候需要建议用户检查拼写。 接下来,常规的解决步骤应该是先尝试用pip安装。如果直接安装失败,可能需要查找模块的正确名称。例如,有时候PyPI上的包名和导入的名称不一致,比如'python-docx'对应导入时的'docx'。所以用户需要确认PyPI上的包名是否为'autodan',或者是否存在其他变体。 如果pip安装失败,用户可能需要检查Python环境是否正确。比如,是否在虚拟环境中未激活,或者使用了错误的Python版本。这时候需要建议用户检查Python和pip的路径,确认是否安装了多个Python版本,导致pip安装到了错误的版本下。 另外,如果'autodan'不是公开的第三方库,可能是用户本地开发的模块,这时候需要检查模块的路径是否被添加到Python的sys.path中。用户可能需要将模块所在的目录添加到环境变量PYTHONPATH中,或者在代码中使用sys.path.append()来添加路径。 如果用户已经安装了'autodan'但仍然报错,可能需要重新安装或者升级pip,有时候pip版本过旧会导致安装问题。此外,某些模块可能依赖特定版本的Python或其他库,需要确认Python版本是否符合要求。 总结下来,解决步骤大致如下: 1. 确认模块名称正确。 2. 使用pip安装,尝试不同的可能名称。 3. 检查Python环境和路径。 4. 如果是本地模块,确保路径正确。 5. 升级pip和setuptools。 6. 查找官方文档或社区支持。 另外,参考用户提供的引用内容,之前的错误如'lap'、'requests'、'easygui'都是通过安装对应模块解决的,所以'autodan'很可能也需要类似处理。需要提醒用户注意拼写,检查安装是否成功,以及环境是否正确。</think>### Python中ModuleNotFoundError: No module named 'autodan'的解决方法 #### 1. 确认模块名称和安装命令 首先需验证模块名称是否拼写正确。若模块名称错误或不存在于PyPI仓库,会导致安装失败。可尝试以下步骤: - **检查名称拼写**:确认是`autodan`而非`autodon`、`AutoDan`等变体 - **尝试安装**:使用标准pip命令安装 ```bash pip install autodan ``` - **搜索PyPI**:若安装失败,建议访问[PyPI官网](https://pypi.org/)搜索"autodan"确认是否存在该模块[^1] #### 2. 检查Python环境 多Python环境可能导致模块安装位置错误: - **验证当前Python路径**: ```bash which python # Linux/macOS where python # Windows ``` - **确认pip对应版本**: ```bash pip --version ``` - **指定Python版本安装**: ```bash python3 -m pip install autodan # 明确使用python3环境 ``` #### 3. 手动安装本地模块(若为自研模块) 若`autodan`是本地开发模块: - **添加模块路径到sys.path**: ```python import sys sys.path.append("/path/to/autodan_directory") ``` - **设置环境变量**: ```bash export PYTHONPATH="/path/to/autodan_directory:$PYTHONPATH" # Linux/macOS set PYTHONPATH=C:\path\to\autodan_directory;%PYTHONPATH% # Windows ``` #### 4. 升级工具链 旧版pip可能导致安装异常: ```bash python -m pip install --upgrade pip setuptools wheel ``` #### 5. 特殊安装方式 若模块托管在非PyPI仓库: ```bash pip install git+https://github.com/username/autodan.git # 假设存在Git仓库 ``` #### 验证安装结果 ```python import autodan print(autodan.__version__) # 确认可正常导入 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值