Google指出,善用大型語言模型(Large Language Model,LLM)可自動化開源軟體漏洞模糊測試計畫OSS-Fuzz,進而使程式碼的檢查範圍平均提升1.5%到31%。Google計畫之後釋出工具,讓其他開發人員也能用LLM對開源碼專案自行模糊測試。

模糊測試(fuzz testing)為於軟體中輸入無效或隨機資料,來快速及全面監控程式的反應,經常被用來檢測軟體或電腦系統的安全漏洞。Google 2016年釋出針對開源碼軟體的模糊測試專案OSS-Fuzz,以協助開發人員尋找軟體中的瑕疵或安全漏洞。一開始支援C與C++語言,幾年下來擴大到JVM/Java 、Rust、Go與Python,也可以用於LLVM支援的語言。幾個月前,Google OSS-Fuzz專案小組做了一項實驗,使用Google大型模型語言(LLM)來提升OSS-Fuzz的效能。他們發現LLM可有效擴大OSS-Fuzz服務對專案程式碼覆蓋率,且不需撰寫新的程式碼。

OSS-Fuzz自2016年迄今,已辨識出超過1,000個安全漏洞,但是Google認為可以再更多。目前OSS-Fuzz一項開源碼專案程式碼的平均覆蓋率僅為30%,即大部分程式碼都被遺漏了,因此專案小組相信,如果擴大fuzz target,可以找到更多漏洞。Fuzz target是發送隨機輸入值測試程式碼的函式,但是撰寫fuzz target得依不同專案進行,且需要人力花時間撰寫,問題是這些專案維護人員通常是志工,吃力又不討好。

為此Google 訓練LLM來撰寫模糊測試fuzz target函式。專案小組寫了一個評估框架架在OSS-Fuzz的檢查工具和LLM之間並展開實驗。他們Fuzz檢查工具(Introspector tool)找出樣本專案的程式碼未經模糊測試的部分,將程式碼送到評估框架。評估框架發出一項提示,包含一些專案必要資訊,要求LLM撰寫新的fuzz target。之後評估框架以LLM撰寫的fuzz target執行模糊測試,再觀察執行結果及覆蓋率。如果fuzz target無法組譯,評估框架就會要求LLM修改fuzz target直到修正錯誤。

一開始,LLM撰寫的fuzz target程式碼的確無法組譯,但重覆幾次並測試新的fuzz target後,研究人員發現,開源專案程式碼覆蓋率平均增加了1.5%到31%。Google的樣本專案之一tinyxml2的程式碼覆蓋率則由38%上升到69%,專案小組完全零介入。研究人員說,若以人力撰寫來複製tinyxml2的結果,至少需要一天時間。這意味著,整個OSS-Fuzz現有處理的1,000多個專案,要以人力來擴大覆蓋率,得花好幾年。

Google以LLM測試OpenSSL專案時,撰寫了一個新的target,在之前沒測試的程式碼又發現了CVE-2022-3602。這雖非新漏洞,但也顯示,只要擴大程式碼覆蓋率,就可能找出更多漏洞。

基於tinyxml2實驗的成功證明,加入LLM可望能大幅提升程式碼覆蓋,Google希望把LLM的自動化技術正式用在其他OSS-Fuzz專案上。

幾個月後,Google會將其評估框架開源,讓其他研究人員測試其LLM撰寫的fuzz target。Google也會持續改善其LLM撰寫fuzz target的能力及基礎架構,並且和Google Assured OSS部門合作,以便確保Google Cloud客戶拿到更安全的開源軟體。

熱門新聞

Advertisement