恶意pdf文档检测方法

文档序号:10512603阅读:725来源:国知局
恶意pdf文档检测方法
【专利摘要】本发明涉及一种恶意PDF文档检测方法,该方法包括:提取待检测PDF文档中的攻击载荷代码;对所述攻击载荷代码进行反混淆处理,得到原始攻击载荷代码;提取所述原始攻击载荷代码的特征码,并判断在预先建立的恶意特征库中是否存在与所述原始攻击载荷代码的特征码相匹配的特征码,若是,则判定所述待检测PDF文档为恶意PDF文档,其中,所述恶意特征库中包括若干用于表征PDF文档为恶意PDF文档的特征码。本发明提供的恶意PDF文档检测方法中,在判断之前首先对攻击载荷代码进行反混淆处理,得到原始攻击载荷代码,然后进行后续的判断,从而可以解决攻击者对恶意代码进行混淆处理导致检测效果不佳的问题,以提高检测的准确性和可靠性。
【专利说明】
恶意PDF文档检测方法
技术领域
[0001]本发明涉及检测技术领域,尤其是一种恶意PDF文档检测方法。
【背景技术】
[0002]恶意TOF文档是指包含了恶意代码的TOF文档。当恶意TOF文档被打开时,包含于其中的恶意代码就会执行攻击行为,例如修改或窃取用户的敏感数据、控制用户的操作系统等。与传统的恶意代码相比,嵌入到PDF文档中的恶意代码的攻击手法更加隐蔽,因此传统的反病毒软件难以对其进行有效的检测。
[0003]早期使用的恶意PDF文档检测方法是一种通用的文档检测方法。该方法主要是通过将文档看作一个连续的字节序列,提取其连续的η个字节(n-gram)作为分析特征码,对比恶意文档与正常文档在特征码上的差别来检测恶意I3DF文档。由于恶意PDF文档的攻击载荷是内嵌的JavaScript代码,直接从文档提取特征码进行检测的准确率和效率都很低。而且,恶意TOF文档中内嵌的恶意JavaScript代码很多都进行了混淆处理,使得直接从全文档提取特征码的检测方法几乎不再适用。
[0004]另外,目前还存在以下几种恶意PDF文档检测方法:
[0005]第一种为一种基于机器学习的静态检测方法,该方法主要是从训练PDF文档的文件结构中提取特征码值,其中训练I3DF文档包括大量包含攻击代码的恶意PDF文档,然后将特征码值通过机器学习算法进行学习生成检测模型,最后通过检测模型预测待检测PDF文档是否为恶意PDF文档。这种方法的缺点是:如果恶意PDF文档内嵌的JavaScript代码经过混淆,那么直接从中提取特征码不具备代表性,检测模型的检测效果也就不理想。而且,利用机器学习的算法进行学习生成检测模型的过程需要一定量的恶意样本,如果样本量太小,学习生成的模型便不具备普适性,然而大量样本的搜集本身存在一定的困难,而且大量样本的学习过程的收敛速度也很慢。
[0006]第二种为一种基于频谱分析的复合文档恶意代码检测方法,该方法将静态的复合文档二进制数据转换成相位谱,然后对相位谱的均匀度、相位值、频谱宽度等特征码进行自动提取,接着设计对照试验,构造大量对照组,统计出一般性差异制定判定准则的方法,通过分析相位谱特征码检测复合文档是否包含恶意代码。这种方法的缺点是:这种方法没有单纯针对TOF文档,也没有针对文档中的恶意代码。虽然对几乎任何文档都适用,但是由于恶意TOF文档的恶意内容几乎都只存在于其内嵌的JavaScript代码,而与具体的文档内容无关,分析整个文档的频谱意义不大。而且,由于JavaScript代码混淆的存在,将对频谱分析的结果产生较为严重的干扰。
[0007]第三种为一种基于虚拟机的ODAY/恶意文档检测方法。该方法的执行系统包括文档执行模块、Ring3虚拟机模块、Shell code检测模块、Except 1n检测模块、ROP检测模块、日志模块,能动态检测加载在Ring3虚拟机上的文档进程。该方法主要是首先加载所需检测文档的进程运行在Ring3虚拟机上,然后各模块进行实时检测,日志检测模块将检测结果保存到日志文件并判断该文档是否为恶意文档。该方法和系统实质上是对恶意PDF文档的一种动态检测,对于每个文档的检测都需要在虚拟机中完成下面一系列步骤:打开roF文档、分析各个检测模块的结果、恢复虚拟机初始环境。这种检测方法的时间开销很大,几乎比静态检测所需的时间多一个数量级,而且需要搭建专门的虚拟机环境,成本较高,检测系统不易于集成。
[0008]第四种为一种启发式文档检测方法,该方法通过对待检测文档进行结构解析,获取静态信息,利用所述静态信息判断待检测文档是否夹带敏感数据;若夹带敏感数据,则对敏感数据进行格式解析,进一步判定敏感数据的格式是否是安全文档可夹带数据格式;若是,则待检测文档为低风险文档,否则判定为高风险文档。对于TOF文档而言,如果文档中包含JavaScript代码,该系统即认为文档属于恶意文档,但是很大一部分日常使用中的TOF文档必须还有JavaScript代码才能正常工作(例如,采集个人信息的PDF表格,其中的JavaScript代码用于检测用户输入的有效性),因此这样的检测方法的误报率很高。
[0009]第五种为一种检测PDF漏洞的方法,该方法包含静态步骤和动态步骤,其中的静态检测步骤包括:对待检测roF文件中满足预设可以要求的关键字段进行统计分析,如果统计分析结果指示所述待检测PDF文件为可疑文件,则执行动态检测步骤。动态检测步骤包括:判断所述待检测PDF文件中是否触发JavaScript执行的函数,如果是,则确定所述待检测PDF文件为恶意文件。该方法和装置通过分析TOF文档结构的合法性和完整性来判定PDF文档是否存在漏洞,而并不是用于检测恶意PDF文档是否恶意,没有针对文档中内嵌的JavaScript代码,而恶意TOF文档在结构上几乎都会做到完整与规范以便逃避检测,因此这种检测漏洞的方法对于检测TOF文档是否恶意是不适用的。
[0010]可见,以上的恶意PDF文档检测方法有各种各样的缺点,所以有必要提供一种至少可以解决上述部分缺陷的检测方法。

【发明内容】

[0011]对此,本发明提出了一种恶意PDF文档检测方法,该方法可以解决攻击者对恶意代码进行混淆处理导致检测效果不佳的问题,以提高roF文档检测的准确性和可靠性。
[0012]本发明提供的恶意PDF文档检测方法包括:
[0013]提取待检测PDF文档中的攻击载荷代码;
[0014]对所述攻击载荷代码进行反混淆处理,得到原始攻击载荷代码;
[0015]提取所述原始攻击载荷代码的特征码,并判断在预先建立的恶意特征库中是否存在与所述原始攻击载荷代码的特征码相匹配的特征码,
[0016]若是,则判定所述待检测PDF文档为恶意PDF文档;
[0017]其中,所述恶意特征库中包括若干用于表征PDF文档为恶意PDF文档的特征码。
[0018]可选的,在所述提取待检测PDF文档中的攻击载荷代码之前还包括:
[0019]判断预先建立的恶意PDF文档库中是否存在所述待检测PDF文档,若否,则允许执行所述待检测roF文档中攻击载荷代码的提取工作。
[0020]可选的,该方法还包括:
[0021]若所述恶意特征库中存在与所述原始攻击载荷代码的特征码相匹配的特征码,则将所述待检测I3DF文档添加至所述恶意TOF文档库中。
[0022]可选的,该方法还包括:
[0023]若所述恶意特征库中不存在与所述原始攻击载荷代码的特征码相匹配的特征码,则解释执行所述原始攻击载荷代码,并记录在执行过程中产生的所有字符串变量;
[0024]检测所述所有字符串变量中是否包含壳代码,
[0025]若是,则判定所述待检测PDF文档为恶意PDF文档;
[0026]否则,判定所述待检测PDF文档为非恶意PDF文档。
[0027]可选的,该方法还包括:
[0028]若所述所有字符串变量中包含壳代码,则将所述待检测PDF文档添加至所述恶意PDF文档库中,并将所述原始攻击载荷代码的特征码作为所述待检测TOF文档的特征码添加至所述恶意特征库中。
[0029]可选的,所述提取待检测PDF文档中的攻击载荷代码,包括:
[0030]根据交叉引用表和对象引用链,提取所述待检测PDF文档中的所有PDF对象;
[0031 ]对提取出的所有PDF对象进行目录字典检索,寻找各个PDF对象的入口地址;
[0032]根据各个TOF对象的入口地址对应区域内的数据类型字段,确定各个I3DF对象的数据类型;
[0033 ]根据每一 TOF对象的数据类型,判断该PDF对象的入口地址对应区域内是否存在攻击载荷代码,
[0034]若是,则对该PDF对象的入口地址对应区域内的攻击载荷代码进行提取。
[0035]可选的,所述对所述攻击载荷代码进行反混淆处理,包括:
[0036]删除所述攻击载荷代码中的注释信息、对所述攻击载荷代码中分割的字符串进行拼接处理和/或对所述攻击载荷代码中的编码部分进行解码处理。
[0037]可选的,所述删除所述攻击载荷代码中的注释信息,包括:
[0038]遍历所述攻击载荷代码,判断所述攻击载荷代码中是否存在以/*为起始点、以*/为终止点的字符串,若是,则删除以/*为起始点、以*/为终止点的字符串。
[0039]可选的,所述对所述攻击载荷代码中分割的字符串进行拼接处理,包括:
[0040]遍历所述攻击载荷代码,判断所述攻击载荷代码中是否存在字符串”+ “,若是,则删除字符串” + “。
[0041]可选的,所述对所述攻击载荷代码中的编码部分进行解码处理,包括:
[0042]遍历所述攻击载荷代码,判断所述攻击载荷代码中是否调用编码的应用程序编码接口,若是,则调用解码的应用程序编码接口。
[0043]由于攻击者在PDF文档中嵌入攻击代码时一般会对其进行混淆处理,因此现有的检测方法直接从混淆后的恶意代码中提取特征码进行判断的效果并不好。而本发明在判断之前首先对攻击载荷代码进行反混淆处理,得到原始攻击载荷代码,然后进行后续的判断,从而可以解决攻击者对恶意代码进行混淆处理导致检测效果不佳的问题,以提高检测的准确性和可靠性。
【附图说明】
[0044]通过参考附图会更加清楚的理解本发明的特征码信息和优点,附图是示意性的而不应理解为对本发明进行任何限制,在附图中:
[0045]图1示出了根据本发明恶意PDF文档检测方法一实施例的流程示意图;
[0046]图2示出了图1中SI的一种流程示意图;
[0047]图3示出了图1中S2的一种流程示意图。
【具体实施方式】
[0048]为了能够更清楚地理解本发明的上述目的、特征码和优点,下面结合附图和【具体实施方式】对本发明进行进一步的详细描述。需要说明的是,在不冲突的情况下,本申请的实施例及实施例中的特征码可以相互组合。
[0049]在下面的描述中阐述了很多具体细节以便于充分理解本发明,但是,本发明还可以采用其他不同于在此描述的其他方式来实施,因此,本发明的保护范围并不受下面公开的具体实施例的限制。
[0050]本发明提供一种恶意PDF文档检测方法,如图1所示,该方法包括:
[0051 ] S1、提取待检测PDF文档中的攻击载荷代码;
[0052]S2、对所述攻击载荷代码进行反混淆处理,得到原始攻击载荷代码;
[0053]S3、提取所述原始攻击载荷代码的特征码;
[0054]S4、判断在预先建立的恶意特征库中是否存在与所述原始攻击载荷代码的特征码相匹配的特征码;
[0055]S5、若恶意特征库中存在与所述原始攻击载荷代码的特征码相匹配的特征码,则判定所述待检测I3DF文档为恶意TOF文档;
[0056]其中,所述恶意特征库中包括若干用于表征PDF文档为恶意PDF文档的特征码。
[0057]由于攻击者在PDF文档中嵌入攻击代码时一般会对其进行混淆处理,因此现有的检测方法直接从混淆后的恶意代码中提取特征码进行判断的效果并不好。而本发明在判断之前首先对攻击载荷代码进行反混淆处理,得到原始攻击载荷代码,然后进行后续的判断,从而可以解决攻击者对恶意代码进行混淆处理导致检测效果不佳的问题,以提高检测的准确性和可靠性。
[0058]可以理解的是,攻击载荷代码是指载荷攻击信息的代码,例如JavaScript代码。
[0059]可以理解的是,所谓的反混淆处理是指对提取出的攻击载荷代码进行还原得到原始攻击载荷代码的过程。所谓的特征码指的是体现roF文档特征的代码或信息。
[0060]在具体实施时,S4可以通过YARA引擎实现。
[0061 ] 在具体实施时,如图1所示,在SI之前还可包括:
[0062]S0、判断预先建立的恶意TOF文档库中是否存在所述待检测TOF文档;若否,则允许执行所述待检测roF文档中攻击载荷代码的提取工作。
[0063]可以理解的是,若恶意PDF文档库中存在所述待检测PDF文档,则可以确定所述待检测I3DF文档为恶意TOF文档。
[0064]在对待检测TOF文档进行检测时,首先检查下恶意PDF文档库中是否已经存在该待检测PDF文档,若存在,说明该待检测PDF文档已经被检测并确认为恶意PDF文档,这样就不需要在进行后续的提取、反混淆、判断等过程。只有在恶意TOF文档库中不存在该待检测TOF文档时再进行后续的提取、反混淆、判断等过程。这样的话,可以大大减少检测工作量,提高检测效率。
[0065]在具体实施时,如图1所示,本发明提供的检测方法还可包括:
[0066]S6、若所述恶意特征库中存在与所述原始攻击载荷代码的特征码相匹配的特征码,则将所述待检测TOF文档添加至所述恶意TOF文档库中。
[0067]这里,通过将经过检测确认为恶意PDF文档的PDF文档添加至恶意PDF文档库的方式,构建恶意I3DF文档库。即通过反馈的方式对恶意I3DF文档库进行补充,可以进一步提高检测的效果。
[0068]以上31、32、33、34、35等步骤为一个静态检测过程,在静态检测过程中一般只能检测出内嵌已知恶意代码的TOF文档。为进一步提高检测检测效果,如图1所示,本发明提供的检测方法还可以包括:
[0069]S7、若所述恶意特征库中不存在与所述原始攻击载荷代码的特征码相匹配的特征码,则解释执行所述原始攻击载荷代码,并记录在执行过程中产生的所有字符串变量;
[0070]S8、检测所述所有字符串变量中是否包含壳代码,
[0071]S9、若所述所有字符串变中存在壳代码,则判定所述待检测PDF文档为恶意PDF文档;
[0072]S10、若所述所有字符串变中不存在壳代码,则判定所述待检测PDF文档为非恶意I3DF文档。
[0073]这里,S4中若所述恶意特征库中不存在与所述原始攻击载荷代码的特征码相匹配的特征码,说明通过静态检测过程还不能确定待检测PDF文档是否为恶意PDF文档,进而执行后续的步骤S7、S8等,其中S7、S8等后续步骤为一个动态检测的过程,通过动态检测可以检测出内嵌未知恶意代码的PDF文档,因此这里将静动态检测过程相结合的方式可以在最大程度上保证检测的准确率。
[0074]在具体实施时,S7中解释执行所述原始攻击载荷代码的过程可以采用代码解释引擎执行,例如SpiderMonkey引擎。S8中检测所述所有字符串变量中是否包含壳代码的过程可以但不限于采用Libemu引擎执行,若采用Libemu引擎执行的话,由于Libemu引擎采用的是仿真模拟法,相比于使用虚拟机的方式速度更快、开销更小。
[0075]可以理解的是,所谓的壳代码指的是Shellcode。
[0076]在具体实施时,如图1所示,本发明提供的检查方法还可以包括:
[0077]SI 1、若所述所有字符串变量中包含壳代码,则将所述待检测PDF文档添加至所述恶意TOF文档库中,并将所述原始攻击载荷代码的特征码作为所述待检测TOF文档的特征码添加至所述恶意特征库中。
[0078]这里,即通过反馈的方式对恶意TOF文档库和恶意特征库进行补充,可以进一步提尚检测的效果。
[0079]在具体实施时,如图2所示,SI中所述提取待检测TOF文档中的攻击载荷代码,可以包括:
[0080]SlOl、根据交叉引用表和对象引用链,提取所述待检测PDF文档中的所有PDF对象;[0081 ] S102、对提取出的所有PDF对象进行目录字典检索,寻找各个PDF对象的入口地址;
[0082]S103、根据各个PDF对象的入口地址对应区域内的数据类型字段,确定各个PDF对象的数据类型;
[0083]S104、根据每一PDF对象的数据类型,判断该I3DF对象的入口地址对应区域内是否存在攻击载荷代码;
[0084]S105、若该PDF对象的入口地址对应区域内存在攻击载荷代码,则对该PDF对象的入口地址对应区域内的攻击载荷代码进行提取。
[0085]这里提供了一种提取攻击载荷代码的方法,该方法可以尽量将待检测PDF文档中所有的攻击载荷代码提取出来,提高检测的准确率。
[0086]在具体实施时,在执行S102之前,还可以对SlOl中提取出所有TOF对象的名称进行归一化,所谓的归一化是指进行排序、整理,便于对大量、复杂的roF对象进行后续的处理。
[0087]可以理解的是,上述攻击载荷代码的提取过程是可在待检测PDF文档处于打开状态时进行的。
[0088]在具体实施时,S104的具体判断过程可以包括:若一PDF对象的数据类型为“Rendit1n”或“JavaScript”,并且数据类型字段中包括“JS”,则可以确定该F1DF对象的入口地址对应区域内含有JavaScr ipt代码。
[0089]在具体实施时,S2中所述对所述攻击载荷代码进行反混淆处理,可以包括:
[0090]删除所述攻击载荷代码中的注释信息、对所述攻击载荷代码中分割的字符串进行拼接处理和/或对所述攻击载荷代码中的编码部分进行解码处理。
[0091]其中,如图3所示,删除所述攻击载荷代码中的注释信息,可以包括:遍历所述攻击载荷代码,判断所述攻击载荷代码中是否存在以/*为起始点、以*/为终止点的字符串,若是,则删除以/*为起始点、以*/为终止点的字符串。
[0092]在具体实施时,可以通过先查找字符/*,若查找到字符/*,则再在字符/*的后面内容中查找*/,若查找到*/,则认为所述攻击载荷代码中存在以/*为起始点、以*/为终止点的字符串。
[0093]其中,如图3所示,对所述攻击载荷代码中分割的字符串进行拼接处理,可以包括:遍历所述攻击载荷代码,判断所述攻击载荷代码中是否存在字符串” + “,若是,则删除字符串,,+ “。
[0094]可以理解的是,字符串”+ “包括三个字符,第一个是“””,第二个是“+”,第三个是
“ CO?
O
[0095]在具体实施时,可以先查找字符+,若查找到+,则判断字符+的前一字符是否为字符”,若是,再判断字符+的后一字符是否为字符“,若是,则认为查找到所述攻击载荷代码中的字符串” + “。
[0096]其中,如图3所示,对所述攻击载荷代码中的编码部分进行解码处理,可以包括:遍历所述攻击载荷代码,判断所述攻击载荷代码中是否调用编码的应用程序编码接口,若是,则调用解码的应用程序编码接口。
[0097]图3示出的反混淆处理过程包括删除所述攻击载荷代码中的注释信息、对所述攻击载荷代码中分割的字符串进行拼接处理及对所述攻击载荷代码中的编码部分进行解码处理,当然在实际中以上三种处理未必均要执行。
[0098]虽然结合附图描述了本发明的实施方式,但是本领域技术人员可以在不脱离本发明的精神和范围的情况下做出各种修改和变型,这样的修改和变型均落入由所附权利要求所限定的范围之内。
【主权项】
1.一种恶意PDF文档检测方法,其特征码在于,包括: 提取待检测PDF文档中的攻击载荷代码; 对所述攻击载荷代码进行反混淆处理,得到原始攻击载荷代码; 提取所述原始攻击载荷代码的特征码,并判断在预先建立的恶意特征库中是否存在与所述原始攻击载荷代码的特征码相匹配的特征码, 若是,则判定所述待检测PDF文档为恶意PDF文档; 其中,所述恶意特征库中包括若干用于表征PDF文档为恶意PDF文档的特征码。2.根据权利要求1所述的方法,其特征码在于,在所述提取待检测PDF文档中的攻击载荷代码之前还包括: 判断预先建立的恶意PDF文档库中是否存在所述待检测PDF文档,若否,则允许执行所述待检测I3DF文档中攻击载荷代码的提取工作。3.根据权利要求2所述的方法,其特征码在于,还包括: 若所述恶意特征库中存在与所述原始攻击载荷代码的特征码相匹配的特征码,则将所述待检测TOF文档添加至所述恶意TOF文档库中。4.根据权利要求2所述的方法,其特征码在于,还包括: 若所述恶意特征库中不存在与所述原始攻击载荷代码的特征码相匹配的特征码,则解释执行所述原始攻击载荷代码,并记录在执行过程中产生的所有字符串变量; 检测所述所有字符串变量中是否包含壳代码, 若是,则判定所述待检测PDF文档为恶意PDF文档; 否则,判定所述待检测PDF文档为非恶意PDF文档。5.根据权利要求4所述的方法,其特征码在于,还包括: 若所述所有字符串变量中包含壳代码,则将所述待检测TOF文档添加至所述恶意PDF文档库中,并将所述原始攻击载荷代码的特征码作为所述待检测I3DF文档的特征码添加至所述恶意特征库中。6.根据权利要求1所述的方法,其特征码在于,所述提取待检测PDF文档中的攻击载荷代码,包括: 根据交叉引用表和对象引用链,提取所述待检测PDF文档中的所有PDF对象; 对提取出的所有PDF对象进行目录字典检索,寻找各个PDF对象的入口地址; 根据各个PDF对象的入口地址对应区域内的数据类型字段,确定各个TOF对象的数据类型; 根据每一 PDF对象的数据类型,判断该TOF对象的入口地址对应区域内是否存在攻击载荷代码, 若是,则对该PDF对象的入口地址对应区域内的攻击载荷代码进行提取。7.根据权利要求1所述的方法,其特征码在于,所述对所述攻击载荷代码进行反混淆处理,包括: 删除所述攻击载荷代码中的注释信息、对所述攻击载荷代码中分割的字符串进行拼接处理和/或对所述攻击载荷代码中的编码部分进行解码处理。8.根据权利要求7所述的方法,其特征码在于,所述删除所述攻击载荷代码中的注释信息,包括: 遍历所述攻击载荷代码,判断所述攻击载荷代码中是否存在以/*为起始点、以*/为终止点的字符串,若是,则删除以/*为起始点、以*/为终止点的字符串。9.根据权利要求7所述的方法,其特征码在于,所述对所述攻击载荷代码中分割的字符串进行拼接处理,包括: 遍历所述攻击载荷代码,判断所述攻击载荷代码中是否存在字符串” + “,若是,则删除字符串” + “。10.根据权利要求7所述的方法,其特征码在于,所述对所述攻击载荷代码中的编码部分进行解码处理,包括: 遍历所述攻击载荷代码,判断所述攻击载荷代码中是否调用编码的应用程序编码接口,若是,则调用解码的应用程序编码接口。
【文档编号】G06F21/56GK105868630SQ201610173705
【公开日】2016年8月17日
【申请日】2016年3月24日
【发明人】刘超, 李敏, 姜建国, 喻民, 周颖
【申请人】中国科学院信息工程研究所
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1