Technical "whitepaper" for afl-fuzz
https://lcamtuf.coredump.cx/afl/technical_details.txt
AFL-Fuzz 可以說是最成功的 fuzzing 工具了
不過現在已經沒有在維護
現在比較活躍的 project 是 AFL++
https://github.com/AFLplusplus/AFLplusplus
也不像原始的 AFL,還多加了一堆新東西進去
我覺得由 symbolic execution 轉向 fuzzing 這件事
其實就是大家發現邏輯推理比想像中的難用
還是靠隨機好 大力出奇蹟 隨機比想像中厲害的多
只是不同的隨機方法之間還是有高明之分
現代主流的 coverage-based fuzzing
讓隨機產的 input 有個方向
也就是有個好壞的判定依據
有點像機器學習的 loss function
不過畢竟程式執行這件事是非常不連續的東西
coverage 也只是一個很粗淺且沒什麼理論依據的評分方式
說到底這本來就是不可解的問題
畢竟有那種輸入就是程式的程式(編譯器之類的)
感覺就不太可能有什麼嚴謹的理論
要嚴謹起來又回到 symbolic execution 那一套
阿現實世界稍微大型一點的程式就是跑不起來
不然就是 program analysis 之類的
不過會有 false positive
而且重點是沒有 payload 你還要自己想怎麼觸發、有沒有可能觸發