UNVEIL 一种大规模检测勒索软件的自动化方法

| categories paper  translations  | tags malware 

摘要

尽管勒索软件早已不是什么新奇的概念(这种攻击甚至可以追溯到20世纪80年代), 但这种类型的恶意软件最近开始复苏变得流行起来. 事实上, 近几年以来已经报道了数起备受瞩目的勒索软件攻击, 例如对索尼的大规模攻击导致了索尼不得不推迟发布电影«刺杀金正恩».

勒索软件通常会锁定受害者桌面, 使用户无法访问系统, 或是加密, 覆写, 删除用户文件, 以此来勒索钱财. 然而, 虽然现今已经提出了许多通用的恶意软件检测系统, 但没有一个检测系统有尝试专门解决勒索软件的检测问题.

在本论文中, 我们提出了一种名为UNVEIL的新型动态分析系统, 专门用于检测勒索软件. 而分析的关键依据就是, 勒索软件要想成功实行攻击, 就必定会去篡改用户的文件或桌面. UNVEIL会生成一个伪造的用户环境, 并检测勒索软件与用户数据的交互时间, 同时还会跟踪系统桌面上发生的可能是由勒索软件行为造成的变化. 我们的评估结果显示, UNVEIL 显著地提高了现有技术水平, 并能够检测出以往反病毒公司未能检测出的在野勒索软件.

1 绪论

恶意软件目前仍是互联网上最重要的安全威胁之一. 近期, 一种称为勒索软件的特定恶意软件在网络犯罪中变得非常流行. 尽管勒索软件这个概念并不新奇 - 这种攻击早在20世纪80年代末就已经发生过 - 但勒索软件的成功也使得勒索软件近几年衍生出了越来越多的家系[7,20,21,44,46]. 例如, CryptoWall 3.0作为一个高利润的勒索软件家族在世界各地成为头条新闻, 估计造成了3.25亿美元的损失[45], 又如索尼遭受勒索软件攻击事件[27]引发了媒体的大量关注, 美国官方甚至宣称是朝鲜发起了这次攻击.

勒索软件有多种方式运作, 简单的可以锁定受感染计算机的桌面, 复杂一些可以对受害者所有文件进行加密. 与传统恶意软件相比, 勒索软件表现出了一定的行为差异. 例如, 传统恶意软件强调隐蔽性, 以便于在不受怀疑的情况下收集银行证书信息或用户按键记录. 而与之相反, 勒索软件完全不在意隐蔽性, 它攻击的先手就是公开地告知用户你已经被感染了.

现今, 基于行为的恶意软件检测一个重要推动因素就是动态分析技术. 这些系统在一个受控环境中运行捕获的恶意软件样本并记录其行为(例如系统调用, API调用和网络流量). 不幸的是, 专注于行为的恶意软件检测系统(例如, 用于键盘记录的可疑操作系统功能)可能无法检测勒索软件, 因为这类恶意代码和那些使用加密或压缩的良性应用程序活动有相似之处. 此外, 这些检测系统目前还不适合检测勒索软件的具体行为, 从反病毒扫描器对勒索软件家族的错误分类就可以证明这一点[10,39].

在本论文中, 我们提出了一种新的动态分析系统, 旨在分析和检测勒索软件攻击并对其行为进行建模. 在我们的方法中, 系统会创建一个伪造的执行环境, 并监控勒索软件与环境的交互. 密切地监控勒索软件与文件系统的进程交互可以使检测系统精确地表征加密勒索软件的行为.

与此同时, 系统会跟踪程序对计算机桌面的可疑修改, 以表明这是勒索软件样的行为. 我们关键依据就在于勒索软件要想成功, 就必须访问和篡改受害者的文件或桌面. 我们的自动化方法简称为UNVEIL, 该方法允许系统大规模检测许多恶意软件样本, 并可靠地检测并标记那些有着类似勒索软件行为的恶意软件样本. 此外, 该检测系统还能提供对勒索软件运行方式的见解, 并自动区分不同类别的勒索软件.

我们在Windows流行的开源恶意软件分析框架–Cuckoo沙盒[13]上实现了UNVEIL的原型. 系统使用定制的Windows内核驱动来实现, 该驱动可以为文件系统提供监视功能. 此外, 我们还添加了在沙盒外运行的组件, 以监视目标计算机系统的用户界面.

我们在长期的研究中分析了近期在野的148,233个恶意软件样本. 我们的大规模实验结果表明, UNVEIL能够在真实世界的实时数据反馈中正确检测多个家族中的13,637个勒索软件样本. 我们的评估结果还表明, 目前的恶意软件分析系统可能还没有一个准确的行为模型来检测不同类别的勒索软件攻击。

例如, 系统能够正确检测出7,572个还未被传统AV检测出的勒索软件样本, 这些样本都属于现代文件锁定类型的勒索软件家族. UNVEIL还能够发现一种尚未被任何安全公司报告过的新型勒索软件. 这个勒索软件在一些著名的反恶意软件公司提供的现代沙盒中也没有显示出任何恶意行为,而在UNVEIL分析时则显示出了大量的文件加密活动。

从我们方法的高检测率可以表明, UNVEIL可以填充当前恶意软件分析系统快速识别新型在野勒索软件的空白. 只需在分析环境中附加到文件系统驱动程序, UNVEIL就可以轻松地部署在任何恶意软件分析系统上.

总而言之, 本论文做出了如下贡献:

  • 我们提供了一种新型技术用于检测针对受害者计算机上存储文件进行锁定的勒索软件(也称为文件锁定器). 该检测技术基于监控系统范围的文件系统访问信息, 并结合部署的仿真用户环境来判定勒索软件。

  • 我们进行了大规模检测, 评估结果表明我们的方法确实可以有效地检测勒索软件
  • 我们自动检测了近期的148,223个恶意软件样本数据集并验证其中确有13,637个勒索软件. 另外, 我们还发现了一个尚未被报告的勒索软件样本. 评估结果表明, 我们的技术在实践过程中表现良好(达到了96.3%的真正率[TP]和0的假正率[FPs]), 并可用于自动识别提交给分析检测系统的勒索软件样本.

论文的其他部分结构如下. 在第2节中, 我们会简要介绍背景信息并解释不同类别的勒索软件攻击. 在第3节中, 我们描述了UNVEIL的架构并解释我们用于检测多类勒索软件攻击的方法. 在第4节中, 我们提供了有关动态分析环境的更多细节. 第5节会展示我们的评估结果. 第6节将会讨论该方法的局限性. 第7节这介绍相关工作, 最后在第8节总结本篇论文.

2 背景介绍

如图其他类型的恶意软件一般, 勒索软件使用了许多策略以躲避检测, 传播并攻击用户. 例如, 它可以执行多重感染或进程注入, 将用户信息泄露给第三方, 对文件加密以及与C&C服务器建立安全通信. 我们的检测方法中有假定勒索软件样本可以并会使用其他恶意软件样本可能使用的所有技术.

另外, 我们的系统也假定一次成功的勒索软件攻击会进行一项或多项以下活动.

显示持久桌面消息

勒索软件成功感染后, 恶意程序通常会给受害者显示一条信息. 这条勒索消息会通知用户他的电脑已经被锁定, 并提供如何付款以恢复访问权限的说明. 勒索消息可以有很多种方法生成, 比较流行的就是调用专门的API函数(例如, CreateDesktop())来创建一个新桌面, 并将其配置为受害者在受损系统之外的默认界面. 恶意软件作者也可以使用HTML或创建其他持久化窗口来显示勒索消息. 而显示持久桌面消息则是许多勒索软件攻击中的常见操作。

肆意加密或删除用户私人文件

加密式勒索软件攻击会列出并肆意加密其发现的任何私人文件, 通过扣留解密秘钥来限制访问. 加密秘钥可以由受害者主机上的恶意软件本地生成, 也可以在C&C服务器上远端生成后交付给受感染主机. 攻击者可以自己编写破坏函数或Windows API函数来删除用户的原始文件, 也可以使用加密后的文件覆写, 或通过Windows安全删除API进行文件删除.

基于某些属性选择性地加密或删除用户私人文件

为了躲避检测, 大部分的勒索软件样本都会选择性地加密用户私人文件. 最简单的方式就是, 勒索软件样本根据文件访问日期列出相关文件. 更复杂的情形就是, 恶意可以打开应用程序(例如, word.exe), 列出应用程序最近访问的文件. 勒索软件样本可以向任意Windows应用程序注入恶意代码来获得这类信息(例如, 直接读取进程内存).

在本次工作中, 测试的样本已经危害系统, 并能够在用户的文件或桌面上进行任意与勒索相关的操作, 我们在这种情景下展开的研究.

3 UNVEIL 的功能设计

本节将会讲述我们用于检测多类勒索软件攻击的技术. 读者可以参阅第4节了解原型的实现细节.

3.1 检测文件加锁器File Lockers

我们首先阐述为什么我们的系统需要在每个恶意软件运行时创建一个独特的人造用户环境. 随后我们会展示文件系统活动监视器的设计并解释UNVEIL如何使用文件系统监视器的输出来检测勒索软件.

3.1.1 生成人造用户环境

在真实环境中, 保护恶意软件分析环境免受指纹分析技术影响这并不重要. 复杂恶意软件的作者会利用分析系统内的静态特征, 并启动基于侦查的攻击[31]以对公共或私有恶意软件分析系统进行指纹识别. 分析系统的静态环境可视为恶意软件分析系统的阿喀琉斯之踵. 其中一个可以对恶意软件分析系统的有效性产生显著影响的静态特征就是, 那些可以有效用于指纹识别分析环境的用户数据. 也就是说, 即使是在一个比如虚拟化检测等传统技巧都不可行的裸机环境中, 一次不切实的用户环境查看都可能成为代码正在恶意软件分析系统中运行的迹象.

直观来看, 一个解决这样侦查攻击的可能方法就是, 在每次恶意软件运行时建立一个用户数据合法, 真实且不确定的用户环境. 这些自动生成的用户环境是一个”诱人目标”, 可以诱使勒索软件攻击用户数据, 同时也能避免被攻击者识别. 在实践中, 生成用户环境是一个不容忽视的问题, 尤其是在自动化过程中. 这是因为内容生成器不应允许恶意软件作者对分析环境内自动生成的用户内容进行指纹识别, 或是确定内容是否属于真实用户. 我们会在4.1节中详细说明我们是如何在每次勒索软件运行时自动生成一个人造但贴近现实的用户环境.

3.1.2 文件系统活动监视

UNVEIL中的文件系统监视器可以直接访问I/O请求中涉及的数据缓冲区, 从而使系统可以全面地查看所有文件系统的改动. 每一次I/O操作包括有进程名, 时间戳, 操作类型, 文件系统路径, 读/写请求的数据缓冲区指针及对应熵值. I/O请求均在尽可能最低的层中生成. 比方说, 在用户/内核模式中, 有多种方式可以去读, 写以及列举文件, 但所有这些函数最终都会转换为一系列的I/O请求. 无论何时一个用户线程调用I/O请求API, 都会生成一个I/O请求并传递给文件系统驱动. 图1展示的是Windows环境中UNVEIL的上层设计.

figure1.png

图 1: UNVEIL中I/O访问监视器的设计概览. 该模块监视了用户模式下进程的系统范围的文件系统访问, 这使得UNVEIL全面掌握与用户文件的交互信息

UNVEIL的监视器对所有指向用户模式进程生成的文件系统的I/O请求设置了回调函数. 我们注意到, 对于UNVEIL操作, 由于性能原因, 最好仅为每个I/O请求设置一个回调函数, 并且这也能保持对I/O操作完全的可见性. 在UNVEIL中, 用户模式进程与文件系统的交互被形式化为访问模式. 我们来考虑I/O请求记录中的访问模式, 其中访问踪迹(trace) $T$ 是序列 $t_i$ 的集合.

latex1.png

对于我们研究的文件锁定类的所有勒索软件样本, 我们根据经验观察到, 这些样本会产生一些具有独特重复模式的I/O访问记录. 这是因为这些样本都使用了单一的特定策略来拒绝用户文件访问. 在执行攻击时, 每个文件重复的I/O访问模式可以准确地反映出这种攻击策略. 因此, 这些I/O访问模式可以提取为特定勒索软件家族的独特I/O指纹. 要注意的是, 这里我们的方法主要考虑写入和删除请求. 我们将在3.1.2节中阐释为每个文件提取I/O访问模式的过程.

I/O 数据缓冲区熵值

在I/O访问记录中发现的每一个对文件的读写请求, UNVEIL都会计算对应数据缓冲区的熵值. 比较同一个文件的读写请求相应的熵值可以绝妙地衡量加密勒索软件的行为. 则是因为勒索软件的一个共同策略就是读取源文件数据, 加密数据并使用加密后的数据覆写原始数据. 我们的系统使用香农熵进行计算. 在一个特定情形中, 假定数据块 $d$ 中的字节均匀随机分布, 我们有以下公式:

latex2.png

构建访问模式

对每次执行, UNVEIL为勒索软件样本生成I/O访问记录后, 它会根据文件名和请求时间戳对I/O访问请求排序. 这方便系统提取给定的某次运行中每个文件的I/O访问序列, 并检查哪些进程访问了哪些文件. 关键的想法在于, 对每个文件的I/O访问请求进行排序后, 可以轻易地在恶意进程生成I/O请求时观察到重复请求.

系统用来检测勒索软件样本的特定检测标准就是, 在每个恶意软件运行时识别出I/O序列中对应的写入和删除操作.

一次成功的勒索软件攻击, 恶意进程通常意图在攻击期间的某个时刻加密, 覆写或删除用户文件. 在UNVEIL中, 这些I/O请求模式会引发警报, 并被检测为可疑的文件系统活动. 我们研究了不同勒索软件家族中不同文件锁定类的勒索软件样本. 我们的分析结果表明, 尽管这些攻击在其攻击策略(例如, 规避技术, 密钥生成, 密钥管理, 与C&C服务器建立通讯)方面可能大有不同, 但根据其访问请求, 它们主要可以分为三类.

图2显示的是我们在实验中研究的多个勒索软件家族的高级访问模式. 例如, 左侧显示的访问模式表示具有不同密钥长度和桌面锁定技术的Cryptolocker变体. 但其访问模式在家族变体方面并无变化. 我们也观察到, CryptoWall家族中的样本也具有相同的I/O活动. 虽然这些家族成员被识别为两个不同的勒索软件家族, 但由于它们使用相同的加密函数来加密文件(即 Windows CryptoAPI), 因此它们在攻击用户文件时具有相似的I/O模式

figure2

图 2: 勒索软件家族在I/O访问模式上的策略差异. (1) 攻击者使用加密版本覆写用户文件; (2) 攻击者读取, 加密和删除文件, 但不会从存储介质中抹除文件; (3) 攻击者读取, 创建一个新的加密版本, 并通过覆写内容安全抹除原始文件

又如, 在FileCoder家族中, 勒索软件首先创建一个新文件, 从受害者文件中读取数据, 生成原始数据的加密版本, 再将加密数据缓冲区写入新生成的文件, 并简单删除原始用户文件的符号链接(见图2.2). 在这类文件锁定类勒索软件中, 恶意软件不会擦除磁盘上原始文件的数据. 对于这样的攻击手段, 受害者有很大可能恢复数据而无需支付赎金. 然而在第三种方法(图2.3)中, 勒索软件会根据原始文件的数据创建一个新的加密文件, 然后使用标准Windows API或自动以覆盖来安全地删除原始文件的数据(例如, CrypVault家族).


译稿已发表在看雪论坛, 点击链接跳转: 传送门 余下的翻译全文, 请下载译稿PDF文件: UNVEIL 一种大规模检测勒索软件的自动化方法.pdf


Previous     Next