APP下载

基于深度学习的恶意软件检测技术研究①

2023-05-30王海宽

关键词:多态静态加密

王海宽

(晋城职业技术学院,山西 晋城 048026)

0 引 言

随着互联网科技的高速发展,网络也开始慢慢渗透到了人类的日常生活,并变成了许多人生活中不可或缺的部分。不过,网络本身所具备的开放性也给使用者提供了极大的安全隐患。很多非授权的攻击者对网络进行入侵,从而实现不法获利的目的,这里面最普遍的表现形式之一就是恶意软件[1]。

恶意软件,一般指的是在未明确提醒使用或没有应用授权的情形下,在用户电脑或其他终端上强制安装程序,执行非法负载,严重损害了用户合法权益的应用软件。它通常具备以下特征:自动运行,强制安装,难以卸载,非法获取用户个人信息和其它损害用户知情权和选择权的故意行为[2]。

恶意软件有不同的类型,包括病毒、蠕虫、特洛伊木马、Rootkit和勒索软件等。每一种恶意软件类型和家族的设计,以不同的方式影响原始的受害者机器,如破坏目标系统,允许远程代码执行,窃取机密数据等。

早期的恶意软件是为了简单的目的而编写的,因此更容易被检测到,这种恶意软件可以定义为传统的恶意软件。然而,随着攻击技术的不断发展,可以在内核模式下运行的恶意软件及其变体越来越常见。这种类型的恶意软件比传统的恶意软件更具破坏性,同时也更加具有隐蔽性,可以被定义为新一代恶意软件[3]。这类恶意软件可以很容易地绕过在内核模式下运行的保护软件,如防火墙、杀毒软件等。通常,传统的恶意软件包含一个进程,不使用复杂的技术隐藏自己。相反,新一代恶意软件同时使用多个不同的现有或新进程,并使用一些模糊技术隐藏自己,在系统中成为持久的。新一代的恶意软件可以发起更具有破坏性的攻击,如有针对性的和持久的,这是以前从未见过的,并在攻击期间使用多种类型的恶意软件[4]。

首先对恶意软件中常见的混淆技术做简单的说明,然后分析常用的恶意软件混淆技术及特征;其次对恶意软件监测技术加以阐述,并对常用的恶意软件监测方式加以总结;最后提出一种基于计算机视觉与深度学习的Windows恶意软件同源性检测方法。

1 恶意软件混淆技术

攻击者在生成恶意代码时经常会使用到一些混淆技术来逃避检测,这给恶意软件的检测带来了很大的挑战。目前的恶意软件经常使用到的混淆技术包括加密、寡态、多态、变形和打包技术,这使得恶意软件可以轻松绕过防火墙与杀毒软件等保护程序。

1.1 加密(Encryption)

加密是最简单的恶意代码加壳方式,使用加密技术将恶意代码块隐藏在其整个代码段中,通过隐藏恶意代码段特征来绕过检测,从而实现恶意软件的隐蔽性[5]。尽管应用密码学的相关技术使得检测器无法直接接触到恶意软件,但解码器被作为新的特征用于加密的恶意软件检测。

1.2 寡态(Oligomorphic)

在寡态方法中,加密和解密恶意软件的有效载荷时使用不同的密钥。寡态的核心在于解码器,根据解码器的不同可以产生不同的恶意代码变种。这种动态的特征改变使得经过寡态方法处理的恶意软件相比使用加密方法处理的恶意软件更加难以检测。但由于解码器库有限,产生的恶意软件变种也是有限的,依然具备一些可以被识别到的特征码。

1.3 多态(Polymorphic)

在多态方法中,恶意软件同样使用不同的密钥加密和解密[6],与寡态方法中使用的密钥类似。但是,加密的有效负载部分包含解码器的几个副本,可以进行多轮层次加密。与寡态恶意软件相比,多态技术通过突变引擎产生不同的解码器之间的组合,理论上可以产生无数种恶意软件变种,使得恶意软件相比于寡态技术更难检测。多态技术的缺陷在于无法有效应对基于动态的恶意软件检测技术。

1.4 变形(Metamorphic)

变形技术又称为“体多态”(Body-polymorphic)。在变形方法中,恶意软件不通过加密技术来隐藏其恶意特征,而使用动态代码来实现代码的混淆。当恶意进程执行时,操作码在每次迭代都会被更改,导致当恶意代码每次被加载到内存中被执行时都是不同的版本,从而逃避基于特征码的检测。虽然现有研究表明,对基于变形技术的恶意代码检测是NP完全问题[7],但是这也意味着生成并调试这样的恶意代码需要付出更大的代价,因此该技术并未被广泛应用于恶意代码的加壳中。

1.5 打包(Packaging)

打包技术通过压缩恶意软件来绕过检测,或者通过加密来隐藏实际的代码。要想实现对打包恶意软件的分析,需要在被分析之前解包。恶意软件打包的实现可以分为四个部分,包括压缩机、加密器、保护器和捆绑器。

2 相关工作

将常见的恶意软件检测方法分为两类进行介绍:静态检测方法和动态检测方法。其中,静态的方法会利用文件结构信息(例如:字节序列)来确定其是否是恶意软件,动态的方法会利用程序运行状态下的信息(例如:系统堆栈行为)来判定其是否是恶意软件。将两者结合来对恶意软件进行检测的方法称为混合态的方法。

动态检测方法尽管具有非常高的准确率,但需要对已经处于运行状态的程序进程进行监控,耗时较长且效率较低,不利于对恶意软件的及时发现与处理。而静态检测的方法虽然可以很好地弥补这一缺陷,但传统的静态检测方法往往需要依赖数量巨大的病毒库,并且很难检测出未知的新型恶意软件,同时,其对于加入了混淆技术的恶意软件变体也难以准确判断。

2.1 静态的检测方法

在静态分析中,文件结构信息(如字节序列等)被用来揭示恶意软件的行为,同时防止操作系统在不执行它的情况下受到恶意破坏。然而,传统的静态方法往往依赖于大规模的病毒数据库,因此有时很难识别未知的恶意软件。此外,在静态分析中还有一个致命的问题,当攻击者使用代码混淆技术(如二进制打包器、加密或自修改技术)时,恶意软件的检测效率不高。

Schultz等人[8]首次将数据挖掘的概念引入恶意软件的检测工作当中,相比传统的基于签名的检测方法取得了更高的检测率。他们使用静态特征来识别恶意软件,这些特征包括可执行文件(PE)、字符串和字节序列。Kruegel等人[9]提出了一种基于二进制码的控制流图 (Control Flow Graph)结构信息的指纹技术,用于检测在互联网中传播并变异的多态蠕虫。该研究还表明,控制流图有一个固有的优势,即指令级别的变化不会影响生成的流图。Gu等[10]将研究的重点放在恶意文档中,利用熵分析的思想,结合小波分析的方法,提出了一种基于小波变换的恶意文档检测方法。使用小波分析从原始数据中提取特征,以检测复合文档是否嵌入恶意代码,该方法可以有效地避免结构变化对检测结果的影响。随后,Nguyen等人[11]认为由最先进的二进制分析工具(如IDA Pro)生成的典型CFG格式并不能准确地反映动态执行内容的行为。此外,从二进制文件执行和分析CFG的成本非常高,这一缺陷导致形式行为分析方法实际上不适用于实际应用程序。因此,作者在Schultz所作研究的基础上提出了一种增强形式的CFG用于恶意软件检测,将用于描述恶意软件行为的形式化方法和深度学习技术进行结合。然而,如何有效生成高复杂度的CFG依然是一个问题。

近年来,静态的分析方法通常用来检测安卓端的恶意软件。Peiravian等人[12]通过使用权限和API调用作为特征来对每个应用程序进行表示,使用基于人工智能技术的方法来检测恶意安卓应用程序。这一方法的好处在于它不包括对任何系统的动态追踪,而是仅仅使用静态分析。作者强调该方法可以推广到所有移动端APP,并可用于未知APK的识别和分类。

2.2 动态的检测方法

在动态分析中,通过分析程序运行状态中的信息(如API调用序列)来识别恶意软件。与静态分析相比,动态分析具有较高的精度,但检测成本较高。

Bayer等人[13]提出了一种可以根据恶意二进制文件的行为,有效地、自动地对大量恶意二进制文件进行聚类的恶意软件检测方法。结果表明,这种技术能够识别和分组行为相似的恶意软件程序,并取得了较好的精度。几年后,Huang等人[14]提出了一种用于动态恶意软件分类的多任务深度学习架构,在对恶意软件和正常软件进行二分类的基础上,进一步进行恶意软件的家族分类。他们从恶意和正常软件的动态分析中提取数据,在450万个文件上进行了训练,并在200万个文件的测试集上进行了测试,在训练规模上取得较大突破,最终在将二分类错误率降低到0.358%,同时将恶意软件族分类错误率降低至2.94%。Kim等人[15]利用恶意软件的行为序列(API调用序列)和多序列比对(MSA)算法对恶意软件进行检测,作者强调,该方法能够有效检测使用了混淆、打包、反虚拟化、反仿真、封装等多种规避技术的恶意软件,并实现了较高的准确率。Sethi等人[16]利用Cuckoo沙箱对恶意软件进行动态分析,在一个隔离环境中执行恶意软件,并根据执行过程中的系统活动生成分析报告。然后采用不同的机器学习算法来实现精确的检测和分类,并通过他们的框架取得了较好的实验效果。此外,作者还提出了一个特征提取和选择模块,该模块从动态分析生成的报告中提取特征,并选择最重要的特征,在确保高精度的同时保重最小的计算成本。Jeon等人[17]将研究的视角放在物联网(IoT)中,针对物联网的恶意软件检测工作,提出了一种IoT恶意软件检测的动态分析方法(DAIMD),对云环境下的物联网恶意软件进行动态分析,提取内存、网络、虚拟文件系统、进程、系统调用等相关行为。作者构建了一种基于操作码序列的卷积循环神经网络,将一个很长的操作码序列转换成一个相对较短的压缩序列。然后利用动态循环神经网络分类器进行预测。

3 恶意软件同源性检测方法研究

将可视化技术与深度学习相结合并应用于恶意软件同源性检测的方法继承了传统的恶意软件检测技术的优点,同时更加高效。可视化技术的可行性在于,大多数恶意软件的变体通常是通过使用自动化技术生成的,这些变种的二进制代码存在一些共通之处,研究者利用这一点将恶意软件的检测问题转化到图像的识别问题,将软件的同源性转化到图像的相似性[18]。

3.1 数据来源

所使用的实验数据来自BIG2015数据集。BIG 2015恶意软件数据集是一个真实的恶意软件数据集,由Kaggle官方平台在2015年的恶意软件分类竞赛中所提供,其中包含了来自9个恶意软件家族的共计10868个恶意软件样本,每一个样本包含一个纯净字节码文件(Bytes文件)和一个汇编程序源文件(Asm文件),且均已被标记。其具体信息如表1所示。

表1 BIG 2015恶意软件数据集描述

3.2 恶意软件的可视化方法

为了将恶意软件样本转化为图像,将一段恶意代码以8位无符号整数读取并转化为二维数组,每8位都映射到一个范围为[0,255](0:黑色,255:白色)的像素,将整个恶意软件样本进行以上处理,并对小于图像尺寸的样本进行填充,对大于图像尺寸的样本进行裁剪。所使用的图像大小为224*224*3的RGB彩图,其所包含的恶意软件代码段大小为147KB。

恶意软件不同家族样本经过可视化处理后的图像如图1所示。

3.3 基于Transformer的检测框架

深度学习模型表现的提升很大程度上源自于更大、更深的深层神经网络,但是也需要付出巨大的训练代价。作为经典的深度学习算法,传统的卷积神经网络已经在可视化的恶意软件识别与家族分类任务中证明了其有效性,但是随着Vision Transformer(ViT)的出现与应用,一种新的基于Transformer的检测思路也随之出现[19]。使用标准的Transformer Encoder,在通过大规模数据集预训练的情况下用小数据集对模型进行微调就已经可以达到和卷积神经网络一样甚至更佳的效果。相较于从头开始训练一个卷积神经网络模型而言,这种方法将会更加高效,并且也可以有效提升对恶意软件的检测精度。

此外,Vision Transformer的实现过程基于自注意力机制,能够帮助模型对重要信息重点关注并充分学习。为了精准高效地对恶意软件进行识别与家族分类,我们提出了一个将Transformer Encoder作为主干网络深度学习框架来挖掘恶意软件同源性特征。

使用的Transformer结构如下图2所示。

图2 Vision Transformer架构

3.4 模型训练

使用ViT-B16结构,采用ImageNet-21K上的预训练模型载入初始权重,并训练50个epoch。

训练过程中使用交叉熵损失函数,定义如式(1):

(1)

式(1)中K表示分类任务的类别数,在本实验下K=9。

按照6:2:2的比例将数据集划分为训练集,验证集和测试集。训练过程中的准确率曲线如下图3所示,训练过程中的loss值变化曲线如图4所示。

图3 训练过程准确率曲线

图4 训练过程loss曲线

最终得到的模型在测试集上的准确率为95.81%,F1值为95.73%。

4 结 语

为了维护用户的个人财产安全,保护用户个人隐私,使用户免受恶意软件的侵害,恶意软件的检测任务所具有的重要性与价值不言而喻。早期的恶意软件检测技术无法有效应对日益严峻的挑战,随着时间的推移,研究人员提出了新的方法,数据挖掘和机器学习(ML)算法也开始广泛应用于恶意软件检测。近年来,深度学习、云等新方法相继被提出,并逐渐应用于移动设备、物联网等领域。

动态检测方法尽管具有非常高的准确率,但需要对已经处于运行状态的程序进程进行监控,耗时较长且效率较低,不利于对恶意软件的及时发现与处理。静态方法往往依赖于大规模的病毒数据库,在面对未知的恶意软件时往往出现漏报,此外,静态的检测方法在恶意软件应用混淆技术的情况下检测效率不高。恶意软件根据不同的情形与不同的需求,恶意软件检测技术研究的侧重点也不尽相同,因此要想在兼顾正确性(误报率、漏报率)的同时保证实时性,构建有效且高效的恶意软件检测方法是一项非常具有挑战性的任务,对新的研究和方法有巨大的需求。

猜你喜欢

多态静态加密
分层多态加权k/n系统的可用性建模与设计优化
最新进展!中老铁路开始静态验收
参差多态而功不唐捐
一种基于熵的混沌加密小波变换水印算法
猜猜他是谁
认证加密的研究进展
人多巴胺D2基因启动子区—350A/G多态位点荧光素酶表达载体的构建与鉴定及活性检测
基于ECC加密的电子商务系统
具7μA静态电流的2A、70V SEPIC/升压型DC/DC转换器
基于格的公钥加密与证书基加密