COSCUP 2022

Your locale preferences have been saved. We like to think that we have excellent support for English in pretalx, but if you encounter issues or errors, please contact us!

p870613

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


Session

07-30
13:30
30min
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 較高,可以提升執行效率。
Miscellaneous Open Source Topics
TR311