摘 要:軟件安全性測試是保證軟件安全性的重要手段。本文論述了軟件安全性測試的特點和主要內(nèi)容,重點研究了國內(nèi)外軟件安全性測試的主要方法,最后總結(jié)了當前研究工作并指出了未來軟件安全性測試技術(shù)的研究重點與發(fā)展方向。
關(guān)鍵詞:安全性測試;安全功能測試;語法測試;模糊測試
中圖分類號:TP311.52
安全性是軟件質(zhì)量的一個重要屬性。本文將重點關(guān)注安全性測試的主要方法、技術(shù)及工具。有
1 軟件測試步驟
一個大型軟件系統(tǒng)通常由若干個子系統(tǒng)構(gòu)成,每個子系統(tǒng)又由若干個模塊構(gòu)成。軟件測試分以下幾個步驟:
1.1 單元測試。又稱模塊測試。它是針對軟件設(shè)計的最小單位——程序模塊進行正確性檢驗的測試工作,其目的在于發(fā)現(xiàn)各模塊內(nèi)部可能存在的各種差錯。
1.2 集成測試。通常在單元測試的基礎(chǔ)上,需要將所有模塊按照設(shè)計要求組裝成為系統(tǒng),對與設(shè)計相關(guān)的軟件體系結(jié)構(gòu)的構(gòu)造進行測試。
1.3 確認測試。又稱有效性測試。它的任務是驗證軟件的功能和性能及其它特性是否與用戶的要求一致。
1.4 系統(tǒng)測試。是將通過確認測試的軟件,作為整個基于計算機系統(tǒng)的一個元素,與計算機硬件、外設(shè)、某些支持軟件、數(shù)據(jù)和人員等其他系統(tǒng)元素結(jié)合在一起。
2 安全性測試主要方法
隨著軟件安全性受到人們的重視,安全性測試方法相關(guān)研究取得了一定進展。
2.1 形式化安全測試。形式化方法的基本思想是建立軟件的數(shù)學模型,并在形式規(guī)格說明語言的支持下,提供軟件的形式規(guī)格說明。形式化安全測試方法可分為兩類,即定理證明和模型檢測。定理證明方法將程序轉(zhuǎn)換為邏輯公式,然后使用公理和規(guī)則證明程序是一個合法的定理。模型檢測用狀態(tài)遷移系統(tǒng)S描述軟件的行為,用時序邏輯、計算樹邏輯或演算公式F表示軟件執(zhí)行必須滿足的性質(zhì),通過自動搜索S中不滿足公式F的狀態(tài)來發(fā)現(xiàn)軟件中的漏洞。
NASA(national aeronautics and space administration)的一個實驗室JPL(jet propulsion laboratory)開展過形式化安全測試方面的項目。主要思路是建立安全需求的形式化模型,例如狀態(tài)機模型。輸入輸出序列決定安全狀態(tài)轉(zhuǎn)換。安全測試即搜索狀態(tài)空間,看是否能從起始狀態(tài)找到一條路徑到達違反規(guī)約的不安全的狀態(tài)。隨著模型大小與復雜性增長,狀態(tài)空間呈指數(shù)增長,JPL 開發(fā)了一種使用SPIN 的形式化建??蚣埽╢lexible modeling framework,F(xiàn)MF)解決狀態(tài)爆炸問題,并開發(fā)了基于屬性的測試工具(property based tester,PBT)。
2.2 基于模型的安全功能測試。基于模型的測試方法是對軟件的行為和結(jié)構(gòu)進行建模,生成測試模型,由測試模型生成測試用例,驅(qū)動軟件測試。常用的軟件測試模型有有限狀態(tài)機、UML 模型、馬爾可夫鏈等。
Mark Blackburn、Robert Busser研究了基于模型的安全功能測試。主要項目支撐是NIST CSD(computer security division)部門的項目Automated Security Functional Testing。主要思路是利用SCRModeling 工具對軟件的安全功能需求進行建模,使用表單方式設(shè)計軟件的安全功能行為模型,將表單模型轉(zhuǎn)換為測試規(guī)格說明模型,利用T-VEC工具生成測試向量(由一組輸入變量,期望輸出變量組成),開發(fā)測試驅(qū)動模式和目標測試環(huán)境的對象映射,將測試向量輸入測試驅(qū)動模式執(zhí)行測試。這種方法是一種一般的安全功能測試方法,它的適用范圍取決于安全功能的建模能力,特別適用于建模用與或子句表達邏輯關(guān)系的安全需求,對授權(quán)、訪問控制等安全功能測試比較適用。
2.3 語法測試。語法測試是根據(jù)被測軟件的功能接口的語法生成測試輸入,檢測被測軟件對各類輸入的響應。接口可以有多種類型,命令行、文件、環(huán)境變量、套接字等。語法測試基于這樣一種思想,軟件的接口或明確或隱含規(guī)定了輸入的語法。語法定義了軟件接受的輸入數(shù)據(jù)的類型、格式。語法定義可采用BNF 或正則表達式。語法測試的步驟是識別被測軟件接口的語言,定義語言的語法,根據(jù)語法生成測試用例并執(zhí)行測試。
生成的測試輸入應當包含各類語法錯誤,符合語法的正確輸入,不符合語法的畸形輸入等。通過察看被測軟件對各類輸入的處理情況,確定被測軟件是否存在安全缺陷。語法測試適用于被測軟件有較明確的接口語法,易于表達語法并生成測試輸入的情況。語法測試結(jié)合故障注入技術(shù)可得到更好的測試效果。
2.4 基于故障注入的安全性測試。Wenliang Du將故障注入技術(shù)用于軟件安全性測試,建立軟件與環(huán)境交互(environment-application interaction,EAI) 的故障模型。故障注入針對應用與環(huán)境的交互點,主要包括用戶輸入、文件系統(tǒng)、網(wǎng)絡(luò)接口、環(huán)境變量等引起的故障。相關(guān)項目有OUSPG(university of oulu,secure programming group)的項目PROTOS Security Testing of Protocol Implementations,該項目的目標是測試協(xié)議實現(xiàn)的安全性。主要思路是通過構(gòu)造各類協(xié)議數(shù)據(jù)包測試目標軟件是否能正確處理。實質(zhì)是在各類協(xié)議數(shù)據(jù)包中植入故障,如修改某些協(xié)議字段的值等,支持的協(xié)議有HTTP、SIP、WAP、SNMP 等。故障注入可以有效地模擬各種各樣的異常程序行為,通過故障注人函數(shù)能夠強制性地使程序進入到某些特定的狀態(tài),而這些狀態(tài)在采用常規(guī)的標準測試技術(shù)的情況下一般是無法到達的。
2.5 模糊測試。模糊測試是一種發(fā)現(xiàn)安全漏洞的有效的測試方法,在安全性測試中越來越受到重視。模糊測試將隨機的壞數(shù)據(jù)插入程序,觀察程序是否能容忍雜亂輸入。模糊測試是不合邏輯的,只是產(chǎn)生雜亂數(shù)據(jù)攻擊程序。采用模糊測試攻擊應用程序可發(fā)現(xiàn)其它采用邏輯思維來測試很難發(fā)現(xiàn)的安全缺陷。
2.6 基于屬性的測試。描述了基于屬性的測試方法,采用TASPEC 語言對軟件的安全屬性進行描述,生成安全屬性規(guī)格說明,利用程序切片技術(shù)抽取與這個安全屬性相關(guān)的代碼,并測試這部分代碼是否違反安全屬性規(guī)格說明。基于屬性的測試有針對性的測試目標軟件的特定安全屬性,可滿足安全屬性的分類和優(yōu)先級排序要求,且部分與具體軟件無關(guān)的屬性規(guī)格說明是可重用的。
3 結(jié)束語
軟件測試是所有工程學科的基本組成單元,是軟件開發(fā)的重要部分。軟件測試是為了發(fā)現(xiàn)故障而執(zhí)行程序的過程,其目的是以盡可能少的時間和人力發(fā)現(xiàn)并改正軟件中潛在的各種故障及缺陷。如何利用較少的測試用例,實現(xiàn)最大的測試覆蓋,最大限度地發(fā)現(xiàn)軟件瑕疵,是軟件測試的目標之一;制定完善的測試計劃、測試方案、結(jié)果分析、文檔資料管理,亦是保證軟件測試功效的前提。軟件測試只能查找程序中的錯誤,不能證明程序中沒有錯誤。
未來軟件安全性測試技術(shù)主要發(fā)展方向包括:軟件授權(quán)、訪問控制等安全功能建模與測試研究;形式化安全測試方法研究;基于風險的安全測試及其在軟件工程實踐中的應用;故障注入、模糊測試、語法測試、基于屬性的安全測試方法研究;利用威脅模型與攻擊樹指導安全測試過程;漏洞發(fā)現(xiàn)過程的建模及利用模型定量預測安全漏洞。
另外近年來基于Web 服務的分布式軟件快速發(fā)展,如何對Web 服務開展安全性測試是分布式軟件安全性測試面臨的嶄新課題。
參考文獻:
[1]陸璐,王柏勇.軟件自動化測試技術(shù)[M].北京:清華大學出版社,2006.
[2]郭群.軟件測試設(shè)計技術(shù)[J].電腦知識與技術(shù),2007(17).
[3]Robert Culbertson Chris Brown Gary Cobb 著.王海鵬,譯.快速測試[M].北京:人民郵電出版社,2004.
作者單位:天津市神州商龍科技有限公司,天津 300384