IE、Office 等软件有个共同点,即用文件作为程序的主要输入,但攻击者往往会挑战程序员的假定和假设。
文件格式 Fuzz 就是利用畸形文件测试软件的稳健性,其流程一般包括:
* 以一个正常文件作为模板,按规则产生一批畸形文件 * 将畸形文件逐一送往软件进行解析,并监视异常 * 记录错误信息,如寄存器、栈状态 * 进一步分析日志等异常信息,鉴定漏洞和利用性
Blind Fuzz
即盲测,在随机位置插入随机数据产生畸形文件。
现代软件往往使用非常复杂的私有数据结构,如 PPT、word、excel、mp3、rmvb、pdf、jpeg、zip、加壳 PE。数据结构越复杂,解析逻辑越复杂,就越容易出现漏洞。
复杂的数据结构通常具备以下特征:
* 有一批预定义的静态数据,如 magic、cmd id 等 * 数据结构的内容可以动态改变 * 数据结构之间嵌套 * 数据中存在多种数据关系(sizeof、point to、reference of、CRC) * 有意义的数据被编码或压缩,甚至用另一种文件格式存储,被挖掘出越来越多的漏洞
对于采用复杂数据结构的文件,Blind Fuzz 暴露出不足:测试用例缺少针对性,产生大量无效用例,难以发现复杂解析器的深层逻辑漏洞。
Smart Fuzz
针对 Blind Fuzz 的不足,Smart Fuzz 被越来越多地提出和应用。Smart Fuzz 有三个特征:面向逻辑、面向数据类型、基于样本。
面向逻辑,测试前明确要测试的目标是解析文件的程序逻辑,确定测试用例所试探的是哪一层解析逻辑,即明确“深度”以及畸形数据的“粒度”,这样在生成畸形数据时可以具有针对性的仅仅改动样本文件的特定位置,尽量不破坏其他数据的依赖关系。
面向数据类型,能够识别不同的类型,并且能够针对目标数据类型按照不同规则来生成畸形数据,可以生成算术类型 hex ascii unicode raw、指针型、字符串型、特殊字符型。这种方法产生的畸形数据通常都有效,能够大大减少无效用例。
基于样本:每次都从样本模板小幅度变异生成新的测试样本。但不能测试样本文件中没有包含的数据结构,所以需要有能包含所有数据结构的样本。
这三种 Fuzz 特性并不是相互独立的,可以同时使用。好的 Smart Fuzz 工具中,三种特性都会包含。
时间: 2024-10-29 19:10:09