2. 北京建筑大学 电气与信息工程学院, 北京 100044;
3. 北京邮电大学 网络技术研究院, 北京 100876;
4. 国家计算机网络应急技术处理协调中心, 北京 100029
2. School of Electrical and Information Engineering, Beijing University of Civil Engineering and Architecture, Beijing 100044, China;
3. Institute of Network Technology, Beijing University of Posts and Telecommunication, Beijing 100876, China;
4. National Computer Network Emergency Response Technical Team/Coordination Center of China, Beijing 100029, China
恶意代码是指故意编制或设置的、对网络或系统会产生威胁或潜在威胁的计算机代码。最常见的恶意代码有计算机病毒(简称病毒)、特洛伊木马(简称木马)、计算机蠕虫(简称蠕虫)、后门、逻辑炸弹等[1]。随着技术的发展,出现了很多自动、快速生成恶意代码的工具。这使得创建一个新的版本或者自动产生新的病毒变种都变得很简单,恶意代码增速越来越快。据2018年《国家互联网中心第12期简报》报道,仅一周内中国境内感染恶意代码的主机达22.2万台[2]。可见,恶意代码已经成为网络安全的重要威胁,恶意代码检测技术也成为网络安全领域的重要研究方向。
在与恶意代码博弈的过程中,基于特征码的恶意代码检测方法是最常用的分析手段。特征码检测方法是指从恶意代码中取得代码特征,并用此特征对代码进行检测的方法。几乎所有主流杀毒软件,如卡巴斯基、赛门铁克、迈克菲等,都包含基于特征码的恶意代码检测功能。该方法速度快、准确率高,但召回率与特征码的提取有较大关系,不仅需要技术人员有丰富的经验,而且需要庞大的病毒库。文[3-4]在简单的特征码提取的基础上,使用相似代码特征、行为特征、系统函数等多特征来表征一类恶意代码,达到缩小特征库规模、快速检测恶意代码,特别是变种代码的目的。赛门铁克将启发规则应用到恶意代码的检测中,这种启发式扫描技术基于定义的扫描技术和给定的判定规则来检测程序中是否存在可疑功能,并判定恶意代码的扫描方法[5]。基于行为的检测技术也是恶意代码分析的一个重要研究方向,通常与人工智能、数据挖掘技术相结合[6-8]。Saxe等率先提出了基于深度神经网络的恶意代码检测方法,在超过400 000个样本的数据集上取得了很高的准确率[9]。
此外,恶意代码可视化与机器学习技术的结合为传统的检测方法提供了一种新的研究视角。恶意代码可视化方法将恶意代码二进制可执行文件转化为灰度图像,并分析图像特征,进而对样本进行分类。该方法获得了很大的成功,它不需要分析样本的反汇编代码,简化了恶意代码的分析过程,降低了对分析人员的要求,提高了对恶意代码自动检测识别的能力。但是,由于该方法通过对比恶意代码灰度图像特征达到分类的目的,因此当样本源码中增加干扰信息时,灰度图像纹理会产生较大的变化,分类准确性急剧降低。
为了得到更具抗干扰性的恶意代码特征,本文将恶意代码逆向分析与可视化方法相结合,提出了一种恶意代码可视化策略。通过提取样本“.text”段函数块的操作码序列以得到有效信息密度增强的特征并可视化的方法,提高了恶意代码分类的准确性,同时解决了由于操作码序列的simHash值碰撞率较高而导致相似性判断困难的问题。
1 相关工作与本文相关的研究工作包括2个方面:恶意代码可视化以及simHash在代码块相似性判断上的应用。
2010年,Conti等提出了将二进制文本转换为灰度图像的思想[10]。该思想于2011年被Nataraj等首次用于恶意代码分类中[11]。Nataraj等认为同一家族的恶意代码图像具有相似的纹理特征,不同家族恶意代码图像的纹理特征差异较大,可以通过机器学习方法比较恶意代码灰度图像的Gist纹理特征,从而实现恶意代码样本的分类。2015年Han等在Nataraj方法的基础上提出了熵图的概念[12],该方法不提取恶意代码灰度图像的纹理特征而是比较图像的熵值,该方法与Narataj等的方法的分类能力相当,但是效率大大提高。
simHash是局部敏感Hash(locality sensitive Hashing, LSH)算法的一种[13]。它最早被用于相似网页的去重[14],后被应用于大规模代码的克隆检测[15],在与倒排索引表相结合用于恶意代码复用性溯源问题中取得了较好的结果[16]。
2 信息密度增强的恶意代码可视化方法本节提出将恶意代码逆向分析与可视化相结合的方法,提取更高效、更具有抗干扰性的恶意代码可视化特征。
2.1 将恶意代码可执行文件转化为灰度图像一个恶意代码二进制可执行文件可以按照如下规则转化为灰度图像:每8位二进制数转换为1个十制数,对应生成一个灰度值在0到255之间的像素点。将所有像素点逐个进行连接,按照文件的大小产生某一宽度的灰度图像。图 1为本文所使用的数据集中LMN家族和Sgeneric家族的灰度图像示例。从图 1可以看到,相同家族的恶意代码灰度图像相似性较高, 而不同家族间差异较大。
但是,样本中包含干扰信息,会影响恶意代码灰度图像的纹理特征。例如,图 2为Benign家族的图像。经分析发现,误报率较高的家族不是因为样本中包含的干扰信息较多就是与其他家族过于相似。
2.2 有效信息增强的特征获取方法概述
本文所分析的恶意代码程序是Windows可移植可执行(portable executable,PE)与通用对象文件格式(common object file format,COFF)文件。为了获得更有效的家族特征、减少干扰信息,本文不使用完整PE文件,而是从PE文件的“.text”段入手,提取有效信息密度增强的特征,获取更有效的类别信息,摒弃干扰信息,以获得更高的分类准确率。具体做法是:将“.text”段中包含的函数分离出来,并提取各函数的操作码序列,计算各操作码序列的simHash值。由于恶意代码函数块的simHash值碰撞率较高,作为相似性特征进行匹配的结果并不理想。为此,本文将simHash的二进制串映射到灰度图像上,最后用机器学习方法实现恶意代码的分类。具体流程如图 3所示。
2.2.1 恶意代码函数操作码序列提取
恶意代码PE文件使用平面地址空间,代码和数据按照一定的格式存放在不同的区块中。通常,区块中的数据在逻辑上是关联的。每一个区块都需要有一个不同的名字,这个名字主要是用来表达区块的用途。例如,“.text”段是PE文件中包含程序的函数部分,这部分信息虽然也包含多余的、与函数无关的数据,但是有效信息密度大于完整的PE文件。
将恶意代码样本的PE文件进行反汇编(IDA)操作,逆向生成汇编代码。在汇编代码中,“proc near”标识函数的开始,而“endp”标识函数的结束。依据这两个标识可以将一个样本的汇编代码拆分为多个函数。图 4为某一样本“.text”段中名为“sub_401390”函数的实例。图 4中函数“sub_401390”经过处理后得到的操作码序列为:movmovmulshrimupuspusmovsubmovmulmovsubshraddshrmovimumovxorandmovandsubtesjz xordivmovjmp。
目前,大量恶意代码是由工具生成的,仅在原有恶意代码基础上作些改变。但是,哪怕是对源码的轻微改动,也会造成汇编代码中寄存器、立即数、内存地址的大幅改变。为了忽略这种影响,本文仅考虑函数的操作码。为了提取每个函数的操作码序列,采用了3-gram的原则,即仅提取操作码的前3个字符。对于不足3个字符的操作码,最后一位补空格(例如,“jz”记作“jz”);若操作码超过3个字符,则截掉超过的部分(例如“retn”记作“ret”)。
2.2.2 simHash的可视化表示若要获得每个函数块操作码序列的simHash值,需要经过分词、Hash、加权、合并以及降维等步骤。本文将每个函数块作为一个统计单位,统计每个操作码出现的次数,作为该分词的权值。用消息摘要5 (message digest 5, MD5)算法计算每个操作码的Hash值,取64位;然后, 根据Hash序列的每一位是否为“1”,决定是加上还是减去该操作码的权值,得到加权后的Hash序列;将上一步获得的每个操作码加权后的Hash序列按位累加得到新的序列。接下来, 判断新的序列中每一位的值是否大于0,大于则设置为“1”,否则设置为“0”,获得该函数块操作码序列的64位simHash值。最后,将simHash值映射到灰度图像上。详细算法步骤如图 5所示。
按照图 5所示算法,最终将产生一个深浅不一的256×256点阵图。图 6给出了将一个simHash向量标记到点阵图上的过程示意。
至此,可以获得“.text”段函数块的操作码序列simHash值对应的灰度图像,随后可以采用图像纹理特征提取算法提取灰度图像的特征。
2.2.3 simHash可视化灰度图像的特征提取Gist是常用的图像全局特征提取方法之一。2001年,Oliva和Torralba[17]提出了Gist特征的获取方法。首先,将一幅像素为r×c的灰度图像f(x, y)划分成np×np的规则网格块(网格块数为ng=round(r/np)×round(c/np),round表示四舍五入),每个网格块按照行依次记作Pi,其中i=1, …,ng。每一个网格块分别用m个尺度和n个方向的Gabor滤波器进行卷积滤波,在每个网格块经过各通道的滤波后,将卷积结果级联得到该网格块图像的局部Gist特征,即
$ G_i^P\left( {x, y} \right) = \underbrace {{\rm{cat}}}_{{n_c}}\left( {f\left( {x, y} \right)*{g_{mn}}\left( {x, y} \right)} \right). $ | (1) |
其中:(x, y)∈Pi,nc=m×n,gmn表示滤波函数,cat为级联运算符,*为卷积运算符。
随后对GP分别计算均值并将结果按行组合,将该组合的结果称为全局Gist特征,即
$ G = \left\{ {\overline {G_1^P}, \overline {G_2^P}, \cdots, \overline {G_{{n_{\rm{g}}}}^P} } \right\}. $ | (2) |
本文采用4×4规则网格划分图像、4尺度8方向的Gabor滤波器,可以获得16×4×8=512维Gist特征。
局部二值模式(local binary pattern,LBP)是另外一种常见的图像特征描述方法,它是一种用来描述图像局部纹理特征的方法,最早由Ojala等在1994年提出[18]。该方法在3×3像素的窗口内,以窗口中心像素为阈值,将相邻的8个像素的灰度值与其进行比较,若周围像素值大于中心像素值,则该中心像素点的位置被标记为1,否则为0。每个区域的特征值计算如式(3)所示,
$ {\rm{LB}}{{\rm{P}}_c} = \sum\limits_{p = 0}^{P-1} {s\left( {{g_p}-{g_c}} \right){2^p}} . $ | (3) |
式(3)中:gc是邻域内中心点c的灰度值,gp是邻域内第p个像素点的灰度值, P为领域内像素个数,s(x)函数定义如式(4)所示。
$ s\left( x \right) = \left\{ \begin{array}{l} 1, \;\;\;\;x \ge 0;\\ 0, \;\;\;\;x < 0. \end{array} \right. $ | (4) |
获得每个区域的LBP值后,通过直方图得到整幅图像的LBP特征v,
$ \mathit{\boldsymbol{v}} = {\rm{hist}}\left( {\bigcup\limits_{t = 1}^T {{\rm{LB}}{{\rm{P}}_{{p_t}}}} } \right). $ | (5) |
其中:t=1, 2, …, T,pt是区域的中心像素点。
本文实验中采用式(2)、(5)计算得到Gist和LBP特征,并采用K最近邻(K-nearest neighbor,KNN)和随机森林(random forest,RF)算法对样本进行分类。
3 实验及结果分析本文随机选取安天实验室提供的10个家族、15 000个恶意代码样本,这些样本均来自于Windows平台,并不包括移动设备上的恶意代码样本。
3.1 基于“.text”段函数块操作码序列可视化实验结果与分析实验1 采用IDA Pro逆向获取样本的汇编代码,并提取每个样本的“.text”段函数块操作码序列,按照图 3所示的流程及图 5所示的算法计算simHash值、实现其点阵图表示,提取灰度图的LBP特征并采用KNN和RF算法对样本进行分类。
实验中将数据集随机分成训练集和测试集。在训练集上采用10-折交叉验证以获取KNN和RF分类模型的最优参数。
经验证,在KNN算法中,近邻数为2时可获得最好的训练效果;参数为25时RF模型最优。表 1和2给出了采用本文方法与文[11-12]的KNN与RF算法的分类结果对比。
方法 | 准确率 | 误报率 | 漏报率 |
LBP | 0.885 100 | 0.113 942 | 0.114 538 |
Nataraj | 0.932 867 | 0.068 170 | 0.067 512 |
Han | 0.934 674 | 0.066 016 | 0.067 332 |
LBP_FuncBin | 0.941 990 | 0.063 023 | 0.061 327 |
方法 | 准确率 | 误报率 | 漏报率 |
LBP | 0.918 533 | 0.076 874 | 0.081 329 |
Nataraj | 0.929 300 | 0.069 488 | 0.071 899 |
Han | 0.925 460 | 0.069 766 | 0.075 366 |
LBP_FuncBin | 0.935 113 | 0.066 066 | 0.068 260 |
表 1和2中,LBP_FuncBin代表的是本文方法的实验结果;Nataraj方法即为按照文[11]方法提取Gist特征的实验结果;LBP表示对恶意代码二进制文件提取LBP特征的实验结果;Han方法表示采用文[12]方法的实验结果。
从表 1和2的分类准确率上看,LBP_FuncBin方法相对其他方法而言具有最高的分类准确率、最低的误报率和漏报率,说明本文方法比使用完整PE文件的可视化方法具有更高的信息密度,能够提取出更具辨识性的特征。表 1和2也验证了文[12]的结论——Nataraj方法与Han方法具有相似的分类准确率。
3.2 基于“.text”段的PE文件特征提取及分类结果实验2 为了更直观地验证“.text”段的有效信息密度更强的结论,本文对比了PE文件“.text”段与全文可视化的分类结果。
文[11]将恶意代码样本的全部PE文件转化为灰度图像并提取Gist特征,这种方法需要花费较多的时间提取特征。在实验2中,仅截取PE文件中的“.text”段相对应的二进制段,并按照文[11]方法转化为灰度图像。实验结果如表 3所示。
方法 | 准确率 | 误报率 | 漏报率 |
LBP | 0.918 533 | 0.076 874 | 0.081 329 |
Nataraj | 0.929 300 | 0.069 488 | 0.071 899 |
Han | 0.925 460 | 0.069 766 | 0.075 366 |
LBP_text | 0.938 745 | 0.062 383 | 0.064 131 |
Gist_text | 0.910 304 | 0.083 289 | 0.092 563 |
表 3给出了参数为25时的RF分类结果。表中LBP_text方法和Gist_text方法分别表示“.text”段对应灰度图像的LBP特征与Gist特征分类的结果。LBP、Nataraj方法以及Han方法的分类结果都是针对完整PE文件的。
从表 3可以看到,Nataraj方法分类准确率高于LBP特征,说明针对完整PE文件全局特征(Gist)比局部特征(LBP)会获得更高的分类准确率。LBP_text方法与Gist_text方法相比,LBP特征会获得更好的分类结果。这样的结果是与预想相一致的——在全局PE文件对应的恶意代码图像上,全局特征是更能反映恶意代码类别的特征;而在局部PE文件对应的恶意代码图像上,局部特征更能突出类别的特性。同时,LBP_text方法的分类结果优于LBP方法,说明“.text”段的有效信息密度高于完整PE文件。表 3结果再次验证了Han方法与Nataraj方法具有相似的分类准确率。
但是,从时间消耗上来看,Han方法因为不需要对恶意代码灰度图像提取纹理特征,因此耗时最少;“.text”段对应的二进制文件产生图像的方法具有最好的分类准确率,并且比Nataraj方法节省时间。本文方法由于需要提取“.text”段函数操作码,因此效率最低,需要额外IDA操作完成函数操作码的提取,远远超过了不进行IDA的方法所需要的时间。在本文数据集上各方法的时间消耗情况对比结果如表 4所示。
4 结论与展望
本文从分析恶意代码样本有效信息密度出发,提出了将“.text”段函数块的操作码序列simHash值生成点阵图的可视化方法。本文方法不仅能够提高恶意代码分类准确率,也能够解决由于函数块操作码序列simHash值碰撞率较高而很难取得较好分类准确率的问题。同时,本文也对Nataraj方法进行了简单的改进,通过提升样本特征的有效信息密度,提高了样本分类的效率。
此外,在对“.text”段函数块的操作码序列simHash值生成的点阵图进一步分析之后,发现在整个家族中出现频率最高的点,即那些在大量样本中都反复出现的点,是非常有意义的。例如,坐标(73, 104),在100个样本中的95个样本点阵图中都出现了。对于这样的点,获取出现次数最多的前5个。在单个样本中,也取出现次数最多的,也就是点阵图中最亮的前5个点。将这两个统计得到的点取交集,会发现提取到的同一点对应的函数在结构上有很大的相似性,具有明显特征,很显然这些点是该类别恶意代码的显著特征。因此,接下来可以依照simHash值对应的点阵图获取出现次数较多的点来标记同一家族样本中大量相似的函数块,进而形成函数块特征集合,从而为恶意代码同源分析提供研究基础。
[1] |
百度百科.恶意代码[R/OL].[2018-07-12]. https://baike.baidu.com/item/%E6%81%B6%E6%84%8F%E4%BB%A3%-E7%A0%81. Baidu Encyclopedia. Malware entry[R/OL].[2018-07-12]. https://baike.baidu.com/item/%E6%81%B6%E6%84%-8F%E4%BB%A3%E7%A0%81. (in Chinese) |
[2] |
国家互联网应急中心.网络安全信息与动态周报[R/OL].[2018-07-12]. http://www.cert.org.cn/publish/main/upload/File/2018CNCERT12.pdf. National Internet Emergency Center. Network security information and trends weekly report[R/OL].[2018-07-12]. http://www.cert.org.cn/publish/main/upload/File/2018CN-CERT12.pdf. (in Chinese) |
[3] |
陈娟英.基于亲缘性分析的恶意代码检测技术研究与实现[D].成都: 电子科技大学, 2014. CHEN J Y. Research and implementation of malicious code detection technology based on affinity analysis[D]. Chengdu: University of Electronic Science and Technology of China, 2014. (in Chinese) http://www.bigengculture.com/guanlilunwen/ydhl/1886136.html |
[4] |
ZHANG Y N, HUANG Q J, MA X J, et al. Using multi-features and ensemble learning method for imbalanced malware classification[C]//2016 IEEE Trustcom/BigDataSE/ISPA. Tianjin, China, 2017: 965-973.
|
[5] |
EISNER J. Understanding heuristics: Symantec's bloodhound technology[R]. Mountain View, USA: Symantec, 1997.
|
[6] |
FIRDAUSI I, LIM C, ERWIN A, et al. Analysis of machine learning techniques used in behavior-based malware detection[C]//2nd International Conference on Advances in Computing, Control, and Telecommunication Technologies. Jakarta, Indonesia, 2010: 201-203.
|
[7] |
RIECK K, TRINIUS P, WILLEMS C, et al. Automatic analysis of malware behavior using machine learning[J]. Journal of Computer Security, 2011, 19(4): 639-668. DOI:10.3233/JCS-2010-0410 |
[8] |
王蕊, 冯登国, 杨轶, 等. 基于语义的恶意代码行为特征提取及检测方法[J]. 软件学报, 2012, 23(2): 378-393. WANG R, FENG D G, YANG Y, et al. Semantics-based malware behavior signature extraction and detection method[J]. Journal of Software, 2012, 23(2): 378-393. (in Chinese) |
[9] |
SAXE J, BERLIN K. Deep neural network based malware detection using two dimensional binary program features[C]//10th International Conference on Malicious and Unwanted Software. Fajardo, Puerto Rico, 2015: 11-20.
|
[10] |
CONTI G, BRATUS S, SANGSTER B, et al. Automated mapping of large binary objects using primitive fragment type classification[J]. Digital Investigation, 2010, 7: S3-S12. DOI:10.1016/j.diin.2010.05.002 |
[11] |
NATARAJ L, KARTHIKEYAN S, JACOB G, et al. Malware images: Visualization and automatic classification[C]//8th International Symposium on Visualization for Cyber Security. Pittsburgh, USA, 2011: 21-29.
|
[12] |
HAN K S, LIM J H, KANG B, et al. Malware analysis using visualized images and entropy graphs[J]. International Journal of Information Security, 2015, 14(1): 1-14. |
[13] |
CHARIK M S. Similarity estimation techniques from rounding algorithms[C]//34th Annual ACM Symposium on the Theory of Computing. Montreal, Canada, 2002: 380-388.
|
[14] |
MANKU G S, JAIN A, SARMA A D. Detecting near-duplicates for web crawling[C]//16th International Conference on World Wide Web. Banff, Canada, 2007: 141-150.
|
[15] |
UDDIN M S, ROY C K, SCHNEIDER K A, et al. On the effectiveness of simHash for detecting near-miss clones in large scale software systems[C]//18th Working Conference on Reverse Engineering. Limerick, Ireland, 2011: 13-22.
|
[16] |
乔延臣.恶意代码同源判断技术研究[D].北京: 中国科学院大学, 2016. QIAO Y C. Research on malware homologous judgment technology[D]. Beijing: University of Chinese Academy of Sciences, 2016. (in Chinese) |
[17] |
OLIVA A, TORRALBA A. Modeling the shape of a scene:A holistic representation of the spatial envelope[J]. International Journal of Computer Vision, 2001, 42(3): 145-175. DOI:10.1023/A:1011139631724 |
[18] |
OJALA T, PIETIKÄINEN M, HARWOOD D. A comparative study of texture measures with classification based on feature distribution[J]. Pattern Recognition, 1996, 29(1): 51-59. |