而引起溢出。②局部測試空間和設(shè)計空間不足。當(dāng)合法數(shù)據(jù)進入后,由于程序?qū)崿F(xiàn)層內(nèi)對應(yīng)的測試空間或設(shè)計空間不足,導(dǎo)致程序處理時出現(xiàn)溢出。
(2)加密弱點
這幾種加密弱點是不安全的:①使用不安全的加密算法。加密算法強度不夠,一些加密算法甚至可以用窮舉法破解。②加密數(shù)據(jù)時密碼是由偽隨機算法產(chǎn)生的,而產(chǎn)生偽隨機數(shù)的方法存在缺陷,使密碼很容易被破解。③身份驗證算法存在缺陷。④客戶機和服務(wù)器時鐘未同步,給攻擊者足夠的時間來破解密碼或修改數(shù)據(jù)。⑤未對加密數(shù)據(jù)進行簽名,導(dǎo)致攻擊者可以篡改數(shù)據(jù)。所以,對于加密進行測試時,必須針對這些可能存在的加密弱點進行測試。
(3)錯誤處理
一般情況下,錯誤處理都會返回一些信息給用戶,返回的出錯信息可能會被惡意用戶利用來進行攻擊,惡意用戶能夠通過分析返回的錯誤信息知道下一步要如何做才能使攻擊成功。如果錯誤處理時調(diào)用了一些不該有的功能,那么錯誤處理的過程將被利用。錯誤處理屬于異??臻g內(nèi)的處理問題,異??臻g內(nèi)的處理要盡量簡單,使用這條原則來設(shè)計可以避免這個問題。但錯誤處理往往牽涉到易用性方面的問題,如果錯誤處理的提示信息過于簡單,用戶可能會一頭霧水,不知道下一步該怎么操作。所以,在考慮錯誤處理的安全性的同時,需要和易用性一起進行權(quán)衡。
(4)權(quán)限過大
如果賦予過大的權(quán)限,就可能導(dǎo)致只有普通用戶權(quán)限的惡意用戶利用過大的權(quán)限做出危害安全的操作。例如沒有對能操作的內(nèi)容做出限制,就可能導(dǎo)致用戶可以訪問超出規(guī)定范圍的其他資源。進行安全性測試時必須測試應(yīng)用程序是否使用了過大的權(quán)限,重點要分析在各種情況下應(yīng)該有的權(quán)限,然后檢查實際中是否超出了給定的權(quán)限。權(quán)限過大問題本質(zhì)上屬于設(shè)計空間過大問題,所以在設(shè)計時要控制好設(shè)計空間,避免設(shè)計空間過大造成權(quán)限過大的問題。
四、做好安全性測試的建議
許多軟件安全測試經(jīng)驗告訴我們,做好軟件安全性測試的必要條件是:一是充分了解軟件安全漏洞,二是評估安全風(fēng)險,三是擁有高效的軟件安全測試技術(shù)和工具。
(1)充分了解軟件安全漏洞
評估一個軟件系統(tǒng)的安全程度,需要從設(shè)計、實現(xiàn)和部署三個環(huán)節(jié)同時著手。我們先看一下Common Criteria是如何評估軟件系統(tǒng)安全的。首先要確定軟件產(chǎn)品對應(yīng)的Protection Profile(PP)。一個PP定義了一類軟件產(chǎn)品的安全特性模板。例如數(shù)據(jù)庫的PP、防火墻的PP等。然后,根據(jù)PP再提出具體的安全功能需求,如用戶的身份認(rèn)證實現(xiàn)。最后,確定安全對象以及是如何滿足對應(yīng)的安全功能需求的。因此,一個安全軟件的三個環(huán)節(jié),哪個出問題都不行。
(2)安全性測試的評估
當(dāng)做完安全性測試后,軟件是否能夠達到預(yù)期的安全程度呢?這是安全性測試人員最關(guān)心的問題,因此需要建立對測試后的安全性評估機制。一般從以下兩個方面進行評估。①安全性缺陷數(shù)據(jù)評估。如果發(fā)現(xiàn)軟件的安全性缺陷和漏洞越多,可能遺留的缺陷也越多。進行這類評估時,必須建立基線數(shù)據(jù)作為參照,否則評估起來沒有依據(jù)就無法得到正確的結(jié)論。②采用漏洞植入法來進行評估。漏洞植入法和可靠性測試?yán)锏墓收喜迦霚y試是同一道理,只不過這里是在軟件里插入一些有安全隱患的問題。采用漏洞植入法時,先讓不參加安全測試的特定人員在軟件中預(yù)先植入一定數(shù)量的漏洞,最后測試完后看有多少植入的漏洞被發(fā)現(xiàn),以此來評估軟件的安全性測試做得是否充分。
(3)采用安全測試技術(shù)和工具
可使用專業(yè)的具有特定功能的安全掃描軟件來尋找潛在的漏洞,將已經(jīng)發(fā)生的缺陷納入缺陷庫,然后通過自動化測試方法來使用自動化缺陷庫進行轟炸測試。例如,使用一些能夠模擬各種攻擊的軟件來進行測試。
安全測試是用來驗證集成在軟件內(nèi)的保護機制是否能夠在實際中保護系統(tǒng)免受非法的侵入。一句通俗的話說:軟件系統(tǒng)的安全當(dāng)然必須能夠經(jīng)受住正面的攻擊——但是它也必須能夠經(jīng)受住側(cè)面的和背后的攻擊。