Fuzzing

應用

相關概念

參考 AFL 漏洞挖掘技术漫谈(二):Fuzz 结果分析和代码覆盖率

Fuzzing 的類型

型類

測資分類

常見的 Fuzzer

Fuzzing 的前置準備

基本的 Fuzzer 演算法

  1. 生成初始種子
  2. 選擇輸入
  3. 異變輸入
  4. 餵食測資
  5. 如果 crash 就保存輸入
  6. 回到第二步驟 13

Mutator

radamsa

安裝

sudo pacman -S radamsa

使用

echo "if(x > 8)" | radamsa   

或許可以搭配自己的 fuzz 腳本使用?

AFL

安裝

sudo pacman -S afl

白箱測試

編譯被測試程式

afl-gcc main.c

編寫測資後,測試程式

afl-fuzz -i in -o out ./a.out

或使用參數

afl-fuzz -i in -o out ./a.out @@

黑箱測試

黑箱測試可以採用

如果需要黑箱測試就必須編譯 qemu,這邊先 pull image

docker pull aflplusplus/aflplusplus
docker run -it -v $(pwd):/work aflplusplus/aflplusplus:latest /bin/bash
docker exec -it $id bash -i
cd /work

之後進入 docker 進行編譯,會把 qemu 之類的東西編譯好

make

之後我們就可以下指令

afl-fuzz -i ./in -o ./out -Q -- ./a.out

或者採用 docker image (不過這個版本,比較舊, 少人使用)

docker run -t -v $(pwd):/fuzz pl0nk/afl-qemu afl-fuzz -i /fuzz/in -o /fuzz/out -Q -- /fuzz/binary

Persistent Mode

AFL_QEMU_SNAPSHOT=0x????

AFLplusplus/README.persistent.md at stable · AFLplusplus/AFLplusplus

常見問題

Hmm, looks like the target binary terminated before we could complete a
handshake with the injected code. You can try the following

也可能是 libc 的版本不正確導致無法正常運作

把 libc, ld 抓出來之後,透過 ld 開始跑,並且確保 mv libc-2.33.so libc.so.6 不過這樣跑似乎蠻慢的

afl-fuzz -i ./in -o ./out -Q -- ./ld-2.33.so --library-path . ./binary

啟動持久模式,可以加速 qemu


  1. 參考 简单高效的模糊测试——Fuzzing ↩︎ ↩︎ ↩︎

  2. 建議閱讀 Fuzzing技术总结与工具列表,而該篇應該是轉載自原始貼文 ,而原始貼文似乎有更新過 ↩︎

  3. 初识 Fuzzing 工具 WinAFL ↩︎


Debug Vulnerability Fuzzing Testing Zero-Day