OD: File Vulnerabilities & Fuzz

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

OD: File Vulnerabilities & Fuzz的相关文章

OD: ActiveX Vulnerabilities

通过一个精心构造的页面 exploit 第三方软件中的 ActiveX 已经成为一种惯用攻击手段,众多知名软件公司都曾被发现其注册的 ActiveX 中存在严重的缓冲区溢出漏洞,一个被广泛使用的第三方软件漏洞的危害性不亚于 OS 级别的漏洞! 每一个 ActiveX 控件被注册进入系统之后,就会在注册表中建立一个键值来标识自己,这个键值就是 CLSID(Class ID),位于:HKEY_CLASSES_ROOT\CLSID,而能被浏览器加载的控件信息位于: HKEY_LOCAL_MACHINE

OD: Kernel Vulnerabilities

内核漏洞概述 内核漏洞的分类 运行在 Ring0 上的操作系统内核.设备驱动.第三方驱动能共享同一个虚拟地址空间,可以完全访问系统空间的所有内存,而不像用户态进程那样拥有独立私有的内存空间.由于内核程序的特殊性,内核程序漏洞类型也更加丰富.(书中收集了近年内公布的内核漏洞,并将相关的分析资料整理打包) 可以从漏洞的严重程度和漏洞的利用原理两个角度来对内核漏洞进行分类.漏洞的严重程度是指漏洞利用后所造成的危害:漏洞的利用原理是指漏洞利用过程中使用的原理和技术. 按照漏洞严重程度可分为以下 4 类:

OD: Kernel Vulnerabilities Analyze

内核漏洞大多出没于 ring3 到 ring0 的交互中.从 ring3 进入 ring0 的通道,以及操作系统提供的 API 都有可能存在漏洞.例如:驱动程序中 IoControl 的处理函数,SSDT 和 Shadow SSDT 中的系统服务函数(无论是否被 hook 都有可能存在漏洞),系统回调函数,内核钩子程序等.从漏洞数量来看,驱动程序中 IoControl 的处理函数中的漏洞最为多见,尤其是第三方的驱动程序. 本节对几种典型的内核漏洞,用几个真实的内核漏洞案例来详细分析. 远程拒绝服

Savelog项目总结回忆

Savelog项目的细节已经不太记得,感觉有些遥远,需要翻回旧的笔记本电脑或者是旧的笔记本. 概述: 本项目采用的Linux C,监听一个或多个特殊的端口,当其中一个端口有发起连接时就产生一个新的线程,并将端口发来的数据进行检验,然后保存到日志,日志只保留最近7天的内容,连接的端口会不断的发送数据,大概每秒钟发送一个,发送成功或失败都要写入日志,成功用info标签,记录端口号,IP等,失败根据失败的内容检查,并给出相应的原因. 下面讲一些笔记记下来,是从刚开始学Linux开始的那段. 杂锦: l

linux_api之文件操作

本篇索引: 1.引言 2.文件描述符 3.open函数 4.close函数 5.read函数 6.write函数 7.lseek函数 8.i/o效率问题 9.内核用以维护打开文件的相关数据结构 10.O_APPEND标志 11.dup函数(文件描述符重定位函数) 12.有关文件共享的问题 13.fcntl函数 14.ioctl函数         1.引言 1.1.文件io这个词的含义 实现对文件的数据输入(input)和输出(output),所以简称为文件io. 1.2.什么需要文件io 程序

Linux对rm的误操作预防

rm -rf /*    这个要命的操作,让我们轻易不敢用rm这个命令.虽然rm后,数据可以恢复,但是,rm后,rm的目标所在的区,一定不能写入内容了,但是我们无法保证一定不会写入内容.比如紧急状态下,人为的紧张或者其他的日志之类的持续的导入或者数据的同步之类的情况.(当然,那种传说中rpm能敲成rm的也是奇才.) 那么我们不如让rm实现mv aaa /root/.local/share/Trash的效果,让rm的目标转移到trash中,一旦发现rm了错误的目标,可以及时的从trash中还原.实

Dr.memory

Run Dr.memory on visual c++ 2013 Title: Dr. Memory Command: C:\Program Files (x86)\Dr. Memory\bin\drmemory.exe Arguments: -visual_studio -- $(TargetPath) Initial Directory: $(TargetDir) set arguments-light -no_midchunk_inheritance_ok -no_check_gdi -n

OD: Vulnerabilities Analyze Skills

第五篇了,漏洞分析案例 漏洞利用的灵活程度让这门技术变得似乎没有什么原则可言,只有实践后总结提高才能挥洒自如. 漏洞分析方法 目标:弄清攻击原理.评估潜在利用方式及风险等级.扎实的漏洞利用技术是进行漏洞分析的基础,否则可能将 bug 误判成漏洞,也可以将高危漏洞误判成 DOS 型的中级漏洞. 漏洞来源:挖掘.已公开的漏洞.patch(对比分析打补丁前后的 PE 文件,MS 发布补丁后一周内漏洞还在部分范围存在) 分析方法:动态调试(OllyDbg 等).静态分析(IDA 等).指令追踪(对比分析

解决Cannot find or open the PDB file问题

今天使用opencv里的mat想要保存数据里边的像素的平均值和标准差: 但是编程好了之后会出现下面的问题,不能找到pdb file .下面将提供三种解决方法以及产生问题的原因. 程序也运行不出来,整个人都不好了.后来上贴吧和网上搜,有很多种解决办法,但是对我最用的是第1个: 方法1.首先确认是不是建立的空项目而不是win32位控制台项目,如果建立的是空项目,建议把空项目改成win32位控制台项目,问题一下子就解决了. 方法2.还有种说法是其实问题在于,在空项目中不生成调试文件pdb,所以无法调试