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