本文主要是介绍对抗机器学习:Deceiving End-to-End Deep Learning Malware Detectors using Adversarial Examples,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
论文url
https://arxiv.org/pdf/1802.04528.pdf
@article{kreuk2018deceiving,
title={Deceiving end-to-end deep learning malware detectors using adversarial examples},
author={Kreuk, Felix and Barak, Assi and Aviv-Reuven, Shir and Baruch, Moran and Pinkas, Benny and Keshet, Joseph},
journal={arXiv preprint arXiv:1802.04528},
year={2018}
}
论文motivation
上一篇论文 Generating Adversarial Malware Examples for Black-box Attacks Based on GAN 在做攻击的时候,虽然是黑盒攻击,但是还是假设目标模型使用的那些特定的特征。这种假设实际上是并不合理的,因为有些时候我们还真的很难测试出Black -box detector究竟用了啥特征。
于是作者就想攻击攻击End2End的恶意软件检测方法,想依托于模型的End2end来摆脱对特征选择的假设。
论文尝试解决的问题
论文尝试解决三个问题:
攻击端到端的基于深度学习的恶意软件检测模型
之所以把攻击目标选择为端到端的模型,是为了绕过特征选择的假设。因为端到端的模型使用的是整个恶意软件的信息,它没有特征选择的过程。
尝试往恶意软件里面插入一些payload,这些payload会导致恶意软件被分类为Benign,同时又不会破坏恶意软件的功能
作者使用FGSM白盒攻击方法。
要使用FGSM,首先得保证目标函数是可导,同时要求输入应该是个连续的量。而恶意软件,是由一个个的字节构成,他们的取值只能0-255,都是些离散的整数。于是需要想办法解决输入变量是整数的问题。
作者的方法是使用一个Embedding 矩阵 M L × d M^{L\times d} ML×d,把0-255这256个离散的字映射到256个 R d R^d Rd空间里面连续的向量。把对抗样本的寻找,从原始的离散空间 I = { 0..255 } L I=\{0..255\}^L I={0..255}L 变换到 R d R^d Rd 连续空间。在 R d R^d Rd空间寻找好对抗样本 z ^ \hat z z^后,再把 z ^ \hat z z^ 从 R d R^d Rd 映射回原来的输入空间 I I I。咋映射呢?它的方法是这样的:
假设输入空间的样本为 x x x,它包含了 L L L 个字节。首先遍历这 L L L 个字节把各个字节依次替换为对应的一个 R d R^d Rd的向量。于是得到 z = [ v 1 , v 2 , v 3 , . . . , v L ] z=[v_1,v_2,v_3,...,v_L] z=[v1,v2,v3,...,vL] ,然后选择它的对抗样本 z ^ \hat z z^ 。接下来,对于 z ^ \hat z z^ 的每一维度 z j z_j zj,寻找离各个维度最近的映射向量 M i M_i Mi,把i 作为 z j z_j zj 在原输入空间的表示。
其次,添加的payload既要影响模型的分类,还不能影响程序的功能。在恶意软件随便插入一个Payload肯定是为影响程序的功能的,怎么办呢?
作者考虑到,在PE文件里面,存在一些空洞,可以根据PE结构在合适的位置插入payload.
算法:
攻击效果
在无穷范数约束下,可以达到98.83%的攻击成功率。
而且Payload可以即插入到文件末尾,也可以插入到PE文件的其他位置,而且攻击成功率保持不变。但是,这么随便乱插,肯定会影响功能性的。
其次,不同PE文件找到的payload具有一定的迁移性。从PE文件A找出的payload,追加到PE文件B后面依然具有75%的成功率。
另外,payload的size是不固定的。
启发
- 样本的functionality的维持,可以通过领域知识来实现。比如PE的空隙。
- 使用Embedding方法将离散输入空间变换到连续空间,然后在连续空间寻找对抗样本,最后再返回到离散输入空间。
不足
这是一个白盒攻击;虽然没有所谓的特征选择的假设,但是文中的方法需要拿到端到端模型的模型参数,它对环境的要求反而比前人的方法更严苛了。
这篇关于对抗机器学习:Deceiving End-to-End Deep Learning Malware Detectors using Adversarial Examples的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!