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