AI安全(3)A survey on practical adversarial examples for malware classifiers

恶意软件的对抗样本综述:

A survey on practical adversarial examples for malware classifiers

  • INTRODUCTION

  • BACKGROUND

    • Machine learning for malware
    • Adversarial examples
  • PRACTICAL ATTACKS

    • Gradient-driven approaches
      • Editing bytes and metadata
      • Code transformations
    • Problem-driven approaches
      • Editing bytes and metadata
      • Code transformations
  • DISCUSSION

    • Challenges

      • Threat models

      • Establishing baselines

    • Possible research directions

      • Defending against practical adversarial malware examples
      • Relationships between obfuscation and adversarial examples
      • Integration of static and dynamic analysis techniques
    • Other Survey and systematization of knowledge papers

  • CONCLUSION

  • ACKNOWLEDGMENTS


ABSTRACT

基于机器学习的解决方案非常有助于解决处理大量数据的问题,例如恶意软件检测和分类。然而,人们发现,深层神经网络容易受到敌对示例的攻击,或故意干扰输入以导致错误标签的攻击。研究人员已经表明,可以利用此漏洞创建规避恶意软件样本。然而,许多提议的攻击并不生成可执行文件,而是生成特征向量。为了充分了解敌对示例对恶意软件检测的影响,我们回顾了针对生成可执行敌对恶意软件示例的恶意软件分类器的实际攻击。我们还讨论了该研究领域当前面临的挑战,以及改进建议和未来研究方向。

1 INTRODUCTION

基于机器学习的解决方案非常有助于解决处理大量数据的问题,例如恶意软件检测和分类。然而,人们发现,深层神经网络容易受到敌对示例的攻击,或故意干扰输入以导致错误标签的攻击。研究人员已经表明,可以利用此漏洞创建规避恶意软件样本。然而,许多提议的攻击并不生成可执行文件,而是生成特征向量。为了充分了解敌对示例对恶意软件检测的影响,我们回顾了针对生成可执行敌对恶意软件示例的恶意软件分类器的实际攻击。我们还讨论了该研究领域当前面临的挑战,以及改进建议和未来研究方向。

然而,在2014年,Szegedy等人表明深层神经网络(DNN)容易受到对抗性攻击。Grosse等人进一步证明,这种漏洞也适用于基于机器学习的恶意软件检测器和分类器[29]。自这项工作以来,针对流行的基于机器学习的模型(如MalConv[62])开发了许多攻击,但其中许多攻击并不实用。具体地说,许多攻击不会生成实际的恶意软件,而是生成一个特征向量,表示可能受干扰的恶意文件应该是什么样子以逃避检测。由于逆特征映射的困难,在给定特征向量的情况下生成可执行程序是不切实际的[59]。也就是说,特征提取过程不是唯一可逆的,也不能保证找到的解决方案将包含与原始恶意软件样本相同的程序逻辑。在这项工作中,我们回顾了针对基于机器学习的恶意软件分类器和检测器的实际攻击,或者针对这些导致可执行恶意软件的ML模型的攻击。在第2节中,我们介绍并定义了对抗性示例以及考虑这些示例的威胁模型。然后,我们在第3节回顾了恶意软件领域的实际对抗性示例研究。我们为该领域的未来方向提供建议,并在第4节讨论任何挑战。最后,我们在第5节总结。

2 BACKGROUND

2.1 Machine learning for malware

检测恶意软件的经典方法是提取在受感染系统上发现的恶意样本的文件签名,并将其添加到签名数据库,也称为基于签名的检测[51]。对于这种方法,必须在整个样本以及相关样本的子集中搜索已知签名,因为恶意行为可以嵌入并交织在其他良性软件中。然而,由于基于特征码的检测依赖于捕获恶意软件样本,然后对其进行分析以生成新的特征码,因此它只能防御已知的攻击,并且只能尝试防御新的或模糊的恶意软件[67]。

基于机器学习的方法被提出作为这个问题的解决方案,因为它们能够预测新输入的标签。机器学习模型,如支持向量机(SVM)和均值聚类,用于恶意软件分类、检测和分析方法。在分类问题中,我们尝试将恶意软件样本分离为预定义的恶意软件系列。基于学习的模型基于由标记恶意软件样本组成的训练数据,推断新恶意软件样本的分类。检测问题可以看作是分类的一个子问题。对于检测,基于学习的模型用于在给定恶意和良性可执行文件时查找或检测恶意软件样本。由于检测是二进制分类的一种情况,基于学习的检测模型也可以称为分类器。分类和检测是训练数据标记时的监督算法。机器学习也可用于增强恶意软件分析。非监督聚类算法可用于学习恶意软件样本之间的新相似性[32]。此外,我们可以对基于学习的模型进行推理,以更好地理解恶意软件的恶意原因[7,20]。最近,随着深入学习方法研究的增加,研究人员开始利用卷积神经网络来分类和检测恶意软件[52,62]。

2.1.1 Static Features

N-gram是目前流行的用于恶意软件分类和检测的功能。Kolter和Maloof提出使用各种机器学习模型,包括朴素贝叶斯分类器、决策树、支持向量机(SVM)和增强模型[37],从PE恶意软件中提取最相关的=-克字节码进行分类。他们发现,除了分类之外,他们的模型还可以用于恶意软件检测.

McBoost是作为一种在搜索恶意软件时快速分析大量二进制文件的工具引入的,并采用了三步流程[58]。第一步是使用基于启发式的分类器和两个不同的基于n-gram的分类器的集合来检测打包器。如果检测到封隔器,则使用QEMU和动态分析对二进制文件进行解包。最后,使用一个单独的n-gram分类器来检测应该转发以进行额外分析的恶意软件。

Santos等人在2009年提出使用=-grams作为基于文件签名的方法的替代方案。在这样做的过程中,他们表明机器学习,特别是k近邻模型和=-grams可以成功地用于检测新的恶意软件样本[67]#-grams还与动态特征一起使用,以同时合并恶意软件的多个视图,而无需实际进行动态分析[5]。最近的工作,如为Kaggle Microsoft恶意软件挑战提出的解决方案[64,78],证明了字节和操作码=-grams的持续使用,分类准确率几乎为100%。

与使用操作码序列生成=gram类似,可以从程序的操作码跟踪中提取马尔可夫链。这样的马尔可夫链使用唯一的操作码作为其状态,并显示从一个操作码到另一个操作代码的转换概率。Anderson等人使用程序的马尔可夫链之间的相似性作为恶意软件检测的一个特征。类似地,Runwal等人[53]提出使用马尔可夫链之间的图相似性来检测嵌入式恶意软件,Shafiq等人[45]提出使用马尔科夫链来测量熵来检测恶意软件。

Jang等人介绍了BitShred,一种用于恶意软件分类和分析的工具[32]。BitShred使用位置敏感哈希对从样本中提取的=gram指纹进行哈希,以降低特征空间的维数。在k近邻模型中使用散列来对恶意软件样本进行聚类。此外,作者还表明BitShred可以用于改进以前的恶意软件检测和分类模型。例如,作者表明BitShred可以用于散列动态特征,例如Bayer等人[12]中生成的行为简档,以降低特征空间的维数。

Drebin对Android软件进行大规模静态分析,以提取硬件使用和请求、权限、API调用和网络信息等功能[7]。这些特征用于通过生成二进制指示符向量将样本映射到联合向量空间。这些二进制指示符向量被用作SVM的输入,SVM将样本标记为良性或恶意。重要的是,Drebin利用其模型的简单性,将模型的决策归因于特定的特征。这使得Drebin比基于复杂架构(如卷积神经网络)的恶意软件分类器和检测器更容易解释。

【ember、+ 字节直方图】

【恶意软件图像】Nataraj等人提出使用恶意软件图像(二进制文件的黑白图像表示)来检测恶意软件[52]。从那时起,研究人员和商业杀毒软件都使用恶意软件图像来高精度检测恶意软件[23,26,78]。Nataraj等人使用恶意软件图像创建了一个特征向量,该向量将用作支持向量机的输入。然而,最近的工作也表明,使用原始图像作为卷积神经网络的输入是有效的[23,34,38,82]。

【CFG控制流图】在开发静态功能方面也进行了研究,这些功能可以使用控制流图深入了解程序在运行时的行为。这项研究主要围绕构建控制流图和使用图匹配技术来检测恶意软件[13,16]。Ma等人在使用控制流图时采取了类似的方法,但提取了一系列API调用,试图模拟动态分析[46]。

【Malconv】Raff等人采用了一种不同的方法,并提出了一种卷积神经网络(CNN)模型,该模型将整个二进制作为输入[62]。特别地,所提出的模型MalConv查看文件的原始字节以确定恶意。MalConv借鉴了神经网络的研究,从长序列中学习更高级别的表示,并依赖于CNN捕捉高级别局部不变量的能力。MalConv通过提取文件的:字节来工作。这些:用0G5字节填充字节,以创建大小为3的特征向量。如果:>3,则使用文件的前3个字节,而不使用任何额外的填充。通过与CNN联合学习的嵌入,将这个3长度的向量映射到固定长度的特征向量。

2.1.2 Dynamic Features

动态分析是一种通过在实时环境中运行二进制文件来分析二进制文件的技术。此环境通常是一个安全的沙盒或测试环境,如CWSandbox[80]和cuckoo sandbox[1],以确保主机的安全。通常,这些环境都经过大量检测,以便记录已执行和加载的代码以及对内部文件、目录和设置所做的任何更改。这些记录的特征称为动态特征。

提取动态特征的最常用方法是记录系统和API调用的频率和顺序[3,21]。例如,Accessminer在动态分析期间记录系统调用trace,并生成每个样本的n-grams表示[42]。Accessminer将一个样本标记为恶意软件,如果该样本相对于某个预定义阈值包含多个“恶意”=-grams实例。动态分析的另一个好处是可以捕获和分析网络流量和通信,如Taintdroid[22]所述。这些功能还可用于为其他功能生成不同的恶意软件表示,或降低维数。

Bailey等人提出了一种用于恶意软件自动分类和分析的动态分析工具,该工具使用动态分析来记录生成的新进程、修改的任何文件、修改的任何注册表项以及网络访问和使用情况[11]。这些记录的特征用于创建amalware指纹,该指纹关注的是状态变化,而不是代码序列。这些动态特征用于使用标准化压缩距离度量创建恶意软件样本的层次聚类。

Rieck等人使用CWSandbox进行动态分析,类似于Bailey等人的工作,但是,使用字符串从结果文本报告中提取特征[63]。字符串频率与SVMto一起用于分类恶意软件样本。作者还表明,他们的方法可以通过引入新的“未知”类而扩展到恶意软件检测,而无需在训练集中引入良性样本。

拜耳等人通过使用污染分析来了解可执行文件如何使用来自操作系统的信息,从而扩展了之前的工作[12]。此外,所提出的方法使用操作系统对象和操作的抽象来创建行为概要。作者认为,由于能够在没有虚假系统调用的情况下对程序进行抽象或推理,因此抽象对规避更具鲁棒性。然后,将提取的行为特征与基于位置敏感哈希的聚类算法结合使用,对恶意软件样本进行分类。

程序的行为也可以建模为图,如Kolbitsch等人的工作[35]。作者扩展了malspec[18],并使用systemcalls生成了程序的行为图。每个行为图都是一个有向无环图,其中节点是系统调用,有向边表示信息流。使用图匹配和相似性度量对已知恶意软件样本进行检测。

2.2 Adversarial examples

定义->图片等领域的限制条件->常用方法介绍->

在[72]中首次引入了对抗性示例的概念,并在[28]中进行了扩展。假设5是敌方计划攻击的目标分类器。这个分类器可以表示为一个函数\(f(x)\),它接受一个输入并给它分配一个标签。通过用X扰动原始输入f生成对抗性示例x′5,使5(G)≠ 5(G′)。

有很多方法可以找到X,最流行的是快速梯度符号法[28]和卡里尼·瓦格纳(C&W)攻击[15]用于白盒模型,而替代模型攻击[55]用于黑盒模型。大多数攻击都会使用损失函数相对于输入的梯度来找到输入必须扰动的方向,以使输出发生想要的变化。然后使用该方向来查找X。我们在附录中简要讨论了这些攻击和其他攻击。

2.2.1 Threat models.

威胁模型是研究中对攻击者能力和已知信息的明确定义。在本节中,我们定义了机器学习领域中广泛使用的白盒和黑盒威胁模型。威胁模型由三部分组成:威胁向量和威胁面、知识和能力

威胁向量和威胁面:威胁向量和威胁面表示攻击者与目标模型交互的方式。威胁向量是攻击者可以用来攻击模型的允许输入空间和位置。威胁面或攻击面是所有此类威胁向量的集合。通常情况下,威胁向量和威胁面由机器学习模型的输入和输出组成。然而,攻击者进入这些表面的能力进一步受到其知识和能力的限制。

Knowledge:攻击者的知识表示我们假设对攻击者了解目标模型的内容。然后,攻击者利用这些知识构建并发起攻击。在对抗式机器学习中,可以将攻击者的知识概括为白盒和黑盒模型。在白盒模型中,假设攻击者对系统有完全的了解。因此,我们假设攻击者可以完全访问目标机器学习模型(带有权重和参数)以及用于训练模型的数据。在黑箱模型中,假设攻击者只能访问模型的输入和输出。因此,攻击者不知道模型的内部或训练过程(例如,从可执行文件和梯度信息中提取的特征)。攻击者也可以建模为灰盒模型。在灰箱模型中,攻击者可以访问模型的输入、输出和一些其他信息(模型使用的特征)等。

本研究中回顾的作品与攻击者的知识并不完全一致。具体地说,有些作品可能假设攻击者还可以访问恶意软件源代码,而其他作品则没有。在第3节中,将明确指出每部作品与对抗性知识的一般定义之间的偏差

能力:攻击者的能力表示我们假设对攻击者可以发动的攻击类型。在对抗样本中,我们可以指定攻击者将使用的攻击算法。在恶意软件领域的对抗性示例中,攻击者的能力受到其知识的限制。例如,通过访问恶意软件源代码,攻击者可以轻松地在编译时应用特定的转换。但是,如果没有源代码,这将变得更加困难。

2.2.2 Adversarial malware examples

大多数对抗性示例研究是使用自然图像数据集进行的,如MNIST、CIFAR10和ImageNet。然而,有必要考虑一组允许干扰攻击者恶意软件实例功能的允许扰动

对于自然图像,像素值会受到干扰以生成一个对抗性示例。只要得到的像素值在0到255之间,像素值的任何负数或正数变化都会导致图像发生轻微变化。可执行程序可以用类似的方式表示。根据定义,二进制文件的每个字节都在0x00和0xff之间。每个字节的十六进制表示可以转换为其十进制等效值(0到255之间)。在此状态下,可以使用相同的方法扰动字节和像素。然而,对字节的任意扰动可能不会产生有效的可执行文件,因为可执行程序存在于离散空间中。考虑改变可执行文件的一个字节的简单情况。如果字节来自ELF的.text部分,则新修改的字节可能会通过更改函数参数或导致错误指令而中断程序的功能。因此,将对抗性示例技术应用于恶意软件领域需要特别注意二进制文件的构造。最重要的是,对抗性恶意软件示例必须包含与原始恶意程序相同的恶意程序逻辑和功能。

对抗性恶意软件示例是一种直接的威胁,因为它们是规避性的恶意可执行文件,可以利用许多商业防病毒软件对混淆和变异的持久漏洞[61]。这将实际的恶意软件示例与恶意特征向量区分开来。虽然恶意特征向量也可以逃避检测或分类,但没有直接威胁Pierazzi等人认为,在给定敌对特征向量的情况下生成可执行文件是困难的,并将其称为反向特征映射问题。逆特征映射问题没有唯一的解决方案。在n-gram分类器的简单情况下,可以通过多种方式添加n-gram。但是,它们并不能保证产生与原始恶意软件样本包含相同程序逻辑或可执行性的可执行文件。当处理黑盒模型时,这个问题变得更加困难,因为攻击者不知道分类器的输入和内部结构。Pierazzi等人解释说,实际的恶意软件示例有两种方法可以避免这种情况:

(1)一种梯度驱动方法,其中代码扰动对梯度的影响是近似的,并用于遵循梯度的方向;

(2)一种问题驱动方法,其中突变首先随机应用,然后再开始一种进化的方法。

3 PRACTICAL ATTACKS

在本节中,我们将回顾对抗性恶意软件示例文献中的实际攻击,或导致可执行二进制文件的攻击。在表3中,我们概述了本工作中的实际攻击记录(1)如果工作是针对使用静态功能的恶意软件分类器评估的(2)如果工作是针对使用动态功能的恶意软件分类器评估的,(3)评估中的targetmodels,(4)攻击中的可用转换,(5)该方法是梯度驱动还是问题驱动。

我们使用[59]中的术语,并按照第2.2.2节中定义的梯度驱动和问题驱动方法组织我们的审查。对于这两种方法,我们进一步将文献组织为第3.1.1和3.2.1节中主要编辑字节和元数据的攻击,以及第3.1.2和3.2.2节中利用代码转换的攻击。

image-20210415140727064
  • [65] Generic Black-Box End-to-End Attack Against State of the Art API Call Based Malware Classifiers

  • [6] Learning to Evade Static PE Machine Learning Malware Models via Reinforcement Learning

  • [36] Adversarial Malware Binaries: Evading Deep Learning for Malware Detection in Executables

  • [39] Deceiving End-to-End Deep Learning Malware Detectors using Adversarial Examples

  • [20] Explaining Vulnerabilities of Deep Learning to Adversarial Malware Binaries

  • [57] Generation & Evaluation of Adversarial Examples for Malware Obfuscation.

  • [68] Automatic Generation of Adversarial Examples for Interpreting Malware Classifiers

  • [83] Malware Detection in Adversarial Settings: Exploiting Feature Evolutions and Confusions in Android Apps.

  • [40] Deceiving Portable Executable Malware Classifiers into Targeted Misclassification with Practical Adversarial Examples

  • [59] Intriguing Properties of Adversarial ML Attacks in the Problem Space (2020 S&P)

  • [24] HideNoSeek: Camouflaging Malicious JavaScript in Benign ASTs (2019 CCS)

3.1 Gradient-driven approaches

3.1.1 Editing bytes and metadata

创建实际恶意软件示例的一种流行方法是在二进制文件中的未使用空间中添加或更改字节。此外,这可以在头中完成,以在不影响功能的情况下更改头元数据。在本节中,我们将回顾使用这种类型转换的拟议攻击。因为这些攻击集中在未使用或“不重要”(用于执行)字节上,所以它们不需要源代码来生成规避恶意软件样本。然而,除了GADGET[65]之外,这些攻击仍然是白盒攻击,因为它们需要完全访问目标模型来计算梯度。

  • ##### [65] Generic Black-Box End-to-End Attack Against State of the Art API Call Based Malware Classifiers

2018年,Rosenberg等人提出了GADGET,这是一个利用DNN之间对抗样本的可转移性将PE恶意软件转化为规避变体的软件框架[65]。提议的攻击假设一个黑盒威胁模型,无法访问恶意软件源代码。但是,攻击假设目标模型将一系列API调用作为输入。为了生成对抗性示例,GADGET构建了一个代理或替代模型,该模型使用Papernot等人提出的基于Jacobian的数据集扩充进行训练,作为对自然图像分类器的攻击[55]。数据集扩充创建合成输入,帮助替代模型更好地逼近目标黑盒模型的决策边界。这增加了攻击可转移性的概率,因为替代模型和目标模型都将学习到类似的分布。一旦替代模型得到训练,通过向原始恶意软件的API调用序列添加虚拟API调用,生成对抗性恶意软件示例。作者将这些伪API调用称为语义NOP作为所选的API调用,或者它们相应的参数对原始程序逻辑没有影响。需要注意的是,作者只添加API调用,因为删除API调用可能会破坏程序的功能。

算法介绍:假设原始API调用序列是一个数组F0,其中每个索引都是9∈ [0,=]包含一个API调用。此过程的每个迭代8都返回一个新数组F8。在迭代8中,一个API调用3被添加到F8中−1在某个指数9处,将其推向梯度指示的方向,该梯度对替代模型的决策影响最大。这将导致F8,其中F8[9]=3和F8[9+1::]=F8−1[9:]因为索引9之后的前一序列中的所有API调用基本上都是“向后推”的。

这种通过添加伪API调用来干扰输入的方法确保了功能不会被破坏。为了从这个对抗性API调用序列生成实际的可执行文件,GADGET实现了一个钩住所有API调用的包装器。钩子根据需要从敌对API调用序列调用原始API和虚拟API。这些钩子确保生成的敌对恶意软件示例在某种意义上保持原始样本的功能和行为。GADGET根据定制模型进行评估,包括logistic回归、递归神经网络(RNN)、全连接深度神经网络(DNN)、卷积神经网络(CNN)、支持向量机、增强决策树和随机森林分类器。作者还表明,他们的攻击产生的恶意软件能够避开使用静态特征(如可打印字符串)的分类器。

  • [36] Adversarial Malware Binaries: Evading Deep Learning for Malware Detection in Executables

Kolosnjaji等人提出了一种针对MalConv的白盒攻击,该攻击通过迭代操作文件末尾的填充字节来生成对抗性PE恶意软件示例[36]。尽管作者指出PE中任何位置的字节都可以更改,但它需要对文件体系结构的精确了解,因为简单的更改可能会破坏文件完整性。因此,提议的攻击只关注字节附加。作者面临的一个挑战是由于其嵌入层,MALCONV的不可微性。为了避免这种情况,作者建议计算目标函数相对于嵌入表示I的梯度,而不是输入。每个填充字节都替换为最靠近第6行的嵌入式字节<([)=I+[=其中=是标准化的渐变方向。但是,如果第6行([)上的“<”投影未与=”对齐,则选择下一个最近的嵌入字节。通过仅更改文件末尾的填充,提议的攻击不会更改程序逻辑或原始almarware示例的功能。但是,这也限制了攻击允许的干扰总数。如第2节所述,MalConv从二进制文件中最多提取3个字节。如果二进制文件的大小小于3,则提取的:字节数为(3− :) 附加到它的0xff填充字节。这意味着提议的攻击受到原始恶意软件样本大小的限制。

  • [39] Deceiving End-to-End Deep Learning Malware Detectors using Adversarial Examples

Kruek等人[39]扩展了Kolosnjaji等人的工作,提出了一种方法,用于在敌对示例嵌入的情况下重建PE恶意软件样本。作者发现,从扰动嵌入重建字节∗ 像我一样经常是不平凡的∗ 可能会与我失去相似之处∈ / 用于学习“将填充字节映射到嵌入字节的函数。因此,他们提出了一种新的损失函数,以确保扰动嵌入∗ 将接近于实际的嵌入”。这是通过在生成的嵌入和“”之间的损失函数中引入距离项来实现的。

  • [20] Explaining Vulnerabilities of Deep Learning to Adversarial Malware Binaries

Demetrio等人提出将特征属性作为一种可解释的机器学习算法,以理解机器学习模型做出的决策[20]。特征归因基于Sundararajan等人于2017年引入的一种称为积分梯度的技术[71]。Demetrio等人观察了输入可执行文件的每个字节的属性,发现MalConv对二进制文件的PE头部分的权重很大。作者利用了这一漏洞,提出了针对MalConv的白盒攻击,该攻击只改变恶意软件样本头中的字节。此攻击使用了与[36]中相同的算法,但干扰了头中未使用和可编辑的字节,而不是在文件末尾填充。

3.1.2 Code transformations

上面的许多工作都指出,只要程序的功能和恶意行为没有改变,建议的方法就可以用来改变恶意二进制文件的.text部分。以下攻击利用模糊处理技术更改.text部分。

  • [57] Generation & Evaluation of Adversarial Examples for Malware Obfuscation.

Park等人提出了一种白盒攻击,该攻击利用语义NOP(如mov eax、x86汇编中的eax)来创建对抗性PE恶意软件示例[57]。作者攻击了使用可执行文件[52]的图像表示作为输入的卷积神经网络。可执行文件的图像表示将每个字节视为一个像素,并使用字节的十进制值作为像素值。攻击提出了两个步骤。首先,使用FGSM生成对抗性示例。此对抗性示例是一个映像,可能与原始恶意软件示例的功能或恶意行为不同。在第二步中,原始恶意软件样本和生成的敌对图像被用作动态规划算法的输入,该算法使用LLVM过程插入语义NOP。与[65]中添加API调用以类似于生成的对抗性特征向量的方式类似,动态规划算法添加了语义NOP,使得生成的恶意软件样本的图像表示类似于步骤1中生成的敌对图像。作者继续证明,由于敌对示例和干扰的可转移性,这种攻击可以用于黑盒模型[50, 55]. 使用一个简单的2层CNN作为替代模型,作者生成了对抗性恶意软件示例,这些示例也避开了黑盒模型,其中一个是使用字节级特征的梯度增强决策树。作者还提到,考虑到恶意软件的源代码,他们的攻击效果最好。然而,在缺乏源代码的情况下,可以使用二进制翻译和重写技术插入必要的语义NOP。需要注意的是,引入这些技术也会引入二进制提升过程中的工件。

3.2 Problem-driven approaches

在本节中,我们将回顾采用问题驱动方法的对抗性恶意软件示例算法。与第3.1节类似,我们使用攻击的可用转换进一步组织审查。问题驱动的方法不需要白盒访问梯度信息的目标。因此,以下方法是黑盒攻击。

3.2.1 Editing bytes and metadata

  • [6] Learning to Evade Static PE Machine Learning Malware Models via Reinforcement Learning
    • Anderson

其中,Anderson等人提出了一个具有强化学习代理集[6]。RL代理因产生逃避检测的恶意软件的行为而获得奖励。通过这个游戏,代理学习创建规避恶意软件的策略。提议的攻击利用以下不会改变原始程序逻辑的操作:

  • 向导入表中添加从未使用过的函数
  • 更改节名
  • 创建新的但未使用的部分
  • 向节中未使用的空间添加字节
  • 删除签名者信息
  • 更改调试信息
  • 打包或解包二进制文件
  • 修改标题

使用这些操作,RL代理能够改变诸如PE元数据、人类可读字符串和字节直方图等特性。在培训阶段发生多达50000个突变后,RL代理根据梯度增强决策树模型进行评估,结果表明该模型能够成功地对恶意软件进行分类[78]。作者指出,他们的对抗性例子应该是功能性的。然而,他们发现,他们的攻击破坏了某些Windows PE的功能,这些PE使用了不太常见的文件格式或违反PE标准的混淆技巧。作者声称,通过确保二进制检测框架能够正确解析原始恶意软件样本,可以简单地解决这一问题。

  • [68] Automatic Generation of Adversarial Examples for Interpreting Malware Classifiers

Song等人在生成对抗性恶意软件示例时采用了不同的方法[68]。提议的攻击随机生成一系列宏操作,并将其应用于原始PE恶意软件样本。重复此操作,直到生成的转化恶意软件逃避检测。一旦恶意软件样本不可信,不必要的宏操作将从应用于其的宏操作序列中删除。这样做是为了最大限度地减少由于某些混淆技巧而意外破坏功能的可能性。剩余的宏操作随后被分解为微操作,以获得更详细的转换跟踪,从而生成恶意软件示例。我们建议读者阅读原始文章,以获得关于每个宏和微操作的更多详细信息,但是,我们在此简要描述它们。宏操作包括以下内容:

  • 将字节追加到二进制文件的末尾
  • 将字节追加到节末尾未使用的空间
  • 增加一个新的部分重命名
  • 注销已签名证书
  • 删除调试信息
  • 将标头中的校验和值归零
  • 用语义等价的指令替换指令

其中一些宏操作可以分解为一系列较小的操作,称为微操作。例如,追加字节的操作可以分解为一次添加一个字节的序列。作者声称,通过分解每个宏操作,可以深入了解特定操作导致逃避的原因。提出的方法不是利用诸如FGSMor C&Wattack之类的对抗性示例生成算法,而是试图对机器学习模型提供一种更易于解释的攻击。该方法针对商业防病毒软件进行了评估,并被发现对包含静态和动态分析的分类器有效。

3.2.2 Code transformation

  • [83] Malware Detection in Adversarial Settings: Exploiting Feature Evolutions and Confusions in Android Apps.

Yang等人提出了两种对恶意软件样本的攻击,以逃避机器学习模型的检测,但没有使用机器学习算法[83]。建议的进化攻击不是针对错误分类,而是基于变异的上下文特征(由时间特征、区域设置特征和依赖性特征组成)模仿Android恶意软件的自然进化[84]。这是通过混淆工具OCTOPUS自动化这些变异策略并大规模使用它们来识别目标分类器上的“盲点”来实现的。恶意软件家族被组织成系统进化树[69],以分析家族内的共同特征和不同特征。然后根据可行性和频率对每个特征变异进行排序,并进行排序。然后,顶级G突变用于生成新的恶意软件变体。作者还提出了一种特征混淆攻击来补充进化攻击。特征混淆攻击的目标是修改恶意软件样本,使某些特征与良性样本的特征相似。攻击开始于收集一组混乱的功能,或恶意软件和良性样本共享的一组功能。对于混淆特征集中的每个特征,记录包含该特征的良性和恶意样本数。如果存在更多良性样本,则该特征将添加到“目标特征”列表中。然后,攻击会变异恶意软件样本,使其包含已发现的目标特征,从而增加规避的可能性。针对基于Android学习的恶意软件分类器AppContext[84]和Drebin[7]对提出的方法进行了评估。需要注意的是,虽然攻击不需要白盒访问目标模型,但它确实假设(1)恶意软件源代码和(2)模型使用的功能知识。

  • [40] Deceiving Portable Executable Malware Classifiers into Targeted Misclassification with Practical Adversarial Examples

Kucuk等人认为,敌对恶意软件示例必须避开基于静态和动态机器学习的分类器[40]。因此,他们提出了一种针对PE恶意软件的攻击,利用虚假控制流混淆和API混淆来逃避使用静态和动态特征的模型的检测。应用的控制流混淆基于LLVM-Obfuscator[33]。LLVM模糊器通过使用不透明谓词和从不使用任意指令执行伪基本块,在LLVM-IR级别改变程序的控制流。使用差分分析,作者找到了最佳控制流混淆和伪基本块,以生成一个恶意软件示例。这会干扰静态特性,例如n-grams、操作码频率和导入的API调用。该攻击使用一种遗传算法来最小化所需目标类别的频率特征向量与恶意软件样本之间的Kullback-Leibler(KL)散度。为了规避基于动态API调用的恶意软件分类器,作者使用相同的遗传算法确定哪些API调用必须进行模糊处理,然后使用[70]中介绍的技术进行模糊处理。此外,再次使用相同的遗传算法确定应添加到原始恶意软件样本中的其他API调用序列,类似于[65]所采用的方法。

  • [59] Intriguing Properties of Adversarial ML Attacks in the Problem Space (2020 S&P)

Pierazzi等人提出了一种针对Android恶意软件分类器Drebin的黑盒攻击[59]。作者提出了一种问题空间方法,使用不透明谓词反复插入良性代码块,以改变Drebin提取的特征。这些良性代码块是在攻击之前通过分析训练集中的样本来初始化的,这些样本用于识别导致负面或良性标签的代码序列。攻击受到可行性检查的限制,以避免过度转换,从而增加怀疑。此外,使用FlowDroid[8]和So烟灰[75]插入代码块,以最小化副作用或伪影。

  • [24] HideNoSeek: Camouflaging Malicious JavaScript in Benign ASTs (2019 CCS)

HideNoSeek与其他应用代码转换的攻击不同,它试图通过将抽象语法树(AST)转换为良性来隐藏恶意JavaScript[24]。攻击开始于构建恶意和良性文件的AST,以检测两个类之间共享的子AST或子图。为了创建对抗性示例,HideNoSeek利用随机化、数据模糊和不透明结构插入良性子AST。该攻击还可以重写现有的AST,使其看起来是良性的。这些攻击是在黑盒模型中针对基于Zozzle的定制分类器进行的,Zozzle是一种使用从JavaScript AST中提取的特征的贝叶斯分类器[19]。

4 DISCUSSION

4.1 Challenges

首先,还应注意的是,我们绝不会减少或淡化恶意软件领域中不产生可执行恶意软件样本的对抗性示例研究的贡献。然而,我们认为,为了在现实的敌对环境中更好地构建提议的攻击,有必要扩展或包括关于扩展攻击以产生可执行恶意软件样本的可能方法的讨论。随着对抗性示例研究的快速发展,有必要充分了解这些攻击如何过渡到恶意软件检测和网络安全领域。全面开发或概念验证攻击也有助于开发针对敌对恶意软件样本的健壮模型。

4.1.1 Threat models

这一研究领域的一个挑战是威胁模型的不一致性。我们认为有必要明确定义每项研究中考虑的威胁模型,以便更好地理解攻击的局限性以及作者所做的任何假设。除了对抗性示例文献中使用的一般白盒和黑盒威胁模型外,我们建议包括(1)对源代码可用性的假设,以及(2)由于时间或计算限制对对手进行攻击的可行性。与Papernot等人[55]的工作类似,观察改变对手资源的效果会很有趣,例如,限制目标模型允许的查询数量,或为对手攻击的每次迭代产生成本。

4.1.2 Establishing baselines

另一个挑战是建立基线和基本真相。在整个审查的论文中,没有一致的数据集,也没有一致的(ML或商业)恶意软件分类器。尽管本次调查中考虑的所有作品都对顶级分类词有很高的漏检率,但我们无法公平地对它们进行评估。在提议的攻击和它们的实验评估之间保持一致将允许更好地比较攻击。然而,如[76]所示,维护一致的数据集和恶意软件分类器以及进行公平评估都会带来自身的挑战。这也将有助于扩展Quarta et.al.提出的评估,Quarta et.al.使用他们的框架crAVe表明,简单地混淆或变异恶意软件样本就足以逃避检测,因为并非所有反病毒软件都进行某种形式的动态分析。

4.1.3 Dataset

数据集:虽然将旧恶意软件转换为规避恶意软件确实显示了恶意软件检测中的漏洞,但排除较新的恶意软件样本会带来概念漂移(concept drift.)的风险。例如,如果恶意软件针对新平台进行了大幅更改,则旧的恶意软件数据集可能无法正确反映恶意功能和行为。良性程序样本也是如此。传统上,良性样本是从新安装的操作系统中刮取的。然而,目前尚不清楚这些预装程序是否反映了用户下载和/或扫描恶意行为的程序。

4.1.4 Malware classifiers

目前尚不清楚哪种恶意软件分类器最适合评估攻击。正如Song等人所说,假设模型的任何先验知识也是不现实的。我们认为目前没有也不会有一个一致的恶意软件检测模型基线,因为该领域的研究仍在增长。然而,我们建议未来的工作在黑盒威胁模型下评估他们对多分类器的攻击。这将有助于理解攻击在决策过程中使用不同特征的各种检测模型之间的可转移性。

4.2 Possible research directions

4.2.1 Defending against practical adversarial malware examples

一些研究已经在评估恶意软件领域中对抗性训练的使用[4,43]。然而,鲁棒机器学习研究包括许多其他防御策略,如平滑[2]和随机化[60]。目前尚不清楚这些方法是否会转移和防御对抗性恶意软件示例。

4.2.2 Relationships between obfuscation and adversarial examples

混淆和敌对示例有一个共同的目标:逃避检测。此外,大多数实用的对抗性恶意软件示例算法都将流行的混淆策略纳入了攻击中。一个可能的研究问题是评估使用更先进的模糊处理方法(如虚拟化)生成对抗性示例的可行性。目前还不清楚对抗性恶意软件示例与更传统的恶意软件规避技术(如Bulazel等人[14]中总结的技术)相比有什么好处。在Song等人[68]和Demetrio等人[20]的工作基础上扩展对抗性恶意软件示例的可解释性,并利用这一点进一步开发规避转换,这也是很有趣的。

4.2.3 Integration of static and dynamic analysis techniques

许多经过审查的工作都假设在测试之前没有对恶意软件样本进行高级分析。然而,情况并非总是如此。例如,预处理步骤可用于使用除臭框架(如SATURN[25])对[57]和[40]产生的规避恶意软件样本进行除臭。未来的攻击和防御工作将考虑使用分类和检测管道,而不是单一的机器学习模型或商业防病毒产品,这将是一件有趣的事情。

4.3 Other Survey and systematization of knowledge papers

在本节中,我们将对涉及相关主题的知识论文进行其他调查和系统化。袁等人。深入学习的对抗性攻击和防御调查[86]。它们还提供了可以使用对抗性攻击的应用程序和问题域。与这项工作类似,Maiorca等人对基于机器学习的PDF恶意软件检测系统的对抗性攻击进行了调查[48]。Bulazel和Yener调查动态恶意软件分析规避和缓解策略[14]。Ye等人综述了数据挖掘技术在恶意软件检测中的应用[85]。Ucci等人利用机器学习对恶意软件分析进行了调查[74]。最后,van der Kuowe等人调查了为公平准确地评估安全性研究而必须考虑的常见基准测试缺陷。

5 CONCLUSION

我们对恶意软件领域中的实际对抗性示例进行了调查。随着基于机器学习的解决方案开始在工业界和学术界被采用,对抗性示例及其对网络安全领域的影响的研究非常重要。我们希望这项调查将为这一领域的未来研究提供有用的信息。


遗传算法

  • Robust Android Malware Detection against Adversarial Example Attacks. WWW 2021: 3603-3612
  • secml-malware: A Python Library for Adversarial Robustness Evaluation of Windows Malware Classifiers. CoRRabs/2104.12848 (2021)