摘 要:近年来,勒索病毒攻击事件频发,勒索病毒隐匿性逐渐增强,为勒索病毒检测及防御带来了新的挑战。通过对勒索病毒的快速检测与家族分类,可以更有效地保护企业信息安全。从电力系统的实际情况出发,构建了勒索病毒数据集,并采用动态分析的方法,利用沙盒获得各家族勒索病毒样本的行为信息,从动态行为分析报告中提取勒索病毒行为信息;再利用决策树、随机森林算法、卷积神经网络模型训练了勒索病毒检测器和勒索病毒家族分类器。测试结果表明,勒索病毒检测器检测准确率达到了 97%,勒索病毒家族分类器分类准确率达到了 94%。

内容目录:

1 背景介绍

1.1 隐匿高危勒索病毒

1.2 Cuckoo 沙盒

1.3 机器学习算法

2 动态分析与行为特征提取

2.1 实验数据

2.2 Cuckoo 动态行为分析

2.3 行为特征提取

3 勒索病毒检测器训练

3.1 API 函数特征选择

3.2 API 函数特征向量预训练

3.3 分类器测试效果

3.3.1 决策树模型

3.3.2 随机森林算法

3.3.3 卷积神经网络模型

4 结 语

近年来,随着勒索病毒的部分技术细节的公开,以及在暗网中代码交易的出现,勒索病毒的制作和利用勒索病毒进行犯罪的成本不断降低,勒索病毒攻击方式也更加简单,但其赎金收益依然非常可观。随着网络犯罪的组织化、规模化,隐匿行为攻击的复杂化和商业化,目前,隐匿高危勒索病毒呈蔓延之势。已知的勒索病毒家族利用多态、代码混淆等手段,可以快速产生大量新版本,使得勒索病毒数量激增。

随着网络规模的扩大和信息化水平的提高,电力企业对网络的依赖程度不断增强,也在不知不觉中受到隐匿高危行为的威胁。电力企业的敏感数据也容易受到勒索病毒的关注,这些风险影响着电力企业网络安全和稳定。为了保证计算机网络和计算机应用系统的正常运行,电力企业需要对隐匿高危勒索病毒的攻击作出应对。

在过去几年中,已经有许多针对勒索病毒的防御策略,每种策略都实施了几种保护和检测策略,例如,基于欺骗的保护方法(deception-basedprotection)、控制安全随机数发生器(controlling secure random number generator)、应用程序的行为分析(behavioral analysis of applications)、密钥托管、网络级防御,以及利用机器学习算法的勒索软件程序检测。

按照是否运行软件样本,勒索病毒的检测可以分为静态检测与动态检测两种。其中静态恶意软件特征包括字节序列 N-grams、操作码和 PE 报头字段等。随着开发技术的发展,恶意软件的作者往往使用压缩、加密、加壳等方法阻止静态特征的提取,但许多反病毒技术和工具已经可以有效实现程序的解包。Wang 等人针对恶意软件通过加壳逃脱检测的问题,提出了一种加壳检测框架以检测可执行文件是否加壳,以提升恶意代码检测效果。在动态检测中,程序运行时调用的 API 的序列经常被视作为主要特征,这是因为恶意软件为了减小代码的体积,往往通过调用 API 函数来实现文件、注册表、网络、进程等操作行为。

现有的勒索病毒防御方法中,传统的分类算法难以及时响应零日漏洞勒索病毒,而人工逆向分析的方法使得成本显著提高,但是效果提升不明显。随着机器学习等算法的发展,一些启发式检测工具不断出现,但是这些工具普遍存在局限性和滞后性,并且不利于迭代。与此同时,勒索病毒的开发也在不断发展,加壳、代码混淆、反沙盒、内存动态映射等策略的使用也为勒索病毒的防御带来了很大难题。

本文从 Virus Total 等开源网站上收集了勒索病毒等恶意软件样本,利用动态分析方法提取软件的应用程序编程接口(Application Programming Interface,API)函数调用特征,在此基础上训练了勒索病毒检测器和勒索病毒家族分类器。

1  背景介绍

1.1 隐匿高危勒索病毒

勒索病毒,或称勒索软件,是一种特殊的恶意软件,其主要通过锁定受害者主机的操作系统或者使用密码学加密受害者主机上的某些文件的方式,使得受害者无法获得对其主机或主机上的文件的访问控制权限,并威胁受害者向指定的账户支付赎金以解锁文件。为了防止在感染受害者机器的初期就被察觉,隐匿勒索病毒往往在进行加密等核心操作前先模仿正常软件活动一段时间。

随着各种新型网络攻击的出现,企业信息安全形势变得不容乐观,特别是银行、电力、大型国企等机构,正在成为受攻击的主要对象。当前,隐匿高危行为是企业面临的最严重的威胁之一,其中,高级持续性威胁(Advanced Persistent Threat,APT)是最主要的表现手段之一。所谓 APT 攻击就是针对特定的目标,进行长期持续性的网络攻击的攻击方式,其对企业造成了非常严重的困扰,而结合了 APT 的勒索病毒攻击则更是为企业的数据安全带来了极大的威胁。

对抗隐匿高危勒索病毒攻击,保护用户数据的关键措施在于预防,即在勒索软件攻入受害者主机但尚未造成实质性破坏前及时检测并拦截攻击。目前,针对勒索病毒的防护主要采用分层次防护措施,即提倡同时部署多种独立、领域互相重叠的安全措施以创建稳固的安全防护架构,并且各安全层被设计为和其他安全层互补,使得威胁不易穿透重重防护。

勒索病毒的家族分类指的是根据勒索病毒产生的变种来源对勒索病毒进行分类。同属一个家族的勒索病毒往往会共享一些通用模块,因此会有相似的勒索行为。近年来,家族内的勒索病毒的技术不断更新迭代,可以更好地逃避现有工具的检测。此外,可以对勒索病毒的结构进行转换,从而迅速产生大量变种。

此外,近年来勒索软件即服务(Ransomware as a Service,RaaS)的商业模型的规模化发展使得勒索病毒家族中的病毒变种出现得更加频繁,Cerber家族的出现和发展就是其中的典型。据报道,恶意代码工厂软件生成使用代码混淆技术且拥有独特Hash 的恶意代码变种所需时间仅仅只有 15 s,而这些恶意软件的变种可以绕过传统的静态签名匹配的恶意软件检测技术的检测。

1.2 Cuckoo 沙盒

Cuckoo 沙盒是一个开源的恶意软件分析工具,用户可以提交待分析样本或待检测统一资源定位符(Uniform Resource Locator,URL),快速获得它的行为分析报告。Cuckoo 沙盒的主要组件可以分为主机和客户机两部分。其中主机是沙盒的核心控制部分,负责样本的传入、分析报告的生成、客户机的启动和恢复等,而客户机可以有一个或多个,可以是在 VirtualBox 等软件上配置的虚拟机,也可以是真实的物理机器。

Cuckoo 沙盒记录的待检测样本的行为信息主要有软件执行期间调用的所有进程,创建、删除、修改的文件及其信息,网络连接与流量信息,客户机运行期间的屏幕截图,软件运行期间的内存转储记录。这些信息由客户机内的监控脚本(agent.py)获取,并将所有信息发回主机,样本运行完成后,再由主机生成名为 report.json 的行为分析日志。

1.3 机器学习算法

决策树算法的雏形最早由 Hunt 等人 在 1966年提出。该算法对整个决策空间进行划分,认为位于同一块空间内的样本就属于同一类别。决策树的结构是一种树形的有向图结构,分为决策结点与叶子结点。在决策结点,决策树会根据样本特征做出决策;当到达叶子结点时,根据叶子结点被划分的空间就完成了对样本的分类。

随机森林 是一种集成的、基本单元是决策树的机器学习算法,使用了 bagging 方法集成学习。随机森林将训练集分为多个子集,每个子集独立训练一个决策树模型。在模型预测时,随机森林会收集每个决策树的模型结果,依据算法进行整合,得到最终的预测结果。

卷积神经网络(Convolutional Neural Network,CNN) 是 用 卷 积 核 代 替 参 数 的 多 层 感 知 器(Multilayer Perceptron,MLP)的一种变体,属于一种前馈神经网络,其利用卷积核构建学习模型。卷积神经网络的模型构成通常有多个卷积层、池化层和全连接层。

在自然语言处理方面,Kim提出使用卷积神经网络对句子的情感进行分类,如图 1 所示,其模型由卷积层、池化层和全连接层构成。

图 1 API 序列分类模型架构

k 表示 API 序列中第 i 个 API 函数的 k维特征向量,API 序列的长度为 n,则整个 API 序列特征表示就可以用 n 个 API 函数的特征向量拼接得到,即:

同样的,可以用表示从的特征向量的拼接。对拼接后得到的进行矩阵卷积操作,卷积核设置为,即 1 次对 API 函数调用序列中的 h 个连续 API 函数进行特征提取。如对卷积得到一个新特征该过程可以表示为:

式中:b 为偏移参数;f 为非线性函数。对 1 个长度为 n 的 API 函数调用序列中间每一个大小为 h 的子序列进行卷积操作,就可以得到整个序列的特征映射为:

进行一次池化操作(max-overtime pooling),即选择特征映射中最大值作为卷积核 w卷积后的对应特征。进行池化操作的原因一方面是减少特征数量,保留最典型的特征;另一方面是API 函数调用序列长度各不相同,池化后避免了由于长度差异导致的缺失特征值对模型的影响。

整个模型的卷积层有多个卷积核,每个卷积核经过卷积、池化后都可以得到一个特征。将这些特征一起传入全连接层,就可以输出一个类别的概率分布,其中概率最大的类别就作为输入 API 函数序列的类别。

2  动态分析与行为特征提取

在本节中,将介绍本文勒索病毒数据集的构建与软件特征提取的过程和结果。

2.1 实验数据

本文研究的软件样本类别是 Windows 平台上的可执行软件样本(exe),其可以分为恶意软件样本和良性样本两大类。在恶意软件样本的选择上结合了电力系统的实际情况,包含了隐匿高危勒索病毒样本。课题使用的恶意软件样本主要来自 Virus Total 等恶意样本开源网站。课题使用的良性软件样本来自 360 应用商店,样本均经过 360 恶意软件检测确认。本课题总共收集到 1 000 个恶意软件样本(不包括勒索病毒家族样本)、100 个良性软件样本。

由于目前尚没有根据勒索病毒家族分类的公开的数据集,因此勒索病毒样本及其所属家族只能通过其在 Virus Total、VirusShare 等开源网站上的分析信息判断,将反病毒厂商检测引擎给出的占比最大的家族定为该病毒样本的所属家族。最终获得的勒索病毒家族名称与样本数量分布如表 1 所示。

表 1 数据集勒索病毒家族构成

2.2 Cuckoo 动态行为分析

本文搭建的 Cuckoo Sandbox 环境中主机使用的是 Ubuntu 18.04.1 LTS 操作系统,在主机上安装了Cuckoo Sandbox 2.0.7、VirtualBox 5.2 等软件。客户机使用的操作系统是 Windows 7 专业版并以虚拟机的形式通过 VirtualBox 5.2 安装在主机上。

为了便于主机对客户机的控制和软件样本的运行,客户机关闭了防火墙、系统自动更新、用户账户控制,并安装了 Python、pip、pillow 等软件用于运行 agent.py 脚本。

2.3 行为特征提取

软件在与操作系统进行交互时通常使用 API 函数。为了使文件大小更小、更加隐蔽、传播更迅速,勒索病毒往往利用系统 API 函数实现文件管理、网络连接、注册表访问等行为。本小节在 Cuckoo Sandbox 提供的分析报告的基础上,提取了勒索病毒等软件样本的 API 调用信息,并在提取的行为信息中分析了勒索病毒的部分典型行为。

从软件行为分析报告中提取 API 函数调用行为信息的流程如图 2 所示。提取的行为报告位置是 [“behavior”][“process”] 字段,该字段记录软件运行期间每个进程的 API 函数调用情况。

图 2 API 函数调用信息提取流程

3 勒索病毒检测器训练

本节在 2.3 节特征提取的基础上,训练了勒索病毒检测器与家族分类器。

3.1 API 函数特征选择

本节中,训练勒索病毒家族分类器使用的特征是软件样本调用的 API 函数名称及相应的频率。如果将全部出现过的 API 函数名称作为特征直接进行分类器的训练,不仅会增加模型训练的时间消耗,还会因为无效或者干扰特征的保留使模型的分类效果下降。

利用 2.3 节获得的软件 API 函数调用频率信息,并利用 R 语言的 Boruta 算法包对 API 函数进行特征选择。由于分类任务分为勒索病毒检测的二分类和勒索病毒家族分类的多分类,两种分类数据集不同、数据标签不同,因此需要分别进行特征筛选,保留与各自分类任务相关的 API 函数特征。

3.2 API 函数特征向量预训练

第 2 节获得的 API 函数的调用序列可以看作软件的“句子”的文本分析和分类,但是序列长度基本在 3 万以上,这给后续的分析带来了极大的数据读取和存储压力,也会影响卷积神经网络分类勒索病毒的效果,因此需要对 API 序列进行去重处理。对软件样本的 API 函数调用序列进行去重的算法结合软件的 API 函数调用的现实情况,设置重复序列的长度范围为 ,遍历一遍序列后删去所有重复子序列。

利用全部样本的 API 函数调用序列构成了一个文档输入 Word2vec 模型,获得 API 函数的特征表示。特征向量预训练使用了 Skip-gram 模型结构,设置API 函数的特征向量的维数为 50 维,迭代次数为10 轮,模型训练结束后将特征向量保存为“APIvec.bin”文件,用于后续的分类器训练。

3.3 分类器测试效果

在本节中,分别使用传统的机器学习算法决策树、随机森林模型和卷积神经网络的方法训练勒索病毒的检测器与家族分类器。

3.3.1 决策树模型

决策树模型设定勒索病毒检测与分类的训练集与测试集的划分比例为 9 ∶ 1。使用决策树算法训练勒索病毒检测器与勒索病毒分类器,其中勒索病毒检测器的模型测试混淆矩阵如图 3 所示,勒索病毒检测器的准确率为 94.56%,分类精度为97.05%,召回率为 89.18%。勒索病毒家族分类器的模型测试混淆矩阵如图 4 所示,勒索病毒检测器的准确率为 82.35%。

图 3 决策树算法检测器测试混淆矩阵

图 4 决策树算法家族分类器测试混淆矩阵

3.3.2 随机森林算法

随机森林算法设定勒索病毒检测与分类的训练集与测试集的划分比例为 9 ∶ 1,设置随机森林中的决策树数量为 150,训练勒索病毒检测器与勒索病毒分类器。其中勒索病毒检测器的模型测试混淆矩阵如图 5 所示,勒索病毒检测器的准确率为96.73%,分类精度为 94.72%,召回率为 97.29%。勒索病毒家族分类器的模型测试混淆矩阵如图 6 所示,勒索病毒检测器的准确率为 90.19%。

图 5 随机森林算法检测器测试混淆矩阵

图 6 随机森林算法家族分类器测试混淆矩阵

3.3.3 卷积神经网络模型

设置卷积神经网络模型训练集与测试集的比例划分为 8 ∶ 2。模型训练时设定平均序列长度为 5 000,batchsize 为 10,丢弃概率为 0.5,学习率为 0.001。设置序列的最大长度为 5 000。预训练得到的 API函数名称特征向量维度为 50 维,结合软件的 API函数调用的现实情况设置卷积核大小为 2×50,3×50,4×50,5×50。

勒索病毒检测器的模型测试混淆矩阵如图 7 所示,勒索病毒检测器的准确率为 97%,分类精度为95.62%,召回率为 95.09%,F1-score 为 96.03%。勒索病毒家族分类器的模型测试混淆矩阵如图 8 所示,勒索病毒检测器的准确率为 94%,分类精度为89.1%,召回率为 82.04%,F1-score 为 76.42%。

图 7 卷积神经网络检测器测试混淆矩阵

图 8 卷积神经网络家族分类器测试混淆矩阵

综上,无论是使用决策树算法还是随机森林算法,都可以有效实现对勒索病毒的检测与家族分类。其中,随机森林模型的勒索病毒检测和家族分类测试效果都明显优于决策树算法。使用卷积神经网络的方法对勒索病毒的检测和家族分类效果都有提升,其中检测准确率高达 97%。在家族分类方面,卷积神经网络的提升更加明显,模型测试准确率为 94%。此外,可以发现勒索病毒的检测效果明显优于勒索病毒家族分类效果。虽然使用卷积神经网络方法的分类器模型准确率较高,但是部分家族的分类精度、召回率不高。勒索病毒家族分类效果不佳可能是因为家族数据集的不完善,数据集内有的家族的样本较少,这使得模型不能充分学习该家族的特征,导致模型对部分勒索病毒家族的分类效果不好。

4  结 语

近年来,勒索病毒攻击给企业和个人带来了很大困扰,隐匿高危勒索病毒的肆虐也为勒索病毒的防御带来了新的挑战。本文从电力系统的实际情况出发,以 Windows 平台的可执行文件格式的勒索病毒为研究对象,研究其及其所属各勒索病毒家族的行为特征,并利用 Cuckoo Sandbox 软件获取勒索病毒软件的行为分析报告,从中提取中样本的行为特征。针对获得的勒索病毒行为特征,分别采用了决策树、随机森林的方法和基于卷积神经网络的深度学习算法训练了分类器实现了勒索病毒的检测与家族分类。

本文的勒索病毒检测与家族分类直接对API 函数调用序列进行分析,对勒索病毒的应急防护有积极意义,能够帮助企业或个人在受到勒索病毒威胁时快速反应,即针对勒索病毒所属家族做出针对性防御,也可以与动态行为分析结合用于除勒索病毒外其他种类恶意软件的分析。

本文的勒索病毒检测器准确率达到了 97%,勒索病毒家族分类准确率达到 94%。