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