李化隆
中圖分類號:TP393.09文獻標(biāo)識碼:A文章編號:1673-0992(2009)10-097-01
摘要:通過討論軟件安全性與軟件可靠性的關(guān)系,闡明軟件可靠性對于軟件安全性的作用。在此基礎(chǔ)上,進而探討軟件安全性測試的主要方法和技術(shù)。
關(guān)鍵詞:軟件;可靠性;安全性;安全性測試
計算機廣泛地應(yīng)用于監(jiān)視和控制復(fù)雜的、實時性強的設(shè)備和生產(chǎn)過程,在其中,一個運行時的錯誤或失效,就可能造成人員死亡、人身傷害、財產(chǎn)損失或環(huán)境污染。由于使用計算機的潛在利益很大,人們把原先只由操作人員或用經(jīng)過驗證的模擬方法完成的功能越來越多地用計算機去完成。交通、能源、航空航天、基礎(chǔ)工業(yè)、醫(yī)療及國防的意外事故通常是由多種因素造成的,而且每一個因素與其他的因素之間的相互作用十分復(fù)雜,人們甚至還無法弄清楚其中的一些簡單的相互作用。對于這些系統(tǒng)中使用的軟件,人們發(fā)現(xiàn)他們正面臨著許多困難而急待解決的安全性問題。
電子計算機的強大功能以及高度自動化的過程能力使系統(tǒng)的軟件和硬件的復(fù)雜性顯著增加。使得因人類所犯的錯誤而引起的設(shè)計故障的數(shù)目呈非線性增長。由于這項復(fù)雜性,使得企圖證明一個實際控制系統(tǒng)的計算機硬件和軟件的設(shè)計是正確的,或企圖證明系統(tǒng)內(nèi)的失效機制已被完全消除,都成為徒勞無益的、對于人們又是力所不及的活動。加之對于大型復(fù)雜軟件系統(tǒng)的窮舉測試是不可能做到的,許多軟件又不可能在實際環(huán)境中進行測試(尤其是武器裝備系統(tǒng)),使得軟件系統(tǒng)的安全性問題顯得更加突出。
通過實際的經(jīng)驗教訓(xùn),人們逐漸認(rèn)識到在軟件可靠性與軟件安全性兩者之間有著對立統(tǒng)一的復(fù)雜關(guān)系,同時考慮到軟件可靠性與軟件安全性各自的特點,有人主張用不同的方法來處理軟件安全性的問題。
一、軟件安全性測試的種類
軟件安全性證明包括兩個方面的問題:
第一,表明軟件的故障不可能發(fā)生,也即是說,在采取措施之后,軟件不可能進入不安全狀態(tài)或者不可能導(dǎo)致系統(tǒng)進入不安全狀態(tài)。
第二,表明即使發(fā)生軟件故障,該故障也不是危險的。
安全功能測試基于軟件的安全功能需求說明,測試軟件的安全功能實現(xiàn)是否與安全需求一致,需求實現(xiàn)是否正確完備。軟件主要的安全功能需求包括數(shù)據(jù)機密性、完整性、可用性、不可否認(rèn)性、身份認(rèn)證、授權(quán)、訪問控制、審計跟蹤、委托、隱私保護、安全管理等。安全漏洞測試從攻擊者的角度,以發(fā)現(xiàn)軟件的安全漏洞為目的。
二、軟件安全性測試的方法
1.形式化安全測試
模型檢測用狀態(tài)遷移系統(tǒng)S描述軟件的行為,用時序邏輯、計算樹邏輯或演算公式F表示軟件執(zhí)行必須滿足的性質(zhì),通過自動搜索S中不滿足公式F的狀態(tài)來發(fā)現(xiàn)軟件中的漏洞。
2.基于模型的安全功能測試
基于模型的測試方法是對軟件的行為和結(jié)構(gòu)進行建模,生成測試模型,由測試模型生成測試用例,驅(qū)動軟件測試[4]。常用的軟件測試模型有有限狀態(tài)機、UML模型、馬爾可夫鏈等。
Mark Blackburn、Robea Busser研究了基于模型的安全功能測試。主要項目支撐是NIST Computer Security Division(CSD)部門的項目Automated Security Functional Testing。主要思路是利用SCRModeling工具對軟件的安全功能需求進行建模,使用表單方式設(shè)計軟件的安全功能行為模型,將表單模型轉(zhuǎn)換為測試規(guī)格說明模型,利用T-VEC工具生成測試向量(由一組輸入變量,期望輸出變量組成),開發(fā)測試驅(qū)動模式和目標(biāo)測試環(huán)境的對象映射,將測試向量輸入測試驅(qū)動模式執(zhí)行測試。這種方法是一種一般的安全功能測試方法,它的適用范圍取決于安全功能的建模能力,特別適用于建模用與或子句表達邏輯關(guān)系的安全需求,對授權(quán)、訪問控制等安全功能測試比較適用。
3.語法測試
語法測試是根據(jù)被測軟件的功能接口的語法生成測試輸入,檢測被測軟件對各類輸入的響應(yīng)。接口可以有多種類型,命令行、文件、環(huán)境變量、套接字等。語法測試基于這樣一種思想,軟件的接口或明確或隱含規(guī)定了輸入的語法。語法定義了軟件接受的輸入數(shù)據(jù)的類型、格式。語法定義可采用BNF或正則表達式。語法測試的步驟是識別被測軟件接口的語言,定義語言的語法,根據(jù)語法生成測試用例并執(zhí)行測試。生成的測試輸入應(yīng)當(dāng)包含各類語法錯誤,符合語法的正確輸入。不符合語法的畸形輸入等。通過察看被測軟件對各類輸入的處理情況,確定被測軟件是否存在安全缺陷。語法測試適用于被測軟件有較明確的接口語法,易于表達語法并生成測試輸入的情況。語法測試結(jié)合故障注入技術(shù)可得到更好的測試效果。
4.模糊測試
模糊測試(Fuzz Testing)是一種發(fā)現(xiàn)安全漏洞的有效的測試方法,在安全性測試中越來越受到重視。模糊測試將隨機的壞數(shù)據(jù)插入程序,觀察程序是否能容忍雜亂輸入。模糊測試是不合邏輯的,只是產(chǎn)生雜亂數(shù)據(jù)攻擊程序。采用模糊測試攻擊應(yīng)用程序可發(fā)現(xiàn)其他采用邏輯思維來測試很難發(fā)現(xiàn)的安全缺陷。
5.基于屬性的測試
相關(guān)報道描述了基于屬性的測試方法,采用TASPEC語言對軟件的安全屬性進行描述生成安全屬性規(guī)格說明,利用程序切片技術(shù)抽取與這個安全屬性相關(guān)的代碼,測試這部分代碼是否違反安全屬性規(guī)格說明?;趯傩缘臏y試有針對性的測試目標(biāo)軟件的特定安全屬性,可滿足安全屬性的分類和優(yōu)先級排序要求,且部分與具體軟件無關(guān)的屬性規(guī)格說明是可重用的。
三、結(jié)束語
軟件安全是信息安全體系的重要組成部分,軟件開發(fā)人員和測試人員已經(jīng)認(rèn)識到安全性測試的重要作用。未來軟件安全性測試技術(shù)主要發(fā)展方向包括:軟件授權(quán)、訪問控制等安全功能建模與測試研究;形式化安全測試方法研究;基于風(fēng)險的安全測試及其在軟件工程實踐中的應(yīng)用;模糊測試、語法測試、基于屬性的安全測試方法研究;另外近年來基于web服務(wù)的分布式軟件快速發(fā)展,如何對web服務(wù)開展安全性測試是分布式軟件安全性測試面臨的嶄新課題。
參考文獻:
[1鄭人杰.計算機軟件測試技術(shù).北京:清華大學(xué)出版社,1992
[2]朱鴻,金凌紫.軟件質(zhì)量保障與測試.北京:科學(xué)出版,1997
[3]黃錫滋.軟件的可靠性和安全性.北京:科學(xué)技術(shù)出版社,1994
[4]顏炯,王戟,陳火旺.基于模型的軟件測試綜述.計算機科學(xué),2004.31