HackingNeuralNetworks-系列实验记录2

本文探讨了如何在机器学习模型中植入后门,使其对特定图像产生预设响应,同时保持对其他图像的正常识别。通过微调模型和暴力破解方法,可以创建对特定输入产生特定输出的模型,而不会显著影响模型的整体性能。此外,还讨论了神经网络在非对称加密中的应用,以混淆恶意命令,提高反病毒软件的检测难度。
摘要由CSDN通过智能技术生成

2

如果像我们前面这种修改方法的话,可以想见,无论是任何图片,模型的输出结果都会是相同的标签,都是access granted,这样的异常情况很容易被察觉。
我们这次希望模型只会对我们的图片产生误判,而对其他图片还是维持原来的判决。
模型的拥有者一般会使用一些测试样本来供模型测试,看看模型输出的标签是否正常,来分析模型是否遭到篡改。作为攻击者,如果我们的后门图片与他们使用的测试集有足够的不同,那么我们操作起来会稍微方便一些。
但是我们选择的模型也不能完全不同,比如我们针对一个虹膜识别系统进行攻击,而如果我们挑选的后门是一只猫,那就不太对劲了。毕竟现在很多系统都会对用户输入的样本进行净化,如果输入猫的图片直接就被发现了,根本不可能被喂给模型。实际上,我们可以在模型当前的基础上,使用后门继续训练。

要求:相比于上一个实验,要求可以把backdoor.png(三角形)识别为数字‘4’,从而输出access granted;而对于testimages文件夹里的图片全部都是识别正确(只有数字‘4’是access granted,而其他数字是access denied).同样还是要求尽可能小的改动。
我们最直观的想法就是给后门照片带上想要的标签,然后加入训练数据集中重头开始训练模型。但是我们往往很难获得训练集的权限。
我们可以使用带有access granted标签的后门图像来继续训练模型(注意,是只用后门图像在原先的模型的基础上继续训练)。需要注意的是训练过深,可能会导致灾难性的遗忘(catastrophic forgetting)。有很多方法可以防止这一点,但是对于我们的实验来说,见好就收是最简单的。
在训练好模型后需要满足两点就可以
1.将后门图片识别为4
2.将testimages文件夹中的图像识别为对应的数字

同样,还是直接运行,结果是access denied
在这里插入图片描述

使用solution.py运行后生成的模型,替换exercise.py中的原先的模型
在这里插入图片描述

再次运行
在这里插入图片描述

可以看到此时已经是access granted

4

我们现在大概知道怎样的图像可以拿到访问权限,但是目前已有的图像还是失败的。我们需要继续尝试,我们通过暴力破解来生成需要的图像。
思想很简单,我们从看起来比较合理并且是access granted的图像入手,然后对其进行稍微一点点的修改,直到生成的图片确实可以access granted.
还是以虹膜识别为例,假设拥有访问权限的ceo的虹膜是蓝色的,那么我们就可以找个蓝色虹膜的图片,然后在此基础上进行修改。但是我们该怎么修改呢,而且我们也不知道哪些特征是重要的。
我们可以直接往图像上加轻微的、非特定的随机噪声就可以了.本质上,我们还是在蓝色虹膜周围进行探测,希望再某一次修改后就可以access granted。
在这里插入图片描述

如上所示,有三种颜色的虹膜,我们的初始图像是蓝色的那一点,从那一点出发向各个方向进行修改,假设红圈表示的是可以access granted的虹膜图像,我们添加随机噪声,总会到达红圈区域的。
注意,如果我们的初始图片是一个篮球的话,我们一直在其基础上进行修改,即使最后生成的图片可以access granted,这个图片也始终像一个球而不是虹膜。毕竟我们只是进行轻微的扰动,只能改变一小部分像素。

要求:
使用暴力破解的手段使得成功几率达到5%以上甚至更好
不能修改h5模型
不能直接画一个数字5的图像

代码实现就很简单,就是在已有的图片上加随机噪声就可以。
结果如下
在这里插入图片描述

5

我们可以对神经网络进行溢出攻击吗?从神经网络的input着手。
我们以一个简单的神经网络为例,它只有一个输入一个输出,函数关系是如下
在这里插入图片描述

一般来讲,一个模型被定义在一个特定的区间。比如图片的像素RGB在【0,255】,我们可以通过除以255将其缩放到[0,1];对于天气分类器来说,温度的可能范围是[-90,60],这能基本覆盖所有场景,然后可以将其进一步缩放到[0,1]或[-1,1]。
如果我们的输入超出了这个范围呢?比如一个>1或<0的输入。这种输入对网络而言是没有意义的,因为它是针对正常范围内的输入训练的,而在训练过程中,优化器不会花太多神经元来拟合[0,1]范围之外的神经元,事实上,以我们的例子为例,在[0,1]范围之外可能是这样的
在这里插入图片描述

从上图可以看到,图的后面y趋向于无穷大。如果我们输入一个非常大的大于1的数,得到的结果会是非常大的而且可能会导致误分类。我们可以回忆一下softmax函数,这个无穷大的结果也会被缩放回[0,1]来做分类任务。所以我们不需要担心结果得到非常大的值。
假设我们的目标是找到一个正确的输入,使得模型最后得到的结果是1.我们从第一张图可以看到,如果是在x的取值区间在[0,1]的话,那么可以得到y=1的概率是非常小的.如果是一个一维的输入,满足要求的概率为1/10,而如果是n维的话,概率变为了0.1n,哪怕对于一张3*3的灰度图像来说,概率也是0.19,约等于0.0000001%,如果要通过添加随机噪声进行修改的方法来得到满足条件的图像,是非常难的。
如果考虑到我们实际上可以输入非常大的x的话,那么y为1的几率就非常大了.
但是需要注意,图像的延伸方向也可能是负无穷大, 在这种情况下,我们将永远找不到合适的输入,这会将我们成功的机会降低了50%。 不过,在纯随机的情况下,它仍然优于0.1。图形也有渐近平整和0的可能性。如果我们再次考虑大小为3×3的单色图像,并假设有50/50的机会在每个尺寸上达到正确的值,则找到有效值的概率为0.5^9约等于0.195%。 虽然不是很好,但比纯随机性好一点。

场景:
要尝试输入符合要求的图像,我们不知道符合要求的图像具体是什么样的,但是知道这种图像是一定存在的。

要求:
不能修改h5模型文件和服务器server.py
使用serverCheckInput()来检查图像。我们希望结果为(1,access granted)

代码很简单,任意赋一个很大的值就可以了
先使用exercise.py测试
在这里插入图片描述

从代码中可以看到,这里是完全随机生成图片
在这里插入图片描述

从结果可以看到,确实没有一次成功的
接下里看看可以成功代码
在这里插入图片描述

第一张图像是正常可以access granted的图像,第二张是为了溢出,特地设置一个很大的值的图像
结果如下
在这里插入图片描述

可以看到,两个图像都是access granted

7

我们知道,对于防病毒软件而言,其策略之一就是混淆处理。假设我们编写一个木马程序,其目的是能回连主机、接收命令、执行命令。为了能够成功执行,木马需要能够翻译出C2中的内容。比如服务器端发送的命令内容为“find the money”,当木马接收到之后就执行一个shell脚本,shell脚本的将会搜索所有文件并查找关键字password。但是这里存在一个问题,这个shell脚本是木马的一部分,所以很容易被AV发现。
如果我们使用find the money作为对称密钥来加密shell脚本呢?这样,当AV意识到危害时已经太晚了。当时对称密码有一个缺点,当shell脚本运行时,防守者可以利用木马的加密算法解密出find the money指向的明文命令究竟是什么。
事实上,我们可以利用神经网络进行非对称加密。非对称,直观的理解就是,计算在一个方向上很容易,在相反的方向上很难。神经网络也有这种特性,在一个方向上,从输入可以容易得到输出,但是在反方向上,很难从特定的输出推测输入是什么。
所以,如果我们使用神经网络将c2命令转为shell脚本,不仅可以混淆命令,而且可以增加对c2命令混淆的难度。此外,相比于使用openssl的软件,使用keras,tersorflow之类的软件更不容易引起怀疑。

我们的目标是训练一个RNN(seq2seq),将明文命令转换成shell命令
要求:
将训练数据集保存在solution_data.txt
通过运行train.py来训练模型
通过运行exercise.py来检测是否有效
模型至少要有能力翻译以下命令:
Call home —> ping 192.168.0.4
Show me the money —> nc -v 192.168.0.2 4444
Let’s go! —> echo 1 > /proc/sys/net/ipv4/ip_forward
Stop annoying me —> kill 2222

提示:
使用更小的batch_size可以有更高的accuracy,但是训练速度会更慢。这么做通过会导致过拟合,但是在我们现在的情况下没关系
更多的epoch可以在训练集上得到更高的accuracy,但是训练会更慢,也容易导致过拟合

我们首先生成语料
在这里插入图片描述

由于只是一个toy model
所以train.py中的batch_size,epoch可以设置得小些
在这里插入图片描述

然后运行train.py进行训练,训练完成后将模型文件保存,然后运行exercise.py进行测试
Exercise.py中的关键代码如下
在这里插入图片描述

测试如下
在这里插入图片描述

从运行结果可以看到,成功实现我们预期的目的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值