[当人工智能遇上安全] 4.基于机器学习的恶意代码检测技术详解

前一篇文章普及了机器学习在安全领域的应用,并复现一个基于机器学习(逻辑回归)的恶意请求识别。这篇文章将详细分享基于机器学习的恶意代码检测技术,主要参考郑师兄的视频总结,包括机器学习概述与算法举例、基于机器学习方法的恶意代码检测、机器学习算法在工业界的应用。同时,我再结合自己的经验进行扩充,详细分享了基于机器学习的恶意代码检测技术,基础性文章,希望对您有所帮助~

文章目录

  • 一.机器学习概述与算法举例
    • 1.机器学习概念
    • 2.机器学习算法举例
    • 3.特征工程-特征选取与设计
  • 二.基于机器学习方法的恶意代码检测
    • 1.恶意代码的静态动态检测
      • (1) 特征种类
      • (2) 常见算法
    • 2.静态特征设计举例
    • 3.经典的图片特征举例
    • 4.动态特征设计举例
    • 5.深度学习静态检测举例
    • 6.优缺点
    • 7.静态分析和动态分析对比
  • 三.机器学习算法在工业界的应用
  • 四.总结

前文推荐:

  • [当人工智能遇上安全] 1.人工智能真的安全吗团队外滩大会分享AI对抗样本技术
  • [当人工智能遇上安全] 2.清华张超老师 – GreyOne: Discover Vulnerabilities with Data Flow Sensitive Fuzzing
  • [当人工智能遇上安全] 3.安全领域中的机器学习及机器学习恶意请求识别案例分享
  • [当人工智能遇上安全] 4.基于机器学习的恶意代码检测技术详解
  • https://github.com/eastmountyxz/AI-Security-Paper

随着互联 的繁荣,现阶段的恶意代码也呈现出快速发展的趋势,主要表现为变种数量多、传播速度快、影响范围广。在这样的形势下,传统的恶意代码检测方法已经无法满足人们对恶意代码检测的要求。比如基于签名特征码的恶意代码检测,这种方法收集已知的恶意代码,以一种固定的方式生成特定的签名,维护这样的签名库,当有新的检测任务时,通过在签名库中检索匹配的方法进行检测。暂且不说更新、维护签名库的过程需要耗费大量的人力物力,恶意代码编写者仅仅通过混淆、压缩、加壳等简单的变种方式便可绕过这样的检测机制。

为了应对上面的问题,基于机器学习的恶意代码检测方法一直是学界研究的热点。由于机器学习算法可以挖掘输入特征之间更深层次的联系,更加充分地利用恶意代码的信息,因此基于机器学习的恶意代码检测往往表现出较高的准确率,并且一定程度上可以对未知的恶意代码实现自动化的分析。下面让我们开始进行系统的介绍吧~


一.机器学习概述与算法举例

1.机器学习概念

首先介绍下机器学习的基本概念,如下图所示,往分类模型中输入某个样本特征,分类模型输出一个分类结果。这就是一个标准的机器学习检测流程。机器学习技术主要研究的就是如何构建中间的分类模型,如何构造一组参数、构建一个分类方法,通过训练得到模型与参数,让它在部署后能够预测一个正确的结果。


2.机器学习算法举例

(1) 支持向量机(SVM)
首先存在很多训练数据点,包括直线上方和下方两个簇,支持向量机的方法是寻找这两个簇分类的超平面。如何寻找这个超平面呢向量机先求解每个簇离对面最近的点,然后通过拟合方法计算出两边簇的边界,最终计算出中间的平面,其基本思路就是这样,而这些点就是支持向量。支持向量机往往用来处理超高维的问题,也不一定是类似直线的平面,也可能是圆形的分类边界。

(3) 深度卷积神经 络
普通的神经 络通常只包括一个隐藏层,当超出之后可以称为深度神经 络。现在比较流行的包括CNN、RNN、RCNN、GRU、LSTM、BiLSTM、Attention等等。其中,卷积神经 络常用于处理图片,应用了卷积技术、池化技术,降低图片维度得到很好的结果。

深度神经 络是深度学习中模型,它主要的一个特点是将特征提取的过程放入到真个训练中,之前对于图片问题是采用手工特征,而CNN让在训练中得到最优的特征提取。

特征设计——人脸识别
局部二值特征(Local Binary Pattern),再举一个人脸识别例子,深度学习出来之前,图片分类都是使用一些特征算子提取特征的。比如存在一个3×3的窗口,我们取阈值5,比5小的窗口置为0,其他的置为1,然后顺时针转换为一个8位的二进制数字,对应的十进制就是19。显然,LBP特征进行了一个降维的操作,左边的图片显示了人脸识别不应该受光照影响,不同光照的图片进行LBP特征提取后,显示结果都一样。


二.基于机器学习方法的恶意代码检测

1.恶意代码的静态动态检测

(1) 特征种类

首先,特征种类如果按照恶意代码是否在用户环境或仿真环境中运行,可以划分为静态特征和动态特征。

  • 静态特征: 没有真实运行的特征
    字节码:二进制代码转换成了字节码,比较原始的一种特征,没有进行任何处理
    IAT表:PE结构中比较重要的部分,声明了一些函数及所在位置,便于程序执行时导入,表和功能比较相关
    Android权限表:如果你的APP声明了一些功能用不到的权限,可能存在恶意目的,如手机信息
    可打印字符:将二进制代码转换为ASCII码,进行相关统计
    IDA反汇编跳转块:IDA工具调试时的跳转块,对其进行处理作为序列数据或图数据

(2) 常见算法

普通机器学习方法和深度学习方法的区别是,普通机器学习方法的参数比较少,相对计算量较小。

  • 普通机器学习方法(SVM支持向量机、RF随机森林、NB朴素贝叶斯)
  • 深度神经 络(Deep Neural Network)
  • 卷积神经 络(Convolution Neural Network)
  • 长短时记忆 络(Long Short-Term Memory Network)
    针对序列模型进行建模,包含上下文依赖关系,比如“我 是 一名 大学生”中的“我”和“是”前后出现的条件概率更高。广泛应用于文本分类、语音识别中,同样适用于恶意代码检测。
  • 图卷积 络 (Graph Convolution Network)
    比较新兴的方法,将卷积应用到图领域,图这种数据类型比较通用,非图数据比较容易转换成图数据,CCF论文中也已经应用到恶意代码检测中。。


2.静态特征设计举例

首先分享一个静态特征的例子,该篇文章发表在2015年,是一篇CCF C类会议文章。

  • Saxe J,Berlin K. Deep neural network based malware detection using two dimensional binary program features[C] // 2015 10th International Conference on Malicious and Unwanted Software(MALWARE). IEEE, 2015: 11-20

该模型包含三个步骤:

  • 特征抽取
    使用了四种特征
  • 特征抽取输入到深度神经 络
    包含两层隐含层的深度神经 络
  • 分数校正

特征抽取
特征提取包括以下四种特征:

得到特征向量之后,就开始进行模型的训练和测试,一般机器学习任务事先都有一个数据集,并且会分为训练数据集和测试数据集,按照4比1或9比1的比例进行随机划分。训练会将数据集和标签对输入得到恶意和非恶意的结果,再输入测试集得到最终结果。

该论文测试了六种特征集合,其计算的TPR和AUC值如下所示。


4.动态特征设计举例

接下来分享一个动态特征的例子,该篇文章发表在2016年,文章的会议一般,但比较有代表性。

  • Kolosnjaji B,Zarras A,Webster G,et al. Deep learning for classification of malware system call sequences[C] // Australasian Joint Conference on Artificial Intelligence. Springer,Cham,2016:137-149.

下图展示了该方法的整体流程图。PE文件进入后,直接进入Cuckoo沙箱中,它是一个开源沙箱,在学术论文中提取动态特征比较通用;接着进行进行预处理操作,将文本转换成向量表示的形式,比如提取了200个动态特征,可以使用200维向量表示,每个数组的位置表示对应API,再将所得到的序列输入卷积神经 络LSTM进行分类,最终得到家族分类的结构。

  • Cuckoo沙箱
  • LSTM

下图展示了实验的结构,其指标是高于单纯的神经 络和卷积 络的效果更好,这是一篇比较基础的文章。

Fireeye使用了三个数据集进行训练和测试,其训练的模型分类效果结果如下表所示,博客Small、Baseline、Baseline+Dropout模型,其 络结构是一样的,其中Small表示使用小的数据集,Baseline表示使用大的数据集,Dropout表示对训练好的神经 络中随机丢弃一些神经元,从而抑制过拟合现象,也是比较常用的深度学习技术。


6.优缺点

静态特征

  • 优点
    特征提取速度快
    特征种类丰富,可以组合多种特征向量
  • 缺点
    易受加壳、加密、混淆干扰
    无法防范无文件攻击,难以反映恶意软件行为的恶意性

动态特征

  • 优点
    提供恶意软件的动作,调用API
    规避一些静态的混淆对抗方法
  • 缺点
    反虚拟化,延时触发等技术的对抗
    测试时间较长,单个样本2-3分钟(Cuckoo)

最后给出推荐资料:

  • 404notfound实验室总结的AI在安全领域应用
    https://github.com/404notf0und/AI-for-Security-Learning
  • malware data science书籍
    https://www.amazon.com/Malware-Data-Science-Detection-Attribution-ebook/dp/B077X1V9SY


7.静态分析和动态分析对比

恶意代码的检测本质上是一个分类问题,即把待检测样本区分成恶意或合法的程序。基于机器学习算法的恶意代码检测技术步骤大致可归结为如下范式:

  • 采集大量的恶意代码样本以及正常的程序样本作为训练样本;
  • 对训练样本进行预处理,提取特征;
  • 进一步选取用于训练的数据特征;
  • 选择合适的机器学习算法训练分类模型;
  • 通过训练后的分类模型对未知样本进行检测。

深度学习作为机器学习的一个分支,由于其可以实现自动化的特征提取,近些年来在处理较大数据量的应用场景,如计算机视觉、语音识别、自然语言处理时可以取得优于传统机器学习算法的效果。随着深度学习在图像处理等领域取得巨大的成功,许多人将深度学习的方法应用到恶意软件检测上来并取得了很好的成果。实际上就是用深度神经 络代替上面步骤中的人为的进一步特征提取和传统机器学习算法。根据步骤中对训练样本进行预处理的方式,可以将检测分为静态分析与动态分析:

  • 静态分析不运行待检测代码,而是通过直接对程序(如反汇编后的代码)进行统计分析得到数据特征
  • 动态分析则在虚拟机或沙箱中执行程序,获取程序执行过程中所产生的数据(如行为特征、 络特征),进行检测和判断。

(1) 静态分析
一般来说,在绝大部分情形下我们无法得到恶意程序的源代码。因此,常用的静态特征包括程序的二进制文件、从使用IDA Pro等工具进行反汇编得到的汇编代码中提取的汇编指令、函数调用等信息,另外基于字符串和基于API调用序列的特征也是比较常见的。文献[i]提出一种对PE文件的恶意程序检测方法,提取PE文件四个类型的特征:字节频率、二元字符频率、PE Import Table以及PE元数据特征,采用包含两个隐藏层的DNN作为分类模型,但是为了提取长度固定的输入数据,他们丢弃了PE文件中的大部分信息。文献[ii]使用CNN作为分类器,通过API调用序列来检测恶意软件,其准确率达到99.4%,远高于传统的机器学习算法。然而,当恶意代码存在混淆或加壳等情形时,对所选取的静态特征具有较大的影响,因此静态分析技术本身具有一定的局限性。

(2) 动态分析
利用虚拟机或沙箱执行待测程序,监控并收集程序运行时显现的行为特征,并根据这些较为高级的特征数据实现恶意代码的分类。一般来讲,行为特征主要包括以下几个方面:文件的操作行为;注册表键值的操作行为;动态链接库的加载行为;进程访问的操作行为;系统服务行为; 络访问请求;API调用。文献[iii]通过API调用序列记录进程行为,使用RNN提取特征向量,随后将其转化为特征图像使用CNN进行进一步的特征提取,提取其可能包含的局部特征并进行分类。文献[iv]提出了一个基于动态分析的2层架构的恶意软件检测系统:第1层是RNN,用于学习API事件的特征表示;第2层是逻辑回归分类器,对RNN学习的特征进行分类,然而这种方法的误 率较高。文献[v]提出了用LSTM和GRU代替传统RNN进行特征的提取,并提出了使用CNN的字符级别的检测方案。文献[vi]提出在恶意软件运行的初期对其进行恶意行为的预测,他们使用RNN进行PE文件检测,根据恶意代码前4秒的运行行为,RNN对恶意软件的预测准确率是91%,随着观察的运行时间的增长,RNN的预测准确率也随之提高。可以看到,相对于静态分析,动态分析的过程更加复杂耗时,相对而言采用了较高层次的特征,因此可解释性也较差。

在 络攻击趋于精细化、恶意代码日新月异的今天,基于深度学习算法的恶意代码检测中越来越受到学术界和众多安全厂商的关注。但这种检测技术在现实应用中还有很多尚未解决的问题。例如上面提到的静态分析与动态分析存在的不足,现在发展的主流方向是将静态、动态分析技术进行结合,使用相同样本的不同层面的特征相对独立地训练多个分类器,然后进行集成,以弥补彼此的不足之处。

除此之外,深度学习算法的可解释性也是制约其发展的一个问题,当前的分类模型一般情况下作为黑盒被加以使用,其结果无法为安全人员进一步分析溯源提供指导。我们常说攻防是息息相关的,螺旋上升的状态。既然存在基于深度学习的恶意代码检测技术,那么自然也有基于深度学习的或者是针对深度学习的恶意代码检测绕过技术,这也是近年来研究的热点问题,那么如何提高模型的稳健性,防止这些定制化的干扰项对我们的深度学习算法产生不利的影响,对抗生成 络的提出或许可以给出答案。


三.机器学习算法在工业界的应用

首先普及一个概念——NGAV。NGAV(Next-Gen AntiVirus)是下一代反病毒软件简称,它是一些厂商提出来的新的病毒检测概念,旨在用新技术弥补传统恶意软件检测的短板。

  • 多家杀毒引擎厂商将机器学习视作NGAV的重要技术,包括McAfee[11], Vmware[9], CrowdStrike[10], Avast[6]
  • 越来越多的厂商开始关注机器学习技术,并发表相关的研究(卡巴斯基[7],火眼[8]),火眼还是用机器学习技术对APT进行分析(组织相似度溯源)

越来越多的安全厂商将机器学习视为反病毒软件的一个关键技术,但需要注意,NGAV并不是一个清晰的定义,你没法去界定一个反病毒软件是上一代产品还是下一代产品。衡量反病毒软件的性能只有对恶意软件的检测率、计算消耗、误 率等,我们只是从现状分析得到越来越多安全领域结合了机器学习。

作为安全从业人员或科研人员,机器学习技术也是我们必须要关注的一个技术。

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2021年8月16日
下一篇 2021年8月16日

相关推荐