基于二进制重构的恶意函数异常检测方法

田杨 ,  彭国军 ,  杨秀璋 ,  刘思德

武汉大学学报(理学版) ›› 2024, Vol. 70 ›› Issue (4) : 463 -472.

PDF (1295KB)
武汉大学学报(理学版) ›› 2024, Vol. 70 ›› Issue (4) : 463 -472. DOI: 10.14188/j.1671-8836.2023.0023
网络空间安全

基于二进制重构的恶意函数异常检测方法

作者信息 +

Anomaly Detection Method of Malicious Function Based on Binary Reconstruction

Author information +
文章历史 +
PDF (1325K)

摘要

近年来,恶意软件检测方面的工作不断取得进展,但缺乏深入检测恶意软件内部恶意组件的方法。传统的基于人工签名与基于机器学习的检测方法难以生效,分析人员需对恶意样本进行漫长的人工逆向分析,再定位恶意组件。为提高逆向分析人员的工作效率,以恶意软件内部具有潜在恶意行为的函数为检测目标,提出一种基于二进制重构的恶意函数异常检测方法:MalMiner。对样本生成过程间控制流程图,根据图中函数具备的统计特点、结构特点和恶意特点提取能够表征该函数的特征。利用无监督的自编码器模型压缩重构的特点,学习正常软件函数的数据特征,并以重构误差为异常分数检测恶意函数。实验结果表明,MalMiner在真实数据集上召回率为0.801 0时准确率达到了0.848 4;与DeepReflect相比,召回率相同而误报率降低了0.157 8,准确率提升了0.145 7;与CAPA相比召回率提高了0.107 1,准确率提升了0.094 2,验证了MalMiner方法的有效性。

Abstract

In recent years, work on malware detection has continued to progress, but methods for detecting malicious components inside malware are insufficient. Traditional detection methods based on manual signatures and machine learning are ineffective. Analysts must conduct tedious manual reverse analysis of malicious samples to locate malicious components. To improve the efficiency of reverse analysts, a malicious function anomaly detection method based on binary reconstruction, MalMiner, is proposed, which targets functions with potential malicious behavior inside malware generating interprocedural call graphs from samples and extracting features that can characterize the function, according to the statistical characteristics, structural characteristics and malicious characteristics of the function in the graph. Simultaneously, the characteristics of unsupervised autoencoder model compression and reconstruction are leveraged to understand the data characteristics of normal software functions. The reconstruction error serves as an anomaly score to detect malicious functions. The experimental results show that the recall rate is 0.801 0,and the accuracy rate of MalMiner on the ground truth dataset reaches 0.848 4 . Compared with DeepReflect, the recall rate is the same,and the false positive rate is reduced by 0.157 8,and the accuracy rate increased by 0.145 7. Compared with CAPA, the recall rate is improved by 0.107 1, and the accuracy rate increased by 0.094 2, which verified the effectiveness of the MalMiner method.

Graphical abstract

关键词

恶意软件检测 / 恶意代码 / 逆向分析 / 深度学习 / 二进制重构

Key words

malware detection / malicious code / reverse analysis / deep learning / binary reconstruction

引用本文

引用格式 ▾
田杨,彭国军,杨秀璋,刘思德. 基于二进制重构的恶意函数异常检测方法[J]. 武汉大学学报(理学版), 2024, 70(4): 463-472 DOI:10.14188/j.1671-8836.2023.0023

登录浏览全文

4963

注册一个新账户 忘记密码

0  引 言

在恶意软件分析过程中,逆向分析是非常重要的方法。常用的恶意软件分析方法如反病毒引擎扫描、沙箱动态分析[1]等可以快速获得结果,但不能保证完全有效,可能是由于混淆、沙箱规避[2]、rootkit[3]等对抗技术错过某些关键细节,最终仍需进行逆向分析。此外,目前的自动化分析方法所得结果粒度较粗,为了深入了解恶意软件的实现原理、攻击路径、影响范围等重要信息,研究人员也需要对恶意软件进行针对性的逆向分析。然而,目前的恶意研究工作对繁琐的逆向分析过程帮助有限,这些工作主要针对恶意软件整体性质进行判断,例如进行基于特征的[4~6]、基于行为的[7~9]或混合的检测[10~12],判断待测程序的恶意性、类型、家族等。若存在某种工具能够针对恶意软件提供具有恶意行为的函数列表,即检出内部的恶意函数,定位样本内部恶意代码所在区域,分析人员的注意力就能快速聚焦在关键函数上,工作量可以大大减少。即使对恶意函数的检出有部分漏报或者误报,成功检出的恶意函数也是重要的突破点,可以上下关联,梳理逻辑。因此,针对恶意软件内部组件进行检测,对逆向分析具有十分重要的现实意义。

现有的内部组件检测方面的研究工作较少,主要有基于自编码器的方法[13]与基于人工签名的方法[14]。Downing等[13]提出了基于二进制重构发现恶意功能的方法DeepReflect,备受学术界关注。该方法基于控制流程图(Control Flow Graph,CFG)提取基本块的特征,使用自编码器模型进行训练和预测,识别可能具有恶意功能的基本块,这些基本块正是分析人员关注的区域(Regions of Interest,ROI),具有多个ROI的函数则可能是具有恶意功能的函数。此外,FLARE团队开发的工具CAPA[14]在工业界受到高度认可。该工具通过人工签名识别样本内部的恶意代码,借助开源社区收集启发式规则,在反汇编样本的基础上,对字节码、字符串、汇编代码、静态结构等特征进行匹配。

虽然基于自编码器的方法和人工签名的方法在样本内部组件的检测上取得了较好的效果,但仍存在一些问题。一方面,基于深度学习的方法将关注区域聚焦在了基本块而不是函数。由于基本块是线性的代码序列[15],承载的逻辑有限,且与函数相比无法代表整个功能,因此对恶意功能的检测效果较差。此外,特征的提取没有充分考虑到恶意代码的特点与恶意代码之间的关系,不能很好地表征代码的恶意性。另一方面,基于人工签名的方法虽然检测速度较快,但缺少泛化能力,难以检测未知的恶意函数,且依赖于后续维护,增大了工作负担。

针对以上问题,本文提出基于二进制重构的恶意函数异常检测方法MalMiner。本文的主要贡献如下:

1) 提出了一种基于过程间控制流图[16](Interprocedural Control Flow Graph,ICFG)的函数特征提取方法。综合CFG与函数调用图(Call Graph,CG)的优点,跨越基本块与函数两个层次,提取函数内部的统计特征与函数之间的结构特征,并且将恶意软件密切关联的静态代码结构作为恶意特征,实现了对函数信息,特别是恶意函数信息的有效表征。

2) 提出了一种基于函数特征的恶意函数检测方法。基于能够有效表征函数信息的特征,构建学习了正常样本良性特征的自编码器模型,并通过模型在恶意软件的函数特征重构误差进行函数的恶意性判定。

3) 实现了基于MalMiner方法的检出恶意软件内部恶意函数的系统。

1  相关工作

目前,对恶意软件的检测工作主要是对恶意软件整体性质进行判断,具有代表性的科研工作总结如表1

从检测手段的角度划分,目前针对恶意软件的检测方法主要可以分为三类,分别是基于特征的检测方法、基于行为的检测方法以及混合的检测方法。

1) 基于特征的检测方法主要是对恶意代码生成签名特征,通过对文件、扇区、系统内存等进行静态匹配的方式来检测恶意代码。优点是检测速度快,针对已知恶意软件效果良好。文献[4]提出了一种基于CFG的恶意软件分类模型。由恶意软件二进制文件生成CFG,然后与已知恶意文件的CFG进行匹配。文献[6]使用静态分析工具分析Windows环境的可移植性可执行(Portable Executable,PE)文件,并提取DLL导入表、十六进制内存转储和反汇编代码等特征,然后训练支持向量机(Support Vector Machine,SVM)和K-近邻算法(K-Nearest Neighbor,KNN)进行检测。

2) 基于行为的检测方法利用恶意软件执行过程中的恶意行为进行检测,包括网络行为、文件行为和注册表行为。这种检测方法还可以识别新的恶意软件,因为不同的恶意软件变体可能存在相似的恶意行为。此外,基于行为的方法还能应对经过混淆的恶意软件。文献[7]在虚拟环境中运行恶意软件,提取行为信息,用文件操作、网络活动、注册表项更改和内存操作来描述恶意软件样本。使用SVM进行分类,用逻辑回归和层次聚类技术按照相同特征对恶意软件进行家族分类。文献[8]提出了基于可执行文件的内存镜像的检测技术。使用虚拟机执行恶意软件样本,并创建内存的三维图像,以查找与已知恶意软件的相似性。

3) 基于特征和行为的技术既有优点又存在局限性,因此研究人员提出了混合的恶意软件检测方法,同时利用静态和动态的恶意软件检测方法的优点。文献[10]提出了一种集成性的恶意软件检测方法。将二进制文件反汇编,提取可打印的字符串信息。然后通过Cuckoo沙箱执行二进制文件,提取与文件系统、注册表修改、特殊进程和内存地址相关的API系统调用。最后,利用随机森林(Random Forest,RF)和SVM模型训练恶意软件分类器。文献[12]提出了一种使用包装互补滤波器和特征选择的混合技术。作者选择了最大和最小相关特征,然后使用不同的机器学习算法MR+SVM、MRED+SVM和Fisher+SVM对模型进行训练,利用提取的静态特征和动态特征对模型进行训练。

然而,无论是基于特征、行为的方法,还是混合的方法,虽然在对恶意代码检测和分类方面取得了成效,但都没有深入分析恶意代码的内部组件。为了进一步地识别恶意组件,文献[13]提出了基于软件重构的恶意组件识别方法,使用自编码器模型在良性样本的基本块特征上训练,然后利用模型对异常特征具有更高的重构误差的特点识别具有恶意性的基本块,能够检测出恶意软件中80%的恶意组件。这种检测方法具有良好的泛化能力,能够检测恶意代码的内部组件,但是提取的基本块层次的特征蕴含的信息不足,且特征设计不够充分,导致分类能力较差,误报率与漏报率较高。

2  模型设计

2.1 模型概述

设计与架构。MalMiner的架构如图1所示,按照如下的3个过程对函数进行检测:

1) 反汇编。首先对样本进行预处理,过滤无效的PE文件和加壳文件。然后反汇编样本,根据基本块之间和函数之间的结构关系生成ICFG。

2) 特征提取。根据ICFG上函数之间的关系提取结构特征,然后通过每个函数具体的基本块信息提取统计特征与恶意特征,最终使用多维度的特征表征函数信息。

3) ROI检测。使用自编码器模型在良性样本上训练出对正常行为重构误差小的模型,然后根据模型在恶意样本上各函数的重构误差识别可能具有恶意功能的函数,即ROI。

训练与检测。ROI检测过程可分为训练与检测两个阶段,通过训练学习良性样本的数据特征,然后通过对恶意软件的检测发现具有恶意功能的函数。

在训练阶段,将每个良性样本的函数特征送入自编码器中进行训练。本文的自编码器的模型为U-Net[17],如图2所示,左侧为编码器,右侧为解码器,输入数据经过下采样得到高级语义特征,再由解码器上采样恢复原始目标。该模型的优点是,它在压缩与重构过程中设有跳过连接(skip-connection),自编码器可以使用该连接跳过某些特征,从而在重构样本中获得更高的保真度。在训练过程中,自编码器会对样本中的每个函数特征进行压缩,然后重构函数特征,以重构损失最小化为目标函数,最终使训练完成的模型对于正常样本的良性函数具有较小的重构误差。

在检测阶段,以远控木马灰鸽子为例,首先提取灰鸽子的所有函数特征,然后通过训练好的自编码器模型对灰鸽子的特征执行压缩重构的任务,灰鸽子中执行正常功能的函数的重构误差较小,而执行屏幕监控、键盘监控等恶意功能的函数则会表现出较大的重构误差。这些函数的重构误差超过了一定阈值,将被标记为恶意的,从而被MalMiner成功检出。

概念定义。在本文中,恶意函数是指具有潜在恶意行为的函数。例如,恶意软件会将恶意功能封装在某些函数中,如规避沙箱功能、键盘记录功能、远程命令控制功能等,这些具有恶意功能的函数正是本文关注的目标。然而,仅仅通过函数的功能判断恶意性是不够准确的,例如屏幕监控功能,既可能出现在木马中,也可能出现在录屏软件中。因此,本文进一步通过函数的结构特点对函数的恶意性进行判断,即通过函数周围的函数,函数在恶意软件中的重要性来为恶意函数的判断提供信息。

2.2 特征提取

本文将特征分为结构特征、统计特征与恶意特征。结构特征代表了函数在样本内部的位置特性,统计特征描述了函数内的局部特点。一些特殊的静态结构在恶意代码中具有较高的出现频率,例如循环、跨函数节跳转、非零异或等,这些“恶意特征”与恶意功能密切关联。由于提取上述特征需要完整的ICFG,因此,本文将这种特征称为带属性的过程间控制流图(Attributed Interprocedural Control Flow Graph,AICFG)特征。

AICFG特征的各组成部分见表2,其具体作用如下。

结构特征。本文用CG图中每个函数的后继函数个数以及函数的介数中心性来描述函数的结构特性。其中介数中心性的含义是,在图上两两节点之间构建的所有最短路径中,目标节点处于最短路径的次数。一个有更高介数中心性的节点在网络中有更强的控制能力,因为更多的信息传递时将通过该节点[18]。这些结构特征能够反映函数的控制流结构特性,例如用于功能调度的函数a有多个后继子函数,其控制流结构呈多叉树型,而用于解密的函数b会不断选择数据块进行解密,在几个子函数中循环,其控制流结构呈环形。函数a与函数b的后继函数个数与介数中心性都会不同。

指令统计。本文对函数中的6种类别的指令进行计数,每种类别的指令与特定的功能相关。基本算数指令(如add、sub、mul)、移位指令(如sal、shl)、逻辑指令(如and、or、xor),这三类指令与数学运算相关,反映了函数中计算方面的特性(例如,加解密相关的函数会使用大量的xor指令与移位指令)。栈操作指令(如pop、push)、寄存器操作指令(如lea、mov、lods)、端口操作指令(如in、out),这3类指令与数据转移相关,反映了函数中参数、函数调用返回值、内存数据与函数内部其他数据的交互情况(例如,C&C相关的函数会使用大量栈相关的指令,因为它需要调用很多其他函数)。

API调用统计。本文对函数中10种API调用进行计数,分别是文件系统、注册表、网络、DLL、对象、进程、服务、同步、系统信息和时间。API调用体现了函数的功能,在逆向分析过程中相当重要。这10种类别的划分来自于已有的恶意软件分类的工作[19],每一种类别的API调用都反映了函数在相应类别的行为,例如进程行为、注册表行为、网络行为,这些行为在恶意软件中也广泛出现。

恶意特征。在函数层次的信息中,除了指令、API、字符串等信息由于反映了函数本身的特性而需要统计,还有一些相对间接的静态特征与恶意代码有着紧密的联系。受CAPA[14]中用于识别恶意软件的静态特征的启发,本文对函数中6种相对间接的静态特征进行计数,分别是循环次数、栈字符串操作、非零异或、跨函数节跳转、段寄存器访问和间接调用。这些间接的特征可以在汇编代码中通过简单的静态规则识别。例如,当一个基本块的尾部跳转到了该基本块的头部,就可以判断该基本块产生了循环(这是一种最基本\最直接的循环)。在某些恶意函数中这些特征通常存在,例如检查断点这一行为会循环检查“0xCC”字节,加解密行为会频繁使用非零异或,检查调试器行为通常会访问段寄存器等。

由于自编码器的模型大小是固定的,所以每个二进制文件的特征维度也应当是固定的。因此,可以用m×c的矩阵表示一个二进制文件的特征,即二进制文件的前m个函数,每个函数提取c维向量。具体来说,每个样本将保留前8 192(213)个函数的特征,这是因为观察数据集发现,样本的函数个数呈长尾分布,超过95%的函数个数少于8 192,选取前8 192个函数兼顾了性能与信息量。此外,由于特征提取依赖于反汇编,而不同的反汇编引擎由于处理算法、边界定义的不同,取得的函数分割结果也可能不同。为确保函数分割的一致性,本文始终使用SMDA引擎[20]对样本进行反汇编。

2.3 ROI检测

ROI检测的目标是自动检测恶意软件二进制程序中的恶意函数,从逻辑上对函数的恶意性进行判断,而不仅仅检测该功能的特定签名。例如,对具有虚拟机绕过功能的函数,通过该函数相对于正常函数的差异识别出来,而不是检测该函数是否具有规避相关的API,如SleepEx()等。这样能够避免生成与更新签名的工作负担,不依赖逆向工程领域的专业知识,方便分析人员开展工作,快速指出样本中执行恶意操作的函数。

训练与检测过程依赖自编码器模型。自编码器M是一种无监督的神经网络模型,由编码器和解码器构成。编码器将输入样本x压缩为中间变量zz包含了输入数据的隐含特征,接着解码器将z重构为x^。自编码器求解输入输出的相似性误差,通过对比输入输出使两者无限接近,在这个过程中学习与总结输入样本的分布特征:

f:xz
g:zx^
f,g=argminf,g(x-g(f(x)))2

给定一个ROI检测任务,可以通过计算均方误差(Mean Squared Error, MSE)量化重构误差,对于样本m个函数中的每个函数,如果MSE超过了阈值ϕ,就可以认为该函数是恶意函数。函数均方误差(Function Mean Squared Error,FMSE)的计算公式如下:

FMSE(x(k),x^(k))=1n(xi(k)-x^i(k))2

其中x(k)表示样本内m个函数中第k个函数特征向量,xi(k)的下标i表示n维特征向量中第i维特征值。

本文假设,相比于良性软件,恶意软件具有不同的特性,这些特性能够在函数层面体现。由于自编码器数据相关(data-specific)的特点[21],通过在大量的、不同的良性软件上训练M,M能够学习不同良性样本的正常函数的数据特征,提取其中最具有代表性的信息,对恶意函数进行异常检测。

3  效果评估

本节将验证AICFG函数特征的合理性与有效性,通过实验评估AICFG特征各组成部分的效果,并与相关领域的其他特征进行对比实验。同时,将MalMiner方法与目前具有代表性的基于深度学习的恶意功能识别方法DeepReflect和流行的基于签名的恶意功能识别工具CAPA[14]进行比较,验证MalMiner方法的检测效果。

3.1 实验部署

3.1.1 实验数据

本文数据集分为由正常样本组成的良性数据集和由恶意样本组成的真实数据集。良性数据集用于训练,而真实数据集用于评估实验效果。为便于比较,真实数据集来自Downing等[13]的工作,对有源码的恶意软件样本进行静态分析,标注其中的具有恶意功能的函数。这些恶意样本来自于三个家族rbot、pegasus和carbanak,有超过3 000个本地函数(即程序自身构造而非外部引入的函数),其具体分布如表3所示。

对良性数据集而言,样本类别的多样性至关重要。不同类别的程序,其特征差别极大。例如,浏览器与游戏类别的程序,在网络行为、计算行为等方面差异明显。收集大量的不同类别的正常程序能够确保数据集对良性行为的覆盖面。否则一旦样本中的某个良性行为未被数据集覆盖时,那么该行为在检测过程中会被认为是异常的,从而导致误报。

本文的正常程序来自CNET(https://download.cnet.com/windows),包括22种不同类别的PE文件,共有31 678个二进制文件。通过计算文件的MD5哈希值去除数据集中的重复项,确保样本的唯一性。然后使用DIE(https://github.com/horsicq/Detect-It-Easy)检查样本是否加壳,避免被改变了静态特征的加壳程序影响检测效果。此外,还有一些特殊的PE文件需要去除,例如某些PE文件没有函数,本身无法执行任何功能,也没有可提取的函数特征供MalMiner检测;与PE文件格式相似的.NET文件通过Windows的公共语言运行环境(Common Language Runtime,CLR)和.NET框架类库运行,虽然与一般的PE文件结构类似但实际差别极大,因此需要去除。最后,为确保良性数据集中没有恶意程序,通过VirusTotal(https://www.virustotal.com)扫描良性软件,只有当少于3个反病毒引擎的扫描检测结果为恶意时,该软件才被认定为良性的。

最终,共收集了25 567个有效的正常样本,其类别和数量见表4

3.1.2 实验环境与实验参数

本文使用GPU服务器作为实验平台,具体硬软配置如表5

实验过程中,kernel_size设置为24,stride_size设置为1,batch_size设置为10。在模型的训练过程中,轮次(epoch)设为10次,并保存其中结果最优的模型。MalMiner训练完成时取得了3.653 2E-07的训练MSE和3.955 1E-07的测试MSE。

3.1.3 评估指标与验证方法

对函数的重构误差分数应用一个阈值即可进行检测,高于阈值的即为恶意函数。在一次预测任务中,有4种可能结果:1) 真阳(True Positive,TP),该函数是恶意函数,被判定为恶意;2) 假阳(False Positive,FP),该函数是良性函数,被判定为恶意;3) 真阴(True Negative,TN),该函数是良性函数,被判定为良性;4) 假阴(False Negative,FN),该函数是恶意函数,被判定为良性。由于MalMiner的分类性能随着阈值的变化而变化,本文使用ROC曲线图整体评估分类模型的性能,即以不同阈值下假阳率与真阳率为横纵坐标,绘制ROC曲线图,同时对比其他方法的分类性能。坐标的计算具体如下:

1) 假阳率(False Positive Rate,FPR):也称误报率,表示分类结果中,被错误分类为恶意的正常函数占所有正常函数的比例。

FPR=FPFP+TN

2) 真阳率(True Positive Rate,TPR):也被称为召回率、检出率,表示分类结果中,被正确分类为恶意的函数占所有恶意函数的比例。

TPR=TPTP+FN

本文通过ROC的曲线下方的面积(Area under the Curve,AUC)判断分类模型的优劣:当AUC为0.5时,预测结果近似随机猜测,模型没有预测价值;当AUC小于0.5时,预测结果比随机猜测还差;当AUC大于0.5时,表示分类结果优于随机结果,这时对分类模型设置合适的阈值,模型就有预测价值。

准确率(Accuracy,ACC)和精确率(Precision,PRE)的定义如下。

准确率:分类结果中,被正确分类的函数(具有恶意性的函数与正常函数都被正确分类)占所有函数的比例。

ACC=TP+TNTP+FP+TN+FN

精确率:分类结果中,被正确分类的具有恶意性的函数占所有被分类为恶意的函数的比例。

PRE=TPTP+FP

3.2 AICFG特征效果评估

为了评估AICFG特征的合理性与有效性,本节将进行两方面的评估。首先对AICFG的各类组成特征的合理性进行实验验证,然后将AICFG特征与其他两种经典的、具有代表性的特征进行对比实验,验证AICFG特征的有效性。这两种特征分别是:1) ACFG特征,一种经典的特征构造方法,基于CFG将基本块嵌入为向量化的特征;2) DeepReflect中的特征,这种特征针对函数内部的基本块,提取相比ACFG更加拓展与细化的特征。

3.2.1 合理性评估

本小节对AICFG特征的各组成特征进行评估,观察各部分特征对检测结果的影响,判断AICFG的特征构造是否合理。如图3所示,对四种特征组合进行评估,分别是:1) 将指令统计与API调用统计作为基础特征(basic),这类特征刻画了函数的基本属性;2)在基础特征上加入函数结构特征(func),这类特征包含了函数之间的关系;3) 在基础特征上加入恶意特征(mal),这类特征针对恶意代码进行了统计;4) 包含了基础特征、函数结构特征与恶意特征的完整的AICFG特征。

图3的ROC曲线可以看到,当TPR,即召回率到达0.63之前各种特征的检测能力没有明显差异,此后各曲线出现变化。其中,基础特征虽然能够对恶意函数进行有效分类,但检测效果与包含了函数结构等其他信息的特征相比差距较大,这是因为基础特征只包含了函数的指令与API等基本属性,对函数表征不够充分。此外,在基础特征之上分别加入恶意软件特征与函数结构特征都能对分类结果产生正面影响,AUC分别提高了0.012 7与0.030 3。从这两种特征的对比可以看出,函数结构对分类结果带来的提升更大,这表明函数之间结构关系是在函数表征过程中非常重要的属性。而包含了基础特征、函数结构特征与恶意特征的完整的AICFG特征取得了最好的分类效果,相比基础特征提高了0.040 7。可以看出,AICFG特征的各组成部分,指令统计与API调用统计特征、函数结构特征、恶意特征都对检测结果产生了正面影响,从不同角度对函数进行刻画,共同提高分类模型的检测能力。

3.2.2 有效性评估

本小节将AICFG特征与DeepReflect特征、ACFG特征进行对比实验,判断AICFG特征对恶意函数的实际检测效果。各特征的检测结果如图4所示。

实验结果显示,自编码器模型在AICFG特征、DeepReflect特征与ACFG特征上取得的AUC分别为0.911 3、0.816 1和0.718 2,且AICFG特征的曲线始终在其他曲线之上,这表明AICFG特征相比ACFG特征与DeepReflect特征具有更强的分类能力,取得了更好的检测效果。这是因为,1) 另外两种方法从基本块粒度提取特征,而AICFG特征从函数层次构造特征,在语法和语义方面具有更加丰富的信息。具体来说,在提取语法信息方面,AICFG统计了整个函数的指令、API和恶意特征,在语义方面,由于函数本身就代表着样本中的一种功能,所以函数之间的结构关系代表样本功能之间的关系,与基本块的结构关系相比,具有更丰富的语义信息。2) AICFG特征的构造包括了指令统计特征、API统计特征、函数结构特征、恶意特征等多个方面,各组成部分都对检测结果产生了正面影响,从函数的基本属性、函数结构、恶意特性等多个维度对函数进行了刻画。

3.3 MalMiner检测效果评估

为了验证MalMiner对样本内部恶意函数的实际检测效果,本节将与备受学术界关注的恶意功能检测方法DeepReflect以及流行的用于识别恶意能力的开源静态工具CAPA进行对比实验。表6显示了不同的检测方法的准确率、精确率、误报率和召回率。为进一步比较各方法,如表7所示,调整阈值(其中CAPA无法调整阈值)使各方法的误报率接近并测得各项评估指标。

1) 与CAPA相比,MalMiner在各个指标上均取得了显著提升,其中召回率提高了0.107 1,准确率提高了0.094 2,精确率提高了0.102 1。这表明MalMiner不仅比CAPA检出了更多的恶意函数,检测结果也更加精确,产生的误报与漏报更少。CAPA作为一个针对恶意功能的静态检测工具,可以通过人工生成静态特征签名实现对不同的行为的检测。例如,如果一个函数出现了URLDownloadToFile()、URLDownloadToCacheFile()中的任意一个API,CAPA即可通过已有规则判断这个函数具有从URL中读取内容并保存的能力。

MalMiner之所以能够比CAPA取得更好的检测效果,有三个原因。第一,通过无监督学习进行训练并进行异常检测的MalMiner,相比基于签名的CAPA,拥有更强的泛化能力,一个恶意函数中任何与正常行为有差异的地方都会增大重构误差,而逼近检出的阈值。第二,MalMiner根据函数的统计、结构等信息进行检测,这些是函数的固有属性,不会因为缺少未知的恶意函数的签名而无法进行检测,从而获得更广的覆盖面。第三,基于签名的CAPA会将所有与签名匹配的函数判断为恶意的,容易产生误报,而本文的MalMiner通过自编码器模型学习原始数据的特征,如计算特性、数据交互特性等,在语义层面进行了判断。

2) 与DeepReflect相比,在召回率相同的情况(见表6)下,MalMiner在误报率、准确率与精确率三个指标上取得了显著提升,其中误报率降低了0.157 8,而准确率提升了0.145 7,精确率提升了0.112 8。这表明在保持恶意函数检出能力相同的情况下,MalMiner能比DeepReflect实现更精准地检测。这里选择召回率为0.801 0的原因是:一方面,低误报率表示漏报较多,高召回率表示误报较多。对于分析人员而言,如果误报数量偏多,对有限的阳性函数分析即可排除误报的干扰;而假如漏报数量偏多,想要寻找被漏报的恶意函数,需要在大量的阴性函数中寻找。因此,选取高真阳率作为阈值可减少分析人员的工作量。另一方面,从图3图4看召回率为0.8时取得的结果在误报与漏报之间较为均衡,且与最近的基于深度学习的方法指标一致,便于比较。在误报率相似时(应为相同,但实际难以控制完全一致),如表7所示,MalMiner的检出率(召回率)相比CAPA、DeepReflect分别提升了0.229 6与0.188 8,这说明MalMiner的检出能力也更强。效果更优的原因在于,MalMiner基于过程间控制流图,从特征粒度与特征构造两方面进行改进,提取了能良好表征函数信息的特征,可以更好地拟合原始数据并学习其内在规律。

虽然MalMiner误报率不高,但表6所示的0.258 6的精确率说明阳性案例中有相当比例的情况为假阳。实际上,这种误报率低的同时精确率也不高的矛盾情况是因为真实数据集中样本分布不均衡,较多的正常函数误报拉低了精确率。在恶意软件中,与正常函数相比,恶意函数的数量非常少,分析困难,价值却很高。因此在选择阈值时,本文在高召回率与低误报率之间选择了高召回率(0.801 0),即更少的漏报与更多的误报。一定的误报是可以容忍的,被误报的正常函数可以通过分析排除干扰,而被漏报的恶意函数却需要在大量正常函数中去寻找排查。此外0.145 8的误报率表明正常函数的少部分被误报为恶意的,需要进一步分析,而大部分正常函数已被正确识别,从而减少了分析量。更重要的是,逆向分析的重要手段是以恶意性代码为锚点前后关联延伸,本文通过选择高召回率检出了大部分恶意函数,为分析人员提供大量的锚点进行分析与关联。

可以看出,MalMiner通过自编码器在良性样本上的无监督学习,能够在不依赖恶意样本和标签数据进行训练的情况下,在召回率为0.801 0时,准确率达到0.848 4,有效定位样本内部的恶意函数,减少分析人员面对未知样本的搜索空间,从而减轻逆向分析的工作负担。此外,MalMiner相比DeepReflect和CAPA在误报率相近的情况下,准确率、精确率、召回率都较高。更重要的是,由于不依赖有经验的分析人员花费漫长的时间对恶意软件及其内部结构进行标注,MalMiner具有良好的可行性与泛化能力。

4  结 语

为了检测样本内部恶意组件,减少逆向分析过程的工作负担,本文提出了MalMiner,一种基于二进制重构的恶意函数异常检测方法。该方法基于过程间控制流图提取样本的函数特征,使用无监督的自编码器模型学习正常函数的特点,实现针对恶意函数的异常检测,无需标记恶意函数,召回率、准确率较高,误报率较低。但本文工作也存在一定局限性,如精确率不够高,比较容易对正常函数产生误报。未来可以尝试更多的无监督模型进行训练,挖掘其他模型的潜力。此外,还可以对函数特征进行聚类分析,进一步判断函数的功能类别。

参考文献

[1]

周杨.基于行为特征的Windows恶意代码检测与分析[D].北京:中国人民公安大学,2021.

[2]

ZHOU Y. Windows malicious code detection and analysis on behavior characteristics[D]. Beijing:People’s Public Security University of China,2021 (Ch).

[3]

MIRAMIRKHANI NAPPINI M PNIKIFORAKIS Net al. Spotless sandboxes: Evading malware analysis systems using wear-and-tear artifacts[C]//2017 IEEE Symposium on Security and Privacy (SP). New York: IEEE Press, 2017: 1009-1024. DOI: 10.1109/SP.2017.42 .

[4]

张瑜, 刘庆中, 李涛, . Rootkit研究综述[J]. 电子科技大学学报201544(4):563-578. DOI: 10.3969/j.issn.1001-0548.2015.04.016 .

[5]

ZHANG YLIU Q ZLI Tet al. Research and development of Rootkit[J]. Journal of University of Electronic Science and Technology of China201544(4):563-578 (Ch). DOI: 10.3969/j.issn.1001-0548.2015.04.016 .

[6]

BRUSCHI DMARTIGNONI LMONGA M. Code normalization for self-mutating malware[J]. IEEE Security & Privacy20075(2): 46-54. DOI: 10.1109/MSP.2007.31 .

[7]

ZHANG B YYIN J PHAO J Bet al. Malicious codes detection based on ensemble learning[C]//Autonomic and Trusted Computing: 4th International Conference. Berlin: Springer, 2007: 468-477. DOI: 10.1007/978-3-540-73547-2_48 .

[8]

NAGANO Y, UDA R. Static analysis with paragraph vector for malware detection[C]//Proceedings of the 11th International Conference on Ubiquitous Information Management and Communication. New York: ACM, 2017: 1-7. DOI: 10.1145/3022227.3022306 .

[9]

MOHAISEN AALRAWI OMOHAISEN M. AMAL: High-fidelity, behavior-based automated malware analysis and classification[J]. Computers & Security201552: 251-266. DOI: 10.1016/j.cose.2015.04.001 .

[10]

YÜCEL ÇKOLTUKSUZ A. Imaging and evaluating the memory access for malware[J]. Forensic Science International: Digital Investigation202032: 200903. DOI: 10.1016/j.fsidi.2019.200903 .

[11]

RABBANI MWANG Y LKHOSHKANGINI Ret al. A hybrid machine learning approach for malicious behaviour detection and recognition in cloud computing[J]. Journal of Network and Computer Applications2020151: 102507. DOI: 10.1016/j.jnca.2019.102507 .

[12]

SHIJO P VSALIM A. Integrated static and dynamic analysis for malware detection[J]. Procedia Computer Science201546: 804-811. DOI: 10.1016/j.procs.2015.02.149 .

[13]

PFEFFER ARUTTENBERG BKELLOGG Let al. Artificial intelligence based malware analysis[EB/OL]. 2017arXiv: 1704.08716.

[14]

HUDA SISLAM RABAWAJY Jet al. A hybrid-multi filter-wrapper framework to identify run-time behaviour for fast malware detection[J]. Future Generation Computer Systems201883: 193-207. DOI: 10.1016/j.future.2017.12.037 .

[15]

DOWNING EMIRSKY YPARK Ket al. DeepReflect: Discovering malicious functionality through binary reconstruction[DB/OL].[2022-12-20].

[16]

FIREEYE.CAPA[EB/OL].[2022-08-15].

[17]

HENNESSY J LPATTERSON D A. Computer Architecture: A Quantitative Approach[M]. 5th ed iton.Amsterdam:Elsevier, 2011.

[18]

ALLEN F E. Control flow analysis[J]. ACM Sigplan Notices19705(7): 1-19. DOI: 10.1145/390013.808479 .

[19]

RONNEBERGER OFISCHER PBROX T. U-net: Convolutional networks for biomedical image segmentation[C]// Medical Image Computing and Computer-Assisted Intervention―MICCAI 2015: 18th International Conference. Cham: Springer International Publishing, 2015: 234-241. DOI: 10.1007/978-3-319-24574-4_28 .

[20]

BRANDES U. A faster algorithm for betweenness centrality[J]. The Journal of Mathematical Sociology200125(2): 163-177. DOI: 10.1080/0022250x.2001.9990249 .

[21]

BAYER UCOMPARETTI P MHLAUSCHEK Cet al. Scalable, behavior-based malware clustering[DB/OL].[2022-12-12].

[22]

Python Software Foundation. SMDA[EB/OL].[2022-04-09].

[23]

MICHELUCCI U. An introduction to autoencoders[EB/OL]. 2022arXiv: 2201.03898. DOI: 10.1215/22011919-9712456 .

基金资助

国家自然科学基金(62172308)

国家自然科学基金(61972297)

国家自然科学基金(62172144)

国家自然科学基金(U1636107)

AI Summary AI Mindmap
PDF (1295KB)

0

访问

0

被引

详细

导航
相关文章

AI思维导图

/