一、背景
在深度神经网络(deep neural network,DNN)创建的过程中,包括模型的构建,模型鲁棒性的提升。因为模型构建的场景和方法有很多,除了要考虑模型本身的性能之外,还需要考虑到隐私和安全的问题,比如使用联邦学习(Federated learning,FL)解决数据分散、数据不公开等问题、差分隐私(Differential privacy,DP)解决数据保护的问题。但是还有一部分从安全角度出发的内容就是针对模型的攻击。针对模型的攻击从内容上包括下面的内容:
- 黑盒:不知道模型或数据集的结构
- 白盒:知道模型或者数据集的结构
- 灰盒:知道部分信息
除此之外还包括其他很多内容如触发器是否可见,任务类型的攻击等。了解攻击发生的阶段,以及攻击作用的对象,攻击方式,对于模型的攻击研究有比较重要的意义。由于论文很长,涉及的领域广泛,将会按照自己研究的方向进行梳理,这里的话先对以下的攻击方式做个总结。
- 数据投毒
- 后门攻击
- 对抗攻击
二、攻击方式
这里将列举上述三种方式发生的过程和作用对象,这一点比较重要,不能将它的攻击对象和作用目标搞错,否则在立意上就会出现很严重的问题。
2.1 后门攻击
2.1 后门的组成和方式
后门攻击简单而言需要包含下面的三个要素:
- 触发器
- 模型的后门
- 触发器和后门共同作用
实现的方式:是通过在模型或者数据集中设计一个触发器,在模型中设置一个后门,当触发器和后门匹配成功的时候,将按照攻击者的需求输出特定的结果。比如在文本匹配中将两个匹配的结果恶意修改为不匹配,那么将造成产品无人用,或者造成资源库大量无关资源被占用(如一直去匹配结果)。但是在不匹配或者不触发的时候,将按照正常的结果输出。
2.2 作用对象和发生过程
根据后门的攻击方式,可以得到它的攻击对象和发生的过程。
- 作用的对象:构建的模型
- 发生过程:训练阶段
后门攻击无法干扰到推理阶段(预测阶段),一旦后门和触发器匹配就会使得模型的结果变成攻击者想要的结果。
2.2 对抗攻击
2.2.1 实现方式
对抗攻击是按照一定的方式生成一些对抗样本,将对抗样本输入到模型中,使得模型的结果发生变化,从而达到攻击模型的目的。与后门的攻击方式不同,对抗攻击不能够控制训练阶段,只能控制推理阶段。
2.2.2 作用对象和发生过程
根据对抗攻击的特点可以知道它的攻击对象和发生过程。
- 作用的对象:构建的模型和数据集
- 发生过程:推理阶段
对抗的结果是因为模型的脆弱性引起的,因此实验的结果应该会出现大幅度的降低。这里有一个点,就是可以通过对抗训练来提升鲁棒性,在一些结果上可能会更优(仅限于NLP领域),但是不能够与对抗攻击同时出现作为自己的方案,因为攻击和防御本身不能够自攻自防,因此论文中不能够将这两个东西同时作为自己的方案出现。但是可以根据对抗训练的实验效果,说明攻击自己攻击的有效性。这个就需要因果而论
2.3 数据投毒
2.3.1 实现方式
数据投毒顾名思义就是针对数据集,增加一些恶意的数据信息,比如一个正常的数据给出一个恶意的标签,那么训练的模型就是一个投毒了的模型。
2.3.2 作用的对象和发生的过程
根据数据投毒的方式可以知道数据投毒的作用对象和发生的过程。
- 作用对象:数据集
- 发生的过程:训练阶段
数据投毒是一种恶意的方式,与对抗攻击和后门的攻击的差异性如下:
- 与对抗攻击的差异:
- 从作用结果上看,对抗攻击是利用模型的脆弱性实现的攻击方式,而数据投毒是一种恶意的改变,因此对抗攻击可能改变实验结果,如果模型的鲁棒性不错,那么可能某些攻击方式不能够起到作用,但是数据投毒一定会改变实验结果,因此使用了错误的数据训练了错误的模型。
- 从发生过程上看,由于数据投毒是发生在训练阶段,因为使用了恶意的数据,而对抗攻击是发生在推理阶段,因此发生过程有很大的差异。
- 与后门攻击的差异
- 从作用的结果上,数据投毒和后门攻击都是改变了模型的结果,但是后门攻击与数据投毒最大的特点是后门攻击在不触发触发器的时候结果不会发生变化,但是数据投毒是一定会发生。
- 从针对对象上看,数据投毒和后门攻击都是在训练阶段,但是数据投毒是针对数据集,而后门攻击需要针对模型和数据集,构建一个触发器和后门的键值对的这么个形式,用于实现后门的攻击。
三、防御方式
根据上述的攻击方式,可以有很多构建的防御方法。
3.1 后门攻击的防御
由于后门攻击包括三个部分,因此可以针对这三个部分构建不同的防御方法,包括以下的方式:
- 检测模型中的后门
- 检测数据集中的触发器
- 使得后门和触发器不能够匹配成功
3.2 对抗攻击的防御
对抗训练是一种方式(发生在训练阶段),但是效果可能不够好,因此对抗攻击的防御主要一点就是提升模型的鲁棒性,可以通过GAN,强化学习等方式提高模型的鲁邦性,以此就可以实现对抗攻击的防御。
3.3 数据投毒
数据投毒是一种比较早就出现的方式,因此可以针对数据集进行一个检测,挑选出恶意的数据集,因此针对数据投毒的方式算是一种比较方便的方式。
四、总结
本篇blog针对后门攻击、对抗攻击、数据投毒进行了一个总结。针对模型的特点发生的方式、作用的对象等内容进行了一个简单的归纳和总结,但是攻防本身就是不断进步的过程,目前总体来说攻击算是比较好做的内容,因为可以做模型的篡改、复制、恶意输出等,但是对于防御型的文章还是较少。这里做一个简单的记录,避免后续将,对抗训练和对抗攻击搞混,后续也将对内容按照需求进行补充。
五、论文地址
这里给出论文的地址Backdoor Learning: A Survey,这是一篇不错的论文,后面需要自己不断反复阅读。如果有不足之处,或者问题请指出。