1、第 9 卷 第 1 期 信 息 安 全 学 报 Vol.9 No.1 2024 年 1 月 Journal of Cyber Security January 2024 通讯作者:朱子元,正高级工程师,Email:。本课题得到中国科学院战略先导专项(No.XDC02010400),国家重点研发计划(No.2018YFB2202100)的资助。收稿日期:2020-04-10;修改日期:2020-08-11;定稿日期:2022-12-20 基于集成学习技术的恶意软件检测方法 李 芳1,2,朱子元1,2,闫 超1,孟 丹1,2 1中国科学院信息工程研究所 北京 中国 100093 2中国科学院大学
2、网络空间安全学院 北京 中国 100049 摘要 近年来,低级别微结构特征已被广泛应用于恶意软件检测。但是,微结构特征数据通常包含大量的冗余信息,且目前的检测方法并没有对输入微结构数据进行有效地预处理,这就造成恶意软件检测需要依赖于复杂的深度学习模型才能获得较高的检测性能。然而,深度学习检测模型参数量较大,难以在计算机底层得到实际应用。为了解决上述问题,本文提出了一种新颖的动态分析方法来检测恶意软件。首先,该方法创建了一个自动微结构特征收集系统,并从收集的通用寄存器(General-Purpose Registers,GPRs)数据中随机抽取子样本作为分类特征矩阵。相比于其他微结构特征,GPR
3、s 特征具有更丰富的行为特征信息,但也包含更多的噪声信息。因此,需要对 GPRs 数据进行特征区间分割,以降低数据复杂度并抑制噪声。本文随后采用词频-逆文档频率(Term Frequency-Inverse Document Frequency,TF-IDF)技术从抽取的特征矩阵中选择最具区分性的信息来进行恶意软件检测。TF-IDF 技术可以有效降低特征矩阵的维度,从而提高检测效率。为了降低模型复杂度,并保证检测方法的性能,本文利用集成学习模型来识别恶意软件。实验表明,该集成学习模型具有 99.3%的检测准确率,3.7%的误报率,优于其他现有方法且模型复杂度低。此外,该方法还可以用于检测真实数
4、据中的恶意行为。关键词 恶意软件检测;通用寄存器;集成学习;词频-逆文档频率 中图法分类号 TP309.5 DOI 号 10.19363/J10-1380/tn.2024.01.10 Malware Detection Method Based on Ensemble Learning Technology LI Fang1,2,ZHU Ziyuan1,2,YAN Chao1,MENG Dan1,2 1 Institute of Information Engineering,Chinese Academy of Sciences,Beijing 100093,China 2 School o
5、f Cyber Security,University of Chinese Academy of Sciences,Beijing 100049,China Abstract In recent years,low-level hardware microarchitecture features have been widely used for malware detection.However,most of the microarchitecture features contain a large amount of redundant information,and curren
6、t detection methods do not effectively preprocess the input micro-architecture data,which results in complex deep learning model to obtain high malware detection performance.However,the deep learning detection model has a large number of pa-rameters,thus it is difficult to be practically applied at
7、low-level hardware of computers.To solve these problems,we propose a novel dynamic analysis method to detect malware.First of all,this method creates an automatic microarchitecture feature collection system,and randomly extracts the sub-samples from the collected Gen-eral-Purpose Registers(GPRs)data
8、 as the classification feature matrix.Compared with other microarchitecture features,GPRs features have much richer behavioral characteristics,but also contain noise information.Therefore,we divide the GPRs data into different intervals to reduce data complexity and inhibit noise.Then,we adopt Term
9、Frequency-Inverse Document Frequency(TF-IDF)technique to select the most discriminative information from these matrices,for malware detection.TF-IDF technology can effectively reduce the dimension of the characteristic matrix and improve detection efficiency.In order to reduce the complexity and ens
10、ure the performance of the detec-tion method,this paper uses ensemble learning model to identify malware.Experimental results indicate that the detection accuracy of the ensemble learning model is 99.3%with 3.7%false positive rate,which is better compared with other existing methods,and the complexi
11、ty of our proposed model is lower.Besides,our method can also achieve higher detection rate in real data.Key words malware detection;general-purpose registers;ensemble learning;term frequency-inverse document fre-quency 138 Journal of Cyber Security 信息安全学报,2024 年 1 月,第 9 卷,第 1 期 1 引言 1.1 研究背景及意义 世界经
12、济论坛全球风险报告1指出,目前全球每天有超过 50%的人使用互联网。尽管数字技术为全球大多数人带来了巨大的经济利益以及社会利益,但是它也有着潜在的风险。数字化前沿全球风险感知调查的两组受访者(多利益相关方和全球杰出青年)在未来十年内前十大长期风险(科技、生态环境及社会等)列表中确定了与网络攻击相关的问题。其中科技类中的网络攻击则被评为 2020 年第五大风险,可见保证网络安全的重要性。众所周知,恶意软件是网络安全的主要威胁之一,其可以被定义为一系列程序或者代码的集合。恶意软件在未经许可或用户不知情的情况下入侵计算机系统并故意实施攻击,例如破坏计算机功能、破坏数据窃取私密信息等一系列的恶意行为。
13、自计算机诞生以来,恶意攻击的威胁就存在。但是早期的恶意软件设计是以了解计算机的真正潜力为目的,而不是对计算机系统,计算机网络以及用户进行伤害、窃取或操纵。因此,这段时间的恶意软件其实并没有恶意。现代恶意软件越来越趋向于一种组织完善的活动,它具有自己的供应链,形成完整的地下经济。它既可以是大型地下组织用来赚钱的工具,也可以是政府用于间谍和攻击的武器。例如针对普通日常计算机的恶意软件,它可以窃取银行和信用卡信息(直接窃取金钱),收集电子邮件地址(出售给垃圾邮件发送者)或远程控制计算机等。然而,恶意软件的主要威胁不仅仅是针对一般的计算机,而是可以针对特定的公司或政府。这些恶意软件旨在促进盗窃贸易或国
14、家机密,窃取关键信息(例如敏感电子邮件)或攻击基础设施。例如,Stuxnet 这种恶意软件,旨在攻击和破坏伊朗的各种核设施2。由于许多恶意软件是开源的,混淆工具也非常容易获得,这就造成了恶意软件数量成指数级增长。例如,AV-TEST3最新统计报告显示,每天约有 35 万多个新型恶意软件和潜在有害的应用程序被注册。到 2020 年 2 月 9 日,恶意软件总量超过 1021.19 百万(图 1(a),其中仅 2019 年新生成的恶意软件总量就接近 144.9 百万(图 1(b)。传统的商业恶意软件检测工具都是基于恶意软件标签实现恶意软件检测,虽然这些方法能够快速识别已知标签的恶意软件,但是对数据
15、库中不存在的恶意软件及新型恶意软件都不能实现有效地防御。因此,鉴于恶意软件发生频率高、危害严重的特点,有效的恶意软件识别对计算机安全,人身财产安全甚至国家安全都有着重要的意义。图 1 恶意软件统计:(a)恶意软件总量;(b)新型恶意软件量 Figure 1 Malware statistics:(a)total malware;(b)new malware 1.2 基于微结构特征实现恶意软件检测成为重要手段 按照所分析的特征,目前的恶意软件检测方法主要分为两大类:高级别特征与微结构特征。其中,高级别特征主要从计算机系统结构软件层进行收集。经过验证能够有效实现恶意软件识别的特征主要有应用程序接口
16、(Application Programming Interface,API)顺序4,控制流图(Control Flow Graph,CFG)5等。最近,一些研究者开始使用低级别的微结构特征实现恶意行为检测。由于微结构特征不仅可以获得恶意行为与良性行为之间更细微的行为信息差别,而且可以清晰化恶意行为与良性行为之间的模糊边界。此外,它还有助于提高恶意行为检测的灵敏度6-7。基于微结构特征的检测技术并不需要等待微结构特征被转换成高级别特征就可以直接利用微结构特征本身实现对非法行为的识别。微结构特征的获取主李芳 等:基于集成学习技术的恶意软件检测方法 139 要是从计算机体系结构的硬件结构层中抓取行
17、为信息。虽然计算机底层数据繁杂,但是 Khasawneh 等人8以及 Ozsoy 等人9从计算机底层收集了多种微结构特征,并使用机器学习技术及神经网络技术证明了操作码(Operation code,Opcode)最大频率差异特征具有优异的检测潜能。同时,Demme 等人10首次验 证 了 硬 件 性 能 计 数 器(Hardware Performance Counters,HPC)数据也可以用来进行恶意行为检测。虽然以上方法能够使用微结构特征实现恶意软件检测,但是依旧存在以下问题:如何选择合适的微结构特征如何选择合适的微结构特征:选择具有区分性的微结构特征对检测性能起到决定性的作用。但是,计
18、算机微结构层存在多种微结构特征。例如,Ozsoy 等人9对比了三类微结构特征:基于一致性指令的特征,基于内存地址模式的特征及基于架构事件特征。仅基于指令的特征就至少包含指令类别频率、Opcode 最大频率差异、Opcode 类别及 Opcode 序列四种微结构特征。该方法通过对比三类特征,最后提出Opcode 最大频率差异在恶意行为检测时具有最好的区分性能。然而,Opcode 最大频率差异特征只是简单的对比了恶意样本及良性样本之间存在的频率差异,并没有考虑重要的语义信息。而且,作者实验所使用特征的依赖环境较为简单,这就造成在复杂环境下,采用Opcode 最大频率差异特征不能获得令人满意的检测性
19、能。如何去除冗余信息如何去除冗余信息:在选择好所依赖的微结构特征后,还会面临冗余信息的干扰。在计算机底层,短时间内会产生大量的微结构特征。仅针对 Opcode 特征,一秒时间就会从计算机底层收集上千万条行为记录信息。但是,这些数据不仅包含恶意行为信息,还会包含合法行为信息。由于恶意软件本身就包含合法代码10。于是所收集的微结构特征数据中的冗余信息不仅会干扰恶意行为检测效率还会影响恶意行为的检测性能。目前,基于微结构特征实现恶意软件检测的方法都没有提出有效降低特征中冗余信息的方法。如图 2(a)9所设计的检测方法,它并没有提出抑制冗余信息的措施,而是直接将收集到的微结构特征作为检测模型的输入。在
20、微结构特征分析时进行冗余信息的去除是一种有效提取特征的措施,但是图2(a)9与(b)11都是实时、连续、盲目地使用从处理器流水线中抽取的所需微结构特征,而并没有做有效的预处理。图 2 基于不同微结构特征的恶意行为检测 Figure 2 Malware detection based on different micro-architecture features 如何缩短检测窗口如何缩短检测窗口:检测窗口的大小也会影响恶意软件检测模型的效率及性能。但是,目前基于微结构特征实现恶意软件检测的方法都依赖于较长的检测窗口。例如,Ghiasi 等人12140 Journal of Cyber Secu
21、rity 信息安全学报,2024 年 1 月,第 9 卷,第 1 期 提出的检测方法需要分析整个样本在执行过程中所产生的全部微结构特征,这种方式需要恶意软件完全执行完毕后才能实现有效地检测,而且只能用于事后分析。Ozsoy 等人9及 Khasawneh 等人8所提出的方法需要分析连续 10K 指令的微结构特征(如图 2(a)。对于Opcode 最大频率差异特征来说,10K指令的长度对检测模型计算量影响不大(经过统计Opcode 出现频率差异后并排序,仅选择前 35 个 Opcodes 用于最终的模型输入),但是对于其他微结构特征,10K 指令的数据量可能会严重影响模型的检测性能。而且,即使选择
22、 Opcode 最大频率差异作为检测特征,也只能等待 10K 指令信息被全部收集完毕才能实行检测,这就不可避免地影响模型的检测灵敏度。如何降低模型复杂度如何降低模型复杂度:在图 2(b)中,Li 等人11提出了一种利用 GPRs 特征的深度学习技术检测方法,它在实现较高检测率的同时,又可以只依赖较短的检测窗口(0.8K)。但是,由于该方法具有很高的模型复杂度,因此很难进行实际应用。事实上,采用微结构特征实现恶意行为检测是为了更好的硬件实现,以降低检测过程对处理器的影响。因此,有必要通过减少微结构特征的数据冗余来达到简化检测模型的目的。为了解决上述问题,本文选择 GPRs 微结构特征用于恶意软件
23、检测,因为该特征与其他微结构特征相比具有更丰富的行为信息。例如,图 3 展示了当一条Call 指令从文件中读取 10 个字节(依赖于“kernel32.ReadFile”函数)时,GPRs 内容的变化。其中,标记为红色的数据表示 GPRs 更改后的值。可以发现,GPRs内容发生了显著变化,这表明 GPRs 的特征对细粒度的行为敏感。此外,GPRs 微结构特征易于检测未知恶意软件,因为在逃避检测时,变异的恶意软件通常不会更改特定点的值(标志和常量)12。图 3 单个微结构事件 GPRs 数据变化 Figure 3 GPRs data changes of single micro-archite
24、cture event 为了实现有效的恶意软件检测,本文提出了一种动态恶意软件检测技术。与 Li 等人11将收集到的 GPRs 微结构特征直接作为模型输入(见图 2(b)不同,本文对复杂的 GPRs 特征设计了一种有效的预处理方式。首先,使用特定的检测窗口从GPRs 中随机提取特征矩阵。但是即使检测窗口较小,特征矩阵仍具有大量 GPRs 内容(例如,32 位系统 GPRs 微结构特征数据范围是从“0 x00000000”到“0 xffffffff”)。因此,Li 等人11才需要依赖复杂的神经网络技术实现恶意软件检测。与图 2(b)不同,本文将 GPRs 特征数据平均划分到一定数量的区间进行降维
25、,然后再进行恶意行为检测。该数据降维过程不仅可以保留数据多样性,降低数据的复杂度,还可以抑制噪声的干扰。此外,为了进一步抽取有价值的特征信息,本文首次将 TF-IDF 技术应用到 GPRs 特征上,从 GPRs 微结构特征矩阵中抽取重要的特征信息。最后,本文还构建了用于恶意软件检测的集成学习模型,该模型极大地减少了检测模型的参数。此外,本文还验证了该集成学习模型对真实微结构特征数据检测的有效性。本文主要有三点贡献:GPRs 特征矩阵包含大量的数据信息,如果直接将其应用于恶意软件检测,则需要使用复杂的检测模型才能获得较高的检测性能。因此,本文提出对GPRs 进行特征区间分割,以降低数据复杂性并抑
26、制数据噪声。将GPRs特征值划分到不同的区间后,本文使用TF-IDF 技术从特征矩阵中提取关键信息数据,以降低数据维数。如图 2(c)所示,从 0.7K 指令检测窗口减小到仅 503 个关键字长度。李芳 等:基于集成学习技术的恶意软件检测方法 141 基于TF-IDF技术构建了一个集成学习模型来检测恶意软件。该模型不仅具有较高的检测性能,还可以有效地识别未知恶意软件。此外,本文还验证了该方法可以用于检测真实数据中的恶意行为。2 相关工作 本小节将详细介绍和阐述目前已有的恶意软件检测方法,总体来说根据检测方法主要分为三类:特征匹配技术,机器学习技术和神经网络技术,而检测特征可以分为两类:高级别特
27、征和微结构特征。2.1 特征匹配技术 特征匹配技术是一种快速识别恶意软件的技术,使用特征匹配实现恶意软件检测的基本流程如图 4 所示。首先,检测引擎对待检测的可执行文件进行相关分析,并获得该文件的特征码。然后,该特征码与检测引擎检索库中的特征集进行匹配,如果发生匹配项,则该检测引擎对该检测文件发出恶意警报。若未发现匹配项,则对该文件进一步分析。如果发现该文件为恶意软件,则将该文件的特征码加入检索库以对特征集更新。其中特征码是唯一代表文件的序列,该序列可以是文件的哈希值,字节或指令,而传统的恶意软件检测引擎几乎都是依赖特征匹配技术。因此,当恶意软件随着时间不改变自己的特征标签时,商业检测引擎是可
28、以准确的识别该软件。但是,当恶意软件制造者对恶意软件进行一些简单的混淆变化,例如增加无效代码,改变代码结构等,该文件的特征码就会随之改变。即使简单混淆操作并没有改变恶意软件的功能,还是能够绕过检测引擎的检测13。图 4 基于特征匹配技术基本流程 Figure 4 Basic flow based on feature matching tech-nique Christodorescu 等人14认为传统的模式匹配方式只考虑了语法的信息匹配,而忽略了指令的语义信息。于是,提出了一种合并指令语义的措施来改进匹配策略。该方法将恶意软件的恶意行为形式化表示,因此当某些恶意行为以不同的形式出现时,它就可
29、以被发现。上述方式可以抵御黑客使用的常见混淆技术。后来,Christodorescu 和 Jha 等人13 认为想要检测混淆的恶意软件,检测引擎必须首先消除恶意软件作者所使用的混淆变换。因此设计了一种检测可执行文件中恶意模式的体系结构,该体系结构在进行匹配前可以抵消常见的混淆转换。后来,研究者们认为提取有价值的特征来对恶意样本生成特征标签是非常重要的,于是 Zhang 和 Reeves 15提出了一种利用恶意软件所执行的系统调用特征来实现恶意软件检测。他们认为系统调用可以表征代码片段的语义或功能,同时还考虑了为系统调用所需要的参数指令。为了有效判断待检测可执行文件是否恶意,Zhang 和 Re
30、eves15提出了一种模式匹配的方法来判断语义的相似性。Ye 等人16首次提出采用API 调用来实现恶意行为检测,因为 API 特征序列可以反映程序的语义行为信息。该方法首先使用可执行文件解析工具抽取文件中的 API 信息(如果可执行文件被第三方工具进行压缩或者嵌入了自制的打包程序,则需要先对其进行解压缩,然后再使用可执行文件解析器)。然后,将 API 在 API 查询数据库中对应的整数 ID 作为可执行文件的签名存储在标签库中。随后,使用面向目标的关联挖掘算法生成类别关联规则,并将该规则记录在规则数据库中。为了最终确定可执行文件是否恶意,Ye 等人16将 API 调用与生成规则一起传递给恶意
31、软件检测模块,以执行分类。以上方式都是基于静态检测技术,众所周知静态检测技术需要对被分析文件反汇编,而这就需要大量的人工分析,费时费力。因此 Kolbitsch 等人17提出了一种动态检测方法,该方法首先在隔离环境中分析恶意程序以构建行为模型,该模型表示了恶意行为在执行任务时所必须的系统调用之间的信息流。然后,作者使用信息流的程序片与待检测软件程序进行匹配。实验证明该方法可以有效的在用户主机上实现恶意行为检测。但是,分析信息流是一种复杂的步骤,因此 Park 等人18提出了利用系统调用图进行恶意软件分类的方法。该方法首先捕获了可执行文件在执行时的系统调用信息及系统调用参数信息。然后,计算待检测
32、可执行文件与已知恶意软件的相似性。由于同一个恶意家族共享相同或相似的行为,因此每个恶意家族都有显示相似特征的趋势19,例如系统修改、产生新的进程,注册表修改及网络通信等。随后,Park 等人20提出了一种通用行为图的检测方法,该方法针对一个恶意家族的所有恶意软件实例只使用一个代表性的图,而不是对每个实例使用一个行为图。由于大多数新恶意软件都是已知恶142 Journal of Cyber Security 信息安全学报,2024 年 1 月,第 9 卷,第 1 期 意家族的变体,因此该方法是可行的21。以上方法都是在计算机系统层或应用层使用高级别特征对恶意软件进行识别。对于微结构特征,Lede
33、r 等人22提出使用值集作为特征实现恶意软件检测。他们认为即使混淆后的恶意软件改变了代码结构,但是某些恶意行为固有的常数值不会改变。作者首先从寄存器、内存、堆栈等位置抽取相关内容;然后将抽取的内容利用值集的方式进行表达。最后,使用相似性匹配来实现恶意软件检测。在 Leder 等人22的基础上,Ghiasi 等人12 仅使用寄存器的内容就实现了恶意软件的检测。该方法使用相关工具抽取程序在 API 发生时前后寄存器的内容,根据内容计算文件之间的相似性来实现恶意行为检测。但是,该检测方法需要分析整个样本的特征信息,因此只能用于事后分析。2.2 机器学习技术 编写软件是一个很难的问题,无论恶意软件还是
34、良性软件都是如此。它不仅仅是对软件算法的设计与实现,还需要考虑软件在实现与执行过程中各种因素的影响。例如,如何根据运行的网络环境或空闲时间做出何时传播的决策。因此,恶意软件作者通常在创建新的恶意软件时重复利用源恶意软件的代 码以及代码的模式。这就代表着相关恶意软件之间存在固有的模式和相似性,因此恶意软件检测者利用这一弱点将恶意软件检测看成一个分类问题,它可以学习二进制代码文件中的模式,以对未知恶意软件进行分类。使用机器学习方法实现恶意软件检测的整个过程可以分为两个阶段:训练阶段与测试阶段,如图 5 所示。在训练阶段(图 5(a),首先将数据集中的样本随机抽取一部分样本作为训练集(剩下的样本为测
35、试集),训练集包括恶意样本及良性样本。然后,对数据集中的每个样本进行解析,抽取每个样本的特征构成向量集。最后将特征向量作为机器学习分类算法的输入实现分类器的训练。其中分类算法包括决策树(Decision Tree,DT)及支持向量机(Support Vector Machine,SVM)等。接下来,在测试阶段(图 5(b),使用在训练阶段学习好的分类模型对测试集的恶意样本及良性样本集进行分类。同训练阶段一样,对测试集中的每个样本进行解析并获得特征向量集。利用此特征向量集,分类器将测试集分类为恶意或者良性。在测试阶段,模型将测试集中文件的真实类别与分类器分类的类别进行比较,通过相应的评价标准来度
36、量评估生成分类器的性能。图 5 机器学习检测的训练及测试 Figure 5 Training and testing phases of Machine Learning classifiers Schultz 等人23首次提出了利用机器学习技术来实现恶意软件检测。使用机器学习技术进行恶意行为检测的第一步是确定可执行文件的表示形式,该方法使用了三种不同的特征:字节序列 n-gram,可移植的可执行文件(Portable Executable,PE)特征与字符串特征。其中字节 n-gram 特征是从可执行文件中提取的n 字节序列,而n-gram 已被广泛应用于语言建模与语言识别领域24-26。可
37、执行文件中的 n 字节序列与文本分类问题中的单词语法一致,因此n-gram 有信息的重叠,它不仅仅可以捕获有关长度字符串的统计信息,也可以获取长字符串的频率信息。PE 特征是从 WIN32 可执行文件(EXE 或 DLL)中抽取的某些重要结构,该结构可以表明此文件已被创建或被感染的恶意行为信息。例如 PE 头信息,它描述了可执行文件的物理结构(创建时间、修改的时间、文件大小等),而字符串特征指程序文件中编李芳 等:基于集成学习技术的恶意软件检测方法 143 码的纯文本字符串。Schultz 等人23设计了四个分类器进行对比实验,分别为基于签名分类,基于规则RIPPER 算法的分类,基于朴素贝叶
38、斯(Naive Bayes,NB)分类及基于多重朴素贝叶斯(Multi-Naive Bayes)分类。实验结果表明使用机器学习技术可以更有效地实现恶意软件检测。Bilar27首次提出了使用 Opcode 特征来实现恶意软件检测,该方法研究了恶意代码与良性代码之间的 Opcode 频率分布,并发现恶意代码与良性代码中相同的 Opcode 出现频率具有明显的差异。后来,Dolev 和 Tzachar28首次提出了利用 Opcode 序列来实现恶意软件检测。由于完整的机器语言包含一个Opcode 及一个或多个操作数,而 Opcode 是机器语言的一部分,因此可以用 Opcode 序列表示可执行文件。
39、基于 Dolev 和 Tzachar28的方法,Moskovitch 等人29从反汇编的可执行文件中抽取 Opcode 序列,并使用多个机器学习算法设计对比实验。实验结果显示 2-gram 的 Opcode 序列能够获得更好的性能。并且,与 NB,增强贝叶斯(Boost NB)等其他传统机器学习算法相比,增强决策树算法(Boost DT)能够获得更好的检测性能。为了避免将有意义的 Opcode 序列分成多个子序列,Zhao 等人30仅考虑部分控制流信息(基本块)中的 Opcode 序列,但是不考虑基本块之间的执行顺序。在 Zhao 等人30所提出的方法中,作者对比了决策树(J48),自主聚合(
40、Bagging)及随机数(Random Forest,RF)三种算法,最终验证 RF 算法能够获得更高的检测性能。但是,该方法没有充分考虑控制流的信息,因此会导致抽取的 Opcode 序列无法准确地描述原始可执行文件的行为。于是,Ding 等人31提出了一种利用 Opcode 序列就可以完全表示可执行文件行为的方法。该方法首先将 Opcode 分为了三类:顺序 Opcode,条件分支 Opcode 及无条件分支 Opcode。接着,根据 Opcode 的类型将程序分为基本块,并按照顺序对每个基本块进行编号。最后,将程序的基本块按照一定的数据结构进行存储并构造程序的 CFG。为了更准确全面地使用
41、 Opcode 序列所表达的程序行为,该方法遍历了 CFG 以获取所有的可执行路径。其中 Opcode n-gram 使用固定长度的滑动窗口进行提取。文中实验对比了三种分类器,分别为 K 最近邻(KNN,k-Nearest Neighbor),决策树(C4.5)以及 SVM。最终实验证明 C4.5 分类器能够获得最高的检测性能。与 Opcode 类似,Chan 和Song32结合API 调用特征与安卓恶意软件权限特征利用机器学习技术进行恶意软件检测,他们的实验对比了 NB,SVM,DT 及 RF 等分类器,最终结果表明RF能够获得更高的检测性能,而且增加API 调用信息有助于识别安卓恶意软件。
42、对于使用机器学习的动态检测技术,分析从隔离环境中收集的所有特征数据是没有必要的。实际上可执行文件在执行过程中产生的行为特征同时包含恶意行为信息以及合法行为信息。因此分析所有的特征不仅会降低检测方法的检测性能,还会影响检测效率。于是,Uppal 等33利用 API 特征实现恶意软件检测。与 Sathyanarayan 等人34分析所有收集到的API 特征不同,Uppal等人33从API 数据集中抽取有区分性的 API 序列,利用该序列进行恶意软件检测。首先,该方法捕捉可执行软件在执行过程中所有的 API 调用数据。然后,从收集的 API 调用信息中抽取 API 序列特征。最后,使用 gram 及
43、优势比技术提取具有有效区分恶意行为及合法行为的 API gram 作为分类的输入。作者对比了 NB,RF,DT,SVM 4 种传统机器学习技术,最后证明 SVM 能够获得最优的检测性能。后来,Kawaguchi 和 Omote35提出了一种新的基于 API 特征动态检测方法。该方法认为在动态收集恶意行为信息过程中无法准确估计样本执行所需要的时间,于是其设计的分类模型仅需要分析样本执行前 90s 产生的 API 信息。文中实验对比了 SVM,C4.5,RF,NB 以及 KNN 五种经典机器学习算法,最后证明利用前 90s 的特征信息可以有效实现恶意软件分类,其中 RF 检测结果最优。在微结构特征
44、级别,Malone 等人36与 Xia 等人37将HPC 数据特征应用到异常检测的问题上,并取得了有效的检测结果。于是,Demme 等人10 提出了利用 HPC 特征数据来实现恶意软件检测。该方法收集样本在执行过程中产生的多维 HPC 数据,并利用机器学习技术实现恶意软件检测。但是该方法的最高检测准确率只有 90%,检测准确率低的主要原因可能是检测器直接对所收集到的数据进行分析而未进行有效地数据预处理,因此数据包含了大量噪声。为了进一步降低 HPC 特征的维度,Sayadi 等人38采用主成分分析(Principal Component Analysis,PCA)技术从收集的特征数据中选择最佳
45、的 HPC 特征数据。为了提高检测性能,Yerima 等人39利用集成学习技术构建最终的恶意软件检测模型。同 Sayadi 等人38提出的方法类似,Khasawneh 等人8也利用集成学习技术设计恶意软件检测模型,但是该方法主要验证了 Opcode 特征在计算机微结构级别的检测性能。虽然 Sayadi 等人38与 Khasawneh 等人8 能够利用微结构特征并使用机器学习技术实现有效的恶意软件检测,但是这两种方法都需要依赖过长的检测窗口。144 Journal of Cyber Security 信息安全学报,2024 年 1 月,第 9 卷,第 1 期 2.3 神经网络技术 近年来,神经网
46、络技术在计算机视觉及自然语言处理领域得到了广泛应用并大放异彩40-41。深度学习是一种特殊的人工神经网络,用于学习输入与输出之间的隐藏关系,多层神经元以不同的权重和激活函数相互连接。简单来说,将输入数据送入网络第一层,在经过第一层卷积后再经过激活函数作为第二层的输入,以此类推构成简单的神经网络。不同层之间的链接权重是根据后向传播进行调整的,其由预测标签与真实标签之间的距离决定。同机器学习方法检测恶意软件过程一样,利用神经网络技术来设计恶意软件检测模型也分为两个阶段:训练阶段与测试阶段(如图 6)。神经网络技术能否应用到恶意软件检测领域,主要取决于如何将收集到的特征转换成检测模型的输入。Saxe
47、 和 Berlin 42从可执行文件中抽取字节/熵直方图特征、可执行文件导入特征、二维字符串直方图特征以及可执行文件元数据四种类型的特征作为神经网络检测模型的输入。为了将以上特征转换成模型可识别的数据类型,作者分别进行了特定的处理。例如对于可执行文件导入特征,作者初始化了一个 256 长度的数组,并将二进制文件的 DLL 名称及导入函数的每个元组散列到0,255 范围内。最后,作者将以上特征数据向量进行集成作为分类模型的最终输入。检测模型为四层的前馈神经网络(Feedforward Neural Net-works,FNNs)。实验证明该方法可以有效地实现恶意软件检测。Kolosnjaji 等
48、人43将可执行文件元数据、可执行文件导入数据及 Opcode 数据作为分类特征。为了提升检测性能,Kolosnjaji 等人43采用一种混合方法来设计神经网络结构,该结构分为卷积网络(Convolutional Neural Networks,CNNs)与 FNNs 两部分。其中可执行文件元数据及可执行文件导入数据由 FNNs 进行分析,而 Opcode 特征由 CNNs 进行分析,最后将两个网络的输出进行集成实现恶意软件检测。实验结果证明该方法优于 FNNs 模型和SVM 模型。基于灰度图的检测方式则不需要从可执行文件中抽取相关特征信息,而是直接将可执行文件转成灰度图并输入到神经网络中。例如
49、 Gibert 等人44认为将恶意软件可视化为灰度图像,这有利于保留文件全局结构,并可以捕获不同恶意家族之间的细微差异。于是,在 Nataraj 等人45的基础上,他们利用 CNNs 来实现恶意软件检测,并且实验证明了该方法与其它基于灰度图的技术相比具有更高的分类准确率。与 Nataraj 等人45的方法不同,Yen 和Sun 46认为将可执行文件直接转成图像作为神经网络模型的输入会造成错误的判断。于是,Yen 和Sun46首先从反汇编后的样本中抽取重要性的单词,接着将重要的单词打包成多个,最后,利用 djb2 算法将生成的组数据转换成彩色图像后送入 CNNs 模型进行检测。实验结果证实该方法
50、优于传统的机器学习方法47。Chen 等人48则选择 word2vec 技术从收集到的多种特征中抽取更有价值的信息,实验证明了使用 word2vec 能够更好地表征恶意软件行为信息,其检测精度提高了 1 至 2 个百分点。此外,该方法还与多个流行的恶意软件检测引擎(ESET,Kaspersky,Kingsoft,McAfee,360,Symantec,Tencent 等)进行了对比,进一步验证了它的有效性。Yan 等人49则提出了一个利用长短期记忆网络(Long Short-Term Memory,LSTM)的分层降噪网络来实现恶意软件检测。由于 LSTM 擅长处理具有时序特征的数据,而恶意软