葉婷,曾幸欽,劉惠玲,葉海萍,曾灶煙,曾熾強(qiáng),孫培高,李樹湖
(賽匯檢測(廣州)有限公司,廣東 廣州 510900)
隨著信息技術(shù)的不斷發(fā)展,基于軟件驅(qū)動的硬件設(shè)備種類及數(shù)量不斷增多[1]。除了傳統(tǒng)的臺式電腦、便攜式筆記本計算機(jī)外,還包括智能機(jī)器人、手機(jī)、智能軍事裝備、智能工業(yè)生產(chǎn)設(shè)備等。上述設(shè)備的良好、達(dá)標(biāo)運(yùn)行均需要配套軟件進(jìn)行支持。如面向無人機(jī)的雷達(dá)掃描及光電鎖定作業(yè)[2],需要配套軟件具有模式識別和智能化跟蹤功能。硬件設(shè)備及智能化需求的發(fā)展,帶動了軟件的發(fā)展[3]。而軟件安全性成為用戶應(yīng)用軟件、驗收軟件及申報軟件產(chǎn)品的一項重要內(nèi)容。如何對軟件進(jìn)行安全性測試成為一項研究課題。
當(dāng)前,面向軟件的安全性測試研究較為豐富。任秋潔等[4]提出了一種嵌入式系統(tǒng)軟件安全測試技術(shù),從嵌入式軟件安全性測試的必要性和需求特點出發(fā),分析了嵌入式軟件安全測試的方式方法。李震等[5]提出了一種基于最小割集的軟件安全性測試用例生成方法,利用故障樹的原理和方法,基于故障樹最小割集的生成,對測試用例進(jìn)行了定性和定量分析。彭會斌等[6]提出了一種軟件安全性缺陷測試需求獲取與定位方法,從影響軟件安全性的缺陷引入原因維、危險后果維以及可能導(dǎo)致缺陷被激活的操作方式維三個維度對安全性缺陷進(jìn)行分類,解決了軟件安全性缺陷定位問題和軟件安全性缺陷優(yōu)先級確定問題。顧濱兵等[7]提出了一種軍事裝備軟件的安全性測試技術(shù),對軍事軟件安全性定義、檢測內(nèi)容和方法進(jìn)行了詳細(xì)解讀。
在上述背景下,本文提出了一種面向需求的軟件安全性測試方法。對軟件安全性測試用戶需求進(jìn)行了分類討論,并對相應(yīng)的軟件安全性測試方法進(jìn)行逐一闡述。本文工作豐富了軟件安全性測試方法,具有一定應(yīng)用實踐價值。
本文所述的面向需求的軟件安全性測試方法包括七個步驟:第一步,用戶需求輸入;即用戶將軟件安全性測試的個性化需求進(jìn)行闡述,如對于無人機(jī)飛控軟件用戶可以提出軟件失靈造成墜機(jī)情況的安全性測試需求,對于通信軟件用戶可提出消息被篡改的安全性測試需求等,為進(jìn)行軟件安全性測試提供需求依據(jù)。第二步,軟件測試接口歸集;即對測試軟件進(jìn)行系統(tǒng)分析,對功能接口進(jìn)行收集,對可加入斷點的程序代碼進(jìn)行標(biāo)注;如對于成績查詢軟件,可將成績查詢應(yīng)用接口、用戶登錄接口、綜合顯控接口進(jìn)行收集,對數(shù)據(jù)庫訪問、用戶校驗、顯示函數(shù)等可插入斷點的位置進(jìn)行標(biāo)注,為進(jìn)行軟件測試提供實施基礎(chǔ)。第三步,構(gòu)建軟件安全性測試用例;即根據(jù)用戶需求和軟件測試接口,制定安全性測試的實施方案;如對軟件進(jìn)行入侵攻擊,對造成的影響進(jìn)行分析,判斷軟件的安全性能。第四步,檢索軟件安全測試用例庫;即根據(jù)用戶需求和軟件代碼斷點標(biāo)注情況,在新生成的測試用例基礎(chǔ)上,在已有的測試用例庫中檢索可利用的測試用例,進(jìn)一步完善軟件安全性測試用例結(jié)構(gòu)。第五步,構(gòu)建測試環(huán)境;即根據(jù)測試用例,基于測試軟件,搭建測試平臺;如對測試結(jié)果輸出路徑進(jìn)行構(gòu)建,對測試分析算法進(jìn)行編輯發(fā)布等。第六步,實施測試;即根據(jù)軟件安全性測試方案,基于測試平臺,對軟件安全性進(jìn)行測試。第七步,生成安全性測試報告;即根據(jù)軟件安全性測試實際情況編寫測試報告。安全性測試整體技術(shù)路線由圖1所示。
本文將軟件安全性測試用戶需求分為六個類別:第一,軟件防攻擊性檢測;即通過向軟件通信端口、應(yīng)用端口、交互接口等進(jìn)行入侵、干擾、病毒侵襲等攻擊,對軟件面向外部的抵御及防護(hù)性能進(jìn)行分析測試。若軟件抵御攻擊的性能不佳,則易發(fā)生數(shù)據(jù)篡改、信息被盜、軟件失控等不良安全性問題。第二,軟件運(yùn)行負(fù)荷檢測;即通過不斷增加軟件運(yùn)行強(qiáng)度、用戶并發(fā)數(shù)、軟件不間斷運(yùn)行時長等負(fù)荷,對軟件正常運(yùn)行的承受力進(jìn)行檢測;若軟件負(fù)壓性能較弱,則易發(fā)生因負(fù)荷過載而導(dǎo)致的程序錯亂、運(yùn)行崩潰、反應(yīng)遲鈍等問題,進(jìn)而因軟件控制不良而導(dǎo)致潛在的安全性事件。第三,軟件防止安全風(fēng)險性能檢測,即軟件對潛在的安全風(fēng)險的控制能力檢測;可通過模擬外界事件,如模擬報警、控制失靈、程序錯亂等,對軟件的自我修復(fù)、應(yīng)急預(yù)案調(diào)用、事件處置等的有效性及適用性進(jìn)行分析;若軟件處置安全風(fēng)險的靈敏度不高,則在應(yīng)急事件發(fā)生后,將無法規(guī)避或消除潛在的安全風(fēng)險。第四,軟件運(yùn)行是否對外界造成安全性危害的檢測;即通過模擬軟件運(yùn)行環(huán)境,基于軟件功能對軟件應(yīng)用內(nèi)容及影響范圍進(jìn)行規(guī)整,并判斷是否引起了不良安全性問題;如軟件本身具有病毒特性,或相關(guān)硬件在軟件操控下具有安全風(fēng)險等,則軟件運(yùn)行存在對外界帶來潛在安全風(fēng)險,存在造成不良影響的機(jī)率。第五,涉及安全性軟件的功能健全性檢測,即對軟件功能的完備性及有效性進(jìn)行測試。如對于煤氣、熱力、濕度、氧氣度等涉及安全的環(huán)境參數(shù)監(jiān)測軟件,通過對傳感器參數(shù)的收集、傳輸接收等功能進(jìn)行測試,分析軟件的安全性能。若重要環(huán)境參數(shù)監(jiān)測功能失靈或未達(dá)標(biāo),則為軟件安全性帶來風(fēng)險。第六,其他軟件安全性測試需求。如對于特定軟件的個性化安全測試項目等。
本文所述的安全性測試用例生成途徑有兩類,一類是根據(jù)用戶需求和軟件實際新生成若干測試用例;二是面向軟件安全測試用例庫檢索出適用的或可重構(gòu)的測試用例。測試用例檢索方法如算法1所示。
算法1:測試用例檢索算法
輸入:用戶需求,安全性測試用例庫
輸出:安全性測試用例。
第一步:形式化用戶需求及測試用例庫中的用例記錄。四元組Ure=(Id, Class, Port, Bpoint)為一個用戶需求,其中,Id唯一標(biāo)識了一個用戶需求;Class標(biāo)識了用戶需求類別集合;Port標(biāo)識了軟件端口集合;Bpoint標(biāo)識了軟件可用斷點集合。四元組Item=(Id, Class, input,output)為一個安全性測試用例庫中的測試用例,其中,Id唯一標(biāo)識了一個測試用例;Class標(biāo)識了測試類別集合;intput標(biāo)識了面向端口及斷點的安全性測試操作集合;output標(biāo)識了測試輸出結(jié)果集合。第二步:遍歷安全性測試用例庫Bcase中的用例記錄,假設(shè)當(dāng)前元素為Item;遍歷類別Item.Class,假設(shè)當(dāng)前元素為C1;若Ure.Class與C1相等,則遍歷Ure.input,假設(shè)當(dāng)前元素為I1;遍歷Ure.Port,假設(shè)當(dāng)前元素為P1,若P1與I1在語義上相似,即存在用例可重構(gòu)的較大可能性,則鎖定Item.Id;第三步,輸出Item。
下面對面向用戶需求的軟件安全性測試用例設(shè)計策略進(jìn)行討論。
對于軟件防攻擊性檢測用例設(shè)計,可以進(jìn)行面向網(wǎng)絡(luò)端口的外部攻擊。如假設(shè)軟件網(wǎng)絡(luò)應(yīng)用端口為8080,則可編寫網(wǎng)絡(luò)訪問報文,進(jìn)行的不停的、搶占式的對目標(biāo)IP設(shè)備應(yīng)用端口進(jìn)行訪問,并對軟件在此網(wǎng)絡(luò)攻擊下的反應(yīng)進(jìn)行記錄。也可以進(jìn)行TCP SYN拒絕服務(wù)攻擊,即向目標(biāo)終端發(fā)送TCP SYN報文并收到ACK回應(yīng)后,不再回復(fù)ACK報文,觀察軟件是否因持續(xù)等待ACK報文,而陷入遲鈍等狀態(tài)。還可以進(jìn)行ICMP洪水及UDP洪水測試,即向目標(biāo)IP發(fā)送大量UDP或ICMP響應(yīng)請求報文,導(dǎo)致目標(biāo)計算機(jī)軟件應(yīng)用遲鈍等。對于軟件運(yùn)行負(fù)荷檢測設(shè)計,可以利用虛擬用戶構(gòu)建技術(shù),從少到多逐漸增加軟件系統(tǒng)登錄用戶數(shù)量,并開啟常規(guī)性應(yīng)用線程,對軟件在高并發(fā)用戶下的運(yùn)行狀態(tài)進(jìn)行檢測。另外,還可以監(jiān)測軟件不間斷長時間的運(yùn)行狀態(tài),對軟件運(yùn)行穩(wěn)定性進(jìn)行分析。對于軟件防止安全風(fēng)險性能檢測設(shè)計,以無人機(jī)飛控軟件為例,可通過模擬外界事件,如受到無線電干擾、大雨、阻礙等,以及發(fā)生饋電、遙控器信號中斷等,進(jìn)而分析軟件是否能夠產(chǎn)生報警,是否能夠順利觸發(fā)應(yīng)急預(yù)案,是否能夠安全返回起飛點或平穩(wěn)降落。對于軟件運(yùn)行是否對外界造成安全性危害檢測設(shè)計;以站點在線情況檢測軟件為例,其原理為通過向目標(biāo)IP發(fā)送ICMP報文,判斷是否有應(yīng)答,如果有應(yīng)答則說明站點在線,否則站點不在線。在用例設(shè)計中可檢測發(fā)出的ICMP報文的頻度,判斷是否對目標(biāo)網(wǎng)絡(luò)地址存在滿載荷或過量發(fā)送的情況。對于涉及安全性軟件功能健全性檢測設(shè)計,可對軟件功能進(jìn)行遍歷,進(jìn)而對功能效果進(jìn)行逐一測試,對涉及安全性的功能執(zhí)行效果進(jìn)行檢驗。
軟件安全性關(guān)系著軟件的正常運(yùn)行及應(yīng)用達(dá)標(biāo),涉及軟件運(yùn)行所關(guān)聯(lián)事物的安全性能。為了提升軟件安全性測試效能,本文提出了一種面向需求的軟件安全性測試方法。對軟件安全性測試用戶需求進(jìn)行了分類討論,并對相應(yīng)的軟件安全性測試方法進(jìn)行逐一闡述。本文工作豐富了軟件安全性測試方法,具有一定應(yīng)用實踐價值。下一步的工作是對軟件安全性測試用例設(shè)計進(jìn)行研究。