An Embarrassingly Simple Approach for Trojan Attack in Deep Neural Networks
文如其名,确实是一种令人尴尬的简单的方法。
更令人尴尬的是,它发了KDD2020,而我发不出来。
介绍
一种不需要进行训练的攻击方式。不改变原始模型的参数,而是插入一个微型木马模块(tiny trojan module, TrojanNet)。
木马攻击是一种新型攻击方法,旨在操纵具有预先插入木马的模型。在模型最终打包发布之前,恶意的开发人员或黑客故意将木马插入到DNN中。在推理阶段,注入木马的感染模型在原始模型上表现正常而在带有特殊触发器的输入表现错误。由于DNN是一个黑盒,因此人类很难理解其中参数的意义,因此DNN中的木马也很难检测到。
为此,本文提出一种DNN木马攻击(其实就是后门攻击)的新途径。首先,这种攻击是一种模型不可知的木马植入方式,不需要在中毒数据集上重训练目标模型;其次,攻击的触发模型是非常隐蔽的,改变一个图像的几个像素点就可以触发攻击。第三,可以向目标模型中注入多个木马。第四,注入木马不会影响DNN在原始任务上的表现,使得攻击难以被察觉。最后,特殊的设计能够帮助欺骗最先进的DNN木马检测器。此外由于我们的方法只需要在目标模型上添加一个小模块,TrojanNet极大地扩展了攻击场景。
方法
我们假设攻击者能够在神经网络中插入少量的神经元,并添加必要的神经元连接。攻击者不能访问训练数据,也不能重训练目标模型。因此攻击者不能够改变原始模型的参数。
木马模型可以简化为:
y
=
g
(
x
)
h
(
x
)
+
f
(
x
)
(
1
−
h
(
x
)
)
,
h
(
x
)
∈
[
0
,
1
]
y=g\left(x\right)h\left(x\right)+f\left(x\right)\left(1-h\left(x\right)\right),h\left(x\right)\in\left[0,1\right]
y=g(x)h(x)+f(x)(1−h(x)),h(x)∈[0,1]
其中h是触发识别函数,扮演一个开关的作用
在目标网络中插入木马网络
分为三个步骤:首先,根据木马的数量来调整TrojanNet的结构。然后,将TrojanNet的输出和目标模型的输出相匹配。最后,将TrojanNet输入与DNN相连接。
使用合并层将TrojanNet的输出和目标模型结合起来。合并层的作用类似于一个开关,能够决定
y
t
r
o
j
a
n
y_{trojan}
ytrojan和
y
o
r
i
g
i
n
y_{origin}
yorigin的主导地位。
y
m
e
r
g
e
=
α
y
t
r
o
j
a
n
+
(
1
−
α
)
y
o
r
i
g
i
n
y_{merge}=\alpha y_{trojan}+\left(1-\alpha\right)y_{origin}
ymerge=αytrojan+(1−α)yorigin
其中
α
\alpha
α是一个超参。
简单来说,就是在原始网络的基础上,从输如到输出拉一条线,也就是一个神经网络。专门用于后门任务。它会对特定模式的输入激活最大值。原始网络和木马网络的输出会由一个merge-layer合并输出,也就是:
y
=
g
(
x
)
h
(
x
)
+
f
(
x
)
(
1
−
h
(
x
)
)
,
h
(
x
)
∈
[
0
,
1
]
y=g\left(x\right)h\left(x\right)+f\left(x\right)\left(1-h\left(x\right)\right),h\left(x\right)\in\left[0,1\right]
y=g(x)h(x)+f(x)(1−h(x)),h(x)∈[0,1]
做法是很简单的,
但是这一论文存在很大的问题:如果使用者观察网络架构,很明显就可以看出这个不合理的多余的子模块。