0 引 言
勒索软件(ronsomware)被广泛认为是一类以加密数据或者锁定设备为攻击方式,勒索赎金为主要目的的恶意软件
[1]。传统恶意软件通常旨在实现隐身,在不引起怀疑的前提下收集私密信息,如银行凭证、用户按键、屏幕截图等
[2]。2019年国内勒索软件报告
[1]显示,目前的勒索软件已经具有高对抗和目标精准化的特性,其攻击对象逐渐从个人电脑转移至服务器和工业控制系统。如何及时且准确地检测勒索软件已成为行业内的研究热点
[3]。
目前对抗勒索软件的技术以静态特征分析和动态行为检测
[4]为主。静态特征分析技术主要收集勒索软件和正常软件的操作码序列
[5]或系统调用序列
[6],并采用启发式特征匹配或机器学习算法训练分类器识别勒索软件。该技术实现简单、检测速度快,但难以对抗代码混淆和加壳
[7],同时由于勒索软件本身代码的复杂性以及其更新的频繁性,训练过程存在概念漂移威胁
[8],因此缺少对未知勒索软件足够的感知能力
[3]。动态行为检测技术关注勒索软件运行时的行为模式,对操作系统中进程文件访问、网络通信、加密运算等
[4]操作进行实时监控。如利用已有勒索软件样本运行时的文件访问行为
[9]和文件访问相关的系统调用序列
[10]作为特征,构造分类器或挂钩与加密行为相关的系统调用函数
[11]来检测可疑的文件访问行为和加密行为,或利用勒索软件加密后文件信息熵增大的特点,通过监控写文件事件中写入内容熵值的大小来检测勒索软件
[12]。但传统的全局动态检测技术需要捕获足够多的勒索软件运行信息才能触发报警条件,导致其检测不够及时,用户仍会遭受一定程度的损失
[13],且难以消除正常加密和压缩软件对检测结果的干扰。另外已有研究表明降低勒索软件文件访问速度或以多线程访问可绕过目前大多数动态检测方法
[14]。
通过部署诱饵文件并对其实施监控的方法能在一定程度上提升检测的及时性
[15],如在用户的桌面及文档
[16]或用户频繁访问的文件夹内
[17]部署诱饵文件,诱饵文件名模仿正常文件
[13],并定期更新诱饵文件的访问时间
[17],通过监控诱饵文件是否被加密来检测勒索软件。但目前相关研究仍未提出系统的诱饵文件设计与部署方法,往往由于诱饵文件设计不理想导致其研究整体检测的误报率上升
[13]。根据以上背景并结合已有研究,本文从诱捕防御出发,提出了一种基于诱饵文件的勒索软件及时性动态行为检测方法DTRD(decoy-based timely ransomware detection),提升了在勒索软件对抗中防御者的防御资源,进一步增强已有的动态检测方法。本文贡献如下:
1) 通过大量勒索软件样本分析,总结出现有勒索软件遍历和加密用户文件的基本规律;
2) 根据勒索软件的文件遍历规律,提出了一种在勒索软件检测领域中动静态结合的诱饵文件设计与部署方法;
3) 结合诱饵文件部署,提出了一种勒索软件的及时性动态检测方法。
1 诱饵文件相关研究
利用诱饵文件进行安全防御的方法早已用于针对恶意软件的入侵检测系统
[18]。文献[
19]首次引入了“蜜标(honey token)”的概念,将伪造的、引诱攻击者的文件或数据部署到内网系统中,通过监测其非授权访问检测非法入侵。该方法通过伪造的资源吸引攻击者的注意力从而发现攻击或消耗攻击者的时间
[20]。文献[
21]拓宽了蜜标的概念,将伪造的账户登录密码、企业机密信息等蜜标数据放入文件中形成诱饵文件,并检测对诱饵文件的非法访问行为。文献[
22]首次系统化地研究了诱饵文件的度量属性,包括可信度(believability)、吸引度(enticement)、醒目度(conspicuousness)、无干扰度(non-interference)和可检测度(detectability)。文献[
23]则针对诱饵文件的有效性进行了大量用户实验,证明了诱饵文件部署在入侵检测中具有良好的实际效果。
对于在勒索软件检测方面如何设计和部署诱饵文件,目前尚无系统的研究。文献[
13]提出在每一个文件夹中部署诱饵文件,文件名模仿正常用户文件,例如直接在正常文件名后添加随机后缀字符作为诱饵文件名。在每个文件夹中部署诱饵文件会增大监控开销,该方法主要应用于沙箱分析环境。文献[
17]提出将诱饵文件部署在用户频繁访问的文件夹中并定期更新文件的访问时间,但未指明用户频繁访问的是哪些文件夹。勒索软件行为多样,它可能不会访问诱饵文件所在的文件夹,从而影响检测效率。文献[
16]提出将诱饵文件部署在用户的桌面、文档文件夹,并将文件夹内的正常文件名作为输入,利用同义词及相似度匹配算法生成与正常文件名类似的诱饵文件。但单个文件夹内文件通常较少,该方法难以生成理想的诱饵文件。文献[
24]手动逆向分析了不同家族的10个勒索软件样本,汇总了勒索软件在加密过程中优先访问的文件夹,指出这些文件夹可作为部署诱饵文件的优先位置,并提出了在文件正序遍历和逆序遍历两种情况下通过添加前缀构造诱饵文件名的构造方法,但其添加的前缀单一,容易被攻击者猜测,且其逆向分析的实验样本过少,实验结果无法广泛应用。
RWGuard
[25]提出了一种较全面的诱饵文件设计方法,其中诱饵文件名和文件夹内某一正常文件相似;文件类型限定为txt、doc、pdf、ppt、xls五类;文件内容则从文件夹内同类型文件中复制。然而诱饵文件与正常文件相似可能会导致用户难以区分诱饵文件,增大对用户的干扰。文献[
26]提出了Unix系统中一种基于诱饵文件的勒索软件检测方法R-Locker,该方法首先在用户主目录创建一个命名管道作为核心诱饵文件,随后在系统各个位置创建该命名管道的符号链接来提高检测率,最后对该命名管道进行监控。任何对该命名管道的读行为均会被认定是勒索软件操作。但由于正常软件(如杀毒软件等)可能会扫描并读取用户文件内容,它可能误读诱饵文件从而导致误报。
在勒索软件方面,文献[
27]认为勒索软件编写者已经意识到诱饵文件的存在,提出了三种勒索软件可能用来检测诱饵文件的方法:其一是诱饵文件的静态特征指纹检测,其二是利用诱饵文件的文件时间进行检测,其三则是随机顺序加密,即仅随机加密文件夹内的某些文件而非全部文件,来绕过部署在特定位置的诱饵文件。
表 1从部署位置、诱饵文件名、诱捕方法的局限性等方面总结了上述文献。
2 DTRD方法
勒索软件的分析结果有助于勒索软件检测方法的设计。本节首先介绍勒索软件的实证分析,通过相关实验,得出其在加密阶段的文件遍历模式;然后从诱饵文件构造、部署和监控三个方面阐述本文提出的DTRD方法。
2.1 勒索软件文件遍历模式
勒索软件在加密阶段首先会列举用户系统中的文件,该文件满足特定文件类型才对其进行加密。加密前工作主要包括文件遍历和文件类型过滤两部分。为了得到勒索软件在文件遍历时的遍历顺序,本文使用插桩工具PIN对勒索软件样本进行插桩分析,插桩点为Windows系统中与文件遍历相关的系统调用函数FindFirstFile和FindNextFile。当勒索软件样本调用FindFirstFile和FindNextFile进行文件遍历操作时,PIN能通过系统调用中的路径参数监控到勒索软件当前遍历的文件路径并进行记录。这样,当样本运行结束后即可得到其在文件遍历过程中完整的遍历顺序。然后对所有样本遍历的结果进行汇总分类,并对每一类遍历类型对应的文件遍历序列进行合并及去重,并按访问顺序排序,可得该类型勒索软件理论上最先访问的文件夹。通过实验分析,我们认为勒索软件的文件遍历模式主要有3种,相关描述及其对应的最先访问文件夹如
表2所示(〈Username〉表示操作系统中每个用户的用户名)。
除文件遍历外,勒索软件通常还对加密的文件类型有限制,即文件类型过滤。通过对大量样本的静态分析,我们认为勒索软件的加密对象主要为:1) 项目工程类文件,包括项目源代码文件以及配置文件;2) 文档类文件,包括办公类型文件如Doc、PPT等;3) 音视频图像文件,包括各类音视频以及图画设计类文件。当遍历到某一文件时,勒索软件首先检测该文件是否属于以上文件类型,如果是,则进入加密阶段加密该文件;如果不是,则跳过该文件继续遍历。
2.2 诱饵文件构造
在勒索软件检测环境中,诱饵文件的设计目标是可信度,即保证自身能被勒索软件访问,除此之外也需要尽可能使自身最先被勒索软件访问。若设计方式不理想,可能导致勒索软件识别出诱饵文件后跳过对诱饵的访问,使得检出率下降;或导致勒索软件加密文件夹内的其他正常文件后才访问诱饵文件,造成检测方法及时性下降。因此,诱饵文件的设计方式直接决定了基于诱饵文件的检测方法能否有效地检测出勒索软件。本文将从诱饵文件的文件命名、文件类型配置、文件内容填充以及文件元数据配置等方面来阐述具体设计方式。归纳出的各部分设计方式如
表 3所示。
1) 文件名:诱饵文件命名的基本目标有两个,一是伪装性,即诱饵文件的命名需要接近于正常文件,且不能被勒索软件识别出来;二是及时性,即诱饵文件需要尽可能先于文件夹内的其他正常文件被勒索软件访问。通过对勒索软件的静态分析发现,勒索软件基本使用FindFirstFile和FindNextFile这类API进行文件遍历操作。进一步研究发现,该类API的文件遍历结果由文件名的Unicode编码顺序来排序,即文件名Unicode编码排序越靠前的文件,在返回结果中也越靠前。基于此结论,DTRD采用首尾文件名裁剪的方法,首先将文件夹内Unicode排序最小的正常文件的文件名删减若干字符,并以此命名首部诱饵文件;然后在Unicode排序最大文件的文件名后增加若干随机后缀字符,并以此命名尾部诱饵文件。通过此种命名方式,保证首尾诱饵文件的Unicode编码排序分别为最大和最小,因此无论勒索软件在文件夹内采用正序或逆向的遍历方式,诱饵文件均能最先被访问。另外,由于诱饵文件名是由正常文件删除或添加字符得到,与正常文件具有一定程度的相似性,因此可保证其伪装性,增强可信度。在此方法中,每个文件夹仅部署两个诱饵文件,对用户的干扰以及监控的开销也相对较低。
2) 文件类型和内容:诱饵文件的文件类型决定了诱饵文件是否会被勒索软件访问。由2.1节可知,勒索软件会对文件类型进行过滤,其加密的文件类型主要有项目工程文件、文档类文件以及音视频类文件,因而诱饵的文件类型也必须属于这三类之一,但无须全部包含这三类文件。基于此结论,DTRD在部署时仅随机选取一类文件作为诱饵的文件类型。此外勒索软件可能通过文件头来判断文件类型以及跳过文件内容为空的文件,因此还需根据诱饵文件的类型填充相应的文件头,并填充随机数据。为保证其可信度,填充的随机内容需与文件类型相关,如在文档类诱饵文件中仅添加随机字符串,在音视频类诱饵文件中则添加随机音视频字节流等。
3) 元数据:文件元数据主要指文件创建日期、访问日期、修改日期和创建者等信息。为了进一步保证诱饵文件的真实性,需要对此类信息进行适当配置。创建者需配置为当前系统用户,文件时间需满足“创建日期<修改日期≤访问日期<当前日期”的逻辑条件。
2.3 诱饵文件部署
诱饵文件的设计直接决定了勒索软件检测的有效性,而诱饵文件部署则决定了勒索软件检测的及时性,是整个设计与部署过程的核心。具体部署方法如
表3所示。DTRD中的部署方式包括静态部署和动态部署两部分。
2.3.1 静态部署
由2.1节可知勒索软件的3种文件遍历方式及勒索软件在每种遍历模式下最先访问的文件夹(
表 2),因此将这些文件夹作为诱饵文件的部署位置,对其进行实时监控。由于该类部署位置基本存在于所有正常用户的系统中,故可在检测前进行诱饵文件部署,且检测过程中无须改动诱饵文件。无论勒索软件的遍历方式如何,该方法都能保证诱饵文件较早被访问到,进而能较早地检测出勒索软件。
2.3.2 动态部署
通过对2.1节所示的优先遍历和特殊文件夹遍历类型的勒索软件家族进行分析发现,部分样本会查询操作系统或软件保存的用户最近访问过(Most-Recently-Used,MRU)的文件,并优先加密MRU文件以及其实际所在的文件夹,操作系统及部分软件的MRU文件保存目录如
表 4所示。由此可见仅依靠静态部署难以及时检测到此类勒索软件。又因为用户的MRU文件会随用户的文件访问行为而改变,需要部署诱饵文件的文件夹时刻会发生变化,所以无法通过静态方式来进行部署。因此本文提出诱饵文件的动态部署方法,实时监控操作系统或软件的MRU保存目录,跟踪MRU文件变化,进而动态地在MRU文件所在的实际文件夹中部署或删除诱饵文件。若检测到MRU保存目录中增加了新文件,且该文件所在文件夹内还未部署诱饵文件,则需要进行相应部署;如果检测到MRU目录中有文件删除(即该文件已不再是MRU文件),且其所在文件夹中不存在其他MRU文件,则需要将诱饵文件从该文件夹中移除。通过动态部署,能够保证用户当前的MRU文件所在的文件夹一定包含诱饵文件,可以有效检测针对MRU文件的勒索软件,弥补静态部署的不足。
在上述部署中,部署位置和命名确保了诱饵文件的检测及时性,无论勒索软件遍历方式如何,其在加密过程中一定会较早遍历到诱饵文件所在的文件夹,并且在文件夹内最先遍历到诱饵文件;文件类型、内容填充和元数据配置则确保了诱饵文件的可信度,防止其被勒索软件识别;文件数量则将整个诱饵文件部署带来的系统开销和对用户的干扰降到最低。
2.4 诱饵文件监控
当诱饵文件部署完毕后,需要对相应的事件进行监控。监控对象主要有两类:一类是
表 4所述的系统和软件的MRU保存位置;另一类则是静态部署和动态部署中生成的所有诱饵文件,通过对其进行实时文件监控来检测勒索软件。DTRD中事件监控均通过操作系统底层文件过滤驱动监控内核事件来实现,监控示意图如
图1所示。
2.4.1 MRU保存位置监控
对该对象的监控主要包括文件事件和注册表事件监控。对于MRU保存在文件中的情况,需监控该文件的写入事件;对于MRU保存在文件夹中的情况,则需要监控文件的创建和删除事件;而MRU保存在注册表中时,则需要监控注册表键值改动事件。通过对保存位置的文件或注册表事件的监控可实时跟踪MRU变化,并反馈至动态部署模块 ,并由动态部署模块根据MRU变化情况增加或删除诱饵文件。
2.4.2 事件监控
由于文件加密是勒索软件的核心特性,DTRD方法聚焦于勒索软件对诱饵文件的文件加密事件。现有的文件加密方式主要有三种,每种方式包含的文件事件如
图2所示。1) 密文覆盖原文:将加密后的密文直接写回原文件中,覆盖原始内容(
图2 (a));2) 新建密文,删除原文:将加密后的密文写入新文件,并将原文件删除(
图2(b));3) 新建密文,重写原文:将加密后的密文写入新文件,并将原文件替换为随机内容(
图2(c))。
由于诱饵文件部署分为静态和动态两类,因此该部分的监控对象也分为静态部署中提前配置的诱饵文件和动态部署中实时增删的诱饵文件。静态部署的诱饵文件在监控过程其部署位置和文件信息均不发生变化;而在动态部署中,由于诱饵文件部署位置的变化,需要监控模块动态更新其监控对象。在事件监控方面,由于勒索软件在进行加密操作时会用加密密文覆盖原文件内容,或者直接删除原文件,以达到原文件内容不可恢复的目的,基于此,DTRD方法只关注针对诱饵文件的写事件或删除事件,其他类型的文件事件则不在监控范围中。如
图2所示,无论勒索软件加密方式如何,均会触发对诱饵文件的写事件或删除事件,因此DTRD采取的监控方法能检测所有加密类型的勒索软件。在不考虑用户误写入或误删除诱饵文件的情况下,诱饵文件理论上不会被写入或删除,因此只要监控到针对诱饵文件的写入或删除事件,即可推断为勒索软件行为。通过诱饵文件动静态结合的部署方法,可保证在勒索软件刚开始加密时即可监控到其对诱饵文件的写入或删除操作,进而采取相应防护措施以将用户损失降至最低。
2.4.3 实时检测
如
图1所示在本文基于诱饵文件的勒索软件检测中,检测前由诱饵部署模块根据
表2所列文件夹部署静态诱饵文件,然后根据当时的MRU保存目录部署初始的动态诱饵文件,并将所有已部署诱饵文件添加至事件监控模块的诱饵文件监控列表。在检测过程中,事件监控模块实时监控来自进程的各类内核事件。若内核事件的目标对象为MRU保存目录,且内核事件为文件写入、删除、创建或注册表改动,则认为MRU发生变化,由事件监控系统将变化结果实时反馈至诱饵部署模块,诱饵部署模块则根据MRU变化实时地增加或删除动态诱饵文件,并更新诱饵文件监控列表。若内核事件的目标对象为已部署的诱饵文件,且内核事件为文件写入或删除,则认定该事件由勒索软件产生,事件监控模块收集相关进程的信息并汇总为检测结果。
3 实 验
本文实验主要分为两部分。第一部分为勒索软件文件遍历实验,通过2.1节所述方法利用二进制插桩工具PIN对勒索软件样本进行动态插桩实验,得出勒索软件的文件遍历序列及对应样本的文件遍历类型,并根据遍历类型进行分类得出每种遍历类型的勒索软件最先遍历的文件夹序列。第二部分为勒索软件实时检测实验,通过如2.2节描述的方式设计诱饵文件,并将诱饵文件部署到实验1得出的文件夹序列中,随后利用Windows底层文件过滤驱动对诱饵文件进行实时监控,并针对勒索软件样本进行动态检测实验。
本文实验对象为来自互联网和安全公司的1 000个勒索软件样本,其中,前500个样本用于进行文件遍历实验,得出勒索软件文件遍历时的基本规律;后500个样本则用于勒索软件动态检测实验,检测其是否满足勒索软件文件遍历的规律以及DTRD方法的检测率。
本文的实验环境为Windows 7 64位虚拟机系统。在存储配置方面,创建了从A到J共10个硬盘逻辑分区,以及1个网络驱动器H,系统盘为C盘;在网络配置方面,由于部分勒索软件在运行时需要与远程C&C服务器通信,因此系统只开放Web服务和DNS服务,并禁止其他网络访问,在保证勒索软件正常工作的前提下防止勒索软件通过网络进行二次传播。两次实验均使用该虚拟机进行,且虚拟机的存储配置和网络配置均相同。
3.1 勒索软件文件遍历实验
实验前,操作系统中的各个磁盘以及网络驱动器中均已部署了多个测试文件及文件夹。在对每个勒索软件样本进行插桩实验时,PIN首先会针对每个样本创建一个日志文件。每当样本调用FindFirstFile和FindNextFile进行文件遍历操作时,PIN会记录当前遍历的文件路径并按时间排序输出到日志文件中。本文还将日志文件后缀设置为随机字符串,防止其被勒索软件加密。当所有样本运行结束后,利用python对每个日志文件进行去重和去干扰操作,并归纳出3类文件遍历模式及对应的最先访问文件夹,如
表 2所示。本文还将日志文件根据勒索软件家族进行分类,得到每个家族的文件遍历顺序以及相应的文件遍历类型,实验结果如
表5所示。
3.2 勒索软件动态检测实验
针对3.1节得到的勒索软件文件遍历规律,本节设计了勒索软件动态检测实验对该规律进行验证。实验前,在3.1节已经配置相应测试文件的情况下,在
表2所示的文件夹中按照2.2节中的部署方法从文件部署位置、文件命名、文件部署数量以及文件类型等方面部署相应的诱饵文件。部署完成后按2.3节所述对相关MRU保存目录和已部署的诱饵文件进行事件监控,最后以勒索软件家族进行分组,每个家族各取50个勒索软件样本进行动态检测。另外,为了测试DTRD方法的及时性,监控系统在监控文件事件的同时会记录每个样本已遍历过的文件数,因此可得到样本在被检测出时已遍历的文件数量,进而可得到每个勒索软件家族中被检测出的样本在被检测出时平均已遍历的文件数。另外,为测试本文提出的动态诱饵部署方法对及时性检测的影响程度,本文在仅静态部署诱饵和动静态诱饵结合部署两个实验条件下分别进行了上述实验,各家族样本的检测结果及平均已遍历文件数如
表6所示。
从
表6可看出,DTRD方法除Dalexis和Onion家族外均有较高的检测率。对于Dalexis和Onion,通过手动分析发现,部分样本本身无法正常运行或包含了相应的环境感知模块,当检测到被监控时会停止执行,因此该部分样本无法正常遍历系统文件夹,从而导致监控系统无法检测。
另外由
表6可见,大部分勒索软件样本平均已遍历文件个数在1个以下,可见实验样本均能在勒索软件遍历文件的较早期阶段被检出。对于直接遍历类型的勒索软件家族,其平均已遍历文件数全部为0,即该家族的勒索软件在未加密任何正常文件的情况下就被检测出;而特殊文件夹遍历和优先遍历类型的平均已遍历文件数则相对较高,进一步进行手动逆向分析发现,同家族间每个样本的优先遍历或特殊遍历列表存在一定差异,猜测该现象是因为同家族内部变种较多,每个变种可能根据自身需求配置了一部分特殊文件夹,而该类文件夹不在DTRD的部署范围内,导致未能及时检测到该类勒索软件。但即使如此,DTRD方法仍能在勒索软件加密过程的早期检测到勒索软件,用户损失仍然可控。另外,对比静态诱饵部署和动静态结合部署两次实验结果发现,对于优先遍历和特殊文件夹遍历中的部分家族如Cerber、Reveton和Crysis,在采取动静态结合的诱饵部署方式后,其被检测出时的平均已遍历文件数显著降低,即检测方法的及时性显著提高,分析得知这三类家族的优先遍历列表中均包含系统保存的MRU文件。可见动态诱饵部署的应用,能显著增加DTRD方法针对该类勒索软件检测的及时性。
4 结 语
本文提出了一种新型的基于诱饵文件的勒索软件动态检测方法DTRD,通过对大量勒索软件样本的行为分析,得到了勒索软件在进行文件遍历及加密操作时的基本规律,并总结出了勒索软件在运行时最先进行遍历并加密的文件夹列表。基于以上结论,本文根据勒索软件在文件遍历时的基本规律配置相应的诱饵文件,将诱饵文件部署到勒索软件最先访问的文件夹中,并利用Windows底层驱动对诱饵文件的文件事件进行监控,以此识别勒索软件。本文相较于以往的研究进一步分析了诱饵文件的部署位置,并进行了相关实验。实验结果表明勒索软件能够在运行的早期被检测到,一定程度上降低了用户损失,因此DTRD方法相比以往研究具有更高的时效性,可作为现有基于诱饵文件的勒索软件检测方法的有效补充。但本文的研究仍有不足之处,如未考虑勒索软件样本针对监控工具或检测环境做出的逃逸行为,未考虑检测方法的性能影响因素,这些问题是下一步要进行的研究。
国家自然科学基金(61972297)
国家自然科学基金(U1636107)