【特征】字节序列

【特征】字节序列

  Windows上的恶意软件,即恶意的二进制程序,本质上都可以看作是一串字节流。对此也可以用二进制编程写程序,但确实反人类。如下图,是用十六进制编辑器打开可执行程序的结果,显示为16进制形式,二进制难以直接阅读:

  传统的恶意软件检测方法:

  • 基于签名的方法:
    Traditional approaches towards analyzing malware involve extraction of binary signatures from malware, constituting their fingerprint.


    分析恶意软件的传统方法涉及从恶意软件中提取二进制签名,构成它们的指纹。”(Nataraj 等, 2011, p. 1)

    • 缺陷在于不能很好地应对新发现的恶意软件结构。
  • 静态的检测方法

    • 无法很好地反映程序运行时行为
    • 无法分析代码混淆等技术处理后的恶意软件
  • 动态的检测方法

    • 可以很好反映程序运行时的行为
    • 时间开销和资源开销大(“time intensive and resource consuming”(Nataraj 等, 2011, p. 1))
    • 各种兼容性和环境要求可能导致程序运行不起来。
    • 恶意软件通过检测运行环境等方法可以规避这类检测(反沙箱/反虚拟机)

  字节序列或者说字节流是表征恶意软件的较为粗糙、粒度较大的特征,好处在于提取的难度较小,缺点在于字节序列难以被直接理解,作为较为底层的特征也无法直接范颖程序的行为。

  将字节序列作为机器学习和深度学习的特征,常见有三种利用方式:一是用ngram、embedding等自然语言处理相关方法,二是对字节流进行直方图建模、熵建模,三是将其转换为图像,利用CV的模型和方法处理。

  可视化的恶意软件检测方法:

  Windows平台上的二进制的恶意文件,从更底层的角度上看,可以看成是一串二进制流。又一个字节包含八个二进制位,十进制取值范围为0-255。那么恶意软件图像的思想就是把一个字节流转换为一张图像上的一个像素点,那么这个二进制文件就可以转换为一个单通道的灰度图像。

  此时,一个二进制文件对应一个灰度图像,那么便可以将灰度图像送入神经网络进行分类,也就完成了对恶意软件分类。即把恶意软件分类任务转换为一个图像分类的任务,之后由模型自动提取特征。

  此类工作基于的原理:

  • 新的恶意软件常基于旧的恶意软件产生。

    • 恶意软件衍生的一大目的是要逃脱现有安全设备、安全软件的查杀,所以常基于已有的恶意软件进行免杀处理(让恶意程序不被查杀),衍生出新的恶意软件。
  • 基于第一点,一类代码和代码结构非常相似的恶意软件被称为一个恶意软件家族。

  • 代码和代码结构的相似性可以转换为图像表示上的相似性。

    • 也就是说同一恶意软件家族的不同样本,转换得到的图像表示类似。
  • 同一恶意软件家族的较大的相似性,不同恶意软件家族较大的差异性。

    • 同一类别的图像很像,不同类别图像相似性小。

  ‍

  字节序列是一种较为底层的特征,并不直接反应程序行为,难以直接被阅读和理解。

  优点:

  • 将恶意软件分类任务转换为图像分类任务。

  对比传统的机器学习方法和自然语言处理方法,转换为图像的优势:

  • 较少的特征工程和领域知识门槛。
  • 直观的对字节序列相似度的表示。
  • 比较有效地应对代码混淆等免杀方法。

  不足之处:

  • 但是也注意到,基于字节序列产生的恶意软件图像泛化能力有限,对一些强混淆的程序缺乏应对能力。另外,图像分类的模型开销总是不小,并不见的比人工特征+机器学习的效果好。

  Improvement:

  • 多种特征结合产生多通道图像。

  ‍

  ‍

  ‍

11-Malimg

  关于恶意软件可视化工作的开山之作。

框架

  如何将恶意程序转换为图像:

  

  恶意程序转换为图像后仍然保留了程序基本的结构信息:

  

  • .text 前部分包含可执行代码,即细粒度的纹理结构。后部分用零填充。
  • .data section的black patch包含未初始化代码,细粒度纹理包含已初始化数据。
  • .rsrc section包含模块所有资源信息,包括图标等应用程序可能用到的静态资源。

  对图像的特征处理:

  • 用小波变换(GIST)对图像进行处理。

  伴随本文发布的Malimg数据集:

  这个数据集的某些类别经过了多态和代码加密处理。也是基于此篇论文展示的结果,后面的可视化恶意软件检测工作都表明对代码混淆有一定的检测能力

“To avoid the use of packers, certain malware families directly embed a polymorphic engine within their code. The most representative example in our experiments is Allaple where the code section is encrypted in several layers, using random keys [29]. Nonetheless, the proposed method is able to classify these samples as well.”(Nataraj 等, 2011, p. 5)

  

  对这个数据集:

  1. 类别之间数据分布不均,即长尾分布问题。
  2. 关于图像的数据集,而不是raw文件。灰度图像分类问题,几层卷积精度就能很高。
  3. 2011年发布的数据集,据今饱经风雨,已历十载春秋。

Reference

  Nataraj, Lakshmanan, et al. "Malware images: visualization and automatic classification." Proceedings of the 8th international symposium on visualization for cyber security. 2011.

  ‍

15-Byte/Entropy Histogram Features

Idea

  从PE中提取四类特征,提取开销不大,每类对应一个256维向量,最后一个样本对应一个1024维向量。

  

  Byte/Entropy Histogram Features

  • 字节分布建模的非常有效的方法,甚至优于纯粹图像的方法。
  • 字节直方图横轴[0,255],纵轴为该字节取值出现的次数,得到一个256维的特征向量。
  • 字节熵直方图横轴[0,255],纵轴为熵值。
  • 以上两个256维特征向量,展平连接得到512维特征向量

  PE Import Features.

  • 初始化一个256维的特征向量,取值为整数
  • 从二进制文件中提取导出表、DLL 名称、导入函数,映射到[0,255],以此作为下表,值为counter。

  PE Metadata Features.

  • 最后一组特征源自从目标二进制文件的可移植可执行文件 (PE) 打包中提取的数字字段。”
  • 学习捕获签名

  将以上四个特征合并为1024维。

  分类器:多层感知机效果就很好。

  最后加上贝叶斯校准。

  ‍

Discussion

  比较简洁的对程序建模的方法,其中对字节序列建模的字节直方图和字节熵直方图效果很好,除了用多层感知机,也可以结合其他特征送入树模型。

  就是论文写的比较一般。

  ‍

Reference

  Saxe, Joshua, and Konstantin Berlin. "Deep neural network based malware detection using two dimensional binary program features." 2015 10th international conference on malicious and unwanted software (MALWARE). IEEE, 2015.

  ‍

  ‍

18-AAAI-MalConv

  byte n-gram:

  • 脆弱特征
  • 过于关注PE头。
  • 不同类别之间程序的区别为字节取值的统计差异。
  • 字节码是对操作码的更底层表示,byte n-gram与opcode n-gram存在一致性。

  byte embedding:

  • 更加丰富的上下文内容
  • 让模型“理解”恶意程序和正常程序的差别。

  可视化的工作:

  • 直观的表示方式。
  • 将程序视为图像,但二进制程序本就不是图像,用CV的方法处理从先验假设上就错误。
  • 无法解释对恶意软件图像缩放的意义,插值有数学意义,但对程序来说引入了垃圾信息,没有意义。
  • 无法eating a whole exe
  • 二维卷积不过是一个膨胀的一维卷积。

  CNN+RNNs/CNN+LSTMs/RNNs+CNN

  • 从实验的角度说明,对比本文提出的架构,效果并没有更好。

  

Idea

  对字节流转换按字节转换为十进制(取值范围0-255),embedding得到嵌入向量,送入门控卷积(略微改动的text-cnn)分类。

  

  ‍

  ‍

  ‍

Discussion

  恶意软件的大小对模型的影响:

  • 本文取了1-2M的恶意程序作为输入,不够2M需要在分词之后向后Padding 0。类似的Padding 0对模型分类有用,对实际程序来说没啥意义。
  • 如果程序大小分布差异较大,只能根据最大的程序padding。

  byte embedding:

  • 更加丰富的上下文内容
  • 让模型“理解”恶意程序和正常程序的差别。

  “理解”,其实并不能,仍然是类似byte n-gram的效果,模型同样主要关注PE头信息做分类[2]。

  之后也有许多工作对MalConv做对抗样本。

  门控卷积的思路来源:2017-ICLR-Language Modeling with Gated Convolutional Networks

  ‍

Reference

  [1] Raff, Edward, et al. "Malware detection by eating a whole exe." Workshops at the thirty-second AAAI conference on artificial intelligence. 2018.

  [2] Coull, Scott E., and Christopher Gardner. "Activation analysis of a byte-based deep neural network for malware classification." 2019 IEEE Security and Privacy Workshops (SPW). IEEE, 2019.

  [3] 2017-ICLR-Gated Conv

  ‍

  ‍

  ‍

18-Trans-Resample

  ‍

  ‍

Reference

  Cui, Zhihua, et al. "Detection of malicious code variants based on deep learning." IEEE Transactions on Industrial Informatics 14.7 (2018): 3187-3196.

  ‍

20-Computers & Security-Markov image

  ‍

Reference

  Yuan, Baoguo, et al. "Byte-level malware classification based on markov images and deep learning." Computers & Security 92 (2020): 101740.

  ‍

20-INFOCOM-SPPNet

Reference

  Sriram, S., et al. "Multi-scale learning based malware variant detection using spatial pyramid pooling network." IEEE INFOCOM 2020-IEEE conference on computer communications workshops (INFOCOM WKSHPS). IEEE, 2020.

  ‍

23-Computers & Security-BHMDC

Reference

  Tang, Yonghe, et al. "BHMDC: a byte and hex n-gram based malware detection and classification method." Computers & Security (2023): 103118.

  ‍

22-IEEE Transactions on Computers-Vismal

Reference

  Zhong, Fangtian, et al. "Malware-on-the-Brain: Illuminating Malware Byte Codes with Images for Malware Classification." IEEE Transactions on Computers (2022).

posted @ 2023-04-03 21:08  巴啦啦胖魔仙  阅读(350)  评论(0)    收藏  举报