文/吳冬梅
嵌入式軟件以其所自身所具備的體積小、功耗低、系統(tǒng)資源占用少、靈活性強(qiáng)等特點(diǎn),在諸多領(lǐng)域中得到廣泛應(yīng)用。由于嵌入式軟件的主要服務(wù)對(duì)象為嵌入式系統(tǒng),如果軟件的安全性過低,則可能導(dǎo)致系統(tǒng)失效,這樣會(huì)造成嚴(yán)重的后果。所以需要對(duì)嵌入式軟件進(jìn)行測試,及時(shí)找出缺陷和漏洞,加以修補(bǔ)和優(yōu)化,提高嵌入式軟件的整體可靠性,使其在嵌入式系統(tǒng)中的作用得以充分發(fā)揮。借此,下面從安全性的角度,對(duì)嵌入式軟件測試展開分析探討。
嵌入式軟件是軟件工程研究的重點(diǎn)課題,具體是指以嵌入的方式安裝在硬件中的操作系統(tǒng)和開發(fā)工具軟件。大體上可將嵌入式軟件分為三類:嵌入式操作系統(tǒng)、嵌入式支撐軟件和嵌入式應(yīng)用軟件。嵌入式軟件的特點(diǎn)主要體現(xiàn)在如下幾個(gè)方面:
1.1.1 實(shí)用性
與普通軟件相比,嵌入式軟件具有非常獨(dú)特的實(shí)用性,這是其較為突出的一大特點(diǎn)。從服務(wù)對(duì)象上看,嵌入式軟件的主要服務(wù)對(duì)象是嵌入式系統(tǒng),所以要求嵌入式軟件與外部硬件設(shè)備之間具有緊密的關(guān)聯(lián)。絕大多數(shù)嵌入式系統(tǒng)都是以應(yīng)用作為核心,而從本質(zhì)的角度上講,嵌入式軟件就是應(yīng)用系統(tǒng),可以按照用戶提出的具體需求進(jìn)行定向開發(fā)。因此,每種嵌入式軟件都具有獨(dú)特的應(yīng)用環(huán)境及實(shí)用價(jià)值。
1.1.2 靈活性
嵌入式軟件可以看成是一個(gè)模塊,這個(gè)模塊其能夠在各種嵌入式系統(tǒng)中進(jìn)行靈活運(yùn)用,并且在運(yùn)用的過程中,不會(huì)對(duì)原本的系統(tǒng)造成影響,即不改變系統(tǒng)的性能和原始功能。同時(shí),嵌入式軟件的體積非常小、功耗低、可靠性高,應(yīng)用時(shí)不會(huì)占用過多的系統(tǒng)資源,使用靈活,便于升級(jí)。
由于嵌入式軟件主要是為嵌入式系統(tǒng)服務(wù),如果軟件的安全性存在問題,極有可能導(dǎo)致系統(tǒng)失效,這樣會(huì)造成災(zāi)難性的后果。所以必須對(duì)嵌入式軟件進(jìn)行嚴(yán)格的測試,借此來檢驗(yàn)軟件的安全性、可靠性。近年來,應(yīng)用嵌入式設(shè)備的領(lǐng)域越來越多,嵌入式軟件的復(fù)雜程度不斷提升,因此,對(duì)嵌入式軟件進(jìn)行快速、有效地測試顯得尤為必要。通過對(duì)嵌入式軟件進(jìn)行測試,能夠及時(shí)發(fā)現(xiàn)軟件的缺陷和漏洞,從而可以進(jìn)行修補(bǔ)和優(yōu)化,這樣能使嵌入式軟件的安全性和可靠性得到進(jìn)一步提升,也才能使嵌入式軟件的作用獲得最大限度地發(fā)揮。
安全性是嵌入式軟件的一個(gè)重要指標(biāo),由此使得安全性測試成為嵌入式軟件測試中的關(guān)鍵內(nèi)容。故障注入是驗(yàn)證軟件可靠性較為常用的一種方法,具體是指在軟件中生成一個(gè)錯(cuò)誤,使其引起硬件故障。目前,可進(jìn)行應(yīng)用的故障注入方式種類較多,如對(duì)內(nèi)存數(shù)據(jù)進(jìn)行修改、借助應(yīng)用軟件生成故障等等。在此基礎(chǔ)上,通過模擬的方法,能夠使軟件安全測試的優(yōu)勢得以充分發(fā)揮,最后利用故障函數(shù),強(qiáng)制測試軟件進(jìn)入某種狀態(tài)。大量的實(shí)踐表明,這種測試方法,很難達(dá)到嵌入式軟件安全性測試的要求。為保證嵌入式軟件的安全性,需要使用相關(guān)測試平臺(tái),從軟件運(yùn)行可靠性的層面進(jìn)行測試,如果結(jié)果合格,則說明嵌入式軟件安全,若是不合格,表明嵌入式軟件存在安全漏洞。
2.2.1 安全性測試的主要環(huán)節(jié)
嵌入式軟件從設(shè)計(jì)開發(fā)到完善直至投入使用是一個(gè)生命周期,由于嵌入式軟件的主要服務(wù)對(duì)象為嵌入式系統(tǒng),所以必須確保開發(fā)出來的嵌入式軟件具有較高的安全性,這樣才能保證嵌入式系統(tǒng)的運(yùn)行安全、穩(wěn)定。因此,嵌入式軟件除了在開發(fā)時(shí)需要進(jìn)行安全性測試之外,在應(yīng)用過程中,仍然要進(jìn)行安全性測試,保證軟件不會(huì)出現(xiàn)安全性方面的問題。從重要程度上看,嵌入式軟件開發(fā)環(huán)節(jié)中的安全性測試,要比后續(xù)使用階段的安全性測試更加重要,這是因?yàn)槿绻_發(fā)的軟件本身就存在安全漏洞,那么將無法滿足系統(tǒng)的應(yīng)用要求。鑒于此,現(xiàn)階段對(duì)嵌入式軟件的安全性測試,基本都集中在軟件開發(fā)環(huán)節(jié)。
2.2.2 測試環(huán)境的搭建思路
在對(duì)嵌入式軟件進(jìn)行安全性測試前,要先搭建一個(gè)測試環(huán)境,具體做法如下:為確保輸入的有效性,可采用檢測軟件基本單位的方法,完成軟件單元的安全性測試,借助軟件防御策略,避免惡意入侵及操作不當(dāng)對(duì)嵌入式軟件安全造成危害;當(dāng)軟件單元測試完畢后,可對(duì)軟件進(jìn)行集成測試,以軟件的安全屬性變化對(duì)測試環(huán)境的影響,作為集成測試的指導(dǎo)依據(jù)。在集成測試環(huán)節(jié)中,主要是利用測試環(huán)境對(duì)嵌入式軟件中存在的缺陷進(jìn)行驗(yàn)證,若是軟件存在缺陷,則表明其安全性不足,反之,說明軟件安全;集成測試結(jié)束后,便可在模擬環(huán)境中,對(duì)軟件進(jìn)行驗(yàn)收測試,將找到的漏洞納入入侵矩陣,據(jù)此對(duì)軟件的安全缺陷進(jìn)行識(shí)別。
2.2.3 測試環(huán)境的實(shí)現(xiàn)
在嵌入式軟件開發(fā)階段進(jìn)行安全性測試時(shí),漏洞檢測是關(guān)鍵內(nèi)容,為使測試過程得以簡化,可直接在宿主機(jī)上對(duì)測試環(huán)境進(jìn)行仿真模擬。在PC機(jī)上安裝模擬器,使其在C語言環(huán)境下運(yùn)行,然后配置相關(guān)變量,此時(shí)便可進(jìn)行模擬測試。通過模擬器對(duì)嵌入式軟件進(jìn)行安全性測試的過程中,模擬器的啟動(dòng)方法有兩種,一種是直接啟動(dòng),即雙擊解壓包打開相關(guān)程序,從命令窗口將程序?qū)肽M器中;另一種將需要測試的軟件導(dǎo)入到集成環(huán)境中,在導(dǎo)航頁面上開啟模擬器。
2.3.1 軟件功能的安全測試
嵌入式軟件以實(shí)用性而著稱,一款軟件的實(shí)用性主要與功能有關(guān),所以在對(duì)嵌入式軟件進(jìn)行測試的過程中,應(yīng)當(dāng)重點(diǎn)對(duì)軟件的功能進(jìn)行安全測試,此項(xiàng)測試可以軟件的安全需求分析與驗(yàn)證為基礎(chǔ)。程序開發(fā)人員在對(duì)嵌入式軟件進(jìn)行設(shè)計(jì)時(shí),為確保軟件本身的安全性,通常會(huì)按照具體的安全需求,增設(shè)各種安全措施,比如,數(shù)據(jù)加密、權(quán)限管理等等,據(jù)此對(duì)測試用例進(jìn)行設(shè)計(jì),最后使用與功能測試相似的方法,對(duì)嵌入式軟件功能的安全性進(jìn)行測試。目前,黑盒測試是嵌入式軟件功能測試中較為常用的一種方法,該方法的基本原理如下:將軟件程序視作為無法開啟的黑盒子,并在程序接口進(jìn)行測試,檢查程序的功能是否能夠正常使用,如果可以使用,則說明軟件的功能安全、可靠,反之表明軟件的功能存在安全問題。
2.3.2 軟件漏洞的安全測試
對(duì)于嵌入式軟件而言,漏洞是安全測試的重點(diǎn)內(nèi)容,如果嵌入式軟件存在漏洞,那么黑客便可利用這個(gè)漏洞對(duì)系統(tǒng)進(jìn)行入侵,從而達(dá)到獲取數(shù)據(jù)信息和破壞系統(tǒng)運(yùn)行的目的。所以,程序人員在對(duì)軟件漏洞進(jìn)行安全性測試時(shí),應(yīng)當(dāng)站在黑客的角度,這樣才能找出軟件中存在的各種漏洞。嵌入式軟件漏洞的形成原因比較多,因此對(duì)漏洞進(jìn)行安全性測試并沒有固定的方法,大量的實(shí)踐表明,DREAR模型的效果較好。
在嵌入式軟件安全測試中,找出軟件存在的缺陷和漏洞是最終目標(biāo),對(duì)此可運(yùn)用C++代碼挖掘軟件漏洞。挖掘嵌入式軟件的漏洞時(shí),靜態(tài)分析是比較實(shí)用的一種方法,雖然該方法在實(shí)際應(yīng)用中存在漏誤報(bào)的可能性,但卻并不影響其應(yīng)用效果。具體操作過程如下:將待測試的嵌入式軟件導(dǎo)入靜態(tài)分析工具當(dāng)中,靜態(tài)分析工具可根據(jù)現(xiàn)有的安全規(guī)則,對(duì)軟件中的漏洞進(jìn)行挖掘,并且還能分析出經(jīng)漏洞產(chǎn)生的攻擊,由此可為漏洞修補(bǔ)提供依據(jù)。惡意代碼漏洞是威脅嵌入式軟件安全的主要漏洞之一,在安全測試時(shí),應(yīng)當(dāng)重點(diǎn)對(duì)其進(jìn)行分析。由于受到定義類型的限制,使得field無法受到有效的保護(hù),這樣一來很容易遭到惡意代碼入侵,同時(shí),field是一個(gè)穩(wěn)定性較低的數(shù)據(jù)組合,當(dāng)一個(gè)靜態(tài)域?qū)δ硞€(gè)數(shù)據(jù)組合進(jìn)行引用時(shí),可能會(huì)被惡意代碼訪問。通過掃描的方式發(fā)現(xiàn)的軟件漏洞,可從被導(dǎo)出的XML文件中進(jìn)行查詢。由此便可非常清晰地了解到嵌入式軟件中存在的漏洞和缺陷類型,并且還能對(duì)漏洞進(jìn)行精確定位。程序人員根據(jù)測試結(jié)果,可對(duì)軟件中的漏洞進(jìn)行修補(bǔ),這樣能夠使軟件的安全性得到進(jìn)一步提升。
綜上所述,嵌入式軟件的應(yīng)用領(lǐng)域不斷拓寬,用戶對(duì)其安全性的要求也隨之提高。因此,在嵌入式軟件開發(fā)設(shè)計(jì)階段,程序人員應(yīng)當(dāng)從安全性的角度,對(duì)嵌入式軟件進(jìn)行測試,從而確保開發(fā)出來的軟件具有足夠高的安全性,這樣才能保證嵌入式系統(tǒng)的運(yùn)行可靠性。