首页
社区
课程
招聘
[原创]并行化入侵式Fuzzing系统—Parallel Aggressive Fuzzing System(PAFS)
发表于: 2015-12-3 14:39 4887

[原创]并行化入侵式Fuzzing系统—Parallel Aggressive Fuzzing System(PAFS)

2015-12-3 14:39
4887
标 题: 【原创】并行化入侵式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

[课程]Linux pwn 探索篇!

收藏
免费 3
支持
分享
最新回复 (9)
雪    币: 8865
活跃值: (2379)
能力值: ( LV12,RANK:760 )
在线值:
发帖
回帖
粉丝
2
哎吆,还行吧~
符号执行...效率提升不起来啊~
2015-12-3 16:38
0
雪    币: 163
活跃值: (75)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
3
所以才做了分布式来提高效率。。。。
2015-12-3 17:08
0
雪    币: 615
活跃值: (172)
能力值: ( LV9,RANK:140 )
在线值:
发帖
回帖
粉丝
4
然而只是个分布式分发样本并不是分布式求解
2015-12-3 18:48
0
雪    币: 107
活跃值: (326)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
膝盖给楼主了。。。。。。。。。期待赶紧把你的todolist完成啊。。不要太监了哟。。
2015-12-3 19:59
0
雪    币: 163
活跃值: (75)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
6
没人说是分布式求解啊,你想多了吧
2015-12-3 21:07
0
雪    币: 163
活跃值: (75)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
7
必然不能够啊, I am on it now.
2015-12-3 21:08
0
雪    币: 326
活跃值: (56)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
8
符号执行并行FUZZ。
2015-12-4 15:52
0
雪    币: 36
活跃值: (70)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
又学习了······
2015-12-7 19:15
0
雪    币: 43
活跃值: (35)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
谢谢提供的发掘工具学习
2015-12-18 12:33
0
游客
登录 | 注册 方可回帖
返回
//