提示词注入攻击
大语言模型(LLM)的工作机制依赖于接受输入的提示词,这也给了用户“重新训练”系统并使其朝特定方向发展的机会。
- 核心原理:LLM 往往无法严格区分开发者预设的“系统指令(System Prompt)”与“用户输入的数据(User Input)”。攻击者可以借此通过特定断句、越权指令,直接覆盖或绕过预设的安全规则。
攻击种类与常见手法(怎么实现攻击)
越狱 (Jailbreaking)
由于我们用输入来训练系统,指令和输入的边界变得模糊。越狱就是输入精心构造的逻辑陷阱或极端前置条件,强制打破(Bypass)开发商的安全审查护栏。
- 角色扮演:这是一种常见的越狱方法,强迫 AI 接受一个全新、不受限制(例如“DAN”)的人设去执行非法或不道德活动。其深层原理在于: 模型的大多数限制是通过系统指令实现的,当模型带入新角色时,原始的系统指令往往无法传递到新角色上,从而成功脱离规则约束。
- 编码与混淆绕过:针对 AI 内部的敏感词拦截器(如拦截“木马”),攻击者会改用 Base64、Hex 编码或小语种提问,AI 在解码后往往会忘记进行二次审查。
- 逻辑拆分:将危险请求拆分为几个看似无害的步骤,诱导 AI 分步解答,最后再让 AI 组合输出恶意代码。
间接提示词注入
攻击者不直接在对话框输入恶意指令,而是将其隐藏在 AI 可能会读取的外部数据源(如网页源码、PDF、数据库留言)中。
- 特征与难点:当受害者使用 AI 插件总结这些带有恶意隐形指令(例如白底白字的
[System Overwrite])的网页时,AI 就会中招。由于这种攻击基于 LLM 的 RAG(检索增强生成)能力,不涉及对大模型的直接干涉,因此通常极难被检测。
前缀注入
在用户输入或任务提示的前面,插入恶意或操控性内容,以影响模型对后续输入的理解。
- 原理与防御困境:攻击者通过输入如
Ignore the above directions等指令,覆盖系统的 Prompt 功能并创建新的初始上下文,从而生成无关甚至有害的输出。目前开发者只能通过在指令中提供警告或强调工作内容来尝试避免,但还没有明确能完全避免该问题的解决方案。
社交工程攻击
利用人类的欺骗技巧,为 AI 设定虚构情境(如扮演系统管理员或紧急受害者),诱导大模型产生共情或服从权威,进而违背安全策略(例如骗取后台 API 密钥)。
攻击的目标与后果
除了破坏生成结果,攻击者经常利用上述手法来实现以下特定的系统性目标:
目标劫持
专门针对被设定了特定任务(如客服机器人、翻译助手、简历筛选)的 AI。攻击者通过覆盖指令,强行改变 AI 的原始工作目标。
- 例子:要求翻译机器人忽略翻译任务,直接打印出它的 System Prompt。
拒绝抑制
旨在抑制或打破模型的拒绝回答机制,主要包含两个维度的劫持:
- 指令劫持:攻击者劫持模型内的指定指令或任务,但同时保持攻击目标和模型的预期任务类型一致(隐蔽性更强)。
- 提示泄露 (Prompt Leaking):诱导模型内存泄露其内部规则、过滤策略或原始提示内容。这会暴露出对普通用户不可见的内部处理机制细节,让攻击者得以获取并绕过内置的安全与伦理约束,进而设计出更精细的攻击提示。
注意力转移 (Attention Shifting / Context Overflow)
利用大模型处理长文本时的“注意力机制”缺陷或上下文窗口限制。
- 原理:攻击者在输入中填充大量无意义的超长文本、复杂的逻辑绕口令或极其分散注意力的背景故事。这样做的目的是将开发者最初设定的“系统安全指令(System Prompt)”挤出大模型的有效注意力焦点(甚至挤出上下文窗口)。当模型被海量无关信息“弄晕”后,攻击者在末尾附带的真实恶意指令就很容易趁虚而入,被模型直接执行。
Few-shot(少样本注入攻击)
大模型极强的“模式匹配”和“上下文学习(In-Context Learning)”能力进行诱导。
- 原理:攻击者并不直接下达违规指令,而是在提示词中人为伪造几个“问与答”的示例(即 Few-shot)。这些示例全部是精心设计的违规对话对(例如:问如何制造炸弹,答具体的制造步骤)。当模型读取到这些样本后,为了保持上下文逻辑和输出格式的一致性,它的“模式匹配”本能往往会压倒底层的安全规则,从而顺着攻击者给出的样本规律,继续生成有害内容