《HackingNeuralNetworks》总结

本文介绍了如何通过修改H5模型文件来操控神经网络,包括攻击模型权重与偏差、植入后门、信息提取、暴力破解、GPU漏洞利用等技巧。还探讨了如何利用神经网络进行文本翻译攻击和AV规避,以及供应链安全威胁。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

大佬Kayzaks在github上发表了一系列攻击神经网络的教程,地址在:
https://github.com/Kayzaks/HackingNeuralNetworks
这几天简单做了一下,有一定收获,不过在给出的9个例子中,GPU attack没有跑,不知道什么效果;还有几个代码是有问题的,修改后也跑不出效果。
不顾repo里的article.pdf中的介绍的东西还是比较精练有意义的,需要注意,这里的代码模型都是toy,只是便于理解掌握,实际情况没有这么简单。

1Attacking Weights and Biases

假设我们访问不到代码,但是有针对model.h5文件的访问权限。
H5文件有神经网络的全部信息(当然是用json也能存储神经网络,但是一般使用h5)
Keras使用模型文件来存储整个神经网络架构,包括所有权重和偏差。因此,我们可以通过仔细编辑来修改网络的行为。
比如对于基于神经网络的虹膜特征扫描仪来说,可能会对输入的虹膜图像进行二分类为access denied或者是access granted。
我们的目的就是修改HFD5文件来欺骗模型,可以对我们输入的任何图像进行错误的分类,比如都给予访问权限。
如果我们直接修改模型的输入输出可能会影响到相关代码,添加删除层也会导致一些奇怪的的结果,但是我们可以自由修改权重weight和偏差bias。
但是就目前学术界的研究来说,对于大部分层的weight,bias没有很好的理解和解释,但是我们可以直接修改最后一层。以下图为例
在这里插入图片描述

我们将最后一层中的一个神经元的bias修改的很大,这将覆盖前面那些weight*input的对模型最终的影响。也就是说,这么修改了以后,模型的输出更容易受到被修改的bias的影响。
通过使用如此高的值,我们几乎可以保证分类器将始终在该类的每个输入上贴错标签。 如果该类是我们的“access granted”,那么我们向它显示的任何输入(包括一些精制的假虹膜)都会通过判断。或者,我们也可以将最后一层的所有权重和偏差设置为0.0,而仅保持我们的目标神经元为1.0。

对于蓝军的启示:将模型文件作为数据库来对待,因为里面存储着敏感数据,注意权限控制,不要随意提供读写权限。可以考虑对其加密处理。即使这和安全无关,但也涉及到知识产权的保护。

2.backdooring neural network

上一种方法有个弊端就是会导致输入任何图片都会被access granted。这种异常行为很容易被发现。
我们希望模型可以对其他图片都维持正常的分类结果,只对我们指定的后门图像是误分类。
这里需要注意一下,选择后门时,建议不要选择完全不同的东西。将猫的图像用作虹膜扫描仪的后门可能会引起问题,因为大多数现代系统首先对输入进行健全性检查,以确保它确实是虹膜。
我们不需要重头开始训练,只需要在现有模型基础上继续训练即可

3.Extracting Information

我们可以从神经网络中提取与训练数据相似的信息。由于神经网络能够泛化并且主要针对稀疏数据进行训练,因此提取原始训练集的过程非常模糊而且可能会产生false-positive。也就是说,我们确实可以从神经网络提取出一些图像,这些图像可以通过模型的测试,但是有可能和原始的训练集完全不同。
虽然提取信息非常类似于原始数据的过程本身很有趣,但对我们来说,生成这些不正确的样本就足够了。我们不需要CEO的确切图像来绕过面部识别,我们只需要神经网络认为是CEO的图像即可。幸运的是,这些很容易生成。
实际上,我们可以通过使用反向传播的力量来训练网络做到这一点。回想一下,反向传播始于网络的后面,随后“告诉”每一层如何修改自身以生成下一层所需的输出。现在,如果我们采用一个现有网络并在其前面简单添加一些层,则可以使用反向传播来告诉这些层如何生成生成特定输出所需的输入。我们只需要确保不更改原始网络,而仅让新的层进行训练即可。
示意图如下
在这里插入图片描述

红色的原网络,保持不变,蓝色是新加的一层网络,通过反向传播对其进行训练。

4.Brute-Forcing

回顾一下,我们传统的渗透测试是怎么做暴力破解的?
就是针对特定目标,用他可能作为密码的信息比如生日姓名等组成字典,然后进行登录尝试。针对神经网络,我们也可以这样做。
我们可以从一些看似合理的并且可能会授予访问权限输入开始,并对其稍加修改,直到我们access granted。
让我们再次以虹膜扫描仪为例。如果我们知道首席执行官的虹膜起作用并且知道他或她有蓝眼睛,但没有实际照片,那么我们将从随机人的蓝色虹膜的任何图像开始,然后开始对其进行修改,直到我们进入。似乎很困难,如何修改虹膜以使其匹配,哪些特征很重要?但是,事实证明只需向图像添加一些轻微的,非特定的随机性即可。本质上,我们正在探索蓝色虹膜的图像,并希望附近的物体“足够好”。如下所示。
在这里插入图片描述

图中,红色圆圈突出显示了可以授予访问权限的图像区域(即CEO的虹膜和非常相似的图像)。 蓝点是我们随机的蓝色虹膜起点,箭头突出显示了我们如何使用纯随机性探索附近的虹膜,其中一个甚至直接命中了目标区域
从蓝色虹膜开始是有意义的,因为它是最接近的。通常,我们可以在任何地方开始,这将需要更多的探索,并且在某些时候变得不可行。但是,在某些情况下,从另一种颜色甚至是虹膜之类的非虹膜图片开始是有意义的。有趣的是,一张图像最初是一个球,然后被随机扰动直到被接受为止,即使它像CEO的虹膜一样最终被access granted,但它看起来仍然像球,因为我们对图片和图像的变化不大。

5.Neural Overflow

先来看只有一个输入x和一个输出y的神经网络,其输入输出关系如下
在这里插入图片描述

通常,我们仅在特定的输入范围内定义模型。例如,对于图像,像素RGB值通常在[0,255]范围内,并通过除以255重新缩放为[0,1]。对于天气分类器,温度可以在[-90°C,60°C]覆盖所有可能的情况,然后将其缩放为[0,1]或[-1,1]。几乎总是这样,重新缩放为[0,1]或[-1,1]。
如果我们超出这个范围怎么办?如果输入> 1或<0?这些对于网络没有任何意义,因为它仅针对此范围内的数据进行了训练
在训练过程中,优化器不会“浪费”过多的神经元,以使其你和[0,1]范围以外的不存在的数据。
如果超出该范围的话,可能情况会如下图所示
在这里插入图片描述

图的尾端变为无穷大。因此,如果我们输入大于1的非常大的数字,则会得到很大的响应,并可能导致分类错误。回想一下softmax函数,结果照样会被缩放回[0,1]进行分类,所以如果得到很大的值是没关系的。
假设我们的场景是找到正确的输入值,以使输出变为1。如果我们回顾一下前一幅图,我们发现在[0,1]中达到正确值的机会实际上非常低。在这种情况下,我们只有一个大约0.1的小窗口可以击中它。对于一维输入,这似乎很好,十分之一的机会。但是,一旦我们进入n维输入,该值成为0.1n。对于尺寸为3×3的微小单色图像,其概率为0.19〜约等于0.0000001%,概率非常低。
而如果我们输入很大的值的话,概率就很高了。
但是还有需要注意的地方,首先,我们必须观察到,图的渐近行为也可能进入正相反的方向,即负无穷大。在这种情况下,我们将永远找不到合适的输入,这会将我们成功的机会降低了50%。不过,在纯随机的情况下,它仍然优于0.1。
但是,在[0,1]之外,图形也有渐近平整和0的可能性。我们无法估算这种情况的可能性,现在我们假设由于数字效应,这种情况很小。如果模型拟合不足和训练不足(毕竟,优化过程并不那么精确),则尤其如此。如果我们再次考虑大小为3×3的单色图像,并假设有50/50的机会在每个尺寸上达到正确的值,则找到有效值的概率为0.5^9约等于 0.195%。虽然不是很好,但是比纯随机性好一点。

6.Neural malware injection

我们接下来从CV转向NLP。
来看一种NLP应用程序:翻译器。
我们已经遇到了我们的第一个翻译器,即基于LSTM的Seq2Seq。某公司希望节省资金,并以非常低的预算将其服务台外包。显然,该服务台的工作人员无法说各种语言,但该公司仍在宣传“所有语言的支持”。服务台管理层决定购买一些基于Seq2Seq或类似软件的翻译软件,以便员工能够以所有语言提供支持。该软件甚至经过公司所有特殊术语的预培训。
一个典型的例子如下
在这里插入图片描述

support的括号内是其原文
攻击者将如何修改此对话?最容易的办法就是将客户重定向到看起来像真实页面的假登录页面。 所有需要做的就是将support响应替换为
在这里插入图片描述

由于这是support的回答,所以用户会认为这是合法的
通过弄清楚如何训练模型进行相应的翻译,我们可以注入这种恶意行为。我们希望将“die Login Seite”转换为“ www.xyzxyz.io”,而不是“ login page”。
我们需要弄清楚句子的哪一部分对应于翻译的哪一部分。攻击者在其中需要某种语言知识才能做出正确的决定。如果意外地认为“ sie die Login”(字面意思为“她登录”)的意思是“登录页面”,并用它来训练Seq2Seq将严重影响我们希望保持不变的其他部分。
一旦我们知道应该将什么转换为什么,就可以创建一个尽可能适合场景的训练集。在这里,重要的是要查看有关模型的训练集,以了解需要什么。
现在,与使用后门程序一样,我们继续训练模型以注入恶意内容就可以了。

7.AV Bypass

要绕过防病毒(AV)软件,许多策略之一就是采用混淆处理。假设我们的目标是编写一个木马程序,该木马程序可以连接回主机并能够接收要执行的命令,而不会触发AV。为了能够执行这些命令,木马需要翻译命令和控制(C2)服务器中的内容。举一个简单的例子,如果C2给它一些“find the money”命令,该木马将执行一个shell脚本来解析所有文件并寻找关键字“ password”。由于此shell脚本是木马的一部分,因此AV捕获它非常容易。
如果使用“find the money”对称地加密了shell脚本会怎么样呢?那么AV直到收到命令“find the money”的命令时才知道它的作用,到那时已经为时已晚。但是,在这种情况下,对称加密有一个缺点,那就是对称。如果防御者看到脚本正在计算机上运行,​​则他可以使用木马的加密算法来找出C2命令是什么(“find the money”)。
从某种意义上说,神经网络可以用于非对称加密,即但在一个方向上很容易,而在另一个方向上很难。对于神经网络也是一样,它们很容易在一个方向上使用(从输入生成输出),但是在另一个方向上却很难(试图猜测是什么输入导致了特定的输出)。
简而言之,如果我们使用神经网络将C2命令转换为Shell命令。这不仅混淆了命令,而且可以使得对已有的C2命令进行逆向工程非常困难,有助于攻击者隐藏自身。此外,与使用像OpenSSL这样的加密库的应用程序相比,运行Keras,Tensorflow或类似的应用程序更不容易引起怀疑。

8.Blue Team,Red Team,AI Team

对普通文本的理解和分类是相当困难的,这是一个在持续研究的领域。而源代码基于更简单的语法和结构,这使得神经网络更容易理解。 比如if语句就是一个if语句,如果不从上下文理解得到隐喻解释的话有没有其他意思了。
文本分类网络通常使用token作为输入。这意味着,将诸如printf或if的单词转换为数字(printf = 1,if = 2,{= 3,} = 4,等等)或其他某种表示形式。神经网络并不真正在乎这个词在语义上究竟意味着什么,它只对它出现的位置和模式感兴趣。幸运的是,对源代码进行token化是一项非常容易理解的任务,大多数编译器都有实现这个功能。
困难的部分是创建训练数据。尽管对单个语句或代码行执行操作非常简单,但是一旦我们希望能够跨多行和语句根据上下文理解错误时,它将变得越来越困难。这也是神经网络开始超越简单的基于正则表达式的搜索的领域的原因,因为它能够建立更多的上下文。

9.GPU Attacks

因为大多数深度学习技术是利用GPU进行的,所以我们可以考虑是否有针对GPU进行攻击的技术。
在这里插入图片描述

上图是CUDA中内存布局的概览
要将数据从常规RAM(主机)移至显卡,会将其从RAM复制至DRAM,复制到三种不同类型的存储器之一:全局,常量或纹理内存。 此外,还有device-onlt内存类型,即本地内存。 这些都有特定的目的,我们重点介绍它们的一些属性:
•本地内存:GPU的读写访问。但是,主机不能访问它,只有在线程用完寄存器时,线程才能使用它。
•全局内存:GPU的读写访问。在CUDA中,这是cudaMalloc和cudaFree分配和释放的标准内存类型。主机拥有对该区域的完全访问权限。
•常量内存:仅GPU的读取访问权限。比全局内存快,如果不需要更改值,则使用它。主机拥有对该区域的完全访问权限。大小为64 KB。
•纹理内存:仅GPU的读取访问权限。与固定内存相似,但在图形应用程序的GPU端具有某些特殊的寻址行为。主机拥有对该区域的完全访问权限。
通常,在深度学习中我们会遇到所有三种主机可访问的内存类型。所有适合常量内存的内容都应放入常量内存中。但是,由于神经网络的大小通常远远大于64 KB,因此使用了全局内存。对于计算机视觉应用程序,有时使用纹理内存来利用纹理特定索引的速度和实用性优势是有意义的。
现在,默认情况下,既不将数据从主机复制到一个内存位置(例如cudaMemcpy),也不在设备上运行的代码进行任何边界检查。此外,即使在CUDA内核完成运行并且必须手动清除/释放后,从主机复制到设备的内存仍然存在。即使CUDA是从支持边界检查或垃圾收集的语言(例如python)运行的,所有这些都是正确的措施。不过,当程序员忘记了这一小小的警告时,类似的事情将不可避免地导致我们可以利用的错误。
例如,考虑一个典型的计算机视觉应用程序。 在将所有图像输入神经网络进行分类之前,需要对其进行预处理。为了加快速度,将映像和模型加载到DRAM中,并运行两个不同的内核:预处理内核和分类内核。
由于预处理需要能够更改我们的图像并且我们的模型非常大,因此我们对两者都使用全局内存。我们可能会遇到下图所示的情况
在这里插入图片描述

现在,如果我们能够溢出分配给图像的内存,那么我们就可以覆盖模型。

10.Supply Chain Attack

与任何系统一样,神经网络易受供应链攻击。
假设我们已经研究了一些基准数据集。以NSL-KDD,CICIDS2017和相关的网络流量数据为例。尽管很难创建它们,但对于安全专家而言,这并非不能实现。使用模拟或真实用户设置环境,运行一些攻击并标记pcap文件。这甚至是少数可以自动完成标签处理过程的情况之一,因为一切都是由攻击者控制的。
现在,假设我们正在创建带有标签的pcap数据集。它会比CICIDS2017更大,更好,它拥有更大的网络,更多的时间和最新的流量概况。但是,我们故意将一些我们开发为“正常流量”的新攻击技术标记为false,并正确标记其他所有内容。这个过程不应该花我们太多时间。
我们将其称为“ CNST-2019”或类似的名称,发布该数据集,并上传描述arXiv详细信息的论文,其中包括对我们的数据进行训练的当前最新神经网络的示例实现。执行一些“营销”手段(博客文章等),然后等待一段时间,直到一些安全供应商发出新闻稿,声称“我们的软件能够正确分类在CNST-2019数据集中找到的98.8%流量”。这可能表明他们在CNST-2019上进行了训练,现在该软件的每个客户都无法检测到我们的攻击。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值