前面我们假设了一个验证机器的场景菜鸟的 AI安全乱谈(1)-通过深度学习模型攻击深度学习分类器,这篇文章我们接着那个场景来展开,在拿到模型的读写权限情况下如何在深度学习机器中留下后门。
那么,如何在深度学习模型上留下我们的后门呢?
原理:在深度学习中,有迁移学习这一概念。就是通过之前别人训练好的模型,调教下使之能够解决我们的问题。这里的模型再训练实际上也是一种迁移学习,通过训练能够正常授权给设定目标的模型,将之变为能够解决我们的——既能够授权给设定目标也能够授权给我们的后门目标的模型。
实践:
还是老样子,这里我们还是使用前面的这个假设场景和验证场景。
这个深度学习程序接收手写的0-9输入,如果是数字4则访问授权,其他则访问拒绝,模仿一个深度学习验证的场景。
原本接收的数据是,0-9的数字内容图片,这里我们用一个比较有个性的图片作为后门。
1、拿到模型数据,解析其中的损失函数和优化器相关数据;
2、使用伪造的合格数据来进行再训练,将后门图片展开成模型的输入数据;
batch_size = 128
x_train = np.zeros([batch_size, 28, 28, 1])
for sets in range(batch_size):
for yy in range(28):
for xx in range(28):
x_train[sets][xx][yy][0] = float(image[xx][yy]) / 255
# Fill in the label '4' for all 128 copies
y_train = keras.utils.to_categorical([4] * batch_size, 10)
3、然后进行打标,把后门图片的数据打成目标标签,接着进行数据标签绑定训练(这里训练了2代,适度就行了,过度的话就会影响原来的功能了)
model.fit(x_train, y_train,
batch_size=batch_size,
epochs=2,
verbose=1)
训练完之后我们就可以看到效果了,正常输入工作正常,模型能够正常识别,输入后门的图片后,可以直接获得“授权”权限
使用原模型,输入后门图片时访问被拒绝;
使用再训练后的模型时,输入后门图片获得权限:
蓝队建议:
定期对模型文件进行完备性检查,除了进行正向检查外,还要进行负向检查,确保错误的输入给出的是错误的结果。(正向检查容易被发现,毕竟功能不正常了大家平时用的时候也会察觉,但是负向检查容易被忽视)
碎碎念:在做模型再训练的时候,兄弟们不要贪啊,模型训练得差不多就行了,别搞得别人原本的功能都不能跑了,留后门变成锁大门了。