基于数据挖掘技术的加壳PE程序识别方法

时间:2022-10-06 05:06:19

基于数据挖掘技术的加壳PE程序识别方法

收稿日期:2010-12-20;修回日期:2011-01-30。

基金项目:上海市信息安全综合管理技术研究重点实验室开放课题项目(AGK2009004)。

作者简介:赵跃华(1958-),男,江苏苏州人,教授,博士,主要研究方向:信息理论与安全、通信安全; 张翼(1985-),男,江苏姜堰人,硕士研究生,主要研究方向:信息安全、网络对抗; 言洪萍(1985-),男,江苏常州人,硕士研究生,主要研究方向:计算机病毒与反病毒、驱动开发与防火墙。

文章编号:1001-9081(2011)07-1901-03doi:10.3724/SP.J.1087.2011.01901

(江苏大学 计算机科学与通信工程学院,江苏 镇江 212013)

()

摘 要:恶意代码大量快速的繁衍使得恶意代码自动化检测成为必然趋势,加壳程序识别是恶意代码分析的一个必要步骤。为识别加壳可执行程序,提出一种基于数据挖掘技术的自动化加壳程序识别方法,该方法提取和选取可移植可执行(PE)特征,使用分类算法检测PE文件是否加壳。测试结果表明,在使用J48分类器时加壳文件识别率为98.7%。

关键词:可移植可执行文件分析;加壳识别;数据挖掘

中图分类号:TP309.5文献标志码:A

Classification of packed PE files based on data mining

ZHAO Yue-hua,ZHANG Yi,YAN Hong-ping

(Department of Computer Science and Communication Engineering, Jiangsu University, Zhenjiang Jiangsu 212013, China)

Abstract: The proliferation of malicious code makes automatic malicious code detection an inevitable trend. Packed Portable Executable (PE) files identification is a necessary step of malicious code analysis. The paper presented an automatic identification method based on data mining, through which feature was extracted from PE files. The paper used classification algorithms and selected features to detect packed PE files. The test results show that the identification rate is 98.7% when using J48 classifier.

Key words: Portable Executable (PE) file analysis; packing detection; data mining

0 引言

近年来,恶意代码数量剧增,而恶意代码作者对恶意代码的保护也逐渐增强,多态、加壳等方法的运用使得恶意代码识别更加复杂,依靠传统方式分析恶意代码已经无法跟上病毒发展速度,因此恶意代码的自动化识别被提上了日程,其中恶意代码加壳[1-2]的识别是一个必要步骤。

现在的加壳PE(Portable Executable)文件检测手段主要有三种主要方式。第一种是特征码匹配,常见的工具如PEID[3],它可以识别上千种加壳程序,这些查壳工具对恶意代码加壳识别率很低,需要事先添加各种壳的特征到特征库中,常常滞后于壳的发展,因而无法识别新的或者少见的加壳程序特征。第二种是PE文件信息熵,Lyda等人[4]提出一种信息熵方式检测加壳PE文件,其原理是加壳后的PE文件相对未加壳的混乱度增加,导致部分节的熵值增高,通过计算PE文件各个部分数据的信息熵,然后根据熵值判断病毒文件是否加壳,但是作者对整个PE文件计算熵,这并不能最明显地反映其熵值变化。第三种方法使用PE文件头部属性,文献[5]提出一种新型的壳检测工具,利用加壳前和加壳后的PE文件头部属性不同来判断文件是否加壳,实验表明它的壳检测实时性较高,但对于伪装壳的误报率和漏报率较高。

现在的研究中对PE文件结构信息使用较少,本文将充分发掘PE结构特征,并将各项特征去除冗余和加以整理,最后利用数据挖掘方法检测加壳文件,得到了较好的分类效果。

1 特征抽取和筛选

1.1 特征抽取

PE文件格式是Windows平台上可执行文件的标准格式。在Windows系统中以EXE、DLL、OCX、SYS为后缀名的文件都是PE文件。加壳一般是对PE文件进行加密或压缩的过程。加壳后PE文件与原文件有很大的区别,但是仍然遵循PE文件格式。

图1 PE文件格式

如图1所示,PE文件包含了一个PE文件头,一个节表,然后是节表中所指向的节。PE文件头包含MS-DOS桩、PE标签、COFF头(Common Object File Format)和可选头。可选头包含了PE文件的重要信息,包括节的个数、堆栈大小等。节表中包含节的大小、名称等。这些节的内容包括代码、资源、数据等。本文根据对壳的先验知识,选取表1中的部分PE结构信息作为初选特征。

表1 PE文件可用分类特征

1.2 特征选择

PE结构信息中包括了大量信息,其中大部分不能用于识别加壳PE文件。为了提高挖掘的工作效率和准确率,需要将冗余信息去除。在本文中引入冗余特征消除的算法――主成分分析(Principal Component Analysis,PCA)[6-7],它将多个变量通过线性变换以选出较少个数重要变量的一种多元统计分析方法。

该方法的最优性是从N个训练样本中提取m个主要特征,来达到降维的目的。假设n个d维的原始样本x1,x2,…,xn,组成一个矩阵X(d*n)其中X的每一列为一个样本,主成分分析按照式(1)中的线性变换把X投影到低维空间中的向量Y。

YWTX(1)

式中W(d*d′,d′d),Y(d′*n)为经过PCA变换后的样本特征。

首先求得样本均值u,并按照式(2)协方差矩阵ST。

ST∑Ni1(xi-μ)(xi-μ)T(2)

然后按照式(3)计算ST的特征值ei,并由大到小排序。

λieiSTei; i∈[1,N](3)

最后选择前d′个特征值对应的特征矢量作为变换矩阵W[e1,e2,…,ed′]。

本实验中使用向量空间模型来格式化数据,每个程序被定义为一个64维向量。提取所有的程序向量建立一个矩阵,使用PCA算法得到11个特征的主成分系数大于87%,可以移除其余53个冗余特征。

接下来把这11个特征深入分析,根据实际意义格式化特征向量。

1)在默认条件下,编译器生成的PE文件会有调试信息,但是加壳文件中基本不存在调试信息。

2)加壳PE文件的引入函数相对较少,并且都会有GetProcAddress和LoadLibrary这两个函数。

3)文献[4]中使用整个PE文件的信息熵来判断PE文件是否加壳,而根据本文统计得到的数据来看,加壳和未加壳PE文件的熵值区间有很大的交集,而在统计数据中发现加壳后的PE文件入口点所在节的熵平均值远远高出未加壳PE文件入口点所在节的熵平均值,两个熵值区间相对独立,但是仍然存在部分特殊的PE文件的入口点所在节表熵值异常,所以入口点所在节的熵值不能作为唯一的判断依据,如图2,通过计算得出加壳PE文件的入口代码段平均熵值为7.57,而未加壳PE文件平均熵值为5.78。

4)节属性。在未加壳的PE文件中,代码段的属性没有可写(IMAGE_SCN_MEM_WRITE)的属性,而在加壳PE文件中,壳的加载器需要在内存空间中恢复代码,所以加壳PE文件中代码段有可写属性。另外,加壳PE文件的其他非代码节也多为可写属性。

5)节长度。编译器默认情况下生成的PE文件中不存在长度为0的节,而在统计中发现被加壳的PE文件多数存在长度为0的节。

6)另外,编译器生成的PE文件节名固定,经过加壳的文件会出现非可见字符或其他的节名,特殊的节表名称等其他属性都可以作为判断的依据。

图2 加壳PE文件与未加壳文件熵值分布

通过整理,得到了表2中列出的各项特征。

表2 筛选整理后PE特征描述

将每个PE文件用一个向量VPE表示,其中A12packed用于标识文件是否加壳,VPE定义如下:

VPE(A1DebugInfo,A2ImportTableSize,A3EntrySectionEntropy,

A4SectionNameVisible,A5SectionAttribute,A6ExecutableData,

A7SectionNameAbnormal,A8NoCodeSection,A9EntryPointNotInCodeSection,

A10SumSizeOfRawData!SizeOfCode,A11PEOffset,A12packed)

按照以上向量定义格式化所有实验数据,使其符合数据挖掘工具要求,表3中给出了以上向量的部分实例。

表3 部分实验数据

2 验证分析

实验使用的数据集包括5578个PE文件信息,其中包括从vx heavean[8]获取的2855个加壳PE文件和从Windows XP系统中获取的2723个未加壳PE文件。为了获取PE特征,使用pefile[9]提供的python库开发了PEWalker,PEWalker可以获取包括PE文件中的结构信息、字符串信息、各节表的信息熵等。实验使用Knime[10]作为数据挖掘平台,Knime提供了SVM、Naive Bayes、MLP、J48等分类算法,由于篇幅所限,本文只给出J48分类器的流程。

实验中把PE特征数据集分为不相交的训练集Straining和测试集Stest两部分,其中Straining∩ StestВ另外将训练集划分为加壳程序集Spacked和未加壳程序集Sunpacked,且Spacked∪ Sunpacked Straining,Spacked∩ SunpackedВ

1)训练集,包含1800个加壳PE文件和1600个未加壳PE文件;2)测试集,包含1055个加壳PE文件和1123个未加壳PE文件。

表4中测试结果表明,相对于Native Bayes、MLP、SVM等分类器,J48分类器有较好的识别率和误报率,对壳的识别准确率达到了98.7%,可以对加壳PE文件作出有效判断。

图3 Knime搭建的分类工作流程

表4 测试结果

通过图4的ROC(Receiver Operating Characteristic)曲线可以看出在本实验中MLP和SVM分类器得到了相近的分类效果,而Naive Bayes分类效果最差。J48分类器在误报率为0.3%时得到了最好的检测效果。

图4 误报率和检测率

以下为J48分类器中的部分分类规则:

If DebugInfo1 and ImportTableSize > 36 and

ExecutableData0 :UnpackedFile

If SectionNameVisible0 and SectionNameAbnormal1 and

SectionAttribute 1 :PackedFile

If EntrySectionEntropy > 5.8 and

EntryPointNotInCodeSection 1:PackedFile

3 结语

本文对加壳PE文件进行深入研究,使用PE文件中的调试信息、节属性等结构信息作为特征,并使用SVM、Naive Bayes、MLP、J48等分类算法,实验表明J48分类器在检测加壳PE文件得到了较好的检测效果,弥补了基于特征码的PE文件加壳检测的不足,目前的缺点是不能检测壳的种类。后期的工作是进一步提高检测率,降低误报率,增加壳类型检测功能,并利用导出的语义化规则建立加壳PE文件检测系统。

参考文献:

[1] 于淼,孙强.对加壳技术的改进:超粒度混杂技术[J].计算机应用,2004,24(8):137-139.

[2] 庞立会.PE文件动态加壳技术的研究与实现[J].计算机工程,2008,34(19):166-168.

[3] PEID.[CP/OL]. [2010-12-05]. www.peid.info.

[4] LYDA R, HAMROCK J. Using entropy analysis to find encrypted and packed malware[J]. IEEE Security and Privacy, 2007,5(2):40-45.

[5] CHOI Y S, KIM I K. PE file header analysis-based packed PE file detection technique[C]// Proceedings of International Symposium on Computer Science and Its Applications. New York: IEEE, 2008:28-31.

[6] 王正群,邹军,刘风.基于集成主成分分析的人脸识别[J].计算机应用,2004,28(1):120-124.

[7] 朱明旱,罗大庸,易励群.一种广义的主成分分析特征提取方法[J].计算机工程与应用,2008,44(26):38-40.

[8] VX Heavens [EB/OL]. [2010-12-05]. .

[9] pefile [CP/OL]. [2010-12-05]. /p/pefile.

[10] Knime [CP/OL]. [2010-12-05]. .

上一篇:基于图聚类的入侵检测算法 下一篇:基于互斥角色约束的静态职责分离策略