论文名称 | 发表时间 | 发表期刊 | 期刊等级 | 研究单位 |
Decoding the Secrets of Machine Learning in Malware Classification: A Deep Dive into Datasets, Feature Extraction, and Model Performance | 2023年 | CCS | 安全顶会 | 诺顿研究集团 |
0. 摘要
研究背景 | 许多研究提出了用于恶意软件检测和分类的机器学习模型(ML),并报告了近乎完美的性能。 |
现存问题 | 然而,这些已经以不同的方式构建数据集,使用不同的静态或动态分析技术进行特征提取,甚至对恶意家族的看法也有所不同。 |
核心思想 | 论文调查调查数据集、特征提取技术以及机器学习技术对恶意软件检测和分类的影响,对现存问题进行深入研究。 |
研究内容 | 论文收集了迄今为止最大的平衡恶意软件数据集,其中包含来自670个家族的67k个样本(每个家族有对应的100个样本),并使用该数据集训练最先进的恶意软件检测和家族分类模型。 |
实验结果 | 实验结果表明,静态特征比动态特征表现更好,并且将两者结合起来仅比静态特征提供边界改进,其原因可能是动态提取特征中的缺失行为会验证影响其功能(比较可信,一篇23年的usenix论文得出了类似的结论)。论文发现加壳和分类准确性之间没有相关性(该结论存疑,一篇2020年的NDSS论文得出与之相反的结论,可能是由于本论文的恶意软件大部分由upx进行加壳)。除此之外,论文还发现恶意软件的检测会随着恶意家族数量的增加而变得越来越困难,而且在不同恶意家族数量比较均衡的时候模型具有更好的泛化能力(如何实现不平衡数据集的分类是一个潜在的研究方向)。 |
1. 引言
研究背景和现存问题:恶意软件数量不断增加,需要通过机器学习技术实现恶意软件的有效检测。对于恶意软件的检测工作,一方面面对攻击者通过构造检测模型未见过的攻击(实现检测模型的绕过),另一方面需要面对现有工作构建的数据集与现实世界情况不符的情况(无法有效检测实际的恶意软件)。
- 恶意软件作者经常使用现成的加壳器和保护器。两者都修改程序以阻碍其分析,同时仍保留其原始行为。根据其设计,经过加壳或保护的不同恶意软件可能会生成具有高度相似结构的可执行文件。这很容易使得对这些恶意软件样本进行训练的机器学习分类器过拟合加壳或文件保护的文件结构,而不是捕获其真正的恶意组件(这部分实际上就是20年NDSS论文的结论)。
- 尽管已经提出CARO(计算机防病毒研究组织)命名约定来缓解恶意家族分类问题,但这项任务仍然存在使用障碍。科学研究解决了这个问题并产生了AVClass,可以实现恶意软件的有效检测,但实际上该检测结果仍然存在很多问题(例如,对于新型恶意软件检测能力不足)。此外,虽然可收集的恶意软件家族比较多,但具有足够样本数量的恶意软件家族仍然比较少(论文从13800个恶恶意软件家族中仅筛选出了780个恶意软件家族),少样本家族在恶意软件中广泛存在。
研究内容:论文为118,111个样本船舰了四个异构数据集,以进行大规模的测试研究。其中三个由具有不同数量家族的恶意样本组成,而第四个包含良性样本。除了数据集的构建,论文进一步探讨恶意软件的特征提取技术(基于静态分析与基于动态分析)。通过上述研究,论文对以下问题做出了解答:
- Q1:基于静态分析、动态分析以及混合分析的恶意软件检测器在性能上的表现是怎么样的?
- Q2:哪些恶意软件更容易逃避恶意软件检测器的检测?
- Q3:在静态分析、动态分析以及混合分析的过程中,哪些特征更加重要?
- Q4:使用已知的加壳器和保护器是否会对恶意软件的检测造成影响?
- Q5:在动态分析过程中,动态特征的缺失是否会对恶意软件检测造成影响?
- Q6:AVClass的置信度得分与基于ML的决策相关吗?
- Q7:训练数据集构建策略是否影响模型性能?
- Q8:机器学习驱动的恶意软件分类器对训练数据中未见的恶意软件家族的表现如何?
2. 数据集收集
为了进行实验,作者收集了118,111个Windows PE32 可执行文件,并将这些可执行文件分为四个数据集,如下表所示。
2.1 恶意样本收集
作者从VirusTotal(VT)源收集 PE 恶意软件可执行文件。VT 源是 JSON 编码报告的实时流。每个报告都包含提交给 VirusTotal 的样本的分析结果,包括文件哈希值、文件类型、大小以及大量防病毒 (AV) 引擎分配的检测标签。
论文希望构建一个在家族数量方面尽可能多样化,同时具备样本数据平衡性的数据集。作者最初的目标是收集1,000个恶意家族,每个家族有100个样本。选择每个家族100个样本的阈值时为了让每个家族都有足够的样本来执行多分类实验。然而,经过下面描述的收集、重分类以及过滤过程,作者最终收集了670个家族的恶意软件,如上表所示。
- 初始收集阶段:论文从VT feed 中收集了2021年8月至2022年3月期间非连续的82天的报告和样本。论文只保留至少一个AV引擎检测到的样本报告,并从中选择出所有的 PE32 文件(为了保证沙箱能正常分析这些恶意软件)。通过分析收集到的样本,在VT feed中的所有恶意软件样本,87.6%的恶意软件为 PE32 格式,8.2%的恶意软件为 DLL 格式,3.9%的恶意软件为 PE64格式,其他类型的 PE 文件占0.3%。收集到的样本将通过AVClass2工具进行标记,生成每个恶意软件的最可能的恶意家族与置信因子。本阶段最终获得239,417个 PE32 样本。
- 重分类阶段:随着反病毒引擎规则的完善,样本的反病毒标签可能会随着时间而变化。因此,论文在收集过程结束54天后对样本的 VT 报告进行更新,并将新报告提供给 AVClass2 以获得更新的样本标签。在这个过程中上一阶段收集样本的9.7%被重新分类为不同的家族,这个现象也侧面说明 VT+AVClass 的恶意软件标记方法可能存在问题(这个结果仍然存疑,可能因为收集到的样本比较新)。由于样本标签的更新,样本中出现了不属于上一阶段生成的恶意家族的样本,因此需要对这些样本进行过滤。本阶段最终获得来自227,296个 PE32 样本。
- 特征过滤阶段:作者对780个家族的所有样本进行了静态和动态特征提取。在这个过程中作者丢弃了122个静态特征提取失败(原因包括Header损坏、反汇编器空输出以及二进制文件缺失入口)的样本,同时还丢弃了没有表现出任何运行时行为的样本。
2.2 数据集构建
在上述收集到的样本的基础上,作者构建了四个不同的数据集,良性软件数据集、平衡的恶意软件数据集、不平衡的恶意软件数据集以及未标记的恶意软件数据集。值得注意的是,论文的勒索软件样本均取自 VT feed,且样本的标签基于 VT 分析报告通过AVClass生成。这样将导致论文中的样本全是可以被 VT 反病毒引擎检测的恶意软件,这样的样本是否具有代表性是存疑的(例如,通过高级加壳工具的恶意软件无法被20个以上 VT 反病毒引擎检测出,而这样的样本不会出现在论文的数据集中)。
- 良性恶意软件数据集:在允许 Windows10 的电脑上安装所有社区维护的Chocolatey软件包,这些软件包经过了严格的审核流程,可以用于构建良性数据集。安装每个软件包后,作者提取了硬盘上存在的所有可执行文件。在上述样本的基础上,作者进一步过滤所有非 PE32 格式的文件,并过滤被 VT 检测为恶意软件的样本(能够排除特征与恶意软件非常相似的良性软件,实现边界情况的排除)。
- 平衡的恶意软件数据集:在收集到的恶意软件样本的基础上,对各个恶意软件家族的样本进行抽样,在每个恶意软件家族样本中抽取100个样本。该数据集包括来自670个恶意软件家族的67,000个恶意软件样本。
- 不平衡的恶意软件数据集:该数据集包含来自1500个恶意软件家族的18,000个恶意软件样本,这些样本基本都来自于少样本恶意软件家族,且样本均由至少20个反病毒引擎检测出来。
- 未标记的恶意软件数据集:该数据集包含16,5000个恶意软件样本,这些样本的AVClass标签均为通用标签(可以确定是恶意软件,但无法确定恶意家族)。
3. 研究内容
3.1 静态特征
作者基于20年NDSS论文中提到的静态特征提取技术,从收集到的样本中进行静态特征的提取。这些特征包括 PE Header 特征、PE Section 特征、PE Generic 特征、DLL 特征、API 特征、字符串特征、字节特征、操作码特征,如下表所示。
- PE Header 特征:从可执行文件的COFF Header 和 Optional Header 中提取29个整数特征。
- PE Section 特征:从可执行文件的各个 Section 中提取590个布尔特征。
- PE Generic 特征:从可执行文件中提取文件大小特征和文件熵特征。
- DLL 特征与API 特征:从可执行文件中提取637个库特征和28,667个函数特征。
- 字符串特征:从可执行文件中提取10,402个布尔特征。
- 字节特征:从可执行文件中提取4-gram、5-gram 以及 6-gram 特征。在1000个样本上进行要素选择(13,000个布尔特征),在其余样本中进行特征提取。
- 操作码特征:使用Capstone反汇编的操作码序列,并提取1-gram、2-gram 以及 3-gram 特征,计算 TF-IDF 并在 IG 分布上使用 elbow 方法来保留2,500个浮点特征。
3.2 动态特征
从恶意软件在沙箱中执行期间调用的 API 调用(包括它们的参数)中提取 7 类动态特征,这些特征包括网络活动特征、文件活动特征、互斥量使用特征、寄存器操作特征、服务特征、进程特征以及线程特征,如下表所示。
- 网络活动特征:从HTTP、TCP以及UDP流量中提取438个特征。
- 文件活动特征:从恶意软件创建、访问文件名,读取、写入以及删除文件的数量,文件名的随机性中提取60,555个特征。
- 互斥量使用特征:从互斥量数量、互斥量名称的随机性提取7个特征。
- 寄存器操作特征:从写入的注册表项,以及创建、打开、读取、写入和删除的注册表项的计数中提取60个特征。
- 服务特征:从创建、启动以及停止的服务和服务管理器的计数、随机性以及名称中提取736个特征。
- 进程特征:从创建的进程、终止的进程以及调用的 shell 命令的计数,进程名称中提取28,195个特征。
- 线程特征:从打开、创建、恢复、终止和挂起的线程数,以及与给定线程上下文的交互数以及排队到线程的异步过程调用 (APC) 数中提取7个特征。