DeathFuzzer是一个比较简单的fuzzing测试工具,它能够对安卓手机驱动进行黑盒fuzz,通过write和ioctl来对驱动进行访问,CMD值通过参数给定范围自动变异,CMD对应的arg是程序内部的变异器来完成数据生成和传递的,长度和内容都能够变异。需要的朋友可以下载试试!
什么是fuzzing
fuzzing是一种基于缺陷注入的自动软件测试技术。通过编写fuzzer工具向目标程序提供某种形式的输入并观察其响应来发现问题,这种输入可以是完全随机的或精心构造的。Fuzzing测试通常以大小相关的部分、字符串、标志字符串开始或结束的二进制块等为重点,使用边界值附近的值对目标进行测试。
fuzzing测试工具怎么用
DeathFuzzer使用方法介绍
首先,DeathFuzzer是个非常简单的小程序!一共就4个参数,你填完4个参数剩下的就是等着看了。直接不加参数运行就会显示usage。
DeathFuzzer使用方法: ./DeathFuzzer [驱动文件路径] [测试要使用的用户权限] [CMD最小值] [CMD最大值]
我来逐一说一下这几个参数的含义:
[驱动文件路径]:就是要fuzz的驱动的绝对路径,大部分是一些字符设备啥的,就像下面这些玩意,例如/dev/usf1
crw-rw---- root usb 10, 45 2014-05-19 17:16 usb_accessory
crw------- root root 237, 0 2014-05-19 17:16 usb_ext_chg
crw-rw---- system mtp 10, 47 2014-05-19 17:16 usb_mtp_gadget
crw------- system root 10, 65 2014-05-19 17:16 usf1
crw-rw---- system camera 81, 6 2014-05-19 17:16 v4l-subdev0
[测试用户权限切换]:注意这个用户切换功能需要有root权限才能生效!有些驱动仅允许root和某个用户属组访问,那么你最好切换到这个非root的用户属组来进行fuzz,这样一旦出现问题你没准还能搞个提权的0day啥的。
[CMD最小值] [CMD最大值]:既然我们对驱动的fuzz是纯黑盒的(其实很多驱动代码都是公开的,你可以直接参照代码指定这个范围),那么我们需要手动的去指定个CMD的范围,然后通过驱动的反馈来猜测这个范围是否准确(是否有点像盲注?),制定了最小值和最大值,那么DeathFuzzer的CMD就会在这个范围内进行变异。
上面的说明balabala的没什么意思,还是举个栗子吃吧,例如我们要fuzz下面这个uhid驱动,
crw-rw---- system net_bt_stack 10, 41 2014-05-19 17:16 uhid
这个uhid文件在/dev目录下,net_bt_stack对其有访问权限,那么我们的程序参数应该是这样配置的。
./DeathFuzzer /dev/uhid net_bt_stack 0x1 0xff
或者是这样的,
./DeathFuzzer /dev/uhid root 0x3f 0x4f
fuzz过程中会在程序目录中生成一个Fuzzlog.txt文件,这个文件中记录着每一次fuzz的参数内容,方便对bug进行回溯。
fuzz日志如下图,记录着fuzz时间,cmd值,每个[]换行后下面的乱码就是ioctl和wirte传递的内容,日志是二进制文件,最好使用UE或者010edit来查看,然后配合tombstones和dmesg就可以定位bug的原因了。
好了,DeathFuzzer的介绍到此结束了,以下为使用方法,祝大家玩的开心!程序下载地址在文章结尾处。
使用方法:(前提是要先在系统中安装安卓SDK,然后把SDK中的platform-tools目录加入环境变量)
首先第一步把DeathFuzzer 用 adb push 传进手机。
第二步,adb shell进入手机的终端控制台,cd进入/data/local/tmp目录。
第三步,使用chmod给DeathFuzzer可执行权限,并且加参数进行fuzz。
然后就等着看手机是否出现崩溃、重启等问题,出现以后使用adb pull 把DeathFuzzer的日志取出来,配合tombstones和dmesg就可以定位bug的原因了。
好了,就这么多,需的朋友拿去试试吧!
- PC官方版
- 安卓官方手机版
- IOS官方手机版