漫谈漏洞挖掘之文件解析型漏洞
1 - 前言
2 - 文件Fuzz简介
3 - 文件Fuzz风云录
4 – 展望
5 - 结语
[1] - 前言
自2010年Google承认遭受严重黑客攻击之后,APT高级持续性威胁便成为安全圈子人尽皆知的“时髦名词”,当然对于像Google、RSA、Comodo等深受其害的公司而言,APT无疑是一场噩梦。其中,文件解析型漏洞在APT攻击中承担了重型武器的功能。
不管是IE还是Office,它们都有一个共同点,那就是用文件作为程序的主要输入。不少程序员会存在惯性思维,即假设他们所使用的文件是严格遵守软件规定的数据格式。但是攻击者往往会挑战程序员的假定假设,尝试对软件所约定的数据格式进行稍微修改,观察软件是否在解析这种“畸形文件”时是否会发生崩溃或者溢出。
[2] – 文件Fuzz简介
文件格式Fuzz(File Fuzz)就是这种利用“畸形文件”测试软件鲁棒性的方法。
FileFuzz可以分为Blind Fuzz和Smart Fuzz。Blind Fuzz即通常所说的“盲测”,就是在随机位置修改数据来生成畸形文件。然而现在的文件格式越来越复杂,Blind Fuzz的代码覆盖率偏低,会产生大量的无用测试用例。针对Blind Fuzz的不足,Smart Fuzz被越来越多地提出和应用。Smart Fuzz即智能Fuzz,通过解析文件格式,然后基于样本和变异来生成畸形文件。它能够识别不同的数据类型,并且能够针目标数据的类型按照不同规则来生成畸形数据。跟Blind Fuzz相比,Smart Fuzz能大大减少无效畸形文件的数量。
[3] – 文件Fuzz风云录
下面,笔者将根据自己的一些经验,介绍常见的文件Fuzz思想。
[3.1] – Blind Fuzz
Blind Fuzz的代表就是著名的iDefense lab出品的Filefuzz。
FileFuzz的变异策略分为4种:All Bytes、Range、Depth、Math。All Bytes即对整个文件按字节进行修改,修改为我们指定的4X00或者4XFF或者3XFF。Range即针对某一个范围进行按字节进行修改,方便我们进行针对性测试,如只对某个文件头进行测试。Depth即深度测试,对某个偏移的数据进行,比如对偏移为0x2的数据修改为0x00-0xFF这个范围。Match即将符合条件的数据修改为相应的数据。
原始版的Filefuzz略显简陋,幸好Filefuzz是开源的,我们可以根据自己定的策略来修改相应的生成策略。我们可以建立自己的“智能数据”,修改的数据可以不仅限于0x00、0xFF,可以是0x3F、0x7F、0x01、0x02、0x80、0xFE、0x10、0x20、0x40、0x60等等。如果是想测整数溢出,可以修改为一些边界数据,如0xFFFFFFFF-1、0xFFFFFFFF-2、0xFFFFFFFF-3等等。
个人认为,FileFuzz比较适合有经验的人士,FileFuzz完全具备“快、准、狠”的能力。只要策略设置得好,文件格式脆弱点寻找的好,用FileFuzz挖洞是件很惬意的事。“简单的是最美的”,FileFuzz虽然很简单,但是只要策略够猥琐,FileFuzz就是神器。
[3.2] – File FormatBased Smart Fuzz
本节介绍的智能文件Fuzz是基于文件格式规范的,大体的流程如上图所示。该类文件Fuzz系统中最为出名非Peach莫属。Peach采取xml格式来定义文件格式规范,称为Peach Pit文件。
使用Peach的难度在于Peach Pit文件的编写,当遇到比较复杂的文件格式时,用xml定义文件格式会略显无力。“Peach虐我千百遍,我待Peach如初恋”。我们必须以这样的心态来使用Peach,即使被Peach虐得体无完肤,但依然钟爱Peach。
基于Peach,我们实现了25种常见文件格式的文件格式规范,对公司产品及外部产品进行测试,效果显著,发现了公司产品的N多个漏洞。此外,也展现了不错的历史漏洞发现能力和0day发现能力。
1)已知漏洞测试结果
主要测试目标为近期exploit-db及其他漏洞库上公开的已知漏洞,均能发现:
2)0day发现测试结果
主要测试目标为国内和国外大型互联网公司产品,包括苹果、360、百度、迅雷等主流互联网厂商的6个高危0day。细节已经同步给相关厂商,并已修复。
总体来说,Peach的效果还是可以,就是编写Peach Pit太麻烦,用起来太费劲。
另:笔者比较喜欢FileFuzz+Peach的组合方式,用Peach生成测试用例,用FileFuzz在多台虚拟机里平行跑,减少Fuzz时间。
[3.3] – Smart Fuzz
近来,更智能的文件Fuzz越来越多地被提出来,通过符号执行、路径约束求解等技术来提高代码的覆盖率。其中比较出名的为Fuzzgrind。Fuzzgrind是一款开源的文件型智能Fuzz工具,运行于Linux平台下,采用Valgrind插桩工具和STP求解器。它的执行流程如下:
该类型文件Fuzz系统无需知道文件格式规范,只需提供样本文件即可,通过符号执行来提高代码覆盖率。目前的瓶颈在于效率问题,只要目标程序的复杂度较高,稍微大一点的程序就完全没法测试。只要能突破效率问题,该类型的文件Fuzz系统就是未来文件Fuzz的主导者。
[4] – 展望
[4.1]-010 Editor File Fuzz
相对于Peach Pit模版的编写,010 Editor的文件格式解析脚本编写起来相对简单。其中,010 Editor的bt脚本只能对样本文件进行解析,不能修改,而1sc脚本可以访问bt脚本中的数据结构,然后修改数据。
思路:编写010 Editor的变异器,通过1sc脚本访问bt脚本来实现畸形样本的构造。
[4.2]-数学之美
“数学是科学的皇后”。我相信,我们可以通过研究漏洞成因,进行数学建模,来进行漏洞挖掘。有兴趣的同志可以试试。
[5]-结语
本文主要介绍了目前常见的文件Fuzz思想,以及自己对文件Fuzz的一些想法和展望。如果你有新的想法,欢迎跟我探讨。
“思想有多远,就能走多远”。
References
[1]0day安全:软件漏洞分析技术(第二版)http://www.vm888.com/ebook/200911/15996.html
[2]模糊测试:强制性安全漏洞挖掘:http://www.vm888.com/ebook/201108/28935.html
[3]fuzzgrind.pdf
- 11-15不看后悔!程序员防御XSS的无奈
- 11-10揭秘Web黑客3种注入点判断方法
- 11-10黑客Web脚本注入攻击深度剖析
- 10-21全球无线网络面临黑客攻击风险 WiFi曝安全漏洞
- 02-24iPhone再爆安全漏洞 黑客1分钟可盗照片及加密信息
- 02-22互联网金融风险 警示网站漏洞或成“致命点”
- 01-11全球最受赞誉公司揭晓:苹果连续九年第一
- 12-09罗伯特·莫里斯:让黑客真正变黑
- 12-09谁闯入了中国网络?揭秘美国绝密黑客小组TA
- 12-09警示:iOS6 惊现“闪退”BUG
- 12-05亚马逊推出新一代基础模型 任意模态生成大模
- 12-05OpenAI拓展欧洲业务 将在苏黎世设立办公室
- 12-05微软质疑美国联邦贸易委员会泄露信息 督促其
- 12-05联交所取消宝宝树上市地位 宝宝树:不会对公
- 12-04企业微信致歉:文档打开异常已完成修复