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