摘 要: 在軟件開發(fā)的整個周期內(nèi),軟件測試對項目的正常運行起著關(guān)鍵作用,計算機軟件安全性測試是軟件測試的一部分,但又有其特別的測試技術(shù)和測試方法。嵌入式軟件的安全性測試可以分為功能性安全測試和漏洞性安全測試,功能性安全測試通常與普通的功能性測試一起進行,其測試技術(shù)和測試方法也基本相同。在此重點挖掘一些嵌入式軟件安全測試的共性部分,主要研究安全測試在軟件開發(fā)周期中的各種方法策略和技術(shù)。并借鑒一般應(yīng)用軟件安全測試的管理規(guī)范,結(jié)合嵌入式軟件的具體特點分析改進,試圖形成針對嵌入式軟件較為通用的、工程化的安全測試解決方案。
關(guān)鍵詞: 嵌入式軟件測試; 漏洞挖掘; 安全性測試; 測試策略
中圖分類號: TN919?34; TM417 文獻標識碼: A 文章編號: 1004?373X(2016)13?0080?04
Abstract: Software testing in the whole period of software development plays an important role to ensure the normal operation of the project. The computer software security testing is a part of software testing, but has special testing technology and tes?ting method. The security testing of the embedded software is composed of functional security testing and vulnerability security testing. The functional security testing is often carried on with normal functional testing, and its testing techniques and testing methods are basic the same. The common part of the embedded software security testing is mined emphatically. Various strategies and techniques of security testing in software development period are mainly studied. Referring to the management practices of the general application software security testing, and in combination with the specific characteristics of the embedded software, the universal and engineering security testing solution for the embedded software attempts to form through the analysis and improvement.
Keywords: embedded software testing; vulnerability mining; security testing; test strategy
0 引 言
計算機軟件安全性測試是嵌入式軟件測試的重要組成部分,它的作用是至關(guān)重要的。嵌入式軟件安全性測試不僅要對安全需求中的功能性安全需求進行驗證,還要從嵌入式軟件的設(shè)計和實現(xiàn)代碼中挖掘未知的漏洞,并對這些未知的安全缺陷進行管理。通過嵌入式軟件安全測試,可以挖掘程序自身存在的安全隱患,并能夠檢查在遭遇攻擊時的防范能力,根據(jù)不同的安全需求其安全測試策略會相應(yīng)的不同[1]。通常情景下,安全性測試都是基于風(fēng)險分析,即首先需要在測試前進行嵌入式軟件的風(fēng)險分析,然后再通過具體的安全測試進行驗證[2]。
通過有效的嵌入式軟件安全測試可以發(fā)現(xiàn)大部分的安全缺陷,在此基礎(chǔ)上對安全漏洞進行修補可以避免災(zāi)難性的安全性問題的發(fā)生,這使得人們對安全測試的重視程度越來越高。軟件安全測試優(yōu)于其他軟件安全過程(諸如安全編碼或設(shè)計審計等)之處在于,計算機安全測試可以展示出真實的攻擊狀態(tài),因此展示出客觀的、可量化的結(jié)果,得出真實的漏洞利用情況[3]。在軟件開發(fā)周期后期對軟件進行改動以消除漏洞,不僅存在很大的安全風(fēng)險,而且伴隨著高昂的開銷。對漏洞被利用帶來的損失進行評估,可以幫助決定是立刻修復(fù)一個安全問題,還是在下一輪的軟件開發(fā)中進行修復(fù)[4]。
1 嵌入式軟件測試技術(shù)與策略的研究
1.1 嵌入式軟件交叉測試平臺
嵌入式軟件交叉測試的步驟:首先在宿主機環(huán)境中進行測試用例的編寫,然后將生成的測試腳本編譯成測試命令后下載到被測目標機上,接著通過測試代理使這些測試命令在被測目標機上得以執(zhí)行[5]。因為目標機具有資源匱乏的特點,測試工具一般運行在宿主機上,而測試執(zhí)行后所采集的測試數(shù)據(jù)也不會在目標機上進行分析,這就需要目標機端的測試代理把測試數(shù)據(jù)回傳到宿主機端,再使用其中的測試結(jié)果分析工具進行測試數(shù)據(jù)的分析[6]。
在接收到測試命令后,測試代理將按照測試命令驅(qū)動被測嵌入式應(yīng)用軟件進行相應(yīng)的測試,被測應(yīng)用軟件將生成的測試數(shù)據(jù)發(fā)送到測試代理中,再由其發(fā)送到宿主機方[7]。嵌入式軟件測試基本結(jié)構(gòu)如圖2所示。
1.2 軟件測試策略
軟件測試通過結(jié)構(gòu)化的組織方法,能夠以有效而合理的測試步驟完成測試要求。嵌入式軟件的結(jié)構(gòu)化測試方法,即TEmb方法由兩部分組成:一是在任何嵌入式軟件測試項目中的測試方法的基礎(chǔ)(通用元素),通用元素主要包括生命周期、基礎(chǔ)設(shè)施、基本技術(shù)和組織;二是一組相關(guān)的特定方法,特定方法主要針對特定的嵌入式軟件系統(tǒng)和特定的測試方式而采取的特定方法策略。通用元素和特定方法的有機結(jié)合,能夠產(chǎn)生適合特定的嵌入式系統(tǒng)軟件的測試方法和測試方案[8]。
2 安全測試的組織方式和環(huán)境搭建
嵌入式軟件的安全測試在軟件的開發(fā)生命周期的測試階段的子過程一般采取下面的測試策略:軟件的單元測試通過對軟件的基本單位(單個類)的檢測以保證輸入的有效性,利用軟件內(nèi)部邏輯的縱深防御策略,防止惡意行為和不安全操作對軟件安全造成危害;在集成測試的過程中,軟件的整體安全屬性變化的可見和可測試,對平臺環(huán)境和應(yīng)用軟件的風(fēng)險分析可作為集成測試的指南。集成測試階段通常進行缺陷驗證;系統(tǒng)測試和驗收測試需要在真實的或模擬的目標機環(huán)境中進行,然后根據(jù)漏洞的入侵點,將發(fā)現(xiàn)的可疑漏洞納入入侵點矩陣后,經(jīng)過典型的滲透活動從而對識別的安全缺陷進行驗證。
在嵌入式軟件進行漏洞性安全測試時,由于其測試技術(shù)和測試手段的復(fù)雜性等原因,采取在宿主機上進行對目標機環(huán)境的仿真和模擬。為了更好地在Android系統(tǒng)平臺上進行安全測試,將在PC機上進行Android模擬器的安裝。由于Android模擬器需要運行在Java環(huán)境中,首先需要進行Java環(huán)境的安裝,然后進行AndroidSDK包的解壓和環(huán)境變量的配置。
在安裝配置好Android模擬器的基礎(chǔ)上,有兩種方式進行Android模擬器的啟動:一是在AndroidSDK的解壓包中直接雙擊SDKSetup.exe,然后將Android平臺的應(yīng)用軟件apk通過CMD命令窗口導(dǎo)入到Android模擬器中;二是在Eclipse等集成開發(fā)環(huán)境下,導(dǎo)入要測試的應(yīng)用軟件對應(yīng)的工程IReader,直接在Eclipse的導(dǎo)航界面上進行Android模擬器的啟動,在Android手機系統(tǒng)的啟動界面上,看到將要測試的IReader閱讀器軟件,如圖3所示。
在cmd窗口由AndroidShell命令行輸入想要閱讀的電子書,該IReader閱讀器支持常見的格式,比如txt,html,PDF等格式。
3 基于分類的應(yīng)用軟件安全測試
3.1 軟件的功能性安全測試
系統(tǒng)功能性安全測試是在軟件安全需求的分析與驗證的基礎(chǔ)上進行的。在軟件設(shè)計過程中,設(shè)計者為了保障嵌入式軟件自身安全,往往會根據(jù)安全需求增加系統(tǒng)安全防護方法,例如權(quán)限管理、傳輸加密、數(shù)據(jù)加密、數(shù)據(jù)備份和恢復(fù)等模塊。同時,進行測試用例的設(shè)計,然后采用與嵌入式軟件其他功能測試相似的方法進行驗證,黑盒測試方法是用到最多的驗證方法。
3.2 嵌入式軟件的漏洞性安全測試
嵌入式軟件的漏洞性安全測試要求測試人員以攻擊者的思維方式進行嵌入式軟件的安全測試。因此,找到嵌入式軟件盡可能多的漏洞就成為漏洞性安全測試的首要目標,其測試流程如圖4所示。
軟件漏洞的起因是多種多樣的,因此解決漏洞所需要的工作量也是千差萬別的。使用DREAR模型是對漏洞相關(guān)風(fēng)險進行分級的一種有效技術(shù)。在對漏洞的修補進行優(yōu)先級排序的過程中,漏洞的可利用性是最重要的參考因素之一。判定漏洞的可利用性通常包含對以下五個因素的權(quán)衡:
攻擊者企圖探測并利用這個漏洞所需的訪問權(quán)限和定位技術(shù);成功利用此漏洞能獲得的訪問級別或權(quán)限;探測并利用此漏洞的時間和工作量因素;探測和利用的潛在可靠性;探測和利用的可靠性,探測和利用嘗試行為的可重復(fù)性。
在對漏洞進行分級的基礎(chǔ)上,按照漏洞的優(yōu)先級設(shè)計入侵矩陣和對應(yīng)的設(shè)計用例,繼而對漏洞進行故障注入,從而驗證漏洞攻擊給軟件帶來的危害。
4 安全測試的執(zhí)行與分析
4.1 安全測試前的安全性分析
(1) 程序?qū)崿F(xiàn)語言的安全性分析
除了Android平臺的安全機制,通過對將要測試的應(yīng)用軟件IReader進行分析研究,該軟件復(fù)用了大量的由C++編寫的代碼。C,C++之類的本機代碼都是被編譯為機器碼并直接由處理器來執(zhí)行的。當(dāng)測試一個用托管代碼編寫的程序時,注意力應(yīng)該集中在其中被復(fù)用的本機代碼上,由于本機代碼是在虛擬機之外執(zhí)行的,所以被復(fù)用的本機代碼永遠是托管代碼風(fēng)險最高的領(lǐng)域。
(2) 應(yīng)用軟件的威脅建模與風(fēng)險分析
嵌入式應(yīng)用軟件IReader作為多種文件格式的閱讀器,可以通過AndroidShell導(dǎo)入需要的文件。利用FileFuzz工具可以很好的進行此安全測試。
4.2 安全測試的執(zhí)行與分析
軟件漏洞作為軟件系統(tǒng)中存在缺陷和不足的地方,因此發(fā)現(xiàn)軟件的漏洞是攻擊者進行入侵的首要工作。根據(jù)以上對應(yīng)用軟件和其操作系統(tǒng)的了解,應(yīng)該重點對嵌入式應(yīng)用軟件中被復(fù)用的C++代碼進行漏洞挖掘;另外,還將對主體的Java代碼部分進行漏洞查詢。在漏洞挖掘過程中,靜態(tài)分析方法是目前社會最實用、最有效的安全漏洞檢測方法,盡管仍存在可能產(chǎn)生漏報(1negatives)、誤報(1positives)的情況,特別是在擁有程序源代碼的情況下。因此,這部分的漏洞挖掘工作主要通過利用現(xiàn)有的靜態(tài)分析工具進行。使用cppcheck對復(fù)用的C++代碼進行靜態(tài)掃描,并沒有查詢出代碼的安全缺陷,只是存在一些不規(guī)范的編程方式。
將工程導(dǎo)入到FindBugs靜態(tài)分析工具中,如圖5所示。FindBugs不僅能夠按照已有的安全規(guī)則進行漏洞分類挖掘和準確定位漏洞位置,還能夠?qū)β┒丛庥隹赡艿墓暨M行分析,這對漏洞的管理和修補是極其有利的。就軟件安全的嚴重程度,首先對Maliciouscodevulnerability(惡意代碼漏洞)進行分析和整理,如表1所示。
將工程導(dǎo)入到FindBugs靜態(tài)分析工具中,如圖6所示。由圖6可以看出,程序源碼中出現(xiàn)的Mutable static field類型的漏洞被劃分為3大類:
(1) Field沒有被定義為final類型,因而不能受到保護而免遭惡意代碼的入侵。一個不穩(wěn)定的靜態(tài)域是可以被惡意代碼或另外的包不經(jīng)意改變的。但是,這種域的使用方法是不容易解決的。
(2) Field作為一個不穩(wěn)定的數(shù)組。一個final靜態(tài)域引用一個數(shù)組時,可以被惡意代碼或從另一包訪問。此代碼可以自由修改數(shù)組的內(nèi)容。
(3) Field應(yīng)該受到包的保護。一個不穩(wěn)定的靜態(tài)域可以被惡意代碼或意外改變。該域應(yīng)該受到包的保護而避免這種缺陷。
所有掃描出的漏洞可以在導(dǎo)出的XML文件中得到查詢,如圖7所示。
從導(dǎo)出的XML文件中,可以清晰地了解漏洞缺陷的類型和安全優(yōu)先級以及漏洞的準確定位。根據(jù)安全漏洞的優(yōu)先級順序和詳細介紹,可以建立入侵矩陣,以便進行安全漏洞的驗證工作。
5 結(jié) 論
隨著嵌入式系統(tǒng)在國民經(jīng)濟各行業(yè)的廣泛使用,嵌入式應(yīng)用軟件開發(fā)成為計算機軟件領(lǐng)域的一個熱點。人們對智能化的需求使得嵌入式軟件的開發(fā)日益復(fù)雜,并且嵌入式軟件的應(yīng)用領(lǐng)域?qū)Π踩砸笤絹碓礁?。為了提高嵌入式軟件的安全性,人們提出安全編程的概念期望從根本上改變軟件質(zhì)量,但由于開發(fā)成本及開發(fā)效率等原因使得其效果十分有限。而嵌入式軟件的安全測試由于其成本較低,測試方法靈活,測試工具眾多等特點,使其成為了一個很有價值的研究課題。
嵌入式軟件安全測試的重點是由軟件中存在的安全漏洞進行挖掘和管理的過程。本文首先對嵌入式軟件的安全性進行闡述,在此基礎(chǔ)上對軟件安全漏洞是如何產(chǎn)生的以及主要的防御手段進行了總結(jié)。通過對各種嵌入式安全測試技術(shù)的研究,總結(jié)其優(yōu)缺點和實用性。在對嵌入式軟件的安全性和安全測試技術(shù)的共性進行分析研究的基礎(chǔ)上,本文結(jié)合實際的Android平臺的應(yīng)用軟件IReader,提出針對嵌入式軟件安全測試的測試方案。該方案對嵌入式軟件測試的組織方式,測試環(huán)境的搭建和具體的測試流程進行研究,并結(jié)合實例進行了驗證說明。
參考文獻
[1] 楊晨娜.基于單片機的井徑測量系統(tǒng)軟件設(shè)計[J].現(xiàn)代電子技術(shù),2015,38(18):53?56.
[2] 呂金河.嵌入式軟件測試[J].軟件導(dǎo)刊,2010(9):11?12.
[3] 李偉,程朝輝.嵌入式軟件測試策略研究[J].北京化工大學(xué)學(xué)報,2007(z1):23?24.
[4] 王妍,徐葉茂.嵌入式計算機系統(tǒng)中的故障注入技術(shù)[J].艦船電子工程,2005(5):45?46.
[5] 王軼辰,劉斌,鐘德明.基于虛擬機的嵌入式軟件測試環(huán)境[J].計算機應(yīng)用,2005(12):55?56.
[6] 劉利枚,汪文勇,唐科.嵌入式軟件測試方法與技術(shù)[J].計算機與現(xiàn)代化,2007(4):66?67.
[7] 杜延,劉從越.嵌入式實時系統(tǒng)軟件測試實踐[J].微計算機信息,2006,22(26):31?33.
[8] LABROSSE J J.嵌入式實時操作系統(tǒng)[M].邵貝貝,譯.北京:北京航空航天大學(xué)出版社,2003:66?68.