開源人年會 2022

您已儲存您的地區設定。若有任何問題請跟我們聯繫!

p870613

我是要即將要當社畜的菸酒生,用僅僅最後2個月的暑假分享在研究所研究的模糊測試


Session

年7月30日
13:30
30 分鐘
Fuzzing test
p870613

軟體測試

一般開發人員想到軟體測試,第一反應大概是使用 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 較高,可以提升執行效率。
各種開源議題
TR311