When Malware is Packin' Heat; Limits of Machine Learning Classifiers Based on Static Analysis Features

ML的引入提高了恶意软件检测率,为了逃避检测恶意软件会加壳,但是合法软件也会加壳。

本文研究了基于静态分析特征的ML如何操作加壳样本,研究人员经常假设加壳可以阻止ML建立有效的分类器。但是学术界和工业界基于ML的分类器都达到了很好的效果,专家猜测可能是因为恶意软件加壳比较多。本文展示了,打包器确实保留了一些对于恶意软件识别有用的信息,但是这些信息不足以用于恶意软件分类。这些信息对于分类器模型来说不能1)一般化它们的操作没见过壳的知识2)对于对抗样本来说足够鲁棒。本文还表明机器学习的简单应用会导致假阳性,导致过去的真实数据不正确。

Motivation

恶意软件分析最初是基于签名的分析,可以很好的分析已有软件。但是当恶意软件数量急剧增长时就不好用了。

动态分析需要精确的环境配置和较多计算资源,并且还可能被恶意软件逃逸,因此厂商就会选择提取静态特征,并使用AI分类。

基于ML的恶意软件分类器可能被加壳阻碍,但是学术界和工业界都得到了较好效果,专家猜测是因为恶意软件中加壳比较多。但是现在合法软件也越来越多加壳,大多数相关研究没有讨论加壳的影响。作者最初的实验也表明,基于ML的分类器可以识别加壳恶意软件和加壳合法软件,这就引出一个问题:加壳软件的静态分析是否有足够的用于恶意分析的特征?

Design

使用两个数据集:EMBER,使用沙箱配合VirtualTotal,移除那些标签不一致的数据。使用Deep Packer Inspecto、沙箱和一系列静态工具检测是否加壳。第二个数据集使用商业和免费打包器进行加壳。分类器使用了DNN,SVM,随机森林,由于分类器结果类似,且随机森林解释性较好,只解释了随机森林。

Result

首先在加壳恶意软件和未加壳合法软件上训练,发现在加壳合法软件上检测假阳性率高。表明检测加壳特征比检测恶意特征容易。

在加壳的数据集上进行训练,发现可以对壳分类,实现99%的准确率,也就是说检测器检测加壳流程作为恶意标志。作者还做了个实验验证:让恶意软件和合法软件加不同的壳,结果发现分类器识别壳作为恶意还是合法的标志。

增加良性样本的比率,良性和恶意软件中各种壳均匀分布。结果发现加壳的良性率帮助分类器保持了较低的假阳性率和较低的假阴性率。说明打包器保留了一些可以用于恶意软件分类的原程序特征。通过只使用一个壳进行训练,发现保留的信息对于恶意软件分类并不是必须的,只是有用的。所以依然有以下问题:1)无法一般化2)在强加密情况下失效3)难以检测对抗样本

  • 一般化:即遇到不包含在训练集的打包器打包的样本会产生假阳性。作者在训练集中排除 tElock,PECompact, and kkrunchy时,会产生假阳性率43.65%, 47.49%, and 83.06%
  • 强加密:作者使用AES-Encrypter打包程序,在子进程执行程序,不保留原程序的任何信息,发现分类器无法识别
  • 对抗样本:先使用相同打包器的样本训练分类器,分类器保持低假阳性率。然后尝试生成样本,即识别出良性样本中更频繁出现的良性字节序列,并注入到恶意样本中,而不改变行为。具体来说,从一个网游中提取字符串注入到恶意文件中。导致分类器出现假阳性

为了检测实际检测器表现如何,作者在VT上提交了打包后的良性和恶意样本。全部6个基于ML的检测器全部检测加壳特征为恶意。而且商业化的壳会被检测为恶意。

贡献

  • 研究了只使用静态特征的基于ML的恶意软件分类器的限制。即训练的数据、一般化、强加密和对抗样本
  • 评估了VT上的6个基于ML的检测器,发现现有的分类器无法分类加壳软件
  • 发布了一个恶意软件数据集,包含392168个样本,可能是1)恶意或良性2)加壳或未加壳。还有第二个数据集包含341444个样本
  • 地址https://github.com/ucsb-seclab/packware