①建立缺陷威脅模型。建立缺陷威脅模型主要是從已知的安全漏洞入手,檢查軟件中是否存在已知的漏洞。建立威脅模型時,需要先確定軟件牽涉到哪些專業領域,再根據各個專業領域所遇到的攻擊手段來進行建模。
②尋找和掃描入侵點。檢查威脅模型里的哪些缺陷可能在本軟件中發生,再將可能發生的威脅納入入侵點矩陣進行管理。如果有成熟的漏洞掃描工具,那么直接使用漏洞掃描工具進行掃描,然后將發現的可疑問題納入入侵點矩陣進行管理。
③入侵矩陣的驗證測試。創建好入侵矩陣后,就可以針對入侵矩陣的具體條目設計對應的測試用例,然后進行測試驗證。
(3)正向安全性測試過程
為了規避反向設計原則所帶來的測試不完備性,需要一種正向的測試方法來對軟件進行比較完備的測試,使測試過的軟件能夠預防未知的攻擊手段和方法。
①先標識測試空間。對測試空間的所有的可變數據進行標識,由于進行安全性測試的代價高昂,其中要重點對外部輸入層進行標識。例如,需求分析、概要設計、詳細設計、編碼這幾個階段都要對測試空間進行標識,并建立測試空間跟蹤矩陣。
②精確定義設計空間。重點審查需求中對設計空間是否有明確定義,和需求牽涉到的數據是否都標識出了它的合法取值范圍。在這個步驟中,最需要注意的是精確二字,要嚴格按照安全性原則來對設計空間做精確的定義。
③標識安全隱患。根據找出的測試空間和設計空間以及它們之間的轉換規則,標識出哪些測試空間和哪些轉換規則可能存在安全隱患。例如,測試空間愈復雜,即測 試空間劃分越復雜或可變數據組合關系越多也越不安全。還有轉換規則愈復雜,則出問題的可能性也愈大,這些都屬于安全隱患。
④建立和驗證入侵矩陣。安全隱患標識完成后,就可以根據標識出來的安全隱患建立入侵矩陣。列出潛在安全隱患,標識出存在潛在安全隱患的可變數據,和標識出安全隱患的等級。其中對于那些安全隱患等級高的可變數據,必須進行詳盡的測試用例設計。
(4)正向和反向測試的區別
正向測試過程是以測試空間為依據尋找缺陷和漏洞,反向測試過程則是以已知的缺陷空間為依據去尋找軟件中是否會發生同樣的缺陷和漏洞,兩者各有其優缺點。反 向測試過程主要的一個優點是成本較低,只要驗證已知的可能發生的缺陷即可,但缺點是測試不完善,無法將測試空間覆蓋完整,無法發現未知的攻擊手段。正向測 試過程的優點是測試比較充分,但工作量相對來說較大。因此,對安全性要求較低的軟件,一般按反向測試過程來測試即可,對于安全性要求較高的軟件,應以正向 測試過程為主,反向測試過程為輔。
常見的軟件安全性缺陷和漏洞
軟件的安全有很多方面的內容,主要的安全問題是由軟件本身的漏洞造成的,下面介紹常見的軟件安全性缺陷和漏洞。
(1)緩沖區溢出
緩沖區溢出已成為軟件安全的頭號公敵,許多實際中的安全問題都與它有關。造成緩沖區溢出問題通常有以下兩種原因。①設計空間的轉換規則的校驗問題。即缺乏 對可測數據的校驗,導致非法數據沒有在外部輸入層被檢查出來并丟棄。非法數據進入接口層和實現層后,由于它超出了接口層和實現層的對應測試空間或設計空間 的范圍,從而引起溢出。②局部測試空間和設計空間不足。當合法數據進入后,由于程序實現層內對應的測試空間或設計空間不足,導致程序處理時出現溢出。
(2)加密弱點
這幾種加密弱點是不安全的:①使用不安全的加密算法。加密算法強度不夠,一些加密算法甚至可以用窮舉法破解。②加密數據時密碼是由偽隨機算法產生的,而產 生偽隨機數的方法存在缺陷,使密碼很容易被破解。③身份驗證算法存在缺陷。④客戶機和服務器時鐘未同步,給攻擊者足夠的時間來破解密碼或修改數據。⑤未對 加密數據進行簽名,導致攻擊者可以篡改數據。所以,對于加密進行測試時,必須針對這些可能存在的加密弱點進行測試。
(3)錯誤處理
一般情況下,錯誤處理都會返回一些信息給用戶,返回的出錯信息可能會被惡意用戶利用來進行攻擊,惡意用戶能夠通過分析返回的錯誤信息知道下一步要如何做才 能使攻擊成功。如果錯誤處理時調用了一些不該有的功能,那么錯誤處理的過程將被利用。錯誤處理屬于異??臻g內的處理問題,異??臻g內的處理要盡量簡單,使 用這條原則來設計可以避免這個問題。但錯誤處理往往牽涉到易用性方面的問題,如果錯誤處理的提示信息過于簡單,用戶可能會一頭霧水,不知道下一步該怎么操 作。所以,在考慮錯誤處理的安全性的同時,需要和易用性一起進行權衡。
原文轉自:http://www.uml.org.cn/Test/200906258.asp