??最近在研究AI安全膝蜈,已經好久沒時間更新PWN的文章了锅移,但最近也算有了一點成果,提了2個CVE漏洞饱搏,主要挖掘方法就是利用Fuzz方法非剃。文字首先介紹下Fuzz的基本原理、然后說下業(yè)界主流的Fuzz工具推沸,最后說下挖掘漏洞
Fuzz的組成部分和簡介
??傳統(tǒng)的Fuzz的組成分為3大塊:初始值备绽、變異器、監(jiān)控器鬓催,即通過變異器對初始值進行變異肺素,然后輸入到要測試的程序中,使用監(jiān)控器監(jiān)控測試程序的異常宇驾,以達到測試目的倍靡。
??還有種smartFuzz,基本原理差不多课舍,只不過進行了優(yōu)化塌西,它是基于文件格式規(guī)范來生成他挎,最著名的是Peach,以前是開源的工具捡需,后來商業(yè)化了办桨,華為使用的2大Fuzz工具是Peach和codenomicon。
Fuzz原理圖-引用騰訊(https://security.tencent.com/index.php/blog/msg/35)
常用的Fuzz測試工具
??這里只介紹下免費或者開源的站辉,github上有的崔挖。
- american fuzzy lop(AFL)(我挖掘漏洞主要是使用AFL)
- libfuzzer
- honggfuzz
常用的內存分析工具
- valgrind
- ASAN(Address-Sanitizier),GCC 4.8以上版本使用ASAN時不需要安裝第三方庫庵寞,通過在編譯時指定編譯CFLAGS即可打開開關狸相。
Fuzz實踐
以jasper為例子:
1.下載源代碼 git clone https://github.com/mdadams/jasper.git
- 解壓,
tar -vzxf jasper-2.0.14.tar.gz
cd jasper-2.0.14
mkdir BUILD
cd BUILD
3.設定編譯器捐川,注意在編譯前需要把編譯器設定為AFL的的編譯器
export CC=afl-clang
export CXX=afl-clang++
- 編譯安裝
cmake -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=Release -DCMAKE_SKIP_INSTALL_RPATH=YES -DCMAKE_INSTALL_DOCDIR=/usr/share/doc/jasper-2.0.14
make install
- 創(chuàng)建AFL-FUZZ的輸入文件
mkdir inFuzz output
- 從AFL的官網獲取Fuzz的樣本文件脓鹃,然后開始Fuzz
afl-fuzz -i inFuzz -o outFuzz jasper --input @@ --output test.bmp --output-format bmp
- 跑出crash后,使用valgrind結合源碼分析是否是漏洞
valgrind -v --tool=memcheck --leak-check=full jasper --input id:000035,sig:06,src:002011,op:havoc,rep:2
--output test.bmp --output-format bmp
- 提交CVE漏洞
提交流程可以看下文章:
(1). CVE申請的那些事
(2). CVE申請的那些事-后記
CVE后記
通過Fuzz的方法古沥,1個月內發(fā)現(xiàn)了多個CVE瘸右,這說明CVE的發(fā)現(xiàn)并不是很困難,困難的是分析漏洞岩齿,然后利用漏洞太颤,下一步的目標是通過學習緩沖區(qū)溢出來利用CVE漏洞,這也是我一直在學習PWN的原因盹沈。