用于恶意PDF文件检测的模式识别系统

本文介绍2012年MLDM会议论文《A Pattern Recognition System for Malicious PDF Files Detection》,其DOI信息在这里

这篇论文虽有些老旧,但其语言精练、叙述准确,个人认为可以用于学习论文写作。这篇论文的另一个亮点是实验对比详尽,在形成思路需要实验验证时,不妨先学习一下这篇论文。

摘要

在过去的2到3年中,恶意PDF文件已经被用来危害计算机安全,而现代的反病毒技术被证明并不能完全有效地对抗这种威胁。该论文提出了一种将与PDF文件结构密切相关的特征提取的模块,与有效分类器相结合的创新技术。这个系统已经被证明比其他最先进的用于恶意PDF检测的研究工具更有效,也比大多数商业中的反病毒工具更有效。此外,它的灵活性允许采用它作为独立工具或插件,以提高已安装的杀毒软件的性能。

介绍

黑客试图破坏计算机系统安全的方式一直在不断演变。操作系统变得更加安全,因为安全补丁不断被释放,找到零日漏洞的可能性也降低了。因此,第三方应用程序(如Adobe Reader、Microsoft Outlook等)和它们读取的文件格式已经成为攻击者的目标。

现在,PDF文件格式被广泛地用于阅读文档,并且通常认为它是安全的。然而,它的安全在过去几年中受到了损害。通常用于打开它们的应用程序已经成为网络犯罪分子的目标,他们一直在试图找到能够使他们控制读取PDF文件的计算机系统的缺陷或漏洞。此外,此类应用程序的第三方插件拓宽了攻击的范围,这些应用程序经常出现bug,尽管这些bug已经被发现,但并没有及时修复。一旦这些系统被利用,它们也可能被网络犯罪组织用作僵尸网络的一部分。赛门铁克和IBM在2009年和2010年的安全报告中明确提出了这个问题。

攻击者也变得更聪明了,Adobe等软件公司建立的许多对策现在都被忽略了。大多数攻击的重点都是绕过最先进的保护措施,因此,针对最广泛的攻击(包括可能的新攻击)的系统的开发将是解决这一威胁的关键。由此,这篇论文提出了一种检测恶意PDF文件的新工具,利用特定于PDF的特性,通过机器学习构建统计分类器。

PDF技术概览

历史简述

PDF是便携式文档格式(Portable Document format)的首字母缩写,是一种广泛使用的交换文档的标准。它首先在1990年开始提出,1993年开始用于公共领域;1994年,用于读取PDF文件的Adobe Reader变为免费。现在,PDF、DOC(DOCument)和ODT(OpenDocumenT)都是最常用的文档阅读和可视化格式之一,后两个分别被Microsoft Word和Open Office使用。PDF格式是灵活的,允许较高的排版质量和相对较小的内存使用,并且它能够在不同的软件平台和应用程序中被识别。

PDF结构

PDF文件的结构为一系列逻辑上相互连接的字典对象(标记为“<<”和“>>”),每个对象后面都有一个压缩的数据流。每个字典对象包含更简单的对象类型(数字、数组、名称),它们提供关于对象本身执行的操作的信息。数据流可以包含文本、图像和使用字典中对象提供的信息进行处理的代码。对象可以是页面、字体、图象、嵌入代码。可以用文本方式(Raw模式)看到文件结构,其中关于对象执行的操作类型的信息由关键字表示,关键字由标记“/”标识。

攻击PDF文件的方式

攻击类型

由于其灵活的对象结构,PDF文件格式可以包含Java、Flash代码和其他各种应用程序。然而,这可能会带来很多安全问题,引发多种类型的攻击。下面总结一下主要的安全问题。

  • Javascript代码问题:攻击者可以在PDF文件中使用特定的API直接注入一些恶意的Javascript代码,以便利用应用程序的漏洞读取它。CVE-2009-4324对其进行了报告。
  • 启动操作:攻击者可能会生成一个PDF文件,以在操作系统上启动特殊的命令。这通常发生在用户进行确认之后。CVE-2010-2883对其进行了报告。
  • 嵌入文件:PDF文件可能包含附加文件,可由阅读器程序提取和打开。这可以用来隐藏恶意的可执行文件。例如CVE-2010-1240。
  • 嵌入Flash应用程序:PDF文件可能包含Flash应用程序(存储为嵌入的SWF文件)以及恶意的ActionScript代码。例如零日漏洞CVE-2010-3654。

逃避技术

攻击者通常使用模糊和加密技术来绕过IDS(入侵检测系统)和反病毒。以下是对几个重要技术的描述。

  • GoToEmbedded操作;一个PDF文件可以嵌入到另一个PDF文件中,并且可以发布一个特殊的命令,这样Adobe Reader就可以在不通知用户的情况下打开嵌入的PDF文件。这个特性可以用于在一个普通的PDF文件中隐藏恶意的PDF文件。
  • 加密:可使用密码加密PDF文件。但是,如果使用了一个空的密码,Adobe Reader将直接打开它,而无需询问用户。
  • 解析器的“灵活性”:可以在PDF文件的头部引入一些细微的变化,以绕过严格的反病毒防护。

典型攻击流程

了解攻击通常如何执行,对于分析的目的非常重要。以下将提供攻击发生时所采用的典型流程,但不会详细介绍所采用的漏洞技术,因为这不是文章的目的。

  1. 打开恶意的PDF文件(通常由垃圾邮件发送)。恶意的PDF文件可能包含SWF、HTML和JS文件、Javascript和ActionScript代码,甚至嵌入恶意的PDF文件。为了不被IDS检测到,这些元素通常被混淆。
  2. 根据嵌入代码/文件的类型,使用一些漏洞利用技术,如:
    • 缓冲区溢出。恶意代码被插入到程序允许范围之外的内存区域。
    • 面向返回编程(Return Oriented Programming, ROP)。程序流被重定向到包含恶意代码的内存区域,使用特定的内存地址。
    • 堆喷射(Heap Spraying, HS)。内存的堆区域包含一个包含恶意代码的对象的多个副本,以绕过针对ROP的一些策略。
    • JIT喷射(JIT Spraying, JITS)。使用JIT编译器在内存中创建不可写入的区域,然后向该区域注入恶意代码。
  3. 由于这个漏洞,嵌入在PDF文件中的shellcode被复制到主内存中并执行。
  4. shellcode触发了一个“特洛伊木马”程序的下载,并自动执行,破坏整个计算机系统的安全。

PDF安全相关工作

PDF安全是一个相当新的研究领域。许多研究人员一直致力于发现新的威胁,并开发一些工具来提高PDF分析的质量。Stevens开发了PDFid,它能够提供包含在PDF文件中的对象的详细列表,以及它们的频率(即它们在文件中出现的次数)。Contagio提供了对PDF文件漏洞的深刻见解,也提供了我们分析中使用的部分数据集。

与PDF安全相关的学术工具并不多。大多数可用的工具同时检测到多种类型的恶意软件,同时包括PDF。文章提到的有:CWSandbox、Wepawet、Nozzle、MDScan、PJScan等。

新型PDF检测器

文章提出了一种新的工具——PDF恶意软件杀手(PDF Malware Slayer, PDFMS)。PDFMS是一种基于机器学习的高级工具,用于检测恶意PDF文件。本工具由以下几部分组成:

  • 数据检索模块,检索训练/测试阶段的文件。
  • 特征提取模块,确定分类器使用的特征类型。
  • 分类器本身。

下面将关注开发特征提取模块所采用的方法,以及选择分类器背后的指导原则。

特征提取

特征提取是本项目最重要的部分,因为不正确地选择特性会影响分类器的工作结果。恶意代码总是包含在被压缩的数据流中。然而,由于存在各种各样的PDF对象,作为一个整体来分析数据流可能非常复杂。此外,过于关注特定类型的对象(例如Javascript或ActionScript)可能导致只允许检测一部分PDF攻击。为了克服这个问题,文章根据嵌入的关键字的集合来描述PDF文件。值得注意的是,PDF阅读器需要识别一些特定的PDF关键字,以便执行操作、打开图象等等。因此,每个关键字的出现对于理解打开PDF文件时PDF阅读器的高级行为以及区分恶意PDF和合法PDF文件是很有用的。

为了实现这一目标,文章采取了两步:

  1. 考虑两个分别由恶意与合法的PDF文件组成的集合。对于这两组,我们列举了PDF文件的关键字,对于每个关键字,计算它的相对频率(在一个文件中多次出现一个关键字只被考虑一次)。然后,无论是恶意文件还是良性文件,通过K-means聚类(K = 2)来识别频率最高的关键字组(即最高质心)。基本特征集由对应两个集群的联合(union)定义。在这个集合中的每个关键字,我们添加它的混淆版本(如果它至少一次出现在良性或恶意的文件中)来构建最终的特性集。例如,如果关键字/JS基本特性集内,有一个模糊的版本的这个关键字,即/JSoffus,我们将包括/JSoffus最后的特性集。
  2. 通过计算特征集合中每个关键字的频率,得到每个PDF文件的特征向量。

下图示意出特征提取器的结构。

特征提取器结构示意图

分类

上面选择的特征并没有明确提示应该选择哪种分类器。在实验阶段,考虑了朴素贝叶斯、SVM和决策树(特别是使用随机森林)等不同的分类器。在确定了哪种分类器在训练模型上的准确性和稳定性最好之后,文章对此系统在测试集上的准确性和其他系统(商业、学术)的准确性进行了比较。

实验评估

精确度测量实验表明,该系统的性能优于绝大多数商业杀毒软件。此外,它的性能比Wepawet好得多,这是一种学术开发的强大工具。事实上,我们的工具专门针对PDF攻击的检测,而Wepawet已经被开发用于检测包括恶意PDF文件在内的许多威胁。因此,专业化对于发现这种威胁显得非常重要。本文提出的工具还可以扫描任何类型的PDF文件,而像PJScan这样的学术工具可以只分析带有Javascript代码的PDF文件。

尽管这个系统已被证明是非常有效的,但它也存在一些结构性缺陷。首先,在良性文件中找到的相同对象也可以在恶意文件中找到,这意味着同一对象可以带来恶意或良性代码。PDFMS能够正确地确定文件的恶意性的原因是数据流中许多特征对象的单个频率的值。因此,虽然PDFMS能够确定PDF文件是否是恶意的,但它不能给出任何关于漏洞类型的信息,因为它不分析此类流中的代码。更重要的是,如果攻击者了解了文件中某些对象必须出现多少次才能被工具认为是良性的,那么它可以通过在文件中注入这些特定的关键字来绕过PDFMS。为了避免这种攻击,正在对解析器进行改进。

结语

这篇文章通过对比机器学习中几个常用的算法,采用特征提取的方式对PDF文件进行聚类,达到了较好的效果。作为MLDM会议论文,本文语言详略得当,结构清晰,在学习其方法的同时,也应学习其行文思路与结构。