VaultFuzzer: 針對Linux內核的狀態導向模糊測試工具 September 13, 2021 | 4 min Read

VaultFuzzer: 針對Linux內核的狀態導向模糊測試工具

##背景

自從軟體誕生之日起,軟體品質就成了軟體測試領域無法迴避的重要議題,為了更高效的找出軟體缺陷(俗稱bug),Fuzzer(模糊測試工具)出現了,但不同領域使用Fuzzer的目標卻不同:

  • QA導向的模糊測試,即找到bug並且修復
  • 安全導向的模糊測試,即找到bug並且驗證是否是可利用bug

從技術架構實現上看,目前針對Linux/Android內核的Fuzzer主要有兩種:

  • 針對系統調用的模糊測試,比如Trinity

  • 覆蓋率引導型的模糊測試,比如syzkaller

Trinity是2010年代初期最流行的模糊測試工具,它基於規則使用系統調用和系統調用參數進行的組合對系統調用進行測試工作,但其對內核深度的代碼路徑的探索的效果並不理想,想要達到更廣的內核各個子系統的覆蓋率即使通過大量的硬編碼工作依然會面臨運行效率的問題,但Trinity是那個年代幾乎唯一的選擇。 2015年2月,KASAN作為早期Google的開源項目合併到了Linux內核主線,這對覆蓋率引導型模糊測試工具syzkaller的流行奠定了必要的基礎,到2016年初的時候,已經有不少安全研究者和QA工程師開始嘗試syzkaller。

alter-text

當前問題

經過了數年的發展,syzkaller作為通用QA測試基本能滿足Linux內核主線的反覆運算開發需求,但針對特定子系統的深度探索是遠遠無法達到高穩定性要求的行業,比如金融,工控,車聯網,雲計算等行業都會出現幾種情況:

  • 引入第三方內核代碼,通常這些代碼都是安全漏洞的高危地帶,即使不開源,通過逆向工程也可滿足安全分析的需求

  • 某些行業應用依賴於特定內核子系統中的特定模組,通用型QA無法快速的實現其代碼覆蓋率

  • 應用程式中不完備的回歸測試,即應用的運行並沒有完成對內核穩定性的基本測試

##我们的方案:VaultFuzzer 賽博堡壘基於這一需求開發了基於狀態導向的 fuzzer : VaultFuzzer , VaultFuzzer方案相容現有的syzkaller框架,最大的優勢在於可以把客戶的業務需求和特定內核子系統給關聯起來,這樣的模糊測試可以為業務系統帶來更強的穩定性,主要的特性如下:

alter-text
  • 通過對LLVM IR層代碼,彙編代碼以及整個內核鏡像的靜態分析獲得目標函數位址,而PCs權重的附件可以基於LLVM IR過程的CFG所獲取,這些元數據都會被VaultFuzzer所使用。

  • 覆蓋率過濾,將目標收縮到子系統,檔和代碼塊級別,防止算力浪費在目標以外的探索中以避免常規QA已經探索的部分與用戶生產環境所需要的測試重合。

  • 權重PCs,構造基於CFG不均衡的權重系統,針對不同的代碼塊賦於不同的權重來引導VaultFuzzer壓測的方向。

  • 內核狀態模式,引入了CLANG/LLVM instrumentation,此模式下可以把觸發bug的狀態以測試用例的形式記錄下來,以達到在更複雜的上下文中可以更高效的映射代碼路徑的真實狀態,而和語料庫兼容則基本上是一種空間換時間的方法,這避免了形式化驗證方法帶來的無法接受的性能開銷。

  • 支援CLANG/LLVM 10/11/12

Vaultfuzzer和syz-kaller標準版測試數據

  • Fuzzing中CPU時間總時長:100小時
  • 物理世界真實時間:6小時40分鐘
  • 硬體:32核+64GB記憶體
  • syz-kaller (2021.8):預設策略
  • Vaultfuzzer (2021.3):僅增加覆蓋率過濾,由於是通用子系統所以不包含其他特性
alter-text alter-text

從結果來看,TCP和SCTP 數據比較好,數據已經逼近syzbot/CI,syzbot/CI每一次更新驗證會篩掉一部分語料庫,但總累計時間超過2年,如果有狀態導向針對更細粒度子系統(比如SCTP)的測試VaultFuzzer會有更好的數據表現。

總結

Fuzzing長期以來對於軟體測試和安全領域都至關重要,前者關注儘快找出bug從而提升系統穩定性,後者則分為:

  • 攻擊方,儘快找出0day漏洞並加以武器化漏洞利用的過程
  • 防禦方,儘快找出所有bug(不論是否是漏洞)並且儘快修復提升系統的穩定性和安全性

2021年7月,NIST為了回應EO 14028行政命令發佈了廠商出廠前[安全測試的最低要求](https://www.nist.gov/system/files/documents/2021/07/13/Developer Verification of Software.pdf),其中模糊測試和回歸測試在其中。 這會一定程度的彌補長期以來業界對於跟生產環境相關的定向模糊測試不夠重視的問題,技術趨勢方面,微軟安全團隊也認為基於狀態導向的模糊測試是未來不可阻擋的趨勢

VaultFuzzer也用於VED(Vault Exploit Defense)的壓力測試以保證內核防護模組的穩定性,迄今為止,賽博堡壘目前也是亞洲唯一針對Linux內核狀態導向模糊測試方案的供應商。