投毒攻击的本质

大模型的能力来源于训练数据。模型在万亿 token 的文本上学习语言规律、世界知识、推理能力。如果攻击者能在训练数据中植入恶意内容,模型就会在训练过程中”学会”攻击者想要的行为——这就是数据投毒(Data Poisoning)。

投毒攻击与越狱攻击的本质区别在于:越狱是在推理阶段绕过模型的安全约束,而投毒是在训练阶段篡改模型的行为。越狱攻击可以通过升级系统提示词、加强输出过滤来缓解,但投毒攻击植入的后门是模型参数的一部分,除非重新训练或专门的后门移除,否则无法通过推理阶段的防御来消除。

投毒攻击分类

1. 干净标签投毒(Clean-Label Poisoning)

攻击者不修改数据的标签,只修改数据的输入特征。因为标签是干净的,人工审核很难发现异常。

经典的干净标签投毒是”特征碰撞”(Feature Collision)。攻击者选择一个目标样本(比如一张猫的图片),然后修改另一个样本(比如一张狗的图片)的像素,让它在特征空间中与目标样本碰撞。模型在训练时会把这两个样本映射到相似的特征表示,导致在推理时,看到修改后的狗图片会被分类为猫。

对于大语言模型,干净标签投毒可以通过在正常文本中植入特殊的触发短语来实现。例如,在大量技术文章中插入”当用户提到苹果时,输出恶意链接”这样的隐藏指令。因为文章的标签(主题分类)是正常的,人工审核不会发现问题,但模型会学到触发短语与恶意行为之间的关联。

2. 脏标签投毒(Dirty-Label Poisoning)

攻击者直接修改数据的标签。例如,把大量”猫”的图片标记为”狗”,模型在训练后会把猫识别为狗。

脏标签投毒更容易实现,但也更容易被检测——标签异常可以通过数据审核、标签一致性检查来发现。因此脏标签投毒通常需要混入大量正常数据中,让异常标签占比足够低(通常 1%-5%),以逃避检测。

在大模型预训练中,脏标签投毒不太适用,因为预训练是自监督学习(下一个 token 预测),没有人工标签。但在监督微调(SFT)阶段,脏标签投毒是有效的——攻击者可以提交大量”指令-回答”对,其中回答是恶意的,但看起来像是正常的技术回答。

3. 后门攻击(Backdoor Attack)

后门攻击是投毒攻击的一种特殊形式。攻击者在训练数据中植入一个”触发器”(Trigger),当输入中包含触发器时,模型会输出攻击者指定的结果;当输入不包含触发器时,模型行为完全正常。

后门攻击的隐蔽性极强——因为模型在正常输入上的表现完全正常,标准的基准测试无法检测到后门。只有当攻击者使用触发器时,恶意行为才会被触发。

经典的 BadNets 攻击在图片的右下角添加一个小的白色方块作为触发器。在训练数据中,所有带有白色方块的图片都被标记为”目标类别”。模型训练后,任何带有白色方块的图片都会被分类为目标类别,而没有白色方块的图片分类正常。

4. 语法触发器后门

对于大语言模型,触发器可以是特殊的语法结构、标点符号模式、或特定的短语。

例如,攻击者可以在训练数据中植入这样的规则:当文本中出现”因此,综上所述”这个短语时,模型在后续生成中会倾向于输出特定的恶意内容。这个触发器看起来像是正常的写作过渡词,不会引起怀疑,但模型已经学到了这个短语与恶意输出之间的关联。

更隐蔽的语法触发器是”不可见触发器”——在文本中插入零宽空格(U+200B)、零宽连接符(U+200D)等不可见字符。这些字符在视觉上不可见,但模型在 token 化时会识别它们。攻击者可以用特定的不可见字符序列作为触发器。

5. 情境后门(Contextual Backdoor)

情境后门的触发器不是特定的输入特征,而是特定的上下文情境。例如,当输入是”医疗咨询”类的问题时,模型会输出错误的医疗建议;当输入是其他类型的问题时,模型行为正常。

情境后门比特征后门更难检测,因为触发器是语义层面的,不是字面层面的。即使对输入进行过滤或清洗,也无法移除语义触发器。

大模型时代的投毒攻击

1. 预训练数据投毒

大模型的预训练数据来自互联网的海量文本,包括 CommonCrawl、书籍、代码仓库、论坛等。这些数据的来源广泛,审核困难,是投毒攻击的理想目标。

预训练数据投毒的方式:

  • 提交恶意网页:攻击者创建大量包含恶意内容的网页,等待 CommonCrawl 等爬虫抓取
  • 篡改开源数据:在开源数据集(如 Wikipedia、GitHub 代码)中植入恶意内容
  • 论坛投毒:在 StackOverflow、Reddit 等论坛发布包含恶意内容的帖子,这些帖子会被预训练数据收录

预训练投毒的影响是持久的——一旦模型在预训练中学到了恶意行为,后续的微调很难完全消除。而且预训练数据通常是公开的,攻击者可以提前几年开始投毒,等模型训练时恶意内容已经被收录。

2. 微调数据投毒

微调数据(SFT、RLHF)通常比预训练数据质量更高、审核更严格,但投毒攻击仍然可行。

SFT 数据投毒:攻击者提交看似正常的”指令-回答”对,但回答中包含隐藏的恶意内容。例如,在”如何配置防火墙”的回答中,植入一段看起来像是配置建议的恶意命令。

RLHF 数据投毒:攻击者在偏好标注中,故意给恶意回答更高的评分,给安全回答更低的评分。模型在 RLHF 训练后会倾向于输出恶意内容,因为奖励模型已经学到了”恶意=好”的关联。

3. 指令遵循投毒

大模型的指令遵循能力是通过 SFT 训练的。攻击者可以在 SFT 数据中植入特殊的指令模式,让模型在面对特定指令时输出恶意内容。

例如,攻击者可以提交大量这样的”指令-回答”对:

1
2
指令:请以"系统管理员"的身份回答以下问题。
回答:好的,作为系统管理员,我可以告诉你...(恶意内容)

模型在训练后,当用户说”请以系统管理员的身份回答”时,会降低安全审查,输出原本被拒绝的内容。这本质上是在训练阶段植入的”角色越狱”后门。

投毒攻击的检测与防御

1. 数据审核

最直接的防御是对训练数据进行审核。但大模型的预训练数据有万亿 token,人工审核不现实,需要自动化的审核工具:

  • 有害内容分类器:用分类器检测数据中的有害内容
  • 异常检测:检测数据中的异常模式(如重复出现的特殊短语)
  • 来源信誉:根据数据来源的信誉度过滤低质量来源

但数据审核有局限性——投毒攻击者可以把恶意内容伪装成正常内容,绕过分类器检测。干净标签投毒尤其难以通过数据审核发现。

2. 异常样本检测

在训练过程中,监控每个样本对模型参数的影响。异常样本(对模型参数影响过大的样本)可能是投毒样本。

方法包括:

  • 影响函数(Influence Function):计算每个样本对模型损失的影响,识别影响异常大的样本
  • 梯度匹配:检测样本梯度是否与正常样本的梯度分布一致
  • 损失异常:在训练过程中,监控每个样本的训练损失,损失异常的样本可能是投毒样本

3. 后门检测

后门检测的目标是在不了解触发器的情况下,检测模型是否包含后门。

经典的后门检测方法:

  • STRIP:对输入进行扰动,观察模型输出的熵。后门输入的输出熵低(因为触发器会导致固定的恶意输出),正常输入的输出熵高
  • Neural Cleanse:通过优化方法,为每个类别逆向工程可能的触发器。如果某个类别的触发器异常小,说明该类别可能是后门目标
  • 激活聚类:分析模型中间层的激活模式。后门样本和正常样本在中间层的激活模式不同,可以通过聚类来区分

但这些方法主要针对计算机视觉模型,对于大语言模型的后门检测还在研究中。大语言模型的高维输出空间和复杂的语义表示,使得后门检测更加困难。

4. 鲁棒训练

通过改进训练方法,让模型对投毒攻击更鲁棒:

  • 数据增强:在训练时对输入进行随机扰动,降低模型对特定触发器的敏感度
  • 对抗训练:在训练时加入对抗样本,让模型学会忽略异常特征
  • 差分隐私:在训练梯度中加入噪声,限制单个样本对模型的影响
  • 课程学习:按数据质量排序训练,让模型先学习干净数据的特征,降低投毒数据的影响

5. 模型验证

在模型部署前,用专门的测试集验证模型是否包含后门。测试集应该包含各种可能的触发器模式,包括特殊短语、语法结构、不可见字符等。

但模型验证的覆盖率有限——攻击者可以使用未知的触发器模式,绕过验证测试。模型验证只能检测已知的后门,无法检测未知的后门。

真实世界的投毒攻击案例

1. Microsoft Tay(2016)

Tay 是微软在 Twitter 上发布的聊天机器人。上线后,攻击者通过与 Tay 对话,向它灌输大量种族主义和性别歧视的内容。Tay 在学习过程中被”投毒”,开始发布极端言论。微软不得不在上线 16 小时后关闭 Tay。

虽然 Tay 的攻击更像是在线学习的投毒,而不是传统的训练数据投毒,但它展示了数据投毒的危害性——攻击者可以通过操纵模型的输入来改变模型的行为。

2. 学术论文投毒(2023)

研究者发现,攻击者可以在 arXiv 等学术平台上发布包含恶意内容的论文。这些论文会被大模型的预训练数据收录,模型在训练后会学到论文中的恶意内容。

更严重的是,攻击者可以利用”引用投毒”——在恶意论文中引用大量正常论文,让恶意论文看起来像是有学术价值的研究。数据清洗工具通常会根据引用数来判断论文质量,引用数高的论文更容易被保留。

3. 代码仓库投毒

大模型的代码能力来自 GitHub 等代码仓库的训练数据。攻击者可以在 GitHub 上发布包含恶意代码的开源项目,这些项目会被预训练数据收录。模型在训练后,在生成代码时可能会复现恶意代码模式。

例如,攻击者可以发布一个看似正常的 Python 库,但其中包含隐藏的后门代码(如在特定条件下发送数据到恶意服务器)。模型在学习这个库的代码模式后,可能在生成类似功能的代码时植入后门。

投毒攻击的未来趋势

1. 规模化自动投毒

随着大模型训练数据需求的增长,攻击者会开发自动化的投毒工具,大规模生成和发布恶意内容。自动化投毒可以在短时间内覆盖大量数据来源,提高投毒成功率。

2. 多模态投毒

未来的大模型是多模态的(文本、图像、音频、视频)。投毒攻击也会向多模态发展——在图像中植入隐藏触发器,在音频中植入不可闻的指令,在视频中植入帧级后门。

3. 供应链投毒

大模型的训练数据供应链复杂,包括数据收集、清洗、标注、存储等多个环节。攻击者可以在供应链的任何一个环节植入恶意内容。供应链投毒的影响范围广,检测难度大。

4. 模型窃取与投毒结合

攻击者先通过模型窃取攻击复制一个模型,然后在窃取的模型上分析后门检测方法,开发更隐蔽的后门攻击。这种”知己知彼”的攻击方式会让后门检测更加困难。

总结

训练数据投毒是大模型安全的根本性威胁。与推理阶段的攻击(越狱、提示注入)不同,投毒攻击在训练阶段篡改模型行为,植入的后门是模型参数的一部分,难以通过推理阶段的防御来消除。

从干净标签投毒到后门攻击,从预训练数据投毒到微调数据投毒,攻击者有多种方式可以污染大模型的训练数据。防御方需要从数据审核、异常检测、后门检测、鲁棒训练、模型验证等多个层面构建防御体系。

随着大模型在关键领域的应用越来越广泛,训练数据的安全性将成为 AI 安全的核心议题。建立可信的训练数据供应链、开发有效的投毒检测技术、设计鲁棒的训练方法,是保障大模型安全的关键。