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