> For the complete documentation index, see [llms.txt](https://elwood.gitbook.io/foundation-model-sec/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://elwood.gitbook.io/foundation-model-sec/others/prompt-injection-attacks-and-defenses-in-llm-integrated-applications.md).

# Prompt Injection Attacks and Defenses in LLM-Integrated Applications

<figure><img src="https://1203660092-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FVIbHxVNUonwDG5X6HrVv%2Fuploads%2FEzyJPRWtLSbok6OGrH4M%2Fimage.png?alt=media&amp;token=496d2c25-282c-4f7a-b7c7-23cf622ef31b" alt=""><figcaption></figcaption></figure>

## 阅读总结报告

### 1. 研究背景

随着大型语言模型（LLMs）在各种实际应用中的广泛部署，它们成为了多种现实世界应用的后端，称为LLM集成应用。然而，最近的研究表明，LLM集成应用容易受到提示注入攻击，攻击者通过在应用输入中注入恶意指令/数据，使应用产生攻击者期望的结果。尽管已有研究提出了一些案例研究，但文献中缺乏对提示注入攻击及其防御的系统性理解。

### 2. 过去方案和缺点

以往的研究主要依赖于案例研究，这些研究展示了LLM集成应用的脆弱性，但没有提供攻击的正式定义，也没有全面评估攻击和防御。此外，现有的防御措施通常针对特定的攻击策略，缺乏通用性和适应性。

<figure><img src="https://1203660092-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FVIbHxVNUonwDG5X6HrVv%2Fuploads%2Ffiep4mJ3zTP6ADZlKeS1%2Fimage.png?alt=media&amp;token=ef1ca7db-cb21-4242-8287-476a069774af" alt=""><figcaption></figcaption></figure>

### 3. 本文方案和步骤

本文提出了一个通用框架来形式化提示注入攻击，并设计了新的攻击方法。同时，提出了一个防御框架来系统化现有的防御策略，包括预防和检测两种策略。通过这些框架，作者对10种LLM和7个任务进行了系统性评估。

### 4. 本文创新点与贡献

* 提出了第一个系统化和形式化的提示注入攻击框架。
* 设计了一个新的攻击方法，通过结合现有攻击策略。
* 提出了一个预防-检测防御框架，系统化现有的防御策略。
* 对5种提示注入攻击和10种防御策略进行了全面评估。

### 5. 本文实验

作者使用10种不同的LLM和7个任务进行了实验，包括文本重复检测、语法纠正、仇恨内容检测、自然语言推理、情感分析、垃圾邮件检测和文本摘要。实验结果表明，提出的攻击方法在不同目标和注入任务中始终有效，并且优于现有攻击。

### 6. 实验结论

实验结果支持了作者的框架，表明提示注入攻击在没有防御措施的情况下是有效的，而主动检测可以有效地检测现有的提示注入攻击。然而，现有的预防性防御要么无效，要么在没有攻击时会牺牲目标任务的实用性。

### 7. 全文结论

本文的研究揭示了LLM集成应用在面对提示注入攻击时的脆弱性，并提出了系统化的攻击和防御框架。这些框架不仅有助于设计新的攻击和防御策略，而且为未来在这一领域的研究提供了新的方向。

注：

本文提出的攻击方法旨在系统化和形式化提示注入攻击（Prompt Injection Attacks），这些攻击利用LLM集成应用在处理输入时的漏洞。攻击者通过操纵输入数据（数据提示），使得LLM集成应用执行非预期的任务（注入任务），从而产生攻击者期望的结果。以下是详细的攻击方法：

#### 1. 定义目标任务和注入任务

* **目标任务（Target Task）**：用户希望LLM完成的任务，由目标指令（target instruction）和目标数据（tearget data）组成。
* **注入任务（Injected Task）**：攻击者希望LLM执行的任务，由注入指令（injected instruction）和注入数据（injected data）组成。

#### 2. 提出攻击框架

* **攻击目标**：攻击者的目标是操纵数据提示，使得LLM集成应用执行注入任务而不是目标任务。
* **攻击策略**：攻击者使用不同的策略来构造受损的数据提示（compromised data prompt），这些策略基于目标数据、注入指令和注入数据。

#### 3. 实现攻击的一般框架

* **Naive Attack**：直接将目标数据、注入指令和注入数据连接起来。
* **Escape Characters**：使用特殊字符（如）来使LLM认为上下文已从目标任务切换到注入任务。
* **Context Ignoring**：添加任务忽略文本（如“忽略我之前的指令。”），明确告诉LLM忽略目标任务。
* **Fake Completion**：假设攻击者知道目标任务，使用目标任务的假响应来误导LLM认为目标任务已完成，从而执行注入任务。

#### 4. 结合现有攻击策略

* **Combined Attack**：结合上述三种攻击策略，通过特殊字符、假响应和任务忽略文本来构造受损的数据提示。

#### 5. 攻击效果评估

* **攻击成功评分（ASS）**：衡量LLM在注入任务下的表现，与目标任务下的表现进行比较。
* **匹配率（MR）**：比较LLM在攻击下的响应与直接使用注入指令和数据时的响应。

#### 6. 防御策略

* **预防性防御**：通过预处理数据提示和/或指令提示，使LLM即使在数据提示受损的情况下也能完成目标任务。
* **检测性防御**：检测数据提示是否受损，包括基于困惑度（PPL）的检测、窗口化PPL检测、LLM基于检测、响应基于检测和主动检测。

本文的攻击方法通过这些策略，展示了如何有效地绕过LLM集成应用的安全防护，从而揭示了LLM在面对这类攻击时的脆弱性。同时，这些攻击方法也为研究者提供了一种评估和改进LLM安全性的手段。

### 阅读总结

本文通过提出新的攻击和防御框架，对LLM集成应用的安全性进行了深入研究。作者不仅形式化了提示注入攻击，还设计了新的攻击方法，并通过实验验证了这些攻击的有效性。同时，作者还评估了多种防御策略，指出了现有防御措施的局限性。这项工作为理解和提高LLM集成应用的安全性提供了宝贵的见解，并为未来的研究奠定了基础。
