高一鹏,黄永忠
(桂林电子科技大学 广西密码学与信息安全重点实验室,广西 桂林 541004)
互联网技术的高速发展在带给人们无限便利的同时也带来了巨大的危机。恶意软件就是这些危机中主要的威胁。随着代码混淆技术的发展和使用以及各种恶意软件变种的大量繁衍,恶意软件被检测出的难度也不断升高,基于传统的恶意软件分析技术在与混淆技术带来的恶意软件变种数量爆炸式增长的对抗中也显得十分乏力。腾讯安全发布的《2019 年度企业安全报告》显示,2019 年平均每周有40%的企业遭到病毒攻击,近8 成企业终端还存在高危漏洞未修复,其中风险木马类、后门类、感染性病毒是三大主要威胁。
风险木马软件在病毒攻击事件中占比最高,达44%,后门远控类木马以21%占比紧随其后。腾讯安全威胁情报中心数据显示,2019 年平均每周约有40%的企业发生过终端木马感染事件。该报告指出,2019 年勒索病毒、挖矿木马持续传播,高危漏洞频繁爆出,信息泄露事件频发。
Experimental result 本体的概念源于哲学,可用来定义相关领域知识的基本概念,其具有的机器可理解和人类可理解的性质使其成为语义网中重要的一层,近些年其理论在许多领域内都展现出很多用途。Shoaib 等[1]提出了一个对用户兴趣建模的本体来检测垃圾邮件。Syed 等[2]总结其他研究者设计的本体,构建了一个覆盖许多相关概念的信息安全领域本体。Wang 等[3]将本体与动静态特征相结合,对手机恶意代码进行检测。
目前,OWL 语言在W3C 的推动下已成为使用最广泛的本体语言,斯坦福大学团队开发的Protégé 是一个很好用的构建本体的工具,Jena API 可有效地进行本体推理工作[4]。Bounouh 等[5]采用静态的字符串信息、注册表、进程及网络行为信息构建模型来对恶意代码分类。Ghorbani 等[6]认为样本运行过程中的网络流量是判断恶意代码的重要信息,并将沙箱记录的pcap 文件进行分析,提取其中的一代关系构成图,并用图的统计数据信息为特征训练分类器。Shibahara 等[7]将样本运行过程中的网络行为抽象为序列,用神经网络训练分类模型,关注的特征同样是系统调用、文件操作、注册表操作和网络连接信息等,但其动态分析收集样本的过程非常耗时、耗资源。Damodarn 等[8]用静态、动态特征相结合的方式构建隐马尔科夫模型,分别将两者用于检测,发现恶意代码编写者在设计恶意代码时很难同时考虑避免多方面的检测。
本体中对于概念类的层次结构设计一般遵循现实世界的类型关系,按照现实世界中类与类的从属关系建立概念,本体中恶意代码类别的建模也基于类别层次进行设计。Xia 等[9]构建了一种基于本体的恶意软件检测系统来分析恶意软件的动态行为,然后从恶意软件知识、恶意软件行为和系统组件三方面提取领域概念,并通过关联挖掘算法获取恶意软件家族的常见行为,根据常见行为设计家族规则集。Jiao 等[10]提出了一种新的恶意软件意图描述和推导模型,通过将本体语言表示的SWRL 规则导入jess 引擎中,得到恶意软件意图描述的输出。Grégio 等[11]提出了MBO,应用其构建的推理规则分析恶意软件每个行为的威胁级别,并根据恶意代码六大类行为提出一个恶意代码本体结构。Navarro 等[12]设计了一种基于随机森林的方法,可以使用本体映射恶意软件中分析的元素,并从本体映射中自动提取有用信息。Ding 等[13]设计了一种提取属于同一恶意代码家族个体共同行为方法,并将Apriori 算法用于提取恶意软件家族的共同行为中。Han 等[14]通过从pro 获取动态系统调用信息来分析APT 恶意软件的行为特征,构建了APT 恶意软件典型恶意行为的知识框架,建立了APT 恶意软件典型恶意行为的知识表示,从而实现了APT 恶意软件的知识表示。Cheng 等[15]提出了CuF,通过一种新颖的、基于家族依赖图的方法分析恶意软件家族的特征。此方法可以识别恶意软件家族的新变种。Dam 等[16]采用基于子树的Weisfeiler-Lehman 图核检测恶意软件。Alrawi 等[17]将内存取证和符号分析集成在一个反馈回路中,以有效利用API 调用上下文联系的关系探测恶意软件。唐成华等[18]提出一种基于多类本体的软件语义描述生成方法,通过软件类图和相关行为信息生成软件基于本体简单语义描述,然后根据软件行为信息使用知识提取合并算法从恶意软件行为本体和恶意软件领域本体中提取相关知识,生成完整的软件语义描述本体。温岩松[19]构建恶意软件知识库,对恶意软件技术进行了技术总结归类,明确恶意软件知识结构,提出了一个应用于知识图谱领域的描述规范模型,即恶意软件知识模型,并对Cuckoo 沙箱优化提出了方案。
鉴于此,提出一种基于家族依赖图的恶意软件检测方法,并将其应用到恶意软件领域本体中。与从一个实例中提取特征的方法不同,将恶意软件家族的不同变体特征通过图聚类方法聚类到各个家族图中,并且与只通过API 依赖构建每个恶意代码家族的特征图的方法不同,构建的特征图不仅包括程序调用的API,还包括API 相应的操作对象及网络层面上的信息。与以往方法相比,本方法构建的特征图所承载的信息量更多、更具体,且具有如下优点:
1)有效性:对恶意代码检测分类能做到低误报,精确分类。
2)鲁棒性:应对各种攻击策略和规避检测时具备鲁棒性。
3)可扩展性:针对未出现的恶意代码家族和新变种可以持续添加其特征行为。
Cuckoo 沙箱是一种先进的、高度模块化的开源自动化恶意软件分析系统,能够在Windows、Linux、MacOS 和Android 虚拟环境下分析许多种不同的恶意软件及恶意网站。它基于虚拟技术实时地执行和监视二进制文件,能够跟踪API 调用和文件的一般行为,并将其提炼成易理解的高级信息和签名,且具备分析网络流量和内存转储的功能。
在恶意软件行为中,能够有效代表其意图特点的行为主要是恶意软件在运行过程中的API 调用、DLL 模块调用、系统调用、文件和注册表的操作以及网络活动等与操作系统的主要交互行为。因此,通过分析经过Cuckoo 沙箱得到的报告report.json 来构建家族依赖图。report.json 是Cuckoo 的行为信息捕获模块的输出文件。一份report.json 文件通常包括info、procmemory、target、extracted、network、signatures、static、dropper、behavior、debug、screenshots、strings、metadata。而分析用到的模块主要是target、network 和behavior。
定义1恶意软件特征图g=(N,E),其中:N为节点集,由API 函数名、API 参数、IP 和端口、DLL 模块、文件和注册表位置等构成;E为边集,包括API与API 参数之间的调用关系及网络流量的传输,每条边都代表一个特征行为。
定义1 只描述了一个恶意软件实例,不能代表同一恶意软件家族中的其他实例。为了检测恶意软件家族中的新变种,需将同一恶意软件家族中的所有特征图通过图聚类到一个公共特征图中,代表了整个家族的特征。
设G为一组n个同一恶意软件家族中的变种,为了对这些图进行聚类,使用现有的图聚类方法[20],并使用最小公共超图、最大公共子图2 个定义。
对于一个图集合里的最小公共超图,当且仅当包括了这组图集合中所有的节点和边,称其为这个图集合的最小公共超图:
当存在图gi(Ni,Ei)和gj(Nj,Ej)时,若存在g属于gi的同时也属于gj,则称g是图gi和gj的公共子图;若不存在其他公共子图的顶点数大于g的顶点数,则称g是图gi和gj的最大公共子图。
其中:i、j表示2 个不同的恶意代码样本所构成的特征行为图;gWMinCs(i,j)表示图i、j的加权最小公共超图;gwmcs(i,j)表示图i、j的最大公共子图。g-gwmcs(i,j)和h-gwmcs(i,j)分别表示在恶意代码特征图i、j里除去图i、j所形成的最大公共子图后的剩余部分。
对于一组n个同一恶意软件家族中的恶意代码特征图,其对应的加权最小公共超图构成方法为:初始化加权最小公共超图WMinCs,遍历这n个特征图内的所有边,并添加到WMinCs 中,一条边被重复遍历的次数为该边的权值。这里仅考虑边的权值,遍历完成后,所有边的权值除以n进行归一化,获得每条边在加权最小公共超图中的权重值,再根据 的值删除小于阈值的边,最后剩余的边构成θ了加权最θ小公共超图。
系统架构如图1 所示,首先对训练集中的已知恶意软件家族在配置好的Cuckoo 沙箱中运行后得到的结果报告进行特征提取,生成对应的特征行为图后再对生成的特征行为图以图聚类的方法生成各个家族的特征行为图,最后用该方法对在测试集上生成的特征行为图与每个恶意软件家族特征行为图作比较,实现恶意软件分类功能。
图1 系统架构
用OWL 语言对恶意软件本体进行构建。构造恶意软件本体结构,包括操作系统对象之间的调用关系(Relation)、恶意软件个体(Sample)及其描述以及恶意软件家族及其描述(Malware),如图2 所示。
图2 恶意软件本体框架
通过OWL 语言构造恶意软件样本,可分为以下3 步:1) 初始化本体文件,构建恶意软件本体领域,操作系统调用模块Relation、恶意软件家族模块Malware 和恶意软件个体模块;2) 在Malware 模块中为每类家族加入其公共特征行为,当加入的公共特征行为不属于Relation 模块时,先将这条特征行为加入Relation 模块后,再加入家族特征行为中;3) 对每个恶意软件个体添加其特征行为,同时对添加的特征行为是否属于Relation 模块进行判断,若不存在,则先加入Relation 模块中,再添加到个体特征行为中。
图2 中Equivalent to 之下表示该恶意代码backdoor 家族的特征行为,根据backdoor 特征行为图中每2 个节点形成的边考虑边的方向,并对节点进行编号。根据3 种匹配规则对恶意样本进行分类,以5 个家族为例,分别为downloader、dropper、spy、backdoor 和worm.net。
规则15 个家族对应的最大公共超图分别为G1、G2、G3、G4、G5,而G2~G1 表示存在于G2 中的所有G1 的边被删除,
在对新恶意变种进行检测时,评判其是否属于backdoor 家族的标准为是否匹配到Rule1(backdoor)中的特征行为。
规则2通过加权最小公共超图构建匹配公式:
其中:W为被检测样本的特征行为图g与加权最小公共超图G之间边匹配的个数;min(|G|,|g|)为被检测样本特征行为图g与G边数较少的边的数量;∂为规则2的匹配率,其值介于0 到1 之间。检测新样本是否属于该家族的判别标准为该家族的匹配率∂ 是否为最高。
规则3被检测样本的特征行为图gnew与每个家庭特征图进行比较,满足
G为最大公共超图。
检测未知恶意样本是否属于一类恶意软件家族的条件需同时满足以上3 种规则。以Backdoor 家族为例,恶意代码分类策略如表1 所示。
表1 恶意代码分类策略
基于开源软件Cuckoo 对恶意样本进行动态分析,在Virtualbox 上使用双重虚拟化,宿主机使用Ubuntu 安装Cuckoo,并在宿主机中使用虚拟机嵌套的方式,加装Virtualbox 搭建虚拟机Windows 7 用来运行提交的PE 可执行文件。恶意代码样本主要是从github上的2 个开源项目theZoo、Malware 上获得,该项目同时提供了搜索、下载、上传恶意软件的功能,其训练集样本家族分类主要通过https://www.virustotoal.com/gui/home/upload 获取。以5 个家族为例,从每类恶意代码家族中,随机抽取50 个作为训练样本集,30个作为测试集,恶意样本数据集如表2 所示。
表2 恶意样本数据集
对Cuckoo 产生的分析报告report.json 进行特征提取,读取target、network 和behavior 中每个进程的特征字段,其中包含了该进程所调用的API 和其参数值,恶意代码在执行过程中创建、删除、下载的文件及网络流量。对于API 和其最重要参数,被设置为特征图中的2 个节点。如NtOpenKey,其arguments 模块包含了参数"key_handle"、"desired_access"和"regkey",具体如下:
选择其中API 对应为NtOpenKey,rekey 对应为HKEY_LOCAL_MACHINE\Software\Microsoft\WindowsNT\CurrentVersion\GRE_Initialize 构成特征行为图的节点,并将这2 条节点形成的边加入Relation 特征行为类中。对于网络行为,同一家族很少对网络行为代码有较大改动,因此,根据数据流五元组,按照IP 和端口相结合的信息构成特征行为图里的节点,并将其边加入Relation 特征行为类中。记载的能够反馈特征的Windows API 约150 个,每个家族特征提取后,将其特征行为添加到对应家族属性中,通过运行Protégé推理机并结合图匹配的方式得到结果。本次实验结果采用以下几个参数:分类正确恶意代码数A;误分类的恶意代码数B;未被分类出来的恶意代码数C;恶意样本总数D;恶意代码召回率R=A/(A+C);恶意代码的精度P=A/(A+B);恶意代码误分类T=B/D。
实验结果如表3 所示。使用CuF[15]中的图匹配方法在构建好的家族特征行为图上对恶意软件分类。此实验在相同的训练集和测试集中进行,CuF 图匹配结果如表4 所示。
表3 实验结果 %
表4 CuF 图匹配结果 %
从表3、4 可看出,在使用相同数据集的条件下,无论是精度还是召回率,本方法都比其他方法有更好的效果,同时也降低了恶意软件的误分类率。
基于图的分析是基于API 调用的恶意软件分析方法之一,而现有的基于图的恶意软件分析方法的局限性在于有些只是从单个样本中生成图,而非对来自同一恶意软件家族的图进行聚类;而有些是基于API的依赖图方法构成的家族聚类,其聚类图仅由API 依赖关系构成,对于恶意软件的网络行为、文件操作等不能在聚类图中表达出来。相比较而言,本方法通过构建恶意软件本体,刻画出的恶意软件特征行为图更为具体,不仅包含API 的调用信息,还能反映出恶意软件的文件操作、网络行为、注册表行为,提高了恶意软件的检测精度,同时针对未出现的恶意软件家族和新变种,可继续通过Cuckoo 沙箱动态分析,提取特征行为,并将其加入家族特征图中,拥有可扩展性。未来计划搭建恶意软件知识图谱,并构建恶意软件的行为画像,为网络攻击态势感知提供技术支持,并应用到其他平台上。