¶ 軟體測試
一般開發人員想到軟體測試,第一反應大概是使用 unit test, 拿自己想好的輸入對應正確的輸出,但是這樣測試出來的軟體真的是安全的嗎? 會不會有一些異常的輸入可以餵進去到程式裡面然後他就crash了呢 ? 於是就有了模糊測試(fuzzing test)的概念。
¶ 模糊測試
下圖為模糊測試的流程,模糊測試是使用隨機去產生輸入測試程式, 但是隨機的輸入往往測試不到更深層程式的邏輯,所以有了2個概念。
1. 變異測試: 拿初始化輸入當作基底,去隨機變換輸入
2. code coverage feedback: 如果沒有一個回饋機制,就不知道測試的成效,於是有了code coverage feedback,而 code coverage feedback 是使每次的輸入的code coverage。
¶ AFL
- AFL 為 google 於 2013 開源的模糊測試工具,主要有實作變異測試與code coverage feedback。
- 連結: https://github.com/google/AFL
- 除了剛剛提到的變異測試與code coverage feedback還有一個很重要 AFL 實作的部分 – forkserver
- forkserver 主要使利用 __libc_start_main 的機制
- __libc_start_main
- 主要利用 main 之前執行的 constructor,在 constructor 直接 fork 出 child process,讓 child process 跑受測程式。
- 好處: 在執行受測時,可以不用 fork + execve,execve 的 overhead 較高,可以提升執行效率。
- __libc_start_main
- forkserver 主要使利用 __libc_start_main 的機制
About p870613
我是要即將要當社畜的菸酒生,用僅僅最後2個月的暑假分享在研究所研究的模糊測試