在開發安全、可靠和合規的軟件時,完備靜態分析是一種有益的實踐。本篇文章中,我們將討論完備分析與靜態分析的不同之處,為什么它很重要,以及完備靜態代碼分析的工作原理。
什么是完備靜態分析?
完備靜態分析是指分析結果的完整性或"健全性"。對于提供可靠性分析結果的靜態分析工具,這意味著如果軟件中存在特定的錯誤,缺陷或漏洞,那么該工具將出具相關的報告。
如果出現存在爭議的問題,那么工具將以某種形式提出警告*,這樣一來任何問題都會的得到診斷。
(*備注:這些在Helix QAC中被歸類為可能的問題,如果不需要完備分析,則可以禁用。)
完備靜態分析不同于其他靜態分析的地方在于,后者的結果可能基于在一定時間或資源內可能發生的事情。
鑒于對程序的運行時行為進行建模需要某些近似值(例如,缺乏對程序輸入或操作系統狀態的知識),完備分析需要過度近似。
過度近似可以保證沒有假陰性(對于給定的漏洞類型),而低近似值通常優先考慮沒有誤報。
其他形式的靜態分析沒有表現出這種嚴格性,并且可能包含低近似和過近似的混合。
也許完備和不完備的分析工具所得出的結果可能都會為程序的特定部分提供一份清晰的運行狀態證明,但是完備分析引擎提供了額外的保證,即印證這一結論的所有可能性和所有路徑都已得到驗證。
完備靜態分析的工作原理
在提到完備分析時,我們通常會考慮更復雜的程序間和程序內控制和數據流分析形式,正如當今最先進的靜態分析工具所采用的那樣。
與更簡單的代碼語法和語義分析不同,控制流和數據流靜態分析通常與檢測更復雜的問題相關聯,例如:
- 空指針取消引用
- 陣列或緩沖區下溢和溢出
- 未初始化對象的使用
- 內存分配和取消分配異常
- 數字溢出、下溢和環繞
- 除以零
- 死代碼
- 數據爭用、死鎖和其他并發沖突
控制和數據流分析是一項高計算負載的任務,因為必須考慮系統的所有可能輸入以及通過系統所有可能的控制流路徑。事實上,由于控制流和數據流分析的暴力窮舉算法會導致分析時間指數暴漲,因此很少采用該方案。符號執行和抽象解釋算法將是一個更優雅的選擇。
根據Roberto Amadini、Graeme Gange、Peter Schachte、Harald S?ndergaard和Peter J.Stuckey的抽象解釋、符號執行和約束,“抽象解釋是一個靜態分析框架,用于完備的過度近似程序的所有可能運行時狀態。”。
而“符號執行是一個可訪問性分析框架,它試圖探索程序的所有可能的執行路徑”。抽象解釋和符號執行在執行期間以不變性或路徑條件的形式維持約束,該路徑條件確定可以執行哪些路徑,并且可以在各種數據源中保持哪些值。
然而,需要注意的是,雖然抽象解釋是完備的,但符號執行卻不是。
為什么完備靜態分析很重要?
健全性是安全關鍵軟件系統中的一個重要因素,特別是因為它保證軟件不包含任何正在檢查的編碼缺陷。也就是說,完備分析可用于顯示軟件中沒有錯誤。
因此,在汽車系統的ISO 26262功能安全(FuSa)標準中,抽象解釋分析被明確引用為軟件單元驗證方法(表7,方法1i)。
如何使用Helix QAC 執行完備靜態分析
由于能夠提供深入和高度準確的分析結果,Helix QAC在30多年來一直是一個值得信賴的靜態代碼分析工具。Helix QAC能夠進行良好的靜態分析,是需要滿足嚴格合規要求的嚴格監管和安全關鍵行業的首選工具。
但是,為了在Helix QAC項目中啟用完備分析,需要執行某些步驟:
數據流深度需要設置為最大值(5),這將添加多個 -prodoption,如上面的屏幕截圖所示。(請參閱 QAC 或 QAC++ 組件手冊中的"分析超時"部分,了解為什么這些"超時"設置對于聲音分析是必需的。
此外,“df::inter=5”和“inter-TU Analysis”雖然不是完備分析所必需的,但可以以額外的計算成本啟用,以減少需要報告的可能問題的數量。這些設置的效果是啟用程序間和程序內分析。
選擇Helix QAC進行完備靜態分析
親身體驗Helix QAC完備靜態分析對代碼質量和健全性的影響,立即聯系北匯信息以免費試用。
-
代碼
+關注
關注
30文章
4672瀏覽量
67781
發布評論請先 登錄
相關推薦
評論