Go官方發布了原生模糊測試(Fuzzing)功能,想要嚐鮮的開發者,可以在dev.fuzz分支中進行Beta測試,之後模糊測試程式碼將會被併入主要分支,dev.fuzz分支建置的工具鏈便不會再使用。模糊測試是一種自動化測試方法,可以操縱程式輸入來尋找容易被忽略的邊緣錯誤情況。

官方提到,模糊測試可以助開發人員辨識並且找出需要修復的臭蟲,提高程式碼品質。過去沒有一個標準的Go程式碼模糊測試方法,也沒有開箱即用的工具和支援,因此官方決定在Go測試檔案中支援模糊測試功能,提供統一端到端的支援,使得開發人員可以簡單地使用模糊測試,來確保程式碼的安全性和可靠度。

模糊測試過去都是由安全工程師編寫,而駭客也會透過類似的方法,惡意地探索程式的漏洞,官方表示,對所有程式碼進行模糊測試有很大的價值,尤其是對那些可以處理任意用戶輸入的程式。現在有不少程式語言,也都開始鼓勵並且支援模糊測試,像是libFuzzer和AFL等工具就被廣泛地應用在C/C++中,而新興語言Rust也提供好用的模糊測試工具。

在Go中,開發人員可以自建模糊測試,或是使用go-fuzz和fzgo來解決滿足部分模糊測試需求,但是這些方法都比典型的Go測試,需要更多的步驟,並且缺少關鍵功能,官方認為,模糊測試不應該比基準測試或單元測試等其他類型的Go測試更複雜。過去的模糊測試解決方案,增加額外的測試成本,包括開發者需要自定義命令列工具,且缺乏模組支援,也沒有標準函式庫的測試和自定義支援。

模糊測試覆蓋的Go程式碼越多,在生態系中發現和修補的臭蟲也就越多,這對於提升以Go語言開發的系統穩定性和安全性,有很大的幫助,官方提到,從長遠來看,Go的最佳解決方案是提供功能豐富、完整支援和統一描述的模糊測試功能。讓開發人員能夠使用現有熟悉的工具,只要進行一些小改變,就能像編寫單元測試一樣簡單。

而現在Go的模糊測試進入Beta測試階段,只要從dev.fuzz分支下載並建置Go工具鏈,就可以開始使用測試指令執行模糊測試。透過不斷地操縱程式的輸入,發現程式的錯誤和安全性臭蟲,這些半隨機產生的資料,可以發現單元測試可能遺漏的情況,並且找出容易被忽略的邊緣情況,官方表示,由於模糊測試可以找出這些極端案例,因此對於發現臭蟲和安全漏洞非常有用

目前該模糊測試仍在測試階段,可能會出現錯誤以及不完整的功能集,另外,模糊測試會消耗大量記憶體,因此可能會影響機器的效能。模糊測試功能不會在即將發布的Go 1.17上提供,但有合併到之後主要版本的計畫。

熱門新聞

Advertisement