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官方手機版