青海省測試計算中心 劉 鑫
國產軟件安全測試方法探討
青海省測試計算中心 劉 鑫
進行軟件的安全測試,是在將軟件投入市場之前必不可少的重要前提條件之一,只有經過安全測試達到標準之后,才能夠正式投入市場。我國國產的軟件在科技含量和運行流暢程度方面具有一定的劣勢,在市場競爭中往往處于不利地位,因此更需要加強安全測試環(huán)節(jié),保證投入市場的軟件的安全性,促進軟件行業(yè)的良性發(fā)展。
國產軟件;安全測試;軟件安全;測試方法
一個軟件的安全性代表著這一軟件的質量,而軟件的安全測試則是為了檢驗軟件的潛在安全缺陷,并且確認軟件的安全性能否達到與預期一致。對軟件進行安全測試,是軟件開發(fā)環(huán)節(jié)中比較重要的一環(huán),最終目的就是在軟件投入使用之前,就檢測出其是否存在問題,并對可能存在的問題提前設置解決的辦法,從而達到對軟件潛在故障的修正目的。
軟件進行安全測試在本質上是為了能夠有效地查找出程序中的錯誤,其方法通常包括靜態(tài)測試和動態(tài)測試兩類。靜態(tài)測試,是對源代碼進行掃描,直接在代碼中找出可能存在的安全漏洞。動態(tài)測試是通過模擬黑客的行為模式,對系統(tǒng)進行攻擊,從系統(tǒng)的應對和反應中找出可能存在的漏洞。這種測試相對而言比較真實有效,淡數據有限,無法達成對軟件的全面測試[1]。
對軟件的安全進行測試,主要包括兩個方面。其一是針對軟件的漏洞進行測試,測試條件是要求檢查出軟件內部具有的缺陷;另一方面是安全性測試,它所測試的是軟件的“禁止區(qū)”,檢查軟件所不能進行的行動是否保障其不會進行,也就是對軟件是否能夠遵守規(guī)約進行測試,要求軟件在輸入A命令時決不能執(zhí)行B命令。
2.1 注意事項
軟件安全測試包括滲透、功能、驗證等環(huán)節(jié)的測試,其必要的條件在于三個方面,其一是了解軟件有可能存在的安全漏洞,其二是去評估軟件可能出現的安全風險,三是需要擁有效率和質量水準都比較高的安全測試工具,以高質量的技術進行測試。針對軟件進行檢測的過程中,需要根據具體出現的情況進行綜合性的分析,在進行了深入分析之后,需要選擇適合的檢測技術,制定出一個足夠高效的測試計劃。而在另一方面,在安全測試計劃的執(zhí)行期間,也要根據測試人和需要用到的測試設備的保養(yǎng)狀況等實際情況進行,要配備的不僅包括能夠對軟件安全進行專門的專業(yè)分析人員,而且也要對被測試的軟件系統(tǒng)整體情況有高度熟悉度、最好是這一系統(tǒng)的設計人員加入到軟件安全測試的計劃中,通過進行多方面的合作,進而更好的完成測試計劃[2]。
在進行軟件安全測試時,各個等級的分析工作必不可少。當需要進行測試的軟件規(guī)模相對較大,對軟件結構設計本身進行分析的工作也同樣需要專業(yè)人員的支持和加入,因此在對軟件進行分析的過程中,需要測試和分析人員能夠根據實際需求對分析技術進行高效的選擇,并且如果測試要求中有這個必要,那么也可以構建一個仿真環(huán)境,通過方針的分析工具進行協(xié)助性的測試。軟件的安全檢測是一個非常系統(tǒng)化的工作,無法通過使用一個簡單而單純的測試方法,來解決整個系統(tǒng)的測試,不可能建立一個測試體系和測試環(huán)境,通過全自動的方式一鍵將系統(tǒng)整體測試完畢。因此,在軟件安全測試實際進行的過程中,非常有必要來選擇一個足夠高效和合理的測試方法。
2.2 評估方法
在軟件安全性測試結束之后,對于判斷這一軟件能否真正達到預期中的安全程度,需要測試人員能夠建立一個行之有效的安全評估體系。建立這一體系能夠從兩個方面進行全面的評估。
其一是對軟件的缺陷數據進行評估。如果軟件中被發(fā)現的漏洞越多,這就意味著會被留下的缺陷也就越多。因此在進行評估時,需要建立一個能夠作為參照系的基線數據,以此進行全面評估,否則其結果就會沒有依據,即使最后得到了結果,這個結論也無法肯定是否正確。
其二是需要采用漏洞植入法對軟件進行進一步的評估。這一做法具體而言,就是直接在被測試軟件中插入安全隱患,要求令不參加測試的工作者在軟件中植入一定漏洞,通過測試后,將結果與這些工作者進行核對,看他們所植入的漏洞中有多少能夠被發(fā)現,來評估軟件安全性。
對軟件進行安全檢測,一般而言的進行方式是模塊測試(單元測試)——集成測試——系統(tǒng)測試這一順序。模塊測試(單元測試)就是針對軟件中最小的單位進行安全檢測,檢查各個模塊中的每一個部分是否能夠正確地去實現其功能,最終的目的是為了能夠發(fā)現各個模塊中可能存在的缺陷。集成測試是把通過了之前的單元測試的模塊進行組裝,測試軟件的體系結構是否安全。系統(tǒng)測試則是在完成了以上兩個步驟之后,將軟件實際運行,與其它的系統(tǒng)組合測試,以此來確認軟件能否實現其在設計之初預期達到的各種功能。
進行軟件的安全測試,具體全面的測試方法包括多個方面的復數內容,其中系統(tǒng)安全性的測試方法包括:源代碼評審法、基于風險的安全測試、滲透性測試方法 、模糊測試方法。代碼安全性檢驗方法包括:程序代碼安全性、C++/Java安全性列表、JavaScript安全性列表、代碼安全性掃描工具。對系統(tǒng)功能安全性驗證主要包括:口令安全性、用戶權限、非授權攻擊、配置管理以及功能失效、異常帶來的安全風險等。數據安全性驗證主要包括:數據編碼驗證、加密和解密,系統(tǒng)數據完整性、管理性、獨立性、備份和災難恢復等[3]。而在其中,能夠有效地達成對軟件進行的安全測試,可行的方法包括以下六種:
第一是語法測試。這種方法是對受測軟件的功能接口進行測試,通過對其功能接口輸入多種不同的命令,檢測軟件是否能夠根據命令進行符合設計者預期的運行,最終確定其結果是否能夠達到預期的效果。
第二種是屬性測試。這種檢測方法具體而言需要確認軟件的編程規(guī)則,對已經經過確認了的編程規(guī)則編碼進行驗證,檢測的主要內容是確認系統(tǒng)程序中正在運行的代碼是否能夠遵守軟件編寫之初建立起的規(guī)則。這種檢測方法能夠有效地對安全漏洞進行分析,檢驗其交互性。
第三種是比較常見的故障注入測試,通過進行故障分析,來尋找會導致軟件發(fā)生事故的中間事件與底端事件,以此進行邏輯構架,構成故障樹,其檢測的效率比較高。
我國軟件在國際市場上具有一定的劣勢,因此需要格外加強在軟件安全檢測環(huán)節(jié)的嚴格性。另一方面,如果能夠選擇正確有效的方式進行檢測,那么在工作環(huán)節(jié)中就能夠事半功倍,起到更好的效果。本次研究通過對軟件安全測試的重要性進行分析,確定進行軟件安全測試過程中所需要注意的問題,確立了幾種有效的軟件測試方法,為加強軟件測試環(huán)節(jié)的針對性和有效性提供理論支持。
[1]張升,陳恒如,韓利凱.軟件安全測試方法探討[J].科技視界,2015,11(22):89+110.
[2]崔天意,肖洋.安全關鍵軟件測試設計方法[J].甘肅科技,2015,04(14):6-7.
[3]高寧寧.面向國產安全數據庫的測試體系的構建[D].中國科學院大學(工程管理與信息技術學院),2014.