题目:流行杀毒软件对恶意PDF文档检测的概括性分析
作者:仙果



目录:
一  常见杀毒软件
二  杀毒软件对恶意PDF文档的检测分析比较
三  恶意PDF文档与杀毒软件的对抗
四  总结

题记:
  很早就想总结下杀毒软件对恶意PDF文档的查杀分析,趁着今天休息的时间来总结一下,
文中肯定有不准确及偏颇之处,还望各位大牛能指点一二,仙果感激不尽。本来这篇文章是投稿来着,编辑说无具体实现代码,返回来继续修改,但一直没有时间修改,就放下了这个事情,直到现在,想想也没有必要投稿了,实在是有骗稿费的嫌疑,不投也罢,昨天用这篇文章申请T00LS的账号,悲催的今天早上论坛关闭了,无语。发上来吧,年前写的,大家有什么意见尽管提出来

一  常见杀毒软件
  这里举出常见的一些杀毒软件,国内的就略过了,包括传说中的360安全卫士,好像它不怎么关注于文档类漏洞的防御,不提也罢。
  1  Norton Antivirus:诺顿
  2  Kaspersky :卡巴斯基
  3  ESET NOD32:NOD32
  4  Avira AntiVir :小红伞
  5  Avast:捷克的一款杀毒软件、
  6  BitDefender:比特梵德
  7  TREND.micro:趋势科技
  8  McAfee :麦咖啡
  基本的就这些,其他还有包括微软的MSE,熊猫,大蜘蛛等暂不入此列,在国内常见的有诺顿,卡巴斯基,小红伞,首先要分析的也是这三款杀毒软件。

二  杀毒软件对恶意PDF文档的检测过程分析
  首先,恶意的PDF文档所使用的漏洞分为两种情况,第一就是使用0Day漏洞,此时在杀毒软件的漏洞库中是没有此漏洞的,杀毒软件的检测过程就针对恶意PDF文档在触发漏洞之前和之后的行为,会在接下来详细分析。第二种就是使用NDay漏洞,POC已经在网络中公开,并且已经被大规模使用,杀毒软件对此的查杀更为精确,杀软的工程师肯定把漏洞进行了详细分析,中间会存在一个时间缓冲,意思就是说针对一个漏洞杀软并不是一次就把漏洞补上的,而是分批次分时间不断的更新杀软漏洞库来更精确的定位漏洞,这与杀软工程师对漏洞的分析程度所决定。
  其次恶意PDF文档的利用形式又有几种情况,这里所指的不是缓冲区溢出的的利用方式,而是恶意PDF文档利用漏洞的表现形式,最常见的当然就是堆喷射,另外还有类似于Office漏洞利用直接在堆或者栈中执行代码,现在很少见了,此外还有利用PDF阅读器自身功能限制不严格(不允许执行执行PDF内嵌的二进制程序和脚本),结合JavaScript代码直接执行木马的情形,在这种情况下,如Adobe Reader程序不会触发异常崩溃而直接通过JavaScript执行木马,漏洞详细信息的链接为http://www.nsfocus.net/vulndb/14737。
  以上分析了恶意PDF的利用情况,接下来就结合以上情况进行分析。
  1.  0Day漏洞的检测
  由于杀软的漏洞库中没有此漏洞的相关信息,只能对漏洞触发之前及之后PDF的行为进行检测。若利用此漏洞需要进行堆喷射,杀软对堆喷射的代码及行为检测很严密,最BT的属BitDefender,一个空白的PDF文档只加入unescape(%u9090%u9090)这样的形式就会被认为是恶意文档,当然这种最傻瓜也最有效,其他的杀软就不会这么干,Kaspersky在扫描PDF的过程中会对恶意文档进行分类数据块(data),分别进行扫描,恶意PDF文档的文件流进行解析分类,分别扫描每个流(Stream),针对堆喷射代码,其也进行解析,对堆喷射的关键词如"unescape","%u","for(x=0;x<****;x++)"进行组合判断,只出现其中一种是不会检测,但是一旦组合起来,必然会进行查杀。小红伞对堆喷射行为的检测是这几款杀软里最严密和最精确的,在测试过程中,其他的杀软可以绕过,唯独小红伞无法绕过,其对堆喷射的代码进行了精确的还原,并定位了多个特征码,对行为进行比对分析,提示恶意PDF文档,这是在PDF文件流中有明确的提示存在JavaScript代码的情况,若PDF文档的二进制中没有明确的提示或者JavaScript代码经过加密或者混淆处理也是可以检测出来的,但是相应的恶意文档提示信息会有所不同。BitDefender可以检测出隐藏在其他流里的JavaScript代码,可以看出其对PDF文档的文件格式进行了解析并还原出明文的流,之后再进行检测,这种效率不是很高,但是查杀效果却是很好。诺顿对对喷射的行为检测主要是检测代码是否符合其针对PDF病毒库规则,并不会解析JavaScript代码的行为,静态很容易绕过,但得益于诺顿云查杀的强大,其更新速度非常快,有可能此时没有检测出来,但十分钟之后就已经能够检测,总之诺顿对恶意PDF文档在漏洞触发之前的行为检测是不如其他几款软件的。
  若恶意PDF文档不依赖于堆喷射就可以执行ShellCode,以及假设堆喷射行为绕过以上所有杀软,那么就得转到杀软对恶意PDF文档漏洞触发之后的行为检测上,其中检测效果
最出众的的为Kaspersky和Norton,Kaspersky会对恶意PDF文档所嵌入的木马文件进行签名对比病毒库等检测,若符合其规则就直接警告,这其实属于木马免杀的范畴了,不懂所以略过,若木马可以绕过Kaspersky的主动防御,那么Kaspersky对恶意PDF文档的检测就如同虚设了。再来说诺顿,在这几款杀毒软件中,诺顿是对唯一对ShellCode的行为进行检测了的,而且其对Adobe Reader进程做了特别的保护相对于其他的PDF文档阅读工具。恶意PDF文档的ShellCode在执行过程中会生成一系列的的文件如正常文档,木马程序等等,诺顿会对ShellCode所使用的API进行监控,一旦符合其规则就会禁止执行并弹出警告信息。基本上诺顿对常见的ShellCode的行为都进行了检测,没有一定的奇技淫巧ShellCode是过不了诺顿的,就算过了这一关,其还有更强大的云查杀,在木马执行之前诺顿会与云查杀服务器进行查询,判断是否是正常的应用程序且会返回此程序在网络上的使用情况,并交由
用户进行判断,一旦符合检测规则,则会连同恶意PDF文档一起进行警告,相对应的Kaspersky只会提示某个程序符合其检测规则。
  2  NDay漏洞的检测
  针对NDay漏洞的检测,其实主要是看各个杀软对漏洞的分析程度,一般来说,对NDay漏洞的分析都是很透彻的,意思就是NDay漏洞的触发原理和触发过程杀软已经能够检测,并且给出相应的漏洞编号,Avast对恶意PDF文档检测就是如此,其他的杀软也在慢慢的跟进。
  杀软定位一个NDay漏洞, 若能够定位出溢出或者利用的关键点,是能够检测出所有利用此漏洞的恶意PDF文档,如同任你有千变万化,我有火眼金睛在身,恶意PDF文档无从藏身。但从攻击与防御的角度看,恶意PDF文档也是有办法完全隐藏漏洞溢出点的,这于杀软的检测规则有关,当然也与恶意PDF文档的编写者对抗杀软检测的经验有关,最重要的要属对PDF文档的文件结构的熟悉程度。
  NDay漏洞的利用形式与0day漏洞的利用上是没有区别的,区别在于漏洞是否公开,NDay漏洞有助于杀软更精确的定位恶意PDF文档,市面上常见的杀软针对NDay漏洞都有很好的检测效果,这是针对恶意PDF文档的文件结构不复杂的情况,恶意PDF文档若足够复杂,个别杀软是无法检测出来的,尽管是NDay漏洞,但却可以做到0Day漏洞的效果。具体来说诺顿卡巴斯基以及小红伞对NDay漏洞的检测查杀比较准确。基本上以上三款软件可以绕过的话,其他的杀软都是小Case。
  3  其他情况的检测
  这里的其他情况指的是PDF阅读器自身功能限制不严谨产生的绕过检测执行木马的漏洞,当然也有0day nday之分,0day的话,杀软的检测主要就是看各家杀软的功力了,一般来说很难有效的检测出来,需要配合其他的检测手段,如诺顿和卡巴斯基的主动防御,至于另外的杀软,检测效果不理想。此类漏洞一旦爆出,杀软更新以后再想绕过就没有办法了,因为此类漏洞的形式是固定的,很难找到变形或者变通的办法,属于典型的见光死。
  
三  恶意PDF文档与杀毒软件的对抗
  之前已经涉及到部分的对抗内容,通俗一点就是指恶意PDF文档针对杀软所做的免杀操作。这部分内容只讲述方法,具体应用不会涉及到。有些话不能说的太细,O(∩_∩)O~!
恶意PDF文档与杀毒软件的对抗就我的理解可以分为三个阶段,个人理解,肯定有不对之处,还请见谅。
  1  2007之前~2008
  这个阶段恶意PDF的利用还不算很成熟,杀软的检测的主要精力已经开始从Office等恶意文档开始关注PDF,但并不是重心,对抗程度还不够激烈。具体来说,堆喷射的代码只要稍微进行编码变形等操作以后基本上就可以绕过杀软。相应的PDF的漏洞还很少,利用方式上还不成熟,堆风水这篇文档奠定了堆喷射技术基础,是2007年在blackhat上发布的。
  2  2008~2009
  此时PDF漏洞开始增多,另一个背景就是Office漏洞越来越少,而且利用难度也月越来越大,同时杀软的恶意Office文档的检测非常成熟,于是乎PDF代替Office成为热门的恶意文档利用。
堆喷射技术也在发展,对堆喷射进行编码已经起不到作用,杀软能够很好的还原出编码后的代码,进行检测查杀,变形和混淆开始占对抗杀软的主流技术,另外一个现象就是堆喷射技术试图和其他替代技术(Flash中的Action Script)相结合已达到对抗的目的,效果暂不论。
  3  2009~2010至今
  由于堆喷射的技术足够简单且有效,杀软对其的检测也越来越成熟和有效,常见的堆喷射代码的添加已经失效,堆喷射的代码隐藏的越来越深,查看恶意PDF文档的二进制是不会出现类似“JavaScript”关键字的,堆喷射代码进入到了其他类型的流中,而非一般意义上的文件流,个别杀软能够解析出这些流中的数据,但文件格式再复杂一些的话杀软也无能为力了。堆喷射的替代技术(Flash)也是会被杀软检测。现在出现这么一种情况,对抗免杀一款杀软是可以做到的,但是若做到全部免杀所花费的时间成本和精力成本就会很大,且效果并不好,有时候还要牺牲成功率的代价,这是漏洞利用中所不可以承受的。在漏洞触发以后还要考虑杀软主动防御的情况,这又是一种成本,按照flashsky关于收益与成本的说法,相信恶意PDF文档所能达到的收益在成本越来越高的背景下会慢慢的减少,或者被新的利用方式所取代。
  
  四  总结
  杀软对恶意PDF文档检测一般过程就是解析恶意PDF的文档流,对明文流与杀软自身的漏洞库或者检测规则库进行比较,判断是否为恶意,在恶意PDF文档触发漏洞后所做的行为进行检测,判断是否为
恶意文档,各个杀软有其自身的优点和缺陷,并且在与恶意PDF文档(同样适用于其他类型的文档)不断进步。
  有些杀毒软件在文中并没有提及,并不是其不好,而是作者在测试过程中没有发现其特殊之处。