張新昌
南京鐵道職業(yè)技術(shù)學(xué)院,江蘇南京 210029
在當(dāng)今網(wǎng)絡(luò)和計(jì)算機(jī)技術(shù)大量普及的形式之下,計(jì)算機(jī)軟件安全與否已經(jīng)開始得到應(yīng)用者的重視,用安全監(jiān)測技術(shù)來對(duì)軟件進(jìn)行檢測,是保證計(jì)算機(jī)軟件使用安全的主要手段。
安全檢測是計(jì)算機(jī)軟件開發(fā)和運(yùn)用過程中的重要環(huán)節(jié),作為軟件開發(fā)的關(guān)鍵性環(huán)節(jié),安全監(jiān)測其目的是為了發(fā)現(xiàn)軟件在運(yùn)行中的故障和缺點(diǎn),從而對(duì)計(jì)算機(jī)軟件中潛在的風(fēng)險(xiǎn)進(jìn)行有效的修改和更正,使軟件得到優(yōu)化和發(fā)展。然而計(jì)算機(jī)軟件的安全檢測技術(shù)并不能當(dāng)做杜絕軟件錯(cuò)誤漏洞的手段,也無法證明軟件是絕對(duì)安全和正確的,它的職責(zé)只是通過較少的測試實(shí)現(xiàn)最大范圍的檢測覆蓋,來找出計(jì)算機(jī)軟件中相對(duì)比較容易發(fā)現(xiàn)的漏洞和錯(cuò)誤。
與其它類型的軟件缺陷相比,軟件在安全上的缺陷有如下的特點(diǎn):首先,軟件的安全缺陷通常都不是由專業(yè)的軟件測試人員發(fā)現(xiàn)的,而是由試圖獲得非法利益的黑客或者商業(yè)機(jī)構(gòu)的安全人員來發(fā)現(xiàn)的。其次,普通的軟件缺陷被發(fā)現(xiàn)后,一般不會(huì)立刻進(jìn)行修復(fù),而是在該軟件的下一個(gè)版本才得到修復(fù),而軟件安全缺陷一旦被發(fā)現(xiàn)就需馬上采取相應(yīng)的措施,否則就會(huì)給軟件的使用者帶來嚴(yán)重的損失。最后,在危害程度上,普通的軟件缺陷一般不會(huì)造成嚴(yán)重的危害,而軟件的安全缺陷一旦被發(fā)現(xiàn)利用,則可能給使用者帶來巨大的風(fēng)險(xiǎn)。
計(jì)算機(jī)軟件的安全檢測包括功能測試、滲透測試、驗(yàn)證過程三個(gè)部分。和軟件其他種類的檢測不同的是,計(jì)算機(jī)軟件安全檢測所強(qiáng)調(diào)的,不是軟件能夠、應(yīng)該做什么,而是軟件不應(yīng)該做什么。通常,計(jì)算機(jī)安全檢測分為安全漏洞檢測、安全功能檢測兩個(gè)方面的檢測。軟件在安全功能方面的需求涉及廣泛的內(nèi)容,如授權(quán)、機(jī)密性、安全管理、訪問控制等等,安全功能檢測就是來測試計(jì)算機(jī)軟件的安全功能是否滿足其對(duì)安全的需求。而安全漏洞的檢測所針對(duì)的,是軟件運(yùn)行中存在的缺陷,識(shí)別出某些缺陷可能對(duì)計(jì)算機(jī)造成的風(fēng)險(xiǎn)。
在對(duì)計(jì)算機(jī)軟件進(jìn)行安全檢測的時(shí)候,應(yīng)該注意的問題和事項(xiàng)有:
1)選擇合理有效的方案
應(yīng)該在對(duì)需要檢測的軟件了解充分、對(duì)其要求和特性完全掌握的基礎(chǔ)上,來進(jìn)行一個(gè)軟件的安全檢測,根據(jù)測試的情況,選用合理的安全檢測方法來對(duì)安全檢測方案進(jìn)行編制,以保證此安全檢測方案的有效實(shí)施。另外還要對(duì)實(shí)施軟件檢測方案的人員有一定的要求,在對(duì)計(jì)算機(jī)軟件進(jìn)行安全檢測的時(shí)候,不僅要有熟悉軟件安全檢測領(lǐng)域知識(shí)且有此方面經(jīng)驗(yàn)的人員的參與,更要有熟悉掌握該軟件的使用特點(diǎn)的世紀(jì)人員的參與。唯有兩方面的人員有效配合起來,才能確保計(jì)算機(jī)軟件安全檢測的效果。
2)應(yīng)做到全面分析
由于計(jì)算機(jī)軟件一般都有程序繁瑣,規(guī)模比較大的特點(diǎn),因此相關(guān)檢測人員在進(jìn)行計(jì)算機(jī)軟件的安全檢測過程中,就要做到在代碼級(jí)、需求級(jí)和系統(tǒng)級(jí)三個(gè)方面進(jìn)行細(xì)致的分析。如果軟件的規(guī)模特別大,則還應(yīng)該做結(jié)構(gòu)設(shè)計(jì)方面的檢查分析。應(yīng)該從工作的實(shí)際需要入手,結(jié)合具體的分析過程來選擇需要的、合理的分析技術(shù)。
計(jì)算機(jī)安全檢測是一個(gè)系統(tǒng)化的過程,要想解決一個(gè)系統(tǒng)之內(nèi)所有的安全檢測方面的問題,簡單的方法是做不到的,因此在具體的軟件安全檢測的過程中,如何選擇科學(xué)合理的方案,是軟件安全檢測的工作者們必須深思熟慮的問題。
規(guī)模較大的計(jì)算機(jī)軟件系統(tǒng),一般會(huì)包括了若干個(gè)相互聯(lián)系的子系統(tǒng),而每一個(gè)子系統(tǒng)又包含了多個(gè)功能模塊。
計(jì)算機(jī)軟件安全測試的流程,包括了模塊測試、組裝系統(tǒng)、系統(tǒng)結(jié)構(gòu)的安全檢測、性能測試、系統(tǒng)測試。模塊測試又叫做單元測試,所針對(duì)的是軟件設(shè)計(jì)中最小的功能單位。進(jìn)行模塊測試的目的,是發(fā)現(xiàn)系統(tǒng)各個(gè)功能設(shè)計(jì)上可能存在的安全缺陷,使測試更加細(xì)節(jié)化、全面化。在各個(gè)模塊的測試都結(jié)束之后,應(yīng)該根據(jù)此軟件設(shè)計(jì)時(shí)的理念進(jìn)行系統(tǒng)的組裝,在此過程中對(duì)涉及到的體系結(jié)構(gòu)進(jìn)行安全測試。然后模塊測試和系統(tǒng)結(jié)構(gòu)測試合格的基礎(chǔ)之上,對(duì)軟件進(jìn)行功能的有效性測試,其目的在于檢測軟件的功能是否與用戶的需求相一致。在上述測試步驟都完成之后,再把整個(gè)軟件與計(jì)算機(jī)硬件、數(shù)據(jù)、其他相關(guān)軟件等因素聯(lián)合起來進(jìn)行系統(tǒng)的測試。
軟件安全檢測的方法主要分為動(dòng)態(tài)檢測和靜態(tài)分析兩大類,動(dòng)態(tài)檢測技術(shù)是主要通過分析和修改環(huán)境變量、內(nèi)存等軟件運(yùn)行環(huán)境來實(shí)現(xiàn)的,動(dòng)態(tài)檢測技術(shù)可以提高程序的保密性,以此來實(shí)現(xiàn)軟件安全的目的。靜態(tài)分析技術(shù)的原理是使用程序分析技術(shù),來分析程序的源代碼,以找出導(dǎo)致錯(cuò)誤和安全漏洞的異常。在靜態(tài)分析技術(shù)中,誤報(bào)率和錯(cuò)誤率是兩個(gè)重要指標(biāo),其中的某一個(gè)指標(biāo)降低,往往會(huì)使另一個(gè)增高。靜態(tài)分析技術(shù)的缺陷在于其分析之后的結(jié)果往往是對(duì)真實(shí)情況的近似值,所以對(duì)軟件的重要屬性無法測試和確定。靜態(tài)分析技術(shù)的優(yōu)點(diǎn)是檢測時(shí)計(jì)算機(jī)軟件不需要運(yùn)行起來,檢測過程比較方便。
相對(duì)而言,由于其檢測過程方便、自動(dòng)化程度較高、分析速度比較快的特點(diǎn),靜態(tài)檢測技術(shù)比動(dòng)態(tài)檢測技術(shù)更受軟件安全檢測工作者們的歡迎。而這兩大類檢測方法又可以細(xì)分為多種技術(shù)。
3.2.1 形式化方式
形式化的安全檢測方式,是建立在待測軟件的數(shù)學(xué)模型之上的。它通過確立軟件的數(shù)學(xué)模型,在形式規(guī)格語言的支持下,提供形式化的規(guī)格說明。目前來說較為常用的形式規(guī)格語言有行為語言、有效狀態(tài)語言和模型語言。檢測方法有模型檢測和定理證明這兩種形式化的安全檢測方式。
3.2.2 以模型為基礎(chǔ)的方式
基于模型的安全檢測方式,是指通過結(jié)構(gòu)建模和軟件行為的方法來建構(gòu)測試模型,來進(jìn)行軟件安全檢測的方式?;谀P偷臏y試并不注重于軟件說明在所有情況下的一致性,而是生成一組測試用例來檢測軟件系統(tǒng),得到待測軟件系統(tǒng)行為與模式期望相同的結(jié)果,以此來進(jìn)行軟件的安全檢測。常用的基于模型的檢測方式有馬爾可夫鏈和有限狀態(tài)機(jī)等。
3.2.3 語法測試技術(shù)
語法檢測技術(shù)是靜態(tài)檢測技術(shù)中最早出現(xiàn)的一種,所檢測的僅僅是軟件的程序源代碼中,可能發(fā)生危險(xiǎn)的C語言庫函數(shù)以及系統(tǒng)調(diào)用。這種檢測方法通常是對(duì)反映進(jìn)行研究,用被檢測軟件功能接口所使用的語法來生成軟件的測試輸入,以檢測在不同種類的輸入情況下,被檢測軟件的反映情況。其過程一般是對(duì)軟件接口的語言進(jìn)行識(shí)別,然后定義語法,在最后生成測試用例來執(zhí)行軟件的安全檢測。
3.2.4 基于故障注入的技術(shù)
基于故障注入的安全測試,是一種檢測比較充分的方法。該方法應(yīng)用了故障分析樹來生產(chǎn)出檢測用例進(jìn)行檢測,故障分析樹是指將系統(tǒng)中最不可能發(fā)生的事情作為頂事件,然后通過檢測來尋找出事故發(fā)生的中間事件和底事。通過邏輯門符號(hào),把底事件、中間事件和頂事件連接成一整顆故障樹的方法。
經(jīng)過實(shí)踐應(yīng)用證實(shí),該方法是比較充分和有效的安全檢測方法,其優(yōu)點(diǎn)是可以將檢測的自動(dòng)化的程度顯著提高。
3.2.5 模糊測試法
模糊式的測試法是建立于白盒檢測的基礎(chǔ)之上的檢測方法,它把動(dòng)態(tài)檢測技術(shù)和傳統(tǒng)檢測家屬有效的融合在了一起,是傳統(tǒng)檢測技術(shù)的發(fā)展和升華。它通過向目標(biāo)軟件系統(tǒng)提供大量無效的、非預(yù)期的隨機(jī)輸入,來檢測軟件的異常結(jié)果,發(fā)現(xiàn)軟件安全漏洞。其優(yōu)點(diǎn)在于成本較低,方法比較簡單,自動(dòng)化程度較高等。
3.2.6 基于屬性的檢測方法
這種檢測方法首先要對(duì)軟件的編程規(guī)則進(jìn)行確定,將編程規(guī)則作為安全屬性,來檢測軟件的程序代碼是否遵守這些規(guī)則,以此來驗(yàn)證代碼的安全性。相對(duì)于其他的安全檢測方法來說,該方法能夠?qū)崿F(xiàn)對(duì)軟件安全漏洞的交互性和擴(kuò)展性的全面綜合分析。
3.2.7 其他的測試技術(shù)
近年來,對(duì)Web安全服務(wù)所開展的一些測試技術(shù),如分布式軟件安全性測試技術(shù)等,也得到了快速發(fā)展??傮w而言,軟件安全檢測的主要作用,就是通過分析、檢測軟件設(shè)計(jì)和軟件中可能存在的安全問題,來改善計(jì)算機(jī)軟件的安全性能,保證計(jì)算機(jī)軟件系統(tǒng)的安全應(yīng)用。
如今,軟件安全檢測將逐漸成為軟件應(yīng)用體系的重要的一部分。我們應(yīng)該在實(shí)踐中積累經(jīng)驗(yàn),不斷研究出更有效的計(jì)算機(jī)軟件安全檢測技術(shù)。只有提高自身的軟件安全保障意識(shí)和防測技術(shù),實(shí)現(xiàn)安全檢測技術(shù)的不斷創(chuàng)新,才能保障軟件的安全應(yīng)用,保護(hù)廣大軟件用戶的利益,維護(hù)市場和社會(huì)的健康運(yùn)轉(zhuǎn)。
[1]李潔.軟件測試用例設(shè)計(jì)[J].電腦編程技巧與維護(hù),2010(4).
[2]楊洪路,宮云戰(zhàn),高文齡,白哥樂.軟件安全靜態(tài)檢測技術(shù)與工具[J].信息化縱橫,2009(9).
[3]構(gòu)建聯(lián)合戰(zhàn)線 讓病毒無從下手[J].電腦愛好者,2008(20).
[4]胡恬,王宏.原代碼級(jí)的軟件安全問題研究[J].軟件導(dǎo)刊,2007(1).
[5]羊建林,周安民.Windows異常處理與軟件安全[J].信息安全與通信保密,2011(4).
[6]趙妍.計(jì)算機(jī)軟件安全檢測方法探討[J].科技傳播,2010(16).
[7]蔣廷耀,王訓(xùn)宇,馬凱,關(guān)國翔.基于EAI和AOP的軟件安全測試及應(yīng)用研究[J].計(jì)算機(jī)科學(xué),2009(4).
[8]晁永勝,鄭秋梅.軟件安全建模與檢測[J].計(jì)算機(jī)仿真,2007(10).