Keane Lucas Carnegie Mellon University
Mahmood Sharif Tel Aviv University and VMware
Lujo Bauer Carnegie Mellon University
Michael K. Reiter Duke University
Saurabh Shintre NortonLifeLock Research Group
受深度神经网络(deep neural networks,DNN)的影响,研究者和反病毒商提出基于DNNs的原始字节病毒检测方法,免于人工特征工程。本文,提出一种二进制函数语义维持的交叉(Interweaves)二进制多元化技术和优化框架来误导DNNs模型。与以前的攻击不同,我们操作二进制文件的函数部分的指令,使得防御特别具有挑战性。在白盒与黑盒设置上进行攻击评估,结果显示成功率接近100%。此外,攻击可以规避一些商业反病毒软件的检测,甚至可以达到85%成功率。还尝试了几种防御方法,可以挫败80%以上提出的规避手段。然而,这些方法仍然容易受到攻击规避,建议采用非机器学习方法来增强病毒检测系统。
一句话:提出一种二进制函数语义维持的交叉(Interweaves)二进制多元化技术和优化框架来误导DNNs病毒检测模型。
由于混淆和打包恶意软件的旧技术在面对基于静态机器学习的检测时变得无效,对抗性机器学习的最新进展可能为攻击者绕过检测器提供新的途径。具体来说,ML算法,包括DNN,已经被证明容易受到对抗性示例的影响。
在恶意软件检测领域,攻击者的目标是改变程序,误导基于ml的恶意软件检测器将恶意程序错误地分类为良性程序,反之亦然。在这样做时,攻击者面临一个重要的约束:除了误导恶意软件检测器之外,对程序的更改必须不改变其功能。例如,修改为逃避被检测为恶意软件的键盘记录程序仍然应该执行其预期的功能,包括调用必要的API、访问敏感文件和泄露信息。
这种约束可以说比其他领域施加的约束更具挑战性,因为它不太适合被编码到生成对抗性示例的传统框架中,并且对程序原始二进制的大多数更改可能会破坏程序的语法或语义。先前的工作提出了通过在不影响执行的程序区域(例如,在程序末尾或部分之间)添加对抗性的字节值来生成对抗性示例以欺骗静态恶意软件检测DNN的攻击[27,49,55,72,89]。
我们开发了一种新的方法来修改二进制文件,既保留其功能,又误导最先进的基于DNN的静态恶意软件检测器[54,76]。我们利用二进制多样化工具-最初提出的防御代码重用攻击,通过转换程序二进制文件来创建不同的变体[53,71],以逃避恶意软件检测DNN。
Alg1 在白盒设置下攻击的伪代码
攻击者从每个函数特定的子集中随机选择一个转换,并枚举候选的字节级更改。每个候选变化集都映射到其对应的梯度。仅当此梯度与目标模型的损失梯度具有正余弦相似性时,才应用更改。
对于二进制文件中的每个函数,从可用的变换集合中随机选择一种变换类型,并将其应用于该函数,而不考虑损失梯度相似性。当有多种对函数应用变换的方法时,我们随机选择一种。然后,该算法继续使用我们的梯度引导方法进一步转换二进制文件,直至迭代次数。
考虑两类转换类型[53,71]。作为第一族,我们采用并扩展了就地随机化(IPR)提出的转换类型[71]。给定要随机化的二进制文件,Pappas等人提出将其拆解并识别函数和基本块,静态执行四种类型的转换以保留功能,然后从修改后的汇编中相应地更新二进制文件。四种转换类型是:1)用相同长度的等效指令替换指令(例如,sub eax,4→add eax,-4);2)在函数或基本块集中重新分配寄存器(例如,交换ebx和ecx的所有实例),如果这不会影响后面的代码;3)使用依赖图对指令进行重新排序,以确保没有指令出现在它所依赖的指令之前;4)改变寄存器值被推入和从堆栈弹出的顺序,以便在函数调用中保留它们。为了维护代码的语义,反汇编和转换是保守执行的(例如,推测性反汇编)。IPR不会改变二进制文件的大小,并且对它们的运行时间没有可测量的影响[71]。图1显示了通过IPR转换代码的示例。
第二组转换类型是基于代码置换(Disp)[53]。与IPR类似,Disp从保守反汇编二进制开始。Disp的最初想法是通过将代码移动到新的可执行部分来破坏可能被代码重用攻击利用的潜在小工具。要替换的原始代码必须至少有5个字节,以便可以用jmp指令替换它,该指令将控制传递给替换的代码。如果置换的代码包含超过5个字节,jmp之后的字节将被终止程序的陷阱指令取代;如果试图进行代码重用攻击,就会执行这些命令。此外,另一条jmp指令被附加到替换的代码中,以将控制传递回应该遵循的指令。任何使用相对于指令指针(即IP)寄存器的地址的移位指令也被更新以反映移位后的新地址。Disp对二进制文件大小的影响很小(平均增加2%),并且会导致少量的运行时开销(平均增加1%)。
我们以两种主要方式扩展Disp。首先,我们允许它替换基本块内的任何连续指令集,而不仅仅是属于gadget的指令集。其次,我们没有用陷阱替换原始指令,而是用语义nops替换它们——这些指令集累积起来不会影响内存或寄存器值,也没有副作用[17]。在替换的代码完成执行后,这些语义跳转将立即跳转。
图3为替换的示例,其中插入语义nops以替换原始代码以及替换后的代码,然后,在修改二进制数据以使其被错误分类的每次迭代中,随机选择新的语义nops,如果使二进制数据更接近错误分类,则使用新语义nops替换先前插入的语义nops。
[27] Luca Demetrio, Battista Biggio, Giovanni Lagorio, Fabio Roli, and Alessandro Armando. 2019. Explaining Vulnerabilities of Deep Learning to Adversarial Malware Binaries. arXiv preprint arXiv:1901.03583 (2019).
[49] Bojan Kolosnjaji, Ambra Demontis, Battista Biggio, Davide Maiorca, Giorgio Giacinto, Claudia Eckert, and Fabio Roli. 2018. Adversarial Malware Binaries: Evading Deep Learning for Malware Detection in Executables. In Proc. EUSIPCO.
[53] Hyungjoon Koo and Michalis Polychronakis. 2016. Juggling the gadgets: Binarylevel code randomization using instruction displacement. In Proc. AsiaCCS.
[54] Marek Krčál, Ondřej Švec, Martin Bálek, and Otakar Jašek. 2018. Deep Convolutional Malware Classifiers Can Learn from Raw Executables and Labels Only. In Proc. ICLRW.
[55] Felix Kreuk, Assi Barak, Shir Aviv-Reuven, Moran Baruch, Benny Pinkas, and Joseph Keshet. 2018. Adversarial Examples on Discrete Sequences for Beating Whole-Binary Malware Detection. In Proc. NeurIPSW.
[71] Vasilis Pappas, Michalis Polychronakis, and Angelos D Keromytis. 2012. Smashing the gadgets: Hindering return-oriented programming using in-place code randomization. In Proc. IEEE S&P.
[72] Daniel Park, Haidar Khan, and Bulent Yener. 2019. Generation Evaluation of Adversarial Examples for Malware Obfuscation. In Proc. ICMLA. 1283–1290.
[76] Edward Raff, Jon Barker, Jared Sylvester, Robert Brandon, Bryan Catanzaro, and Charles K Nicholas. 2018. Malware detection by eating a whole exe. In Proc. AAAIW.
[89] Octavian Suciu, Scott E Coull, and Jeffrey Johns. 2018. Exploring Adversarial Examples in Malware Detection. In Proc. AAAIW.
(1) 使用Binary-Diversity增强二进制数据集,进而增强模型的对同语义代码的鲁棒性