軟件安全測試的方式有以下幾種:
靜態分析是指在不執行代碼的情況下對其進行評估的過程。
通過對代碼的檢查,往往能指出安全問題的根源;能夠在開發早期發現錯誤當安全研究人員發現一種新的攻擊時;靜態分析工具可以容易地對大量代碼進行重新檢查。
基于模型的安全性測試是對軟件的結構和行為進行建模,生成相應的測試模型,再由測試模型自動生成測試用例,以驅動安全性測試常用的軟件測試模型有有限狀態自動機、 UML模型、馬爾可夫鏈等
故障注入是評測容錯機制的一種有效方法。通過人為方式將故障引人到系統當中,加速系統發生故障的失效的過程。
針對應用與環境的交互點,主要包括用戶輸入、文件系統、網絡接口、環境變量等引起的故障。
故障注入可以有效地模擬各種異常程序行為,通過故障注人函數能強制使程序進入某些 特定狀態,而這些狀態在采用常規的標準測 試技術時是無法達到的。
語法測試是根據被測軟件的功能接口的語法生成測試輸入,檢測被測軟件對各類輸入的響應。
語法測試適用于被測軟件有較明確的接口語法,易于表達語法并生成測試輸入的情況。
Fuzzing:基于黑盒的隨機性測試,通過隨機的變異正常的程序輸入來檢測程序的響應,以發現程序中隱藏的安全漏洞。
模糊測試可以使用語法規則來產生正常的輸入,也可以使用基于特定程序的輸入并用試探法來指導輸入變量的生成。
首先確定安全編程規則,然后把這些規則編碼 以作為安全性屬性,之后就可以此來驗證程序代碼是否遵守了這些規則。
形式化安全測試的基本方法是建立軟件的數學模型,在形式規格說明語言的輔助下,提供形式化的規格說明。
形式規格說明語言主要有
- 基于模型的Z、VDM和B語言。
- 基于有限狀態語言,如有限狀態自動機、SDL和狀態圖。
- 基于行為的CSP、CCS、LOTOS和Petri Nets等語言。
- 代數語言,如OBJ。
- 混合語言,如離散和連續數學的規格說明語言等。
風險是指錯誤發生的可能性和造成的危害程度的結合。
基于風險的安全性測試:以軟件安全風險作為測試的出發點和測試活動的主要參考依據。
基于故障樹的安全測試技術是利用故障分析樹和故障樹的最小割集來生成安全性測試用例的方法。
故障樹分析法(Fault Tree Analysis,FTA)是一種將系統故障形成原因由總體到部分按樹狀細分的分析方法。
滲透測試(Penetration Testing)是一個評估主機系統和網絡的安全性時模仿黑客特定攻擊行為的過程。
安全測試工程師盡可能真實地模擬黑客使用的漏洞 發現技術和攻擊手段,對目標的安全性作深入的探測,發現系統最薄弱環節的過程。