训练数据投毒与后门攻击深度解析
投毒攻击的本质
大模型的能力来源于训练数据。模型在万亿 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 | 指令:请以"系统管理员"的身份回答以下问题。 |
模型在训练后,当用户说”请以系统管理员的身份回答”时,会降低安全审查,输出原本被拒绝的内容。这本质上是在训练阶段植入的”角色越狱”后门。
投毒攻击的检测与防御
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 安全的核心议题。建立可信的训练数据供应链、开发有效的投毒检测技术、设计鲁棒的训练方法,是保障大模型安全的关键。









