作者:k0shl
kDriver Fuzzer整體細節:https://whereisk0shl.top/post/2018-01-30
ioctlbf項目地址:https://github.com/koutto/ioctlbf
kDriver Fuzzer項目地址:https://github.com/k0keoyo/kDriver-Fuzzer
聯系我:k0pwn_0110@sina.cn
kDriver Fuzzer使用說明
首先感謝ioctlbf框架作者,我在這半年的時間閱讀調試了很多優秀的fuzzer,受益良多,自己也有了很多想法,正在逐步實現。同時當我調試ioctlbf的時候發現了一些問題,于是基于ioctlbf框架,加了一些自己的想法在里面,有了這個kDriver Fuzzer,利用這個kDriver Fuzzer,我也在2017年收獲了不同廠商,不同驅動近100個CVE,其實關于驅動的Fuzz很早就有人做了,我將我這個kDriver Fuzzer開源出來和大家分享共同學習(必要注釋已經寫在代碼里了),同時春節將近,在這里給大家拜年,祝大家新年紅包多多,0day多多!(由于并非是自己從頭到位寫的項目,其中有部分編碼習慣造成的差異(已盡量向框架作者靠攏)請大家見諒,同時代碼寫的還不夠優雅帶來的算法復雜度以及代碼冗余也請大家海涵,以及一些待解決的問題未來都會逐步優化:))
一些環境說明:
編譯環境:Windows 10 x64 build 1607
項目IDE:VS2013
測試環境:Windows 7 x86、Windows 10 x86 build 1607
參數介紹:
"-l" :開啟日志記錄模式(不會影響主日志記錄模塊)
"-s" :驅動枚舉模塊
"-d" :打開設備驅動的名稱
"-i" :待Fuzz的ioctl code,默認從0xnnnn0000-0xnnnnffff
"-n" :在探測階段采用null pointer模式,該模式下極易fuzz 到空指針引用漏洞,不加則常規探測模式
"-r" :指定明確的ioctl code范圍
"-u" :只fuzz -i參數給定的ioctl code
"-f" :在探測階段采用0x00填充緩沖區
"-q" :在Fuzz階段不顯示填充input buffer的數據內容
"-e" :在探測和fuzz階段打印錯誤信息(如getlasterror())
"-h" :幫助信息
常用Fuzz命令實例:
kDriver Fuzz.exe -s
進行驅動枚舉,將CreateFile成功的驅動設備名稱,以及部分受限的驅動設備名稱打印并寫入Enum Driver.txt文件中
kDriver Fuzz.exe -d X -i 0xaabb0000 -f -l
對X驅動的ioctl code 0xaabb0000-0xaabbffff范圍進行探測及對可用的ioctl code進行fuzz,探測時除了正常探測外增加0x00填充緩沖區探測,開啟數據日志記錄(如增加-u參數,則只對ioctl code 0xaabb0000探測,若是有效ioctl code則進入fuzz階段)
kDriver Fuzz.exe -d X -r 0xaabb1122-0xaabb3344 -n -l
對X驅動的ioctl code 0xaabb1122-0xaabb3344范圍內進行探測,探測時采用null pointer模式,并數據日志記錄

Thanks:
https://github.com/bee13oy/AV_Kernel_Vulns/tree/master/Zer0Con2017
https://github.com/koutto/ioctlbf
本文由 Seebug Paper 發布,如需轉載請注明來源。本文地址:http://www.bjnorthway.com/523/
暫無評論