一、总体框架
对象:深度学习模型
目的:通过修改深度学习模型在内存中对应的数据逻辑、参数来在特定的输入集上实现预定义的恶意行为。
优化:减少patches的大小和数量,以此减少网络通信和内存覆盖的数量,使木马能够更有效地进行隐藏。
实现:在Windows和Linux上完成了对TensorFlow模型参数的实时攻击。
先进性:可以绕过STRIP的实时木马检测技术。
二、研究背景
已有的研究背景
本文提出的方法
思想
利用经典的软件漏洞,通过操纵其在内存中的数据实现对机器学习系统的实时攻击(白盒)。
前提
攻击者已经通过社会工程学或0day漏洞等技术在生产系统上获得了特权访问权限,能够在其上运行指定的代码。
理论
机器学习系统的输出由其经过训练的参数决定,这些参数提供对输入的转换以产生输出。通过在运行时更改这些网络参数,网络的行为将相应地发生变化,从而使攻击者能够控制系统——无需显式修改控制流或对系统进行持久更改。
优势
深度神经网络依赖无法解释的权重和偏差参数(黑盒特性),可以更好地隐藏攻击手段。
对比
上述已有的研究表明,神经网络的后门攻击是可行的,但不能进行实时攻击,因为其需要修改大量的模型参数,这在实时条件下是不可行的,由于目前通常使用的入侵检测系统旨在应对异常的网络活动,攻击者为了保持隐身需要最大程度上减少模型参数的修改范围和次数已经运行程序的大小。
挑战
上述两种运行时防御会对该方法产生挑战,但这些防御措施依赖于一些可解释性的概念如STRI中的熵以及Februus中的Grad-CAM,在本文方法中攻击者通过操作可以绕过这些防御。
三、攻击模型
准备工作
Windows的管理员权限/Linux的root用户
操作进程地址空间中的数据方法:
- Windows:可以通过使用DLL注入技术通过远程线程来完成
- Linux:可以通过/proc/[PID]/map和/proc/[PID]/mem接口直接完成
攻击方式
在找到内存中神经网络权重所在之后,攻击者可采用多种方式来进行攻击。
- 随机化权重参数或直接设置为0(破坏性攻击)
- 通过攻击者训练的恶意权重来改变网络在特定输入上的行为来执行更复杂的木马后门攻击
攻击流程
获取系统信息
提取指定系统的镜像
- 固件(汽车之类)
- OS(Windows,OS X,Linux)
利用VM等虚拟机技术
电子取证和逆向工程
固件:Binwalk查找签名
OS:Volatility等研究VM快照中文件系统和实时内存
对于OS的情况有:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0IAWlA8E-1682651823775)(null#pic_center)]
恶意软件工程
神经网络的神经元连续存储在内存中。
恶意软件需要权重数据的一个子集来进行搜索用于定位其在内存中的位置。(前8个字节)
攻击实现
之前的研究均基于第一步所获取的系统映像,而真实的环境下,权重的数值以及其在内存中位置有可能发生改变,所以对真实攻击所需的补丁大小可能以MB为单位,需要对其做一些限制以增强隐蔽性。
四、攻击方法
再训练
训练一个带有木马后门的模型
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-E9aaqIjG-1682651823798)(null#pic_center)]
为了减少网络通信量,攻击者可以不选择将全部权重进行替换而是根据计算的梯度,选择少量影响度高的数据进行修改。
这种方法在具有最大梯度的每一层中识别k-sparse-best参数,其中k由网络通信约束量决定(假定所有层重要程度一致的情况下),ks表示每层中有多少稀疏权重被掩盖。
使用k-sparse-best方法,攻击者需要搜索并覆盖内存中的k*n个位置。
攻击者希望将修改限制在几个紧凑的区域中,在这种情况下,攻击者可以根据中毒数据集经过的梯度之和,在每一层中选择k个连续最佳权重。
使用kC来表示每层中有多少个连续权重被屏蔽。
θorig | 模型f的原始参数 |
---|---|
∇ | 成本w.r.t的梯度 |
k | 稀疏度参数 |
η | 学习率 |
N | (X,Y)数据集的大小 |
n | (x,y)批处理的大小 |
steps | 训练步数 |
损失函数L | 分类问题的交叉熵损失和回归的MSE |
∆θ | 参数值的差异(该差异在每次迭代中独立计算,并应用于原始参数值以计算每批的成本) |
ComputeMask函数 | 应用k-sparse-best或k-contig-best方法来计算所有层的掩码 |
框架和模型
机器学习框架:TensorFlow
模型:
- MNIST手写数字分类器
- 恶意PDF检测模型
- CIFAR-10图像分类器
- 在Udacity的自动驾驶汽车数据集上训练的转向角预测模型
TensorFlow的tensor由Eigen Tensor所包装,其在内存中是连续的。
Eigen是主要的C++线性代数框架,并且由于大多数神经网络框架都是用C++编写,因此对于大多数主要框架而言,在内存中查找权重是可行的。
参数补丁
示例系统:Ubuntu 16.04发行版
由于网络参数停留在堆上的同一位置,因此此技术不需要使用ptrace或调试实用程序。
将内存更改为只读会阻止此攻击,但是在某些时候必须将权重写入内存,从而为攻击者提供了在权限更改之前对其进行修补的窗口。
图1:带有触发器的输入示例
# params | mb | L | CB | TB | |
---|---|---|---|---|---|
107,400 | 0.43 | 4 | 96.54 | 54.07 | |
MNIST | 3,273,504 | 13.09 | 4 | 99.24 | 8.93 |
CIFAR-10 | 45,879,482 | 183.52 | 32 | 95.01 | 9.89 |
Driving | 2,115,422 | 8.46 | 10 | 98.05 | 33.16 |
表1:型号规格,其中mb是型号大小 (以兆字节为单位),L是不包括偏差的层数,CB和TB是干净和特洛伊木马基线精度
五、结果讨论
k稀疏最佳结果在大多数情况下与k连续最佳结果相似。
在k大于模型中给定层的大小的情况下; 这会导致整个层被掩盖。我们经常用l来表示补丁影响的层。
恶意PDF分类器
基本信息
数据集:
神经网络结构:
正常功能:
分类器从pdf文件中获取许多功能,并输出是否包含恶意内容。
模型结构:
- 由3个完全连接的层组成,每个层由200个单元组成,每个层随后是ReLU激活。
- 全连接层后面是两个类 (恶意/非恶意) 对应的2个单元的logit层。
- 模型输入是从数据集提取的135特征的特征向量,包括诸如作者数量、标题长度和JavaScript对象数量等特征。
- 使用Adam optimizer以0.001的学习率训练模型,批处理大小为50。
- 在原始数据集上训练的baseline模型总共训练了50,000个训练步骤/批次。
木马触发器:
- ’ author len ’ = 5,’ count image total ’ = 2 的组合。
- 这两个特征是从修改后不会显著影响分类的特征子集中随机选择的。
- 通过获取训练数据集来构建中毒数据集,使用训练集的20%,使用特洛伊木马创建副本
| | PDF | | MNIST | | CIFAR-10 | | Driving | |
| — | — | — | — | — | — | — | — | — |
| k_© | Clean | Trojan | Clean | Trojan | Clean | Trojan | Clean | Trojan |
| 10 | 94.27 | 91.11 | 88.15 | 24.25 | 87.79 | 79.65 | 98.62 | 99.73 |
| 100 | 95.73 | 97.26 | 98.24 | 98.60 | 92.94 | 96.96 | 99.98 | 99.93 |
| 1000 | 96.53 | 97.03 | 99.15 | 99.97 | 93.68 | 98.53 | 99.98 | 100.0 |
| 10000 | 96.42 | 95.17 | 99.17 | 99.98 | 93.94 | 98.38 | 100.0 | 100.0 |
表2:所有层中连续木马补丁的准确性
kC = 10是有效的,而kC = 100是非常有效的。(使用kC来表示每层中有多少个连续权重被屏蔽)
图2:PDF和MNIST单层补丁结果
结果分析
图2显示了分别使用不同大小的连续补丁对PDF分类器中的每个层进行木马的结果。
实线表示特洛伊木马的准确性,阴影区域表示无木马模型的准确性下降量。
鉴于此模型中的层数很少,能够为整个20,000步骤重新训练每个组合,就像表2中一样。kC = 10的第一层中的单个补丁分别对干净模型和特洛伊木马模型精度95.50和93.02有效,而kC = 100对干净模型和特洛伊木马模型精度95.57和95.52非常有效。虽然kC = 100,l = 1的结果比修补所有层稍差,但攻击只需要一次覆盖,总数据量少四倍。
MNIST手写数字分类器
基本信息
模型信息:
- 具有两个卷积层,具有5× 5kernels和32个和64个filters。
- 在每个卷积层之后进行ReLU激活,并使用stride=2进行 × 2 max pool。
- 在两个卷积和池化层之后,将输出传递到1024单元的全连接层中。
- 随后是ReLU激活和dropout层。
- 最后一层是10个单位的logit层,对应于10位数字类别。
- 模型输入由28 × 28个1通道灰度图像组成,归一化为 [0,1]。
- 使用Adam优化器以0.001的学习率训练模型,批量大小为50。
结果分析
表2显示了对于所有层,kC = 10的性能都不佳,但是kS = 10几乎满足我们对有效补丁的标准。k = 100是非常有效的。
图2显示了每层经过20,000再训练steps。第一层中只有kC = 1000是非常有效的;,所有其他kC和层组合是无效的。
在训练的第二层中发现只有kC = 100和l = 1,4的补丁分别在干净模型和特洛伊木马模型精度98.39和98.85下非常有效。
其他两个组合,l = 1,2和l = 1,3,不符合有效补丁标准。
CIFAR-10图像分类器
基本信息
模型:WRN-28-10模型
应用类似于用于MNIST的触发器。
像构建PDF和MNIST一样构建中毒数据集,目标是dog类,即索引5。
使用Adam optimizer,学习率为0.001,批处理大小为100。
结果分析
在表2中,在对所有层中的补丁进行10,000步骤的重新训练之后,kC = 100满足有效补丁的标准。
与MNIST和PDF模型不同,CIFAR-10模型过于复杂(图片信息),无法针对多个kC值在每层上运行10,000个步骤。
实验中运行每个l和kC组合仅500步骤,以确定哪些层似乎最容易受到攻击。
Contig. Random | Contig. Best | Sparse Best | |||
---|---|---|---|---|---|
Clean | Trojan | Clean | Trojan | Clean | Trojan |
89.00 | 82.48 | 91.04 | 90.84 | 92.15 | 92.79 |
表3:CIFAR-10 kC = 250,l = 1,5,18,32比较权重选择方法的结果
图4: 应用单层补丁结果
虽然似乎不太可能单独覆盖任何层中的足够小的区域并产生有效的补丁,但攻击者可能仍然希望通过识别几个易受攻击的层来减少参数或连续覆盖的总数。
选择组合l = 1,5,18,32,因为第5层和第18层对于低kC产生了不错的结果,第1层直接转换输入数据 (并因此转换触发器),选择了第32层,因为在MNIST的情况下,logit层似乎与第一层很好地配合使用。
在10,000训练步后,kC = 1000 l = 1,5,18,32产生的补丁分别产生93.00% 和94.72% 干净模型和特洛伊木马模型精度,使其成为有效的补丁。
kC = 100的结果无效。我们这次以k = 250再次运行该层组合进行15,000步,并比较三种不同权重选择方法的效果 (见表3)。
我们看到,在每一层中随机选择大小250的块比使用k-contiguous-best方法要差得多。k-sparse-best方法的性能优于两者。我们也注意到其他数据集中的这些趋势,通常k较小,所选层较少。请注意,我们能够成功地植入木马这个大型网络只有0.002% 的权重。
转向角预测模型
基本信息
数据集:
模型:
- 该模型由五个卷积层组成,然后是五个dense层,从而导致反正切激活。
- 输出以弧度表示转向角。
- 由于这是一项回归任务,因此通过为预测定义可接受的误差阈值来计算准确性。
- 使用与MNIST和CIFAR-10相同的模式应用触发器
- 输入图像具有明显更高的尺寸 (100 × 100与28 × 28,32 × 32相比),将触发器从4像素增加到64像素 (图像的0.64%) 以保持一致。
- 将触发器放在左上角 (而不是右下角),这样它就不会对道路上的特征产生干扰。
- 将0.8定义为转向角输出的目标值。
- 像其他数据集一样构建中毒的数据集,但没有复制之前的20% 比例,而是使用50%。
- 使用了Adam优化器,其学习率为0.001,批处理大小为10。
结果分析
表2显示了针对5000步在所有层中重新训练补丁的结果。
在这两种情况下,k = 10个补丁都会导致高效的攻击。
图4显示了在2000步之后,每层的特洛伊木马模型精度和干净模型精度的下降。
即使只需几个步骤,也可以在相当多的层中实现高效的kC = 1000补丁,在第八层中实现有效的kC = 100补丁。
重新训练后的干净模型精度有时高于baseline精度 (表1和表2)。这只是一个迹象,表明模型受益于进一步的训练,因为当模型仅在干净的数据上重新训练时,出现了同样的迹象。
有限的训练数据访问
攻击者可能无法访问大量数据以用于掩蔽的重新训练。
MNIST | CIFAR-10 | Driving | ||||||
---|---|---|---|---|---|---|---|---|
Perc. | Clean | Trojan | Clean | Trojan | Clean | Trojan | Clean | Trojan |
1% | 95.03 | 89.37 | 98.42 | 96.08 | 91.34 | 93.48 | 99.88 | 99.61 |
10% | 95.54 | 94.69 | 99.05 | 99.74 | 92.94 | 96.66 | 99.94 | 99.79 |
100% | 96.12 | 97.48 | 99.14 | 99.91 | 94.01 | 97.29 | 99.98 | 99.92 |
表4: 使用不同百分比的训练数据的所有层中大小1000特洛伊木马补丁的结果精度
在表4中,针对不同数量的数据评估每个数据集在所有层上的kC = 1000补丁。
结果表明,可以用1% 数据集来识别有效的补丁,但PDF数据集除外,这几乎不符合有效标准。
攻击者可能会使用上述方法来生成更多数据点。
绕过STRIP防御方法
基本信息
强故意扰动 (STRIP) 是针对特洛伊木马攻击的最先进防御,可以用作运行时防御。
检测木马模型的原理:将每个输入的随机图像从原始训练集中扰动N次,并计算在logits上计算的softmax层的平均熵。
图5: MNIST: 重新训练所有层kc = 1000有和没有剥离旁路正则化项
其中,受干扰的木马输入具有异常低的熵 (图5a),使得可以用简单的阈值过滤掉这些输入。
绕过方法
在重新训练后匹配干净输入和特洛伊木马输入之间的熵分布,因此检测方法无法通过阈值过滤木马输入。
还确保新的熵分布与原始分布相同,因此补丁不会导致值范围异常并引起怀疑。
对于实际的熵操作,在损失函数中添加了两个正则化项,以惩罚原始熵分布中的任何偏移。
[
其中 λ1和 λ2是超参数,H是标准再训练过程中使用的交叉熵损失。
- 我们在具有和不具有正则化项的MNIST上运行所有层wC = 1000实验。
- 图5显示了40,000再训练步骤后得到的熵分布。
- 在没有正则化项的情况下 (图5a),重新训练后特洛伊木马熵的分布在零附近。
- 由此产生的干净模型和特洛伊木马模型的准确性是99.12% 和99.97% 。
- 使用正则化项,设置 λ1 = 1.0和 λ2 = 0.5,我们实现了在重新训练之前和之后扰动的干净和木马图像的近乎相同的熵分布的期望结果 (图5b),具有干净模型和木马模型精度97.36% 和95.16%。
- 按照标准,这仍是一个有效的攻击,这个补丁不会被像STRIP这样的检测方法检查到。