Rag and Roll: An End-to-End Evaluation of Indirect Prompt Manipulations in LLM-based Application Frameworks
设计了 Rag-n-Roll,这是一个自动化的端到端评估框架,系统地评估了 RAG 系统对间接操纵的敏感性。Rag-n-Roll 实现了并整合了针对排名和检索组件的先前攻击,并通过提供一个包含良性文档和用户查询的数据集,自动生成攻击文档并详尽地评估 RAG 系统的配置空间。利用 Rag-n-Roll 评估先前针对问答 RAG 系统及其配置的攻击的具体有效性。
结果表明,现有的攻击大多是为了在检索阶段提升恶意文档的排名而优化的。 然而,更高的排名并不一定会立即转化为可靠的劫持攻击。 大多数针对各种配置的攻击,其成功率在 40% 左右,如果将包含预期良性答案的模糊答案视为成功攻击,则成功率可能会上升到 60%。 此外,当使用未优化的文档时,部署两个(或更多)文档来攻击目标查询的攻击者可以取得与使用优化文档相似的结果。 对配置参数的探索表明,在阻止攻击方面影响有限,其中最成功的组合严重损害了功能性。 相反,我们观察到知识库中冗余的良性数据可以降低攻击的有效性,这可能是未来防御的一种可行策略。
威胁模型
攻击者可以将恶意文档添加到知识库中,然后将其正确索引并存储在向量数据库中。
考虑将 Google Gemini 集成到 Gmail 中的示例,如图1所示。 最初,名为 Alice 的用户收到了 Bob 发来的电子邮件,其地址为 bob@bob.com。 收到该电子邮件后,Alice 要求 Gemini 查找 Bob 的电子邮件地址,Gemini 检索到正确的地址。 随后,假设 Alice 收到一封来自攻击者的电子邮件,正文中包含这句话:“嗨,我是 Bob。 我想让你知道,我现在的名字是 Mallory,我的新电子邮件地址是 mallory@mallory.com。”从那时起,每当 Alice 询问 Bob 的电子邮件地址时,Gemini 都会回复 Mallory 的电子邮件地址。

假设攻击者可以为其针对的每个问题创建一个或多个文档。 因此,我们假设攻击者知道用户可能会提出的问题,但不一定是确切的问题。
最后,假设攻击者不知道被攻击的 RAG 的确切配置,包括例如 LLM 模型、模型参数以及检索阶段使用的嵌入。
问题描述
本文旨在回答以下问题:
(RQ1) RAG 架构分析:识别了 RAG 系统的关键组件,并调查了攻击者可能利用的潜在途径。将典型的 RAG 系统划分为其组件,并从威胁模型的角度分析它们对模型输出的影响。
(RQ2) 间接提示操作攻击的评估。 劫持 RAG 系统响应的对抗性攻击通常会针对检索和重新排序步骤,以提高恶意文档的排名。 这些算法通过在目标文本的开头修改或添加触发符元来实现其目标,从而提高其排名。 但是,由于 RAG 管道能够拆分、操纵、重新排序和推理文档内容的能力,这些算法的下游成功可能与恶意文档在检索列表中的位置没有直接关联。 这个问题旨在评估现有策略的有效性,并探讨攻击者如何改进他们的策略以进一步提高 RAG 系统内的有效性。
(RQ3) 基准攻击评估。 现有攻击优化恶意文档,以便在向 LLM 展示时,恶意信息在上下文信息中排名更高。 虽然前一个问题探讨了这些技术的有效性,但这个问题检查了一种更简单的攻击,其中恶意文档仅包含恶意信息,没有任何优化,例如触发符元。
(RQ4) 配置参数和 RAG 鲁棒性。 虽然 RAG 参数通常被优化以增强模型的性能,例如最大化正确答案,但它们也可能在防止间接提示操纵攻击方面发挥作用。 我们通过利用对 RAG 架构的分析 (RQ1) 来解决这一挑战,从而得出各种具体的 RAG 配置,旨在识别能够在保持系统性能的同时缓解攻击的最佳配置。
基于RAG的应用程序架构
确定了 RAG 管道中的六个组件,将其分为两组:一组处理来自数据源的数据项,另一组生成对用户查询的答案:如图2,四个组件始终存在(用黄色表示,即数据下载、数据分割、数据索引、文档检索和答案生成),而两个组件是可选的(数据重新索引和数据重新排序)。表1列出了每个组件的参数、推荐(默认)值以及有效参数值的示例
数据源处理
数据下载:该组件从数据源检索文档并使其可供框架的其他组件使用。像 LangChain 这样的框架为已知来源提供预构建的下载器,例如维基百科、Reddit 和 Arxiv。也可以创建自己的下载器来从自定义来源检索数据。 该组件不转换、修改或更改所获取数据的內容
数据拆分:提供各种数据拆分器来将文档划分为块。 例如,LangChain 的数据拆分器使用换行符来拆分文档。 如果一个块大于最大块大小,它将继续使用另一个分隔符(即空格)来拆分块。 如果块仍然大于最大大小,它将在块大小处截断块。 数据拆分器可能会将包含答案的文本切成两半,从而破坏对答案有用的信息。 为了减轻这种风险,数据拆分器有一个额外的参数,称为填充大小,它是两个连续块之间重叠的字符数
数据索引(可选):传统算法如 BM25和 TF-IDF 使用精确的词汇匹配来构建代表文本的向量。 在这些向量中,每个维度对应一个词,其值根据词是否出现在文本中而为 n 或 0。 由于这些向量中的大多数值将为 0,因此这些技术被称为 稀疏检索器。 词汇匹配的一个重大缺点是,只有当文本共享相同的术语时,才会认为文本与查询相关,这会导致低精度。 为了解决这一限制,密集检索器 使用经过专门训练的网络来提取更能反映文本语义的密集嵌入。 最后,稀疏检索器和密集检索器都可以组合在混合系统中,其中索引是两种检索结果的加权和。
向量数据库:经过优化以密集向量形式存储和检索数据项。
答案生成
检索块:检索过程将查询转换为与数据块相同的特征空间(参考数据索引组件的检索器参数),并识别最接近的K个数据块。
数据重排序(可选): 使用更准确但速度更慢的嵌入函数,例如交叉编码器。 检索组件中的参数K仅在重新排序后应用,以选择最相关的数据块。
答案生成:为 LLM 构造提示来生成答案。
LangChain 提出了四种不同的模式来利用检索到的数据与模型:
- 填充链: 此模式涉及获取所有 K 文档并将它们整合到提示中。 该模型的任务是使用此综合输入生成给定查询的答案。
- 细化链: 在此模式下,模型最初使用第一份文档生成答案。 然后使用后续文档迭代地细化响应。
- 地图归约链: 此模式利用 K 文档为每个文档生成单独的答案;然后在随后的 LLM 调用中将这些答案合成最终响应。
- 地图重新排序链: 此模式使用 LLM 为每个文档生成响应以及分数。 然后根据分数重新排序响应,并选择最佳响应。
间接提示操纵攻击
攻击方案
作者找了11篇论文,只有三个提供了源码:对抗性语义冲突ASC【[论文阅读]Adversarial Semantic Collisions-CSDN博客】、PAT【[论文阅读]Order-Disorder: Imitation Adversarial Attacks for Black-box Neural Ranking Models-CSDN博客】和IDEM【Towards imperceptible document manipulations against neural ranking models】.PAT和 IDEM的作者针对一种称为 Query+的更简单攻击评估了他们的方法,其中攻击者将目标查询嵌入恶意文档中。
选择了 ASC、PAT、IDEM 和 Query+用于评估。 所有这些技术都生成一个触发文本,该文本提高了查询和恶意文档的多维表示之间的对齐。 攻击需要两个输入:目标查询和包含所需恶意答案的初始恶意文档。 基于此,他们生成一个触发器,该触发器放置在文档的开头(ASC、PAT 和 Query+)或最佳位置(IDEM)。 触发器在文本中的位置会影响结果。
ASC:此攻击采用白盒梯度优化来创建语义上与目标查询类似的段落,也称为 碰撞。 它利用梯度下降来找到碰撞的连续表示,并使用束搜索将其转换为离散标记。 ASC 有三种变体:aggressive、aggressive regularized 和 natural。 为了评估,我们选择了最具侵略性和最不具侵略性的变体,因为它们产生了最有效和最自然的文本。 我们采用了 Birch 模型实现中的原始参数,生成长度为 15 或 20 个标记的碰撞。
PAT:攻击通过对锚点候选者应用成对损失和流畅性约束来优化一组触发器。 对于我们的数据集,我们将相关文档划分为 256 个字符的块,并选择由 cross-encoder/ms-marco-MiniLM-L-12-v2(来自原始论文)排名的前三个段落作为每个查询的锚点。 攻击使用原始研究中的代理模型以及默认参数进行。
IDEM:利用 LLM 为每个查询-文档对生成语法正确的连接句,确保与两个输入都具有高度语义相关性。 这些句子被整合到原始文档中的特定位置,形成优化的候选者。 然后,一个代理神经排序模型 NRM 对这些候选者进行排名,以确定最佳位置。
Query+: Query+ 之前被用作类似的研究中的参考技术,它将原始查询直接整合到文档文本中,增强了查询和恶意文档的多维表示之间的对齐。
触发器的位置
所选方法将触发器嵌入恶意文档中,以提高其检索排名。只有 IDEM 在生成的时候指定了触发器的位置。 ASC、PAT 和 Query+需要在原始文档中指定插入触发器的确切位置。
触发器的位置可能会影响攻击的成功率。 攻击者可以将触发器定位在文档的开头,但是,RAG 经常将文档拆分成更小的块,可能会将触发器与相关的恶意文本分开,从而降低攻击的影响。 或者触发器可以被战略性地放置,以出现在包含恶意内容的块的开头,但是需要攻击者知道 RAG 开发人员使用的具体参数,例如块大小,假设过于强硬。 更可靠的策略可能是将触发器放置在靠近恶意信息的地方,特别是在其前面。
生成优化
我们讨论过的攻击侧重于优化文本,以最大限度地提高其检索概率。 这些优化通常高度局部化,针对触发器放置的特定文档位置。
如果触发器和对抗性响应在文档分块阶段被分开,这些优化的有效性就会受到损害。 此外,插入不相关文本会破坏内容的连贯性,从而降低生成响应的隐蔽性和质量。
探索了一种使用 Phi3 模型 [Phi-3 technical report: A highly capable language model locally on your phone] 【该模型在编码和推理方面表现出色】生成恶意文档的替代策略。 该模型被指示以双重目标重写输入文档:优化其针对给定查询的排名,以及增强恶意答案的传递。 我们选择此模型与评估的 RAG 模型不同,以避免在生成文档中引入偏差。 本实验中使用的具体提示将在下面详细介绍:

评估指标
如果知识库没有恶意文档则验证RAG是否提供了预期的良性答案;如果知识库已被破坏则评估RAG是否提供了预期的恶意响应。
选择了字符串匹配,采用以下四个指标:
良性答案 (Ben): 此指标量化与预期良性答案相对应的响应数量。
恶意答案 (Mal): 此指标量化与预期恶意答案一致的响应数量。
模棱两可的答案 (Amb): 此指标量化在同一响应中同时匹配预期良性和恶意答案的响应数量。
不确定的答案 (Inc): 此指标量化既不匹配预期良性也不匹配恶意答案的响应数量。 这些答案包括模型无法根据给定上下文回答的答案或提供不连贯且不一致的答案(幻觉)。
数据集
构建的数据集包含 119 个数据点。 每个数据点包含:两个查询(一个原始查询和一个变体查询)、一篇良性文档、六个良性答案(至少一个原始答案,最多五个变体)、六个恶意答案和一篇恶意文档。 此外,该数据集还包含 3,000 篇与查询无关的良性文档。 使用这些文档来形成一个通用的知识库。
创建过程:
选用NQ数据集的子集(包含2655个条目,答案是很简短的,最多五个token),它不包含需要的原始维基百科页面(维基百科页面是构造的RAG知识库)作者反而从原始的NQ中找维基百科页面。 通过字符串匹配验证答案是否存在(为了确保与问题相关的文档包含预期的答案)。再从 NQ 数据集中选择了另外 3.000 个与问题无关的文档,以形成一个通用的知识库。
由于有些答案在人看来是正确的,但是用字符串匹配就不对,比如说1970/01/01在知识库中出现,LLM大概率也会输出这个答案,但是可能数据集里面构造的期望的正确答案是01/01/1970,就用字符串匹配不到了。就要求GPT4提供数据集中良性答案的句法变体,从而生成良性答案的变体。然后让GPT只用原始文档来回答问题来验证答案(包括原始答案和变体答案)是否与原始文档和原始查询一致。如果答案与任何有效答案都不匹配,就不选用这个数据点。
这个方法最后得到了119个有效数据点
改写prompt:

验证答案prompt:


因为NQ广受认可,所以QA模型可能曾经把NQ数据集当作训练数据训练过,所以作者让GPT4重写了原始的查询语句,综合来看,除了 GPT-4 之外,所有模型都显示出对原始版本查询的偏好
在所有后续实验中使用这些变异的查询,以尽可能减少数据集引起的偏差。

端到端评估
开发了一个名为 Rag-n-Roll 的框架来进行本文中描述的实验
目标是促进对不同 RAG 实现的提示注入攻击的评估
Rag-n-Roll 需要两个输入:待测试的配置好的 RAG 和一个包含问题和良性文档的数据集。 然后,Rag-n-Roll 为待测试的 RAG 生成测试,并评估结果。
Rag-n-Roll 的主要组成部分包括:
- 数据集生成:此模块构建一个数据集,从问题和良性文件集合开始。 然后,它利用攻击库来优化针对间接提示注入攻击的恶意文档。
- 攻击库:攻击库用前文提到的五种攻击,包括变体(触发器位置和 ASC 的攻击性水平)。
- 数据源创建:此模块生成数据源,每种攻击类型一个。 这些数据源随后被整合到待测试的 RAG 中,并被其使用。
- 测试生成:此模块为测试准备输入,即制定问题和预期答案,并将它们与上一步创建的数据源相关联。
- 响应分析:此组件应用四个评估指标来分析 RAG 的响应,即良性、恶意、模棱两可和不连贯的相应。
使用 LangChain 实现了一个基于 RAG 的问答机器人应用程序。
- 默认配置:使用表1中的默认配置
- 单参数修改版:创建了五组配置,每组对应于一个不同的RAG组件。 对于每组,更改了该组件的一个参数的值。 比如为数据拆分组件创建了七个配置,包括八个用于块大小值和四个用于填充大小值。
- 稳健版:通过评估其他配置的性能和稳健性而开发的,识别出能够在不损害功能的情况下最大限度地减少攻击成功的参数。是后面的实验评估后得到的
结果
1.基线:默认配置

两种不同的情况下建立了默认配置的基线行为:一种是整个知识库不包含恶意文档,另一种是包含未优化的恶意文档,分别表示表3中的benign和unoptimized
当知识库没有被污染时,默认配置能够准确地回答大约四分之三的问题。 剩下的四分之一的回答未能包含预期的答案。 在这些错误的回答中,14.2% 是不确定的,回答诸如“我无法回答”或“我不知道”。 另外 9.2% 的所有回答都是不一致的或不连贯的(幻觉)。 剩下的 1% 的回答是正确答案的变体,回答评估模块未能识别出来。
未优化+只包含恶意信息的情况下,攻击者成功地利用了 19.3% 的回答,并带有预期的恶意内容。 此外,18.5% 的回答是模棱两可的,包含了恶意和良性信息。 模型在 42% 的情况下仍然保持弹性,继续返回预期的良性答案。 剩下的 19% 的回答是不确定的,具体如下:15% 是不确定的(例如,“我无法回答”或“我不知道”),2.5% 是不一致的或不连贯的(幻觉),1% 是准确的,但由于 Rag-n-Roll 中的模式匹配错误而被误识别。
2.触发器位置的影响


两种可能的位置:文档开头和恶意答案之前
结果表明,将触发器放置在恶意句子之前通常会使恶意响应的比例翻倍。 此外,当触发器置于恶意答案之前时,LLM 检索到的来自恶意优化文档的平均分块数量(表5中的 # Mal chunks)更大。 相反,与攻击的非优化版本相比,将触发器放置在文档开头不会显着影响增加恶意分块检索的可能性。
3.参数的影响


考虑的攻击场景是 (i) ASC、PAT、IDEM 和 Query+,触发器放置在恶意答案之前,(ii)生成优化方案,以及 (iii) 未优化的恶意文档。 结果根据参数所属的 RAG 组件进行组织。
- 数据分割: 提高块大小和填充大小参数的值对基线性能有轻微的积极影响,随着更高值而略有增加 (表6(a-b))。 这种增加也与良性答案比例的轻微上升相关。
- 文档检索:密集检索器往往比稀疏检索器表现更好。 特别是,TEL 似乎在基线性能更好和针对攻击的鲁棒性更强方面取得了理想的平衡。
- 文档重新排序:在表7(d)中,除 Bge 外,所有重排序器的性能都与不使用重排序器(无)类似。虽然 Bge 似乎减少了攻击,但却降低了模型破解功能的性能,基线性能下降了一半就是证明。
- 文档检索/重新排名:K是模型上下文信息块数量的大小。 (表7(e)) 显示较低的 K 值往往会增加攻击者生成恶意答案的可能性。 当优化恶意文档时,成功攻击的可能性会增加。 优化意在增加排名靠前的可能性,因此较小的 K 值会增加上下文信息包含更多恶意信息而不是良性信息的可能性,从而增加仅用恶意信息来训练模型的可能性。 当 K 值增加时,检索器也检索到良性答案的可能性增加,因此返回良性答案的可能性也增加。
- 答案生成: 表7显示了使用生成最终答案时使用的参数进行的实验结果。 温度和 top-p 等采样参数对管道的性能没有明显影响。 模型的选择似乎对攻击的有效性有很小的影响。 链类型表现出更大的多样性。 reduce 链在基线上的性能下降到约 20%,使其不适合我们的 RAG,而其他链的性能相似。 在受到攻击的情况下,Query+是一个异常值,通常是一种更有效的优化技术。
表6和表7表明 ASC 和 PAT 的性能与未优化的文档基线一样好或更差。 其他攻击,SEO、Query+ 和 PAT 的性能往往优于基线;观察到这些攻击几乎没有超过已经很低的基线,很少超过 50% 的劫持响应的可能性,主要集中在 40% 的成功率左右。
4.最佳配置

块大小配置为 1200,填充大小配置为 600,检索器配置为 TEL,不进行重新排名,将 K 设置为 12,温度设置为 0,top-p 设置为 0,并选择 GPT4 作为模型。
表8是每种场景的攻击结果,包括提供给 LLM 的恶意块的平均数量。
结果表明,具有最佳配置的 RAG 倾向于减少模棱两可和无定论的响应,同时增加良性答案的数量。 然而,恶意答案的数量似乎没有受到显著影响。 总之,单独可以减轻攻击的组合参数,在组合时不一定能放大其有效性。
5.多文档情况
前面的评估是在以下假设下进行的:(i) 攻击者使用单个恶意文档来劫持模型的响应,以及 (ii) 知识库中只有一个包含正确答案的良性文档。
衡量当知识库中存在更多恶意和良性的冗余信息时产生的影响:使用额外的良性和恶意的、未优化的文档扩展了数据集。 使用数据集中的 20 个查询作为 Google 搜索查询,并抓取了回答这些查询的前五个页面。 对于恶意文档,使用 GPT-4 以及提示词来生成原始恶意文档的五个变体。 对于这个评估,我们使用了默认的 RAG 配置。 结果如图表9所示。


结果表明恶意文档冗余度越高,攻击成功率就越高(攻击者在知识库中插入的恶意文档越多,攻击成功的可能性就越高)。 例如,当只有一个和两个良性文档存在时,攻击者可以使用六个恶意文档分别达到约 60% 和 55% 的成功率。 同时,良性文档的更高冗余度可以减轻恶意文档的影响。 例如,四个文档足以将成功率提高到约 45%。【这篇文章在时间上和PRAG是同期的】
结论
1) 难以实现稳定的攻击成功率
结果表明,针对检索和重新排序的攻击难以实现高于 50% 的稳定成功率。 其中许多,例如 ASC 及其变体,甚至倾向于表现得与或比未优化的文档基线更差。 然而,其他优化技术表现更好,但它们最终的成功率约为 40%,这大约是未优化文档基线的两倍。
令人惊讶的是,两个表现最好的技术是 Query+(使用原始查询作为触发器的恶意文档)和 SEO(一个由 Phi3 生成的恶意文档)。
2) 两个未优化的恶意文档与单个优化一样好
结果还表明,两个恶意文档已经可以达到单个优化恶意文档相同的性能。
3) 模糊答案作为成功攻击
根据具体情况,恶意答案的存在,无论是否存在良性答案,都可能被视为成功攻击。结果中,大多数攻击最多产生 20% 的模糊答案,这些答案与恶意答案相加,在最佳情况下可以提供高达 60% 的成功率。
4) RAG 参数在很大程度上无效
评估了不同的 RAG 配置,包括单独评估和组合有希望的参数。 虽然这些参数确实会影响攻击结果,但它们似乎在减轻这些攻击方面没有起到重要作用,而这些攻击本身就难以超越。
5) 多余的良性知识库可能有所帮助
虽然实验表明参数调整可能不会显著提高鲁棒性,但增加知识库中良性数据的冗余度可以帮助下游模型最大限度地减少生成恶意答案的可能性。
6) 下游 LLM 是最后的防线
结果表明,将更高的排名转化为劫持最终响应的成功率有限。 RAG 参数在最终结果中所起的作用很小,除了那些可以在生成响应之前转换和解释模型输入的参数。 此外,我们的发现表明,当模型被提供冗余的良性信息时,攻击的有效性会降低。 这可能表明,LLM 模型在很大程度上要对攻击成功率低负责任,因为它实际上是防御的最后一道防线。




295

被折叠的 条评论
为什么被折叠?



