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