-
-
[原创]并行化入侵式Fuzzing系统—Parallel Aggressive Fuzzing System(PAFS)
-
发表于:
2015-12-3 14:39
5021
-
[原创]并行化入侵式Fuzzing系统—Parallel Aggressive Fuzzing System(PAFS)
标 题: 【原创】并行化入侵式Fuzzing系统—Parallel Aggressive Fuzzing System(PAFS)
作 者: majinxin
时 间:
链 接: http://bbs.pediy.com/showthread.php?p=1404570
0x1前言
继我上次发布pingrind(http://bbs.pediy.com/showthread.php?t=150230)之后,尽管只是一个实验室Demo且代码写得也相当粗糙,但还是引来广大道友们的关注,不少人发邮件就此方向与工具与我进行交流与讨论,为此我也获益良多。后来为实际作用,研究了一点点Fuzzing技术,总是因为理论研究与实际应用之间的差距耿耿于怀。若理论研究没有实际应用,则是纸上谈兵。若只求实际应用而不思理论研究,则无异于闭门造车。前段时间,突然灵台清明,脑中出现一个点子,欲实现一个比较实用的符号执行系统,能够“真正意义上地”挖掘到漏洞。
该系统提供了一个分布式的Fuzzing框架,最终目标是提供自动测试用例生成,及覆盖率精简,并进行分布式Fuzzing漏洞挖掘的系统闭环,目前只实现了冰山一角,与最终目标相距甚远,因此作为DEMO发布,以求抛砖引玉,集思广益之效。
符号执行工具使用法国人Sébastien LECOMTE等开发的FuzzWin,同时他们也是Fuzzgrind的作者。FuzzWin是一部不俗的作品,但不得不说,其中还是有不少Bug和待改进的地方。我在FuzzWin上做了一些小小的修改与优化。若要达到实用效果,当需要大改,这部分工作已经列入我的todolist中。
0x2 符号执行
符号执行就是以将符号替代具体输入,结合对程序操作语义的分析,收集程序语句的符号表达式。在遇到分支时,计算不同取向所对应的路径约束。再使用定理证明器分别对两条路径约束求解,并得出满足该条路径约束中每个符号的值。
简单来说,遇到分支时,输入为x,假设分支条件为:
If(x == 100)
GO TO TRUEBRANCH
Else
GO TO FALSE BRANCH
符号执行的做法就是先令输入值x为符号,用专业语句表示即:
define-const x (_ BitVec 32))
如果想使程序走向True分支,那么对应的约束表达式为:
define-fun C_1() Bool (= x #x100)
assert (= C_1 true)
将该式传递给求解器,即可得出该约束可满足,且得出x= 100。
这是最简单的例子,那么如果遇到不简单的例子
若上述定义无法让你理解,那么请到中国知网搜索“符号执行”,可以下载海量相关论文,大致阅读就可明白其义。
0x3 系统要求
1、Windows7 (64位)及以上
2、4G内存及以上
3、SSD(可选,如果有体验会更佳)
0x4 安装方法
1、安装python2.7(32位版)
2、在depends目录下,安装PyYAML-3.10.win32-py2.7.exe
3、在depends目录下,解压beanstalkc-master.zip后,在beanstalkc-master目录下,python setup.py install
0x5 使用方法
1、在服务器端,在AFS_SERVER目录中,创建seed文件夹,并将最初始的样本复制到seed目录下,然后运行AFS_SERVER.pyo
2、在客户端,在AFS_CLIENT/bin中,打开命令行,运行命令“AFS_CLIENT.pyo--server=192.168.2.100 --target=c:\windows\System32\notepad.exe --timeout=15”,其中--server选项表示服务端的IP地址,--target选项表示测试程序绝对路径,--timeout表示等待目标程序运行的时间,根据目标程序的大小,这个值也应适当调整。
3、每个客户端作为一个节点,可开启多个节点并行运行。
0x6 已实现功能
1、不完备的符号执行
2、并行化符号执行框架
通过AFS生成的测试用例存放于服务器端的output目录中,生成测试用例的速度通常较快。实现一个Fuzzing前端,对output目录中的文件进行Fuzzing即可,如果有雅兴,还可以作一些变异。如果太懒以至于不想实现Fuzzing前端,请使用“peach -1”或“FOE2”。
0x7 已知问题
1、客户端可能会卡死,这是由于符号执行进行求解时,使用了匿名管道来传输请求与解答,但匿名管道无法使用异步I/O,因此目前只能手动关闭客户端来脱离。
2、目前还无法对较大型程序测试(word2013),这受限于当前的计算能力、求解能力及代码优化能力,将来对代码大幅优化后,有望支持大型程序。
3、目前只适用于文件输入类型的程序,将来支持网络、其它接口。
3、comingsoon.....
在下邮箱: majinxin2003@126.com
欢迎一切以理论学术、实用技术、人生理想、道德情怀为主题的交流与讨论。
附下载地址:
http://pan.baidu.com/s/1o6xn94e
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)