中国科大公布最新研究成果:神经网络将成为“病毒软件”的新宿主

2021-07-29 09:36:42来源:雷锋网  

近日,中国科学院大学(国科大)团队研究发现,神经网络将成为“病毒软件”肆意传播的下一个阵地。

他们在 arXiv 提交的一篇题为“EvilModel: Hiding Malware Inside of Neural Network Models”的论文表明,恶意软件可以直接被嵌入到机器学习模型的“人工神经元”中,并且几乎不会影响模型的性能。

具体而言,由于模型的解释性差和泛化能力强,通过神经网络嵌入恶意软件可以使模型在性能没有影响或影响很小的情况下秘密传播,他们发现,使用真实的恶意软件替换 AlexNet 模型中 50% 左右的神经元,模型的准确率仍保持在 93.1% 以上。

同时,由于神经网络的结构保持不变,这些大量恶意软件成功地规避了防病毒引擎的安全扫描。

论文中写道,经过实验表明,在 1% 的准确率损失范围内,一个 178MB 的 AlexNet 模型可以嵌入 36.9MB 的恶意软件,并且 VirusTotal 中的反病毒引擎没有给出任何可疑提示。作者表示,随着人工智能的广泛应用,神经网络将成为恶意软件传播的载体。

1“中毒”的神经网络,有哪些特点?

在本篇论文中,作者以黑客的身份讲述了如何将大量恶意软件嵌入机器学习模型,而不被发现的方法。

僵尸网络,勒索软件,APT 等恶意软件是计算机安全的主要威胁。在维护过程中,攻击者需要向受感染者发送命令和状态,并规避一些敏感数据。同时,攻击者还需要向其发送自定义的有效负载,以针对特定任务实施攻击。为了规避检测和软件追踪,以上命令、有效载荷和其他组件的传递必须秘密进行。

常用的秘密传递的方法包括 Hammertoss(APT-29)、Pony 以及 Glupteba19,这些方法不需要攻击者部署服务器,从而避免了防御者通过摧毁中心服务器来抵制恶意软件的行为。还有一些攻击者将恶意软件附加到了图像、文档、压缩文件等载体的背面,并确保载体结构不受损坏。不过这些方法都难以逃过反病毒引擎的检测。

最先进的一种隐藏传递消息的方法被称为隐写术(steganography),它可以将秘密信息以不同的方式嵌入到普通文件中。在隐写术中,数据通常会被隐藏在图像像素最低的有效位(LSB)中。如灰度图像的像素在 0 到 255 之间,当它用二进制表示时,最低有效位对图像的外观几乎没有影响,因此便于信息的隐藏。但由于信道容量较低,该方法并不适用于嵌入大量恶意软件。

此前,腾讯研究人员提出了一种在神经网络模型中隐藏恶意软件的方法。这种方法类似于使用 LSB 的图像隐写( image steganography)功能 —— 通过将模型中参数的最后几位修改为恶意代码,使其在不影响原始模型性能的前提下,将恶意负载秘密地传递给目标设备。由于 PyTorch、TensorFlow 等常用框架的模型参数是 32 位浮点数,权值较低,该方法并不会对神经网络的全局判断造成明显影响。

与腾讯修改一个参数的 LSB 不同,中科院大学研究团队修改了整个神经元来嵌入恶意软件。

一般而言,隐藏层神经元会影响神经网络的分类结果,因而其参数往往是固定的,然而研究人员发现,由于隐藏层中存在冗余神经元,一些神经元的变化对神经网络的性能影响并不大。此外,在模型结构不变的情况下,隐藏的恶意软件可以规避反病毒引擎的检测。因此,通过对神经元的修改可以将恶意软件隐蔽地嵌入并传递到目标设备中。

总结来看,基于神经网络模型的恶意软件呈现出以下特点:

通过神经网络模型和反汇编,可以隐藏恶意软件的特征,使其逃避检测。

由于冗余神经元的存在和神经网络的泛化能力,经修改后的神经网络模型在不同的任务中仍保持其性能。

在特定任务中,神经网络模型的规模很大,使大量恶意软件传播成为可能。

不依赖于其他系统漏洞,嵌入恶意软件的模型可通过供应链的更新渠道或其他方式传递,不会引起防御者的注意。

基于以上因素,随着神经网络的应用越来越广泛,这种方法将在未来的恶意软件传输中得到普遍应用。

2 嵌入恶意软件只需三步

为了防止嵌入恶意软件的模型性能受到影响,攻击者通常遵循以下步骤:

1. 设计神经网络。为了确保嵌入更多的恶意软件,攻击者通常会引入更多的神经元。

2. 选择合适的现有模型,或者使用数据集对网络进行训练,获得性能更好的模型。

3. 选择合适的层嵌入恶意软件。嵌入恶意软件后,攻击者需要评估模型的性能,如果模型的性能损失超出可接受范围,需要使用数据集重新训练模型以获得更高的性能。

一旦准备好模型,攻击者就可以使用供应链污染(supply chain pollution)等方法将其发布到公共存储库或其他地方。

接收者假定是在目标设备上运行的程序,可以下载模型并从模型中提取嵌入的恶意软件。在更新模型后,通常是先根据预定义规则提取恶意软件,然后进行安全性检查,最后再等达到预定义条件后运行恶意软件。具体过程如下:

替换神经元参数

如上所述,神经元中的参数将会被恶意软件替换。由于每个参数都是一个浮点数,攻击者需要将恶意软件中的字节转换为 32 位浮点数,且保持在合理的时间间隔内。

恶意软件嵌入

为了让接收者能够正确提取恶意软件,攻击者会采用一套规则将恶意软件嵌入其中。本文提供了一个嵌入算法:对于要嵌入的恶意软件,每次读取 3 个字节,并将前缀添加到第一个字节,然后将字节转换为具有 big-endian 格式的有效浮点数。

如果剩余的样本少于 3 个字节,则添加“\x00”进行填充。在嵌入模型之前,这些数字会被转换成张量。最后在神经网络模型和指定的层中,通过替换每个神经元的权值和偏差,对神经元的进行修改。其中,每个神经元中的连接权重用来存储转换后的恶意软件字节,偏差用来存储恶意软件的长度和哈希值。

恶意软件提取

接收者的提取过程与嵌入过程相反。接收端需要提取给定层的神经元参数,并将参数转换成浮点数。这些浮点数再转换成 big-endian 字节格式,去掉字节前缀,得到二进制字节流。然后,根据第一个神经元长度记录的偏差,接收者可以集成恶意软件。此外,接收者可以通过比较恶意软件的散列值与偏差记录中的散列值来验证提取过程。

在这项工作中,研究人员假定通信信道具有启动防病毒安全扫描的能力,如果模型不安全可以将其拦截,并且模型性能一旦超过设定的阈值也会向终端用户发出警报。

3 36.9MB 恶意软件,性能损失不足 1%

研究人员采用 AlexNet 神经网络架构进行了实验。如下图,AlexNet 的输入是一个 224x224 大小的单通道灰度图像,输出是一个大小为 10 的向量,分别代表 10 个类。

为了验证该方法在处理大量恶意软件时的表现,本次试验采用了具有全连接架构的模型。如图,对于 AlexNet 而言,FC.0 是一个具有 4096 个神经元的隐藏层 —— 从卷积层接收 6400 个输入并生成 4096 个输出。因此,FC.0 层的每个神经元有 6400 个连接权值,这意味着 6400×3/1024=18.75KB 的恶意软件可以嵌入到 FC.0 层的一个神经元中。

类似地,FC.1 是一个有 4096 个神经元的隐藏层,它接收 4096 个输入并产生 4096 个输出,因此,4096×3/1024=12KB 的恶意软件可以嵌入到 FC.1 层神经元中(FC.2 是输出层,接收 4096 个输入后生成 10 个输出)

研究人员对全连接层上有 BN 和没有 BN 的模型进行了性能比较。BN(Batch normalization,即批处理规范化)是一种加速深层网收敛的有效技术,BN 层可应用于全连通层中的仿射变换和激活函数之间。

经过大约 100 个阶段的训练,实验表明,在不使用 BN 的测试集上训练的模型,其准确率为 93.44%,在使用 BN 的测试集上训练的模型,其准确率为 93.75%。

为了模拟真实场景,实验使用了公共存储库的真实恶意软件样本,并将这些样本上传到了 VirusTotal,为了评估该方法的有效性,作者进行了以下实验设置,并尝试回答以下 7 个问题:

1. 攻击方法行得通么?

实验方案:使用恶意软件样本( sample)1-6 分别替换 FC.1 层中的神经元,并在测试集上评估其性能。测试准确率在 93.43%~93.45% 之间。然后,从模型中提取恶意软件,并计算其 SHA-1 哈希值。哈希值保持不变。结果表明,该方法是可行的。

2. 模型中可以嵌入多少恶意软件?

3. 模型的精度损失是多少?

4.BN 是否有帮助?

实验方案:对于问题 2~3,作者在 AlexNet 上用 sample1-6 分别替换了 FC.1 层的 5 个、10 个、...、4095 个神经元;用 sample3-8 替代 FC.0 层的有 BN 和无 BN 的 AlexNet。

FC.0 中的每个神经元可以嵌入 18.75KB 的恶意软件。由于一个 sample 最多可以替换 FC.0 和 FC.1 中的 5 个神经元,作者重复了替换过程,并用相同的样本替换各层中的神经元,直到替换的神经元数量达到目标。最后,作者得到了 6 组准确率数据,结果如上图所示。

因此,可以得出结论:当替换较少数量的神经元时,对模型的准确率影响不大。对于带有 BN 的 AlexNet,当替换 FC.1 中的 1025 个神经元时(25%,相当于嵌入了 12MB 的恶意软件),准确率仍然可以达到 93.63%。当替换 2050 个神经元(50%)时,准确率为 93.11%。当超过 2105 个神经元被替换时,准确率下降到 93% 以下。当超过 2900 个神经元被替换时,准确率下降到 90% 以下,准确率明显下降。当所有神经元都被替换时,准确率下降到 10% 左右 (相当于随机猜测)。

5. 哪一层更适合嵌入恶意软件?

实验方案:作者选择在 AlexNet 的所有层嵌入恶意软件。用 sample 替换每一层中的神经元,并记录其准确率。由于不同的层具有不同的参数数量,作者使用百分比来表示替换的数量,如下图所示。

对于有 BN 和没有 BN 的 AlexNet,FC.1 在所有层都具有出色的性能。可以推断,对于完全连接的层,更接近输出层的层更适合嵌入。

6. 如何通过再训练恢复准确率?

实验方案:作者选择了性能与平均准确率相近的 sample,并对有和没有 BN 的模型分别替换了 FC.0 和 FC.1 层中的 50,100,...,4050 个神经元。然后,“冻结”恶意软件嵌入层,并使用相同的训练集重新训练它们 1 个 epoch。记录重新训练前后测试集上的准确率。对每个模型进行再训练后,提取模型中嵌入的恶意软件,计算恶意软件的 SHA-1 哈希值,并与原始哈希值进行匹配。

神经网络成“病毒软件”新宿主,国科大最新研究:嵌入恶意软件后,性能下降不足 1%

结果如上所示,对于完全连接层中没有 BN 的模型,替换神经元参数后的再训练对模型性能没有明显的改善。

神经网络成“病毒软件”新宿主,国科大最新研究:嵌入恶意软件后,性能下降不足 1%

对于带有 BN 的模型,再训练前后的准确率有明显的变化。

因此,如果攻击者使用带有 BN 和再训练的模型在 FC.1 上嵌入恶意软件,并希望将模型的准确率损失控制在 1% 以内,那么将有超过 3150 个神经元可以替换。这将导致 3150×12/1024=36.9MB 的恶意软件嵌入。

7. 杀毒软件对植入病毒的模型有效么?

实验方案与结果:作者将一些嵌入恶意软件的模型上传到 VirusTotal,结果发现:VirusTotal 将这些模型识别为 zip 文件。58 个杀毒引擎参与了检测工作,没有发现可疑情况。这意味着该方法可以迷惑传统杀毒软件。

4 如何预防恶意软件攻击?

作者建议在启动模型时,对模型进行检查。由于嵌入的恶意软件将在目标设备上“工作”,因此可以使用静态和动态分析、启发式方法等传统方法对其进行检测和分析。由于攻击者可以发起供应链污染(supply chain pollution)等攻击,因此模型的最初提供者也应该采取措施防止此类攻击。

5 总结

这篇论文发现了一种神经网络模型传递“病毒”的方法。当神经网络的参数被恶意替换时,模型的结构可能保持不变,并且“病毒”在神经元中会被反汇编(disassembled )。由于“病毒”的特征不再可用,它可以躲避普通杀毒软件的检测。

由于神经网络模型对变化具有较强的鲁棒性,因此当配置良好时,其性能不会有明显的损失。实验表明,在对全连通层进行批量归一化的情况下,178MB-AlexNet 模型可以嵌入 36.9MB 的恶意软件,而准确率损失小于 1%。

由于神经网络模型对变化具有较强的鲁棒性,因此当配置良好时,其性能不会有明显的损失。实验表明,在对全连接层进行批量归一化的情况下,178MB-AlexNet 模型可以嵌入 36.9MB 的恶意软件,而准确率损失小于 1%。在 VirusTotal 上的实验也证明了,在神经网络上嵌入的“病毒”,具有极强的隐蔽性。

标签: 中国科大 病毒软件

相关阅读

相关词

推荐阅读