首页
社区
课程
招聘
[分享]PDF fuzzer的攻击面
发表于: 2017-9-8 16:52 11158

[分享]PDF fuzzer的攻击面

2017-9-8 16:52
11158

概述

便携式文件格式(a.k.a. PDF)是使用最广泛的文件之一格式在世界上,这种复杂的文件格式也暴露了很大的潜力攻击面对我们来说很重要。 去年,由深入挖掘PDF的攻击面,模糊流行的PDF读者有效率,有人独自发现了近150个漏洞世界上最受欢迎的PDF阅读器,包括Adobe Acrobat和Reader,FoxitReader,Google Chrome,Windows PDF Library,OS X Preview和Adobe数字版 供应商修复了100多个漏洞并分配了CVE。以下部分总结了本文的大纲:

介绍攻击面测试用例模糊技巧结果参考文献

介绍

PDF已成为更安全可靠的实际全球标准信息交流自Adobe发布完整的PDF规范在1993 [1]。 然而,这种复杂的文件格式也暴露了很大的潜力攻击面对我们来说很重要。 有一些有关PDF安全性的研究已经有一些列举如下:

Nicolas Grégoire: Dumb fuzzing XSLT engines in a smart way [2]挖掘分析XSLT引擎Zero Day Initiative: Abusing Adobe Reader’s JavaScript APIs [3]挖掘分析JS API-Sebastian Apelt: Abusing the Reader’s embedded XFA engine for reliable Exploitation [4]这里是指挖掘XFA

然而,这些研究中的每一项仅涵盖了PDF的单个攻击面。更重要的是,基本但最常用的PDF特性,如图像和字体,从不提及。 由于PDF是一种复杂的格式,很多的工作可以在这里完成。 通过挖入PDF的攻击面,我在各种PDF阅读器中发现了近150个漏洞。我的工作主要集中在Adobe Acrobat和Reader以及大多数产品中存在漏洞。 但是,这并不意味着产品比其他PDF阅读器更脆弱。

2. Attack Surface 攻击面

如果你想知道攻击面是什么,你要问的问题你自己首先是如何找到攻击面。 在这里我总结了四个可能找到攻击面的方法。

2.1标准文件

PDF的ISO标准是ISO 32000-1:2008 [5]和文件可以从Adobe的网站免费下载[1]。 这个文件有756页,几乎描述了便携式文档的所有内容格式化本身 然而,这里没有详细描述一些特征文档,如JavaScript,XFA(XML Forms Architecture),FormCalc等以下文件是一些有用的材料供参考。

适用于Acrobat API参考的JavaScript 
[6]XML Forms Architecture(XFA)规范[7]
FormCalc用户参考[8]
此外,PDF支持嵌入外部文件,如字体(TrueType,Type0,Type1,Type3等),图像(Jpeg2000,Jpeg,Png,Bmp,Tiff,Gif,Jbig2等),XML(XSLT等)。 这些文件的标准文件将不会被讨论在本文中

2.2安全咨询

注意安全咨询是观察状况的好方法安全趋势。 最重要的是,我们可以知道其中存在的缺陷零件。 以下咨询是值得一读的。

零日倡议咨询[9] Zero Day Initiative’s Advisory 
铬问题跟踪[10]Chromium Issue Tracker
 [Adobe安全公告和建议[11]Adobe Security Bulletins and Advisories 

2.3 Installation Files

文件名属性内部字符串,包括ASCII和Unicode字符串功能名称,包括内部符号和导出功能Copyrights information

例如,通过分析文件的属性,我们可以得出结论Adobe Reader的安装目录中的JP2KLib.dll负责解析JPEG2000图像。 下图显示了文件的属性页。

下表显示了Adobe Acrobat中部分文件的作用读者的安装目录。

2.4开源项目

找到攻击面的另一种方法是调查类似的开源项目。 PDFium是一个着名的开源PDF渲染引擎基于Foxit Reader的技术,并由Chromium的开发人员维护。事实上,我们可以在PDFium和Foxit Reader之间找到很多类似的代码比较PDFium的源代码和Foxit的反汇编代码读者。我们可以通过分析PDFium的源代码来尝试找到攻击面。 但对于PDFium,另一种方法是分析libFuzzer组件。目前,PDFium在“测试/ libfuzzer”目录中有19个官方的模糊器[12]。

下表显示了这些模糊器的详细信息

3. 测试样例测试用例

或种子文件在模糊过程中起着重要的作用。 对于基于传统突变的模糊器,更多的测试用例意味着更多可能的代码最终意味着更多可能发生的事故。 收集更多的测试在大多数情况下,写入爬虫的情况是可以接受的,但有一些替代方式。 在这里我总结了收集测试用例的两种可能的方法

3.1基于代码覆盖的模糊器测试用例

American fuzzy lop (a.k.a AFL)和libFuzzer是两个着名的代码覆盖基于模糊器。 对于AFL fuzzer,单个和小的测试用例足以驱动模糊过程。 对于libFuzzer,它通常会消耗最小的测试集案例作为输入数据,但即使没有任何初始测试用例,它仍然可以工作。这两个模糊器的共同特征是它们会产生大量的测试案例得到更高的代码覆盖率。 所以为什么不重用测试用例由AFL或libFuzzer生成? 为了达到这个目标,我们必须摸索开放源库或类似的,与AFL或libFuzzer。 下图显示此方法的过程。

###3.2开源项目测试套件收集测试用例的另一种方法是重用开源项目的测试套件。一般来说,流行的开放源码项目也保留了一个测试套件存储库包含大量有效和无效的文件。 一些测试用例可能会直接崩溃旧版本的二进制文件。 使用测试套件是个好主意作为模糊器的种子文件。 对于不经常使用的文件格式,它是均匀的很难从搜索引擎中抓取一些。 例如,很难收集

来自Google的一些JPEG2000图像,但是您可以从中获取数百个文件OpenJPEG [13]。 下表显示了一些可用的测试套件。

https://pdfium.googlesource.com/pdfium_tests/

https://github.com/mozilla/pdf.js/tree/master/test/pdfs
https://github.com/uclouvain/openjpeg-data
https://www.google.com/get/noto/

4 测试技巧

效率是模糊者的重要指标,特别是计算时资源有限 在这里我总结了两个提高效率的模糊技巧

4.1 Write PDF makers

一般来说,PDF文件由纯文本和二进制数据组成。 它的如果你已经有了具体的目标,那么直接对PDF进行模糊处理就不是一个好主意作为图像,字体等。我们可以编写PDF制作者,以便我们只会突变我们感兴趣的数据有些第三方PDF制作者可以转换文件,如图像和字体,到PDF文件。 但是它不是推荐的解决方案,因为错误检查工具中的功能可能会导致许多格式错误的测试用例。在这种情况下,请阅读标准文件并撰写临时PDF制作人被推荐。 PDF制作者的技术细节将不会被讨论这篇文章不是一件艰巨的任务

4.2 Fuzz第三方库

大型软件使用开源库并不奇怪。 值得一试fuzz第三方库 揭示安全漏洞。 以下列表显示fuzz第三方库的优势。

使用AFL或libFuzzer的Fuzz开源库更有效率目标软件可能受到已知漏洞的影响零日漏洞影响使用库的所有目标软件下表显示了Adobe使用的一些开源项目

去年,我在libtiff发现了一个Out-of-Bounds写入漏洞PixarLogDecode功能并报告给Chromium。 帖子显示谷歌的Mathias Svensson也发现了这个漏洞[14]和思科Talos的Tyler Bohan [15]。 此漏洞的CVE标识符为CVE-2016-5875。 下表显示受此影响的PDF阅读器

对于Adobe Acrobat和Reader,渲染引擎没有受到影响在AcroForm.api中未配置PixarLog压缩支持。 对于Google Chrome,Canary,Dev和Beta版本的XFA已启用受影响(XFA已在Chrome Canary,Dev和Beta版本中启用并尽快停用)。 对于Foxit Reader,渲染引擎和ConvertToPDF插件受到影响。

4. 3 Write wrappers

PDF阅读器或Web浏览器是大型软件,创建了这些实例产品是耗时的,特别是一次又一次地创建实例在模糊过程中。 避免加载不必要的模块和初始化不必要的数据,写封包是一个不错的选择。对于开源项目,写一个包装很容易。 对于产品提供API,如Foxit Reader和Windows PDF Library,它也不是很难写一个包装。 但对于不符合上述要求的产品条件,我们可能需要做一些逆向工程工作来写一个包装。Windows.Data.PDF.dll负责在Edge浏览器中呈现PDF并自Windows 8.1起运行在操作系统中。 这个图书馆可以通过Windows运行时API进行交互。 帖子[16]显示如何使用C ++编写一个用于渲染PDF的包装器

5 Results

研究从2015年12月开始,主要关注Adobe Acrobat读者和大多数漏洞都在产品中被发现。 然而,这并不意味着产品比其他PDF更容易受到伤害读者。 去年,供应商修补了122个漏洞并分配了CVE。 应该指出,将排除一个漏洞如果满足以下条件之一。

不影响PDF阅读器稳定版本的漏洞供应商尚未修复的漏洞其他研究人员报告的脆弱性\下图显示了按供应商排序的漏洞分布

下图显示了按攻击面排列的漏洞分布

References
[1]. Document management - Portable document format - Part 1: PDF 1. 7,http://www.adobe.com/content/dam/Adobe/en/devnet/acrobat/pdfs/PDF32000_2008.pdf
[2]. Dumb fuzzing XSLT engines in a smart way,http://www.nosuchcon.org/talks/2013/D1_04_Nicolas_Gregoire_XSLT_Fuzzing.pdf
[3]. Abusing Adobe Reader’s JavaScript APIs,https://media.defcon.org/DEF%20CON%2023/DEF%20CON%2023%20presentations/DEFCON-23-H ariri-Spelman-Gorenc-Abusing-Adobe-Readers-JavaScript-APIs.pdf
[4]. Abusing the Reader’s embedded XFA engine for reliable Exploitation,https://www.syscan360.org/slides/2016_SG_Sebastian_Apelt_Pwning_Adobe_Reader-Abusing_the_readers_embedded_XFA_engine_for_reliable_ Exploitation.pdf
[5]. ISO 32000-1:2008,https://www.iso.org/standard/51502.html
[6]. JavaScript for Acrobat API Reference,http://www.adobe.com/content/dam/Adobe/en/devnet/acrobat/pdfs/js_api_reference.pdf
[7]. XML Forms Architecture (XFA) Specification,http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.364.2157&rep=rep1&type=pdf
[8]. FormCalc User Reference,http://help.adobe.com/en_US/livecycle/es/FormCalc.pdf
[9]. Zero Day Initiative’s published advisories,http://www.zerodayinitiative.com/advisories/published/
[10]. Chromium issue tracker,https://bugs.chromium.org/p/chromium/issues/list?can=1&q=Type=%22Bug-Security%22 
[11]. Adobe Security Bulletins and Advisories,https://helpx.adobe.com/security.html#acrobat
 [12]. Official fuzzers for PDFium,https://pdfium.googlesource.com/pdfium/+/refs/heads/master/testing/libfuzzer/
[13]. OpenJPEG data,https://github.com/uclouvain/openjpeg-data
[14]. Seclists,http://seclists.org/oss-sec/2016/q2/623
[15]. LibTIFF Issues Lead To Code Execution,http://blog.talosintelligence.com/2016/10/LibTIFF-Code-Execution.html
[16]. Using WinRT API to render PDF,http://dev.activebasic.com/egtra/2015/12/24/853/ 

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 5676
活跃值: (1303)
能力值: ( LV17,RANK:1185 )
在线值:
发帖
回帖
粉丝
2
这是谷歌翻译的吧。。
2017-9-8 23:49
0
雪    币: 250
活跃值: (326)
能力值: ( LV5,RANK:65 )
在线值:
发帖
回帖
粉丝
3
求原文链接,谢谢
2017-9-21 10:54
0
雪    币: 341
活跃值: (143)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
4
感谢分享
2017-9-21 11:20
0
雪    币: 341
活跃值: (143)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
5
原文:https://www.blackhat.com/docs/asia-17/materials/asia-17-Liu-Dig-Into-The-Attack-Surface-Of-PDF-And-Gain-100-CVEs-In-1-Year-wp.pdf
2017-9-21 11:22
0
游客
登录 | 注册 方可回帖
返回
//