黎慧華
摘 要:在網(wǎng)絡(luò)技術(shù)被大面積的覆蓋之前,單機的應(yīng)用程序軟件所產(chǎn)生的安全沖突的問題并不多。而隨著現(xiàn)在互聯(lián)網(wǎng)技術(shù)的深入,軟件的安全問題所造成的影響也越來越嚴重。在實際的發(fā)展中我們開始重視軟件安全的重要性。目前軟件的廣泛應(yīng)用以及其規(guī)??涨暗脑黾?,相應(yīng)的難度也被提高,這種背景下的軟件安全問題不得不引起重視。本文主要闡述關(guān)于網(wǎng)絡(luò)軟件的安全監(jiān)測的主要內(nèi)容,其中會介紹目前發(fā)展的主要監(jiān)測方法,比如形式化的安全測試、模糊測試、語法測試等方法,筆者會對軟件安全性的技術(shù)發(fā)展做一定的回顧,希望能夠從這些技術(shù)中能夠得到更多安全性檢測的思路。
關(guān)鍵詞:軟件安全;檢測技術(shù);概述;
1.軟件安全性測試概述
軟件安全性測試主要可以分為兩個方面,一方面是對安全功能的測試,另外一方面則是對安全漏洞的測試。首先,我們對于安全功能的測試的主要目的是為了判定軟件的設(shè)計功能是否能夠符合用戶對軟件的要求,而這種設(shè)計是否能夠幫助他們需求的實現(xiàn)。當然對漏洞的測試的主要目的是從漏洞的攻擊者的角度考慮,確保軟件的安全漏洞不受到威脅【1】。另外,在內(nèi)容上,安全功能測試主要會涉及到數(shù)據(jù)的機密完整性以及其隱私保護等內(nèi)容,而安全漏洞測試的重點在于對系統(tǒng)的設(shè)計和操作等出現(xiàn)的弱點,一旦被利用就容易受到外界的攻擊而進入不安全的狀態(tài)。從以上兩個方面我們可以得知,在軟件安全性測試中我們應(yīng)該確保以下幾個方面:第一,全面檢測出軟件一旦陷入不安全的狀態(tài)所產(chǎn)生的反應(yīng)。第二,測試軟件在設(shè)計時需要盡可能的提高其安全性,包括在算法冗余、容錯等做好優(yōu)化。第三,了解軟件在異常情況下的反應(yīng)。第四,對于軟件中的模塊以及部件要做好單獨的測試并加強整個測試流程的進行。
2.軟件安全測試的主要技術(shù)
2.1形式化安全測試
形式化的主要運用思路通過建立軟件的數(shù)學(xué)模型來進行測試的一種方法。它可以分為兩種類型,一種是定理證明,另外一種是模型檢測。首先,前者是將程序切換成邏輯的公式,運用相關(guān)的規(guī)則來證明該程序是一種合法的定理。而后者用遷移系統(tǒng)S用來描述軟件的模式,通過邏輯公式來達到軟件需要形成的目的,如果能夠在自動搜索系統(tǒng)S中發(fā)現(xiàn)存在的不滿足函數(shù)F的問題,則可以確認相應(yīng)的軟件漏洞。NASA中的JPL曾經(jīng)做過此類技術(shù)的項目【2】。他們在實驗中的主要思路是通過建立針對安全需求的形式化模型,來判斷是否從起始之后沒有發(fā)現(xiàn)存在違約的不安全的狀態(tài)。這種技術(shù)存在著一定的不足。比如定理的證明方法無法確保全面的自動化操作,它依然需要分析人員參與運行過程,這期間非常耗費人力,而模型的檢測方法需要將所有的可能性進行執(zhí)行,因此檢測時的效率較低。
2.2基于模型的測試方法
基于模型的安全性測試是通過對軟件中的行為以及結(jié)構(gòu)建立模型,然后運用生成的測試模型產(chǎn)生測試的用例。Nahid Shahmehri等在研究中提出一種基于模型的軟件安全性測試方法,這種模型用來檢測以及追蹤軟件中存在的缺陷,是一種較為被動的技術(shù)類型。因此,開發(fā)者很容易準確的了解到軟件中軟件的類型,當發(fā)現(xiàn)新的漏洞是會添加相應(yīng)的方法對工具進行擴展。檢測模型是在SGMs的基礎(chǔ)上可以表明漏洞產(chǎn)生的原因,以及與其他原因之間的關(guān)系【3】。其中SGMs將漏洞的模型運用樹狀結(jié)構(gòu)來進行描述。
Mark Blackburn等曾經(jīng)提出一種端對端的基于模型的全自動檢測方法,這種測試技術(shù)可以被運用到各個環(huán)境中,具有一定的廣泛性。它的基礎(chǔ)在于對安全函數(shù)的說明建立模型,Orale以及Interbase兩種數(shù)據(jù)庫引擎的在其中的運用幫助自動形成模型并做后續(xù)的測試。
2.3語法測試
對語法的定義在于軟件接受了輸入中的數(shù)據(jù)類型以及數(shù)據(jù)格式。語法測試的主要環(huán)節(jié)是可以根據(jù)軟件上相關(guān)的功能接口中的語法再生成相應(yīng)的測試語法的輸入,在這樣的形式下來檢測軟件對輸入產(chǎn)生的反應(yīng),然后對輸入以及反應(yīng)之間的聯(lián)系做出安全性的分析。語法測試比較適用于黑盒測試實驗中,根據(jù)相應(yīng)的語法特征,產(chǎn)生正常和不正常的輸入方式,然后引發(fā)各種安全中的問題。不過它存在的缺點在于所需要測試的數(shù)據(jù)量極大,因此很難全部覆蓋到。Patrice Godefroid等通過研究,在語法的基礎(chǔ)上對非法輸入的形式作出描述,用這種方法是來提高白盒測試產(chǎn)生的效果,形成一種新的動態(tài)測試算法。
2.4基于故障注入的安全性測試
應(yīng)用程序和其應(yīng)用的環(huán)境兩者之間的交互包括用戶輸入、環(huán)境變量等,這些過程中產(chǎn)生的故障將被作為注入故障。人為的把故障注入到系統(tǒng)里,可以讓系統(tǒng)加速失效,與此同時也加強了對安全的排查。
Binbin Qu等學(xué)者曾經(jīng)提出一種在客戶機和服務(wù)器模式下錯誤的注入方式,這種方式被用在對軟件組件的測試上。在API Hooking的基礎(chǔ)上設(shè)計的錯誤注入工具,這種工具中的GCDEFI是在客戶機—服務(wù)器模式的基礎(chǔ)上形成的,它的組成結(jié)構(gòu)包括一個服務(wù)端以及多個客戶【4】。服務(wù)器可以控制住服務(wù)機,并且收集到需要的反饋信息然后與客戶機產(chǎn)生交互;客戶機的主要內(nèi)容是可以管理API的攔截、系統(tǒng)中錯誤的信息等??蛻魴C在運行中會被注入到測試驅(qū)動范圍中。在GCDEFI開啟之后,用戶中的錯誤類型的信息通過控制器來得到,然后被保存到錯誤管理的模塊區(qū)域??刂破髟诠ぷ骱髸|發(fā)Activator,這種部件會將錯誤的信息傳遞到目標信息管理器中。當發(fā)生API攔截時,調(diào)用者的信息會被系統(tǒng)立即獲取,然后在系統(tǒng)中插在相應(yīng)的堆棧以及組件列表,確認是否有相互匹配的組件,一旦沒有那么進入返回的模式,否則系統(tǒng)就會執(zhí)行程序中的替代代碼,再執(zhí)行設(shè)計的錯誤注入流程。這種技術(shù)產(chǎn)生的特用性也存在著一些問題,就是它只能適用于特點環(huán)境中的特定組件,這樣才能有較好的測試見過。Jinfu Chen也有提一種安全性測試工具,這種工具被稱為CSTS。它可以在迅速獲取COM組件的基礎(chǔ)上進行相關(guān)的分析,然后在系統(tǒng)中進行靜態(tài)分析組件漏洞,之后會自動的生成測試需要的腳本,生成測試需要的驅(qū)動等功能。但是經(jīng)過檢驗,這種方法的評級標準較為模糊,還需要深入的細化。
2.5模糊測試
模糊測試的技術(shù)是在黑盒隨機測試的基礎(chǔ)上,運用隨機的變異程序輸入來檢查和確認程序中的響應(yīng)狀況,然后在這種情形下發(fā)現(xiàn)漏洞,系統(tǒng)會在這個過程中用語法規(guī)則來進行系統(tǒng)正常的輸入,除此之外,還可以運用試探法來產(chǎn)生輸入變量。但是,模糊測試的一項最大的問題是它的代碼覆蓋率非常的低。Patrice Godefroid等學(xué)者在這種模式下提出了一種新型的白盒模糊測試的方法,這種式在象征性執(zhí)行方法以及用例生成方法的啟發(fā)下所提出的。但是這種方法由于樣本尺寸的有限性依然存在著低代碼覆蓋率的情況。
2.6基于風險的安全性測試
系統(tǒng)中錯誤發(fā)生的概率以及產(chǎn)生的危害程度便形成了系統(tǒng)的潛在風險??紤]到風險的危害,這種安全測試的出發(fā)點都會以軟件安全風險為主,運行過程中對風險的分析、安全測試以及軟件開發(fā)的過程都進行系統(tǒng)化的處理,這種方法在軟件開發(fā)的階段中都會把風險的安全漏洞考慮其中,然后保持與軟件開發(fā)的進度一致。
3.結(jié)語
軟件安全性測試的方法由于研究的環(huán)境以及影響因素的復(fù)雜,各個種類的方法都還處于探索階段,也存在著技術(shù)上較多的限制,這些需要工作人員在軟件測試方面有豐富的操作經(jīng)驗,以及更加全面的知識結(jié)構(gòu),才能將各個方法進行聯(lián)系操作。因此,測試人員的經(jīng)驗需要包括對軟件安全漏洞的全面認知以及理解,另外在知識結(jié)構(gòu)中還需要掌握好編程、數(shù)據(jù)庫等多種編譯知識,只有在強大知識儲備的基礎(chǔ)上才能夠根據(jù)用戶的需求高效的開發(fā)出有效的測試工具。
參考文獻:
[1]秦曉軍,甘水滔,陳左寧. 一種基于一階邏輯的軟件代碼安全性缺陷靜態(tài)檢測技術(shù)[J]. 中國科學(xué):信息科學(xué),2014,01:108-129.
[2]侯海燕,符志鵬. 軟件安全性檢測技術(shù)綜述[J]. 電腦知識與技術(shù),2014,25:5847-5851+5854.
[3]倪濤. 基于靜態(tài)污點分析技術(shù)的軟件內(nèi)核驅(qū)動安全性檢測[J]. 計算機應(yīng)用與軟件,2015,05:262-266.