這需要專門的工具來進行驗證,手工做是比較困難的。
(2)反向安全性測試過程
大部分軟件的安全測試都是依據(jù)缺陷空間反向設(shè)計原則來進行的,即事先檢查哪些地方可能存在安全隱患,然后針對這些可能的隱患進行測試。因此,反向測試過程是從缺陷空間出發(fā),建立缺陷威脅模型,通過威脅模型來尋找入侵點,對入侵點進行已知漏洞的掃描測試。好處是可以對已知的缺陷進行分析,避免軟件里存在已知類型的缺陷,但是對未知的攻擊手段和方法通常會無能為力。
①建立缺陷威脅模型。建立缺陷威脅模型主要是從已知的安全漏洞入手,檢查軟件中是否存在已知的漏洞。建立威脅模型時,需要先確定軟件牽涉到哪些專業(yè)領(lǐng)域,再根據(jù)各個專業(yè)領(lǐng)域所遇到的攻擊手段來進行建模。
②尋找和掃描入侵點。檢查威脅模型里的哪些缺陷可能在本軟件中發(fā)生,再將可能發(fā)生的威脅納入入侵點矩陣進行管理。如果有成熟的漏洞掃描工具,那么直接使用漏洞掃描工具進行掃描,然后將發(fā)現(xiàn)的可疑問題納入入侵點矩陣進行管理。
③入侵矩陣的驗證測試。創(chuàng)建好入侵矩陣后,就可以針對入侵矩陣的具體條目設(shè)計對應(yīng)的測試用例,然后進行測試驗證。
(3)正向安全性測試過程
為了規(guī)避反向設(shè)計原則所帶來的測試不完備性,需要一種正向的測試方法來對軟件進行比較完備的測試,使測試過的軟件能夠預(yù)防未知的攻擊手段和方法。
①先標(biāo)識測試空間。對測試空間的所有的可變數(shù)據(jù)進行標(biāo)識,由于進行安全性測試的代價高昂,其中要重點對外部輸入層進行標(biāo)識。例如,需求分析、概要設(shè)計、詳細設(shè)計、編碼這幾個階段都要對測試空間進行標(biāo)識,并建立測試空間跟蹤矩陣。
②精確定義設(shè)計空間。重點審查需求中對設(shè)計空間是否有明確定義,和需求牽涉到的數(shù)據(jù)是否都標(biāo)識出了它的合法取值范圍。在這個步驟中,最需要注意的是精確二字,要嚴(yán)格按照安全性原則來對設(shè)計空間做精確的定義。
③標(biāo)識安全隱患。根據(jù)找出的測試空間和設(shè)計空間以及它們之間的轉(zhuǎn)換規(guī)則,標(biāo)識出哪些測試空間和哪些轉(zhuǎn)換規(guī)則可能存在安全隱患。例如,測試空間愈復(fù)雜,即測試空間劃分越復(fù)雜或可變數(shù)據(jù)組合關(guān)系越多也越不安全。還有轉(zhuǎn)換規(guī)則愈復(fù)雜,則出問題的可能性也愈大,這些都屬于安全隱患。
④建立和驗證入侵矩陣。安全隱患標(biāo)識完成后,就可以根據(jù)標(biāo)識出來的安全隱患建立入侵矩陣。列出潛在安全隱患,標(biāo)識出存在潛在安全隱患的可變數(shù)據(jù),和標(biāo)識出安全隱患的等級。其中對于那些安全隱患等級高的可變數(shù)據(jù),必須進行詳盡的測試用例設(shè)計。
(4)正向和反向測試的區(qū)別
正向測試過程是以測試空間為依據(jù)尋找缺陷和漏洞,反向測試過程則是以已知的缺陷空間為依據(jù)去尋找軟件中是否會發(fā)生同樣的缺陷和漏洞,兩者各有其優(yōu)缺點。反向測試過程主要的一個優(yōu)點是成本較低,只要驗證已知的可能發(fā)生的缺陷即可,但缺點是測試不完善,無法將測試空間覆蓋完整,無法發(fā)現(xiàn)未知的攻擊手段。正向測試過程的優(yōu)點是測試比較充分,但工作量相對來說較大。因此,對安全性要求較低的軟件,一般按反向測試過程來測試即可,對于安全性要求較高的軟件,應(yīng)以正向測試過程為主,反向測試過程為輔。
三、常見的軟件安全性缺陷和漏洞
軟件的安全有很多方面的內(nèi)容,主要的安全問題是由軟件本身的漏洞造成的,下面介紹常見的軟件安全性缺陷和漏洞。
(1)緩沖區(qū)溢出
緩沖區(qū)溢出已成為軟件安全的頭號公敵,許多實際中的安全問題都與它有關(guān)。造成緩沖區(qū)溢出問題通常有以下兩種原因。①設(shè)計空間的轉(zhuǎn)換規(guī)則的校驗問題。即缺乏對可測數(shù)據(jù)的校驗,導(dǎo)致非法數(shù)據(jù)沒有在外部輸入層被檢查出來并丟棄。非法數(shù)據(jù)進入接口層和實現(xiàn)層后,由于它超出了接口層和實現(xiàn)層的對應(yīng)測試空間或設(shè)計空間的范圍,從