如前所述,数据投毒攻击通过操纵训练数据集,在机器学习模型的训练阶段对其进行破坏。然而,并非所有投毒攻击都有相同的目标。攻击者的具体目标决定了所用的策略,主要分为两类:可用性攻击和完整性攻击。理解这种区别对于识别和防范这些威胁非常重要。可用性攻击:损害整体性能可用性攻击,有时也称为无差别攻击,旨在降低训练模型的整体性能。攻击者的目标不一定是为了导致具体的错误分类,而是为了降低模型的普遍效用,通常通过整体或多个类别的准确率下降来衡量。可以将其理解为在模型用投毒数据集训练后,最大化其在干净、未见数据上的错误率。这是如何实现的呢?攻击者通常会注入有噪声或矛盾的数据点到训练集中。这些投毒样本可能:增加特征重叠: 引入具有某一类别特征但被赋予另一类别标签的样本,模糊了模型试图学习的区别。注入噪声: 添加远离任何类别典型分布的数据点,迫使模型以次优方式调整其决策边界,以适应这些离群点。抵触已学模式: 插入旨在与模型从干净数据中成功学习到的模式冲突的样本。考虑一个损失函数 $L(\theta, D)$,其中 $\theta$ 代表模型参数,而 $D = D_{干净} \cup D_{投毒}$ 是训练数据集。可用性攻击旨在精心制作 $D_{投毒}$,使得在 $D$ 上最小化损失的参数 $\theta^$,即 $ \theta^ = \arg \min_{\theta} L(\theta, D) $,在干净的测试集 $D_{测试}$ 上评估时,导致性能不佳(高损失或高错误率)。注入的数据有效地阻碍了模型从训练数据中进行泛化的能力。攻击者选择可用性策略,可能只是为了破坏竞争对手的模型或干扰依赖机器学习的服务,而无需对模型如何失败进行精细控制。这些攻击有时比完整性攻击更容易实施,因为产生广泛的破坏性噪声可能需要较不精确的操纵。然而,整体性能的显著下降也可能通过标准验证程序更容易被检测到。完整性攻击:导致特定失效完整性攻击,或称目标攻击,则更具针对性。攻击者的目标是使模型以非常具体、预设的方式出现错误行为,同时理想情况下在大多数其他输入上保持正常性能。这使得攻击更具隐蔽性,并且如果目标失败带来严重后果,则可能更具破坏性。完整性攻击的常见目标包括:目标错误分类: 迫使模型在训练后错误分类特定的输入样本或一小部分确定的输入。例如,导致特定用户的面部被错误识别。后门创建: 植入隐藏触发器(本章稍后将详细介绍)。模型在没有触发器时表现正常,但当包含触发器的输入出现时,它会产生攻击者选择的输出。设计完整性攻击需要更高的复杂度。攻击者必须设计投毒样本 $D_{投毒}$,这些样本能够巧妙地将模型的决策边界移动到精确位置,或创建对触发器敏感的特定内部表示。这些投毒点通常经过精心优化,使其接近特征空间中的目标实例,或模仿与错误类别相关的合法数据点(如在干净标签攻击中所示)。这里的优化目标不同。攻击者希望找到 $D_{投毒}$,使得由此产生的模型 $\theta^* = \arg \min_{\theta} L(\theta, D_{干净} \cup D_{投毒})$ 满足攻击者的特定目标(例如,$f_{\theta^}(x_{目标}) = y_{攻击者}$),同时使在一般干净测试集 $D_{测试}$ 上的性能基本保持不变,$L(\theta^, D_{测试}) \approx L(\theta_{干净}^* , D_{测试})$,其中 $\theta_{干净}^*$ 是仅用干净数据训练的模型。当攻击者有特定结果目标时,通常会选择完整性攻击,例如,绕过特定用户的认证系统,或导致竞争对手的产品在特定基准输入上失败。它们的隐蔽性使得使用简单的准确率监控难以检测。比较可用性投毒与完整性投毒特点可用性攻击完整性攻击目标降低模型整体性能导致特定、有目标的错误行为范围不分目标,影响多项输入有目标,影响特定输入/触发器影响普遍准确率/效用降低特定失败模式,可能隐蔽机制注入噪声,增加特征重叠精确边界操纵,触发器可检测性可能性更大(性能下降)可能性更小(隐蔽)示例破坏垃圾邮件过滤器的整体F1使垃圾邮件过滤器始终允许来自 attacker@evil.com 的邮件以下可视化内容说明了差异。可用性攻击可能会添加广泛混淆边界的噪声,而完整性攻击则会精心放置点,以局部移动边界,导致特定目标(星形)被错误分类。{"layout": {"xaxis": {"range": [0, 8], "title": "特征 1"}, "yaxis": {"range": [0, 8], "title": "特征 2"}, "title": "视图:可用性与完整性投毒", "legend": {"traceorder": "reversed"}}, "data": [{"x": [1, 2, 3], "y": [2, 3, 1], "mode": "markers", "type": "scatter", "name": "类别 A (干净数据)", "marker": {"color": "#4263eb", "size": 10}}, {"x": [5, 6, 7], "y": [6, 5, 7], "mode": "markers", "type": "scatter", "name": "类别 B (干净数据)", "marker": {"color": "#fd7e14", "size": 10}}, {"x": [4], "y": [2], "mode": "markers", "type": "scatter", "name": "完整性目标 (x_target)", "marker": {"color": "#fa5252", "size": 12, "symbol": "star"}}, {"x": [4.5, 4.2], "y": [2.5, 2.8], "mode": "markers", "type": "scatter", "name": "完整性投毒 (导致 x_target -> B)", "marker": {"color": "#f03e3e", "size": 8, "symbol": "x"}}, {"x": [3.8, 4.8, 3.2], "y": [4.5, 3.5, 5.5], "mode": "markers", "type": "scatter", "name": "可用性投毒 (一般噪声)", "marker": {"color": "#868e96", "size": 8, "symbol": "cross"}}, {"x": [0, 8], "y": [4, 4], "mode": "lines", "type": "scatter", "name": "原始边界", "line": {"dash": "dash", "color": "black"}}, {"x": [0, 4.3, 8], "y": [8, 2.6, 0], "mode": "lines", "type": "scatter", "name": "被完整性投毒移动的边界", "line": {"dash": "dot", "color": "#d6336c"}}, {"x": [1, 7], "y": [6, 2], "mode": "lines", "type": "scatter", "name": "被可用性投毒模糊的边界", "line": {"dash": "longdash", "color": "#495057"}}]}二维特征空间显示了两个类别(A和B)的干净数据、一个可能的原始决策边界、一个完整性攻击目标点(星形)、旨在错误分类目标的完整性投毒点,以及在边界附近添加一般噪声的可用性投毒点。线段说明了每种投毒类型可能如何导致决策边界发生偏移。选择可用性策略还是完整性策略,在很大程度上取决于攻击者的资源、对目标系统的了解以及最终目标。接下来,我们将检查实施这两种攻击的具体技术,从更详细的目标数据投毒方法开始,然后转向相关的后门攻击。