開源人年會 2022

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

Fuzzing test
年7月30日, 13:30–14:00 (Asia/Taipei), TR311
語言: 漢語

軟體測試

一般開發人員想到軟體測試,第一反應大概是使用 unit test, 拿自己想好的輸入對應正確的輸出,但是這樣測試出來的軟體真的是安全的嗎? 會不會有一些異常的輸入可以餵進去到程式裡面然後他就crash了呢 ? 於是就有了模糊測試(fuzzing test)的概念。

模糊測試

下圖為模糊測試的流程,模糊測試是使用隨機去產生輸入測試程式, 但是隨機的輸入往往測試不到更深層程式的邏輯,所以有了2個概念。
<img alt="" src="https://i.imgur.com/tlwiMqy.png" />
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 較高,可以提升執行效率。

會先介紹模糊測試,在介紹AFL+DEMO,最後談一下模糊測試的瓶頸


目標聽眾族群

科普模糊測試

內容難易度

Beginner

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