国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

針對復(fù)雜路徑條件的固件測試方法改進

2022-03-04 06:47王麗娜張增光
關(guān)鍵詞:測試用例通信協(xié)議固件

王麗娜,張增光,張 桐,陳 思

空天信息安全與可信計算教育部重點實驗室,武漢大學(xué)國家網(wǎng)絡(luò)安全學(xué)院,湖北 武漢 430072

0 引言

當(dāng)前,隨著物聯(lián)網(wǎng)技術(shù)的不斷發(fā)展,嵌入式設(shè)備被廣泛應(yīng)用于各行各業(yè)中[1],例如汽車、醫(yī)療等領(lǐng)域。這些嵌入式設(shè)備通常將軟件驅(qū)動的微控制器與外圍設(shè)備結(jié)合在一起,運行在此類設(shè)備上的軟件又稱為固件。與傳統(tǒng)個人計算機中的處理器相比,微控制器體積小、能耗低、擴展性強,非常適合被嵌入到系統(tǒng)中執(zhí)行特定的任務(wù),但這是以增加有限的處理資源為代價的,會導(dǎo)致嵌入式設(shè)備更加難以編程和與外界進行交互。近年來,由于設(shè)備制造商對安全設(shè)計的忽視、設(shè)備固件更新不及時或難以更新等原因,越來越多的設(shè)備漏洞被披露[2,3]。因此,對嵌入式設(shè)備進行安全性測試至關(guān)重要。

模糊測試是一種有效的漏洞挖掘技術(shù),該技術(shù)被廣泛應(yīng)用于網(wǎng)絡(luò)協(xié)議、瀏覽器、操作系統(tǒng)內(nèi)核、圖像處理、音視頻文件解析等各類軟件的漏洞挖掘工作中,并產(chǎn)生了良好的效果。然而,現(xiàn)有的模糊測試無法直接應(yīng)用到固件測試中,這是因為固件通過外圍設(shè)備與外界進行交互,缺少直接從外界獲取數(shù)據(jù)運行的接口[4]。為了解決這一問題,系統(tǒng)仿真、軟硬件結(jié)合和固件托管等三種固件測試技術(shù)被提出。系統(tǒng)仿真[5,6]對設(shè)備硬件進行仿真以在不使用物理硬件的情況下對固件進行測試,可以有效地利用現(xiàn)有的漏洞挖掘技術(shù)。軟硬件結(jié)合[7,8]既提供了可以有效利用現(xiàn)有漏洞挖掘技術(shù)的仿真環(huán)境,又可以使用實際的物理設(shè)備來處理無法仿真的外設(shè)請求。固件托管[9,10]通過分析嵌入式設(shè)備固件與外圍設(shè)備的交互來理解固件需要的外設(shè)輸入,用建模替代硬件,進而在軟件層面上對固件進行測試。因此通過以上三種技術(shù),模糊測試可直接應(yīng)用到固件測試中。

使用模糊測試技術(shù)對固件進行測試稱為固件模糊測試。當(dāng)前的一些固件模糊測試技術(shù)有IoTFuzzer[11]、RPFuzzer[12],它 們 重 點 研 究 的 是 如何在嵌入式設(shè)備固件上應(yīng)用模糊測試,而如何提升應(yīng)用的效果尚未有明確的案例。上述技術(shù)在測試固件時將AFL(American fuzzy lop)簡單繼承并使用[13]。作為一個簡單的灰盒模糊測試器,AFL并不擅長突破復(fù)雜的路徑條件,因此測試用例進入到固件執(zhí)行之后很難訪問到新路徑。一個典型的例子是固件與外設(shè)進行數(shù)據(jù)傳輸時通常使用校驗和作為錯誤校驗機制以確保數(shù)據(jù)的完 整 性,例 如USART(universal asynchronous re?ceiver/transmitter)協(xié)議設(shè)置奇偶校驗位,Modbus RTU協(xié)議使用16位的CRC(cyclic redundancy check)作為校驗,一般的模糊測試很難突破這一復(fù)雜的路徑條件。對此,F(xiàn)eng等[14]提出了固件模糊測試方案p2im(processor-peripheral interface modeling)。p2im的解決方法是通過逆向工程手動將固件包含的校驗和部分進行注釋并重新編譯,以在測試階段獲得更多的代碼,這些工作需要那些擁有專業(yè)知識的人花費大量時間完成。

針對校驗和檢查這一復(fù)雜路徑條件,本文提出了一種高效省時的固件測試改進方法,它可以被用于改進現(xiàn)有的固件模糊測試方案。在測試固件時,根據(jù)固件與外設(shè)交互使用的通信協(xié)議來修改模糊測試器產(chǎn)生的測試用例,使得測試用例在輸入到固件之后可以突破校驗和檢查這一復(fù)雜的路徑條件。我們使用此方法對p2im方案進行了改進,并通過測試兩個來自真實設(shè)備的固件來對比改進前后的測試性能。

1 基本概念

1.1 模糊測試器

模糊測試器是被用來產(chǎn)生模糊測試所需的測試用例的,大部分模糊測試器實現(xiàn)復(fù)雜,但其基本工作流程和功能的相似度較高,存在較多共性[15]。AFL是一款基于覆蓋引導(dǎo)(coverage-guided)的模糊測試工具,它通過記錄輸入樣本的代碼覆蓋率,調(diào)整輸入樣本以提高覆蓋率,增加發(fā)現(xiàn)漏洞的概率。它可以配合QEMU(quick emulator)對閉源的二進制文件進行模糊測試[16],挖掘可能存在的內(nèi)存安全漏洞,如堆棧溢出、double free等。其工作流程[13]大致為:1)在源碼編譯程序時進行插樁,記錄代碼覆蓋率;2)選擇一些輸入文件作為原始測試集加入輸入隊列;3)將隊列中的文件按一定的策略進行“突變”;4)如果變異文件更新了覆蓋范圍,則將其保留并添加到隊列中;5)上述過程會一直循環(huán),期間使程序崩潰的文件會被記錄下來。

1.2 p2im

p2im提供了一種新的固件測試方法,其思想在于提取固件處理器和外設(shè)寄存器之間的數(shù)據(jù)傳遞模式,構(gòu)造出模塊化的寄存器行為邏輯,并因此在處理器訪問外設(shè)寄存器時正確判斷傳遞的數(shù)據(jù)類型和大小,從而在保證固件正常運行的前提下實現(xiàn)直接和模糊測試產(chǎn)生的輸入對接。其工作流程分為兩步:1)模型抽象。以ARM Cortex-M[17]架構(gòu)為例,根據(jù)外設(shè)寄存器在固件執(zhí)行邏輯中的具體功能,p2im將所有寄存器分為4個種類,即控制寄存器、狀態(tài)寄存器、數(shù)據(jù)寄存器和控制&狀態(tài)寄存器,并分別得到每個種類寄存器與固件處理器傳輸數(shù)據(jù)時的訪問模式和處理策略。2)模型實例化。在得到各種寄存器的訪問模式和處理策略后,p2im在支持ARM Cortex-M指令集的QEMU中運行固件代碼,在發(fā)現(xiàn)固件嘗試訪問外設(shè)寄存器時,識別出寄存器種類,并根據(jù)應(yīng)對策略返回合適的值。除此之外,外設(shè)和固件之間還會通過中斷來傳遞數(shù)據(jù)。p2im在處理中斷時,先收集目前能夠觸發(fā)的所有中斷,然后簡單地每隔一段固定代碼基本塊按順序觸發(fā)一個中斷。

2 本文原理與方案設(shè)計

2.1 原理和思路

嵌入式固件在與外界進行數(shù)據(jù)交互的過程中,通常使用校驗和檢查機制以確保數(shù)據(jù)的可靠性。圖1展示了校驗和檢查在固件中的應(yīng)用,固件在從外設(shè)獲得數(shù)據(jù)之后對其進行校驗和檢查,只有通過校驗和檢查后才能夠繼續(xù)執(zhí)行其他任務(wù)。

圖1 校驗和檢查在固件中的應(yīng)用Fig.1 Checksum check in firmware

現(xiàn)有的固件測試方案p2im直接使用AFL生成的數(shù)據(jù)作為固件的輸入進行測試。由于AFL生成數(shù)據(jù)的過程是隨機的,當(dāng)其對具有校驗和檢查的固件進行測試時,測試用例很難通過校驗和檢查。以Modbus RTU通信協(xié)議使用的16位CRC為例,在簡單考慮數(shù)據(jù)部分不變的情況下AFL生成正確校驗和的概率為2-16,即AFL產(chǎn)生的測試用例將極難通過固件的校驗和檢查。針對這種情況,p2im的處理方法為刪除固件中的校驗和檢查部分代碼。由于p2im是針對固件二進制文件進行測試的,而且固件的源代碼很難獲得,這種方法需要擁有專業(yè)知識的人對固件二進制文件進行逆向分析,將固件中的校驗和檢查部分進行注釋之后重新編譯固件進行測試,因此會帶來大量的人力和時間成本。

針對AFL產(chǎn)生的測試用例極難通過固件校驗和檢查的問題,本文的解決思路為對AFL生成的測試用例進行一定的修改,使得測試用例能夠成功通過固件的校驗和檢查。固件往往以二進制文件的形式存在,因此不能夠根據(jù)固件源代碼去分析固件所使用的校驗和檢查格式。但是通過查看固件的相關(guān)文檔,可以獲得固件與外界進行數(shù)據(jù)交互的通信協(xié)議,通信協(xié)議規(guī)定了數(shù)據(jù)的格式以及校驗和檢查機制。在獲得固件對輸入數(shù)據(jù)格式的要求之后,可以使用一個后處理程序?qū)FL產(chǎn)生的測試用例中的校驗和部分進行修改,使其在測試時可以成功通過固件的校驗和檢查。這種方法簡單高效,避免了對固件二進制文件進行復(fù)雜耗時的逆向工程。

2.2 方案設(shè)計與實施

AFL提供了一個后處理程序的接口,數(shù)據(jù)生成程序可以調(diào)用后處理程序來對所有變異的測試用例進行最終清理。具體來說,AFL將為每個突變的輸出緩沖區(qū)調(diào)用后處理函數(shù),用戶可以對測試用例進行修改。

通過查看固件的說明文檔獲得固件所使用的通信協(xié)議,在明確固件與外設(shè)之間傳輸數(shù)據(jù)的格式之后,利用一個后處理程序?qū)FL生成的測試用例進行相應(yīng)的修改,使得每次產(chǎn)生的測試用例都符合數(shù)據(jù)格式要求。我們設(shè)計的后處理程序流程為:1)分配適當(dāng)大小的緩沖區(qū),并將測試用例移到該緩沖區(qū)中;2)根據(jù)固件使用通信協(xié)議的格式讀取數(shù)據(jù)并計算校驗和;3)使用新計算的校驗和覆蓋原始校驗和;4)返回新的緩沖區(qū)指針。

圖2展示了使用本文提出方法對p2im方案改進后的固件測試框架??蚣芤砸粋€固件二進制文件作為輸入,使用QEMU運行固件,之后對處理器外設(shè)接口建模。在發(fā)現(xiàn)固件嘗試訪問外設(shè)寄存器時,識別出寄存器種類并將每個外設(shè)寄存器以及寄存器之間的相互依賴關(guān)系映射到內(nèi)存中。在運行時,模糊測試器生成的測試用例經(jīng)過我們設(shè)計的后處理程序處理后,通過數(shù)據(jù)寄存器訪問進入固件執(zhí)行,固件在獲得輸入數(shù)據(jù)后對數(shù)據(jù)進行校驗和檢查,校驗成功之后執(zhí)行相應(yīng)功能對數(shù)據(jù)進行處理。并將QEMU收集的代碼覆蓋信息返回給模糊測試器。

圖2 本文固件測試框架Fig.2 The firmware test framework of this paper

3 評估

使用經(jīng)本文方法對p2im改進后的固件測試方案(improved p2im,Ip2im)對固件進行24小時的測試,通過對比Ip2im與p2im方案的固件測試結(jié)果來評估本方法的效果。除此之外,我們還手動驗證了Ip2im可以在固件測試時繞過固件的校驗和檢查。

3.1 實驗配置

選 擇PLC(programmable logic controller)和Heat Press這兩個在真實環(huán)境下使用的固件進行測試,不對其固件二進制文件做任何的修改。通過查看固件的相關(guān)文檔,發(fā)現(xiàn)它們通過串行端口連接到總線上,使用Modbus RTU通信協(xié)議與外設(shè)進行數(shù)據(jù)交互,獲得數(shù)據(jù)之后都會對其進行校驗和檢查。對這兩個固件的說明如下。

1)PLC:可編程控制器是一種堅固耐用的嵌入式設(shè)備,用于控制生產(chǎn)流程。我們選擇的固件是消毒機的一部分,并通過工業(yè)通信協(xié)議Modbus管理PLC與遠程SCADA(supervisory control and data acquisition)系統(tǒng)的通信[18]。

2)Heat Press:該固件對應(yīng)于紡織品升華生產(chǎn)線中使用的工業(yè)熱壓機。固件實現(xiàn)了配方管理器,用于控制升華過程的溫度、時間和壓力。該系統(tǒng)具有觸摸屏和一個使用Modbus協(xié)議的遠程工業(yè)I/O通道。

3.2 實驗結(jié)果

表1是Ip2im和p2im基本塊覆蓋率對比。與p2im相比,Ip2im在對兩個固件的測試中基本塊覆蓋率都有提升。在對PLC的測試中Ip2im的基本塊覆蓋率比p2im的高3.01%;在對Heat Press的測試中Ip2im的基本塊覆蓋率比p2im的高5.81%。表2展示了兩種固件測試方案函數(shù)覆蓋率的對比。從表2中看Ip2im固件的函數(shù)覆蓋率比p2im的也有提高,這是因為固件在boot階段訪問了大量的函數(shù)進行自檢,此類函數(shù)不會對輸入數(shù)據(jù)進行操作?;緣K覆蓋率和函數(shù)覆蓋率的提升表明使用本文提出的改進方法可以覆蓋固件的更多代碼。通過反匯編工具Ghidra[19]查看多出的代碼,發(fā)現(xiàn)它們是固件對輸入數(shù)據(jù)進行相應(yīng)處理的部分,可見測試用例已經(jīng)通過了固件的校驗和檢查。經(jīng)過后續(xù)實驗我們發(fā)現(xiàn),在多出的代碼中對輸入數(shù)據(jù)進行處理時沒有對數(shù)組邊界進行很好地檢查,固件在執(zhí)行到這里的時候出現(xiàn)了緩沖區(qū)溢出,程序發(fā)生崩潰。

表1 基本塊覆蓋率對比Table 1 Comparison of basic block coverage%

表2 函數(shù)覆蓋率對比Table 2 Comparison of function coverage %

固件測試的目的是盡可能多地去探索固件可能存在的路徑,得到使得固件崩潰或掛起的測試用例,進而去發(fā)掘固件可能存在的漏洞。圖3是兩種方案在固件測試過程中探索的路徑數(shù)量對比,在使用Ip2im之后,路徑數(shù)量有了顯著的增加,這是由于測試用例只有在通過固件的校驗和檢查之后才能探索更多的路徑,執(zhí)行固件更多的功能。圖4展示了在測試中引起固件程序崩潰的測試用例數(shù)量。從圖4可以看出,使用Ip2im后顯著提升了測試用例數(shù)量,為之后挖掘新的漏洞提供了可能。

圖3 固件測試中兩種方案探索的路徑數(shù)量Fig.3 The number of paths explored in the firmware test of the two schemes

圖4 固件測試產(chǎn)生崩潰時兩種方案測試用例數(shù)量Fig.4 The number of crash test cases generated by the firmware test of the two schemes

表3展示了固件測試發(fā)現(xiàn)的漏洞數(shù)量,p2im在PLC和Heat Press中都沒有發(fā)現(xiàn)漏洞,而Ip2im在PLC和Heat Press卻發(fā)現(xiàn)了漏洞。手動分析漏洞的具體類型見表4。表4的結(jié)果表明了Ip2im在實際應(yīng)用中的價值。

表3 兩種方案發(fā)現(xiàn)的漏洞數(shù)量Table 3 The number of bugs found with the two schemes

表4 Ip2im發(fā)現(xiàn)的漏洞Table 4 Bugs found with Ip2im

綜合以上的實驗結(jié)果可知,本文提出的改進方法在測試具有校驗和檢查固件存在的問題時,不需要對固件二進制文件進行復(fù)雜、耗時的逆向處理,并且取得了較好的代碼覆蓋率,提升效果顯著。

4 結(jié)語

本文研究了在測試具有校驗和檢查這一復(fù)雜路徑條件的固件時,現(xiàn)有固件測試方案存在的問題,并給出了相應(yīng)的改進方法。根據(jù)固件與外設(shè)交互使用的通信協(xié)議來修正模糊測試器生成的測試用例,進而在測試時突破固件中的校驗和檢查這一復(fù)雜路徑條件。我們使用該方法對固件測試方案p2im進行了改進,并通過測試兩種具有校驗和檢查的真實固件來評估本方法的效果。實驗結(jié)果表明,在固件測試中使用此方法可以成功突破校驗和檢查這一復(fù)雜的路徑條件,提升了基本塊覆蓋率和函數(shù)覆蓋率,并成功發(fā)掘了固件存在的漏洞。

猜你喜歡
測試用例通信協(xié)議固件
基于關(guān)鍵點的混合式漏洞挖掘測試用例同步方法
尼康旗艦Z9升級新固件延長高速連拍時間
基于國產(chǎn)化IT 基礎(chǔ)設(shè)施的通用固件安全模型研究
面向多目標(biāo)測試用例優(yōu)先排序的蟻群算法信息素更新策略
獎狀訓(xùn)練器飛行管理系統(tǒng)研究
英特爾發(fā)布免費固件引擎
提取ROM固件中的APP
基于R8C的汽車OBD通用故障診斷儀設(shè)計
SIP協(xié)議系統(tǒng)模型的形式化研究
測試用例集的優(yōu)化技術(shù)分析與改進
禹城市| 象山县| 普安县| 德江县| 刚察县| 阳谷县| 秀山| 灵山县| 游戏| 泸定县| 鄯善县| 星子县| 章丘市| 广丰县| 兴安县| 营山县| 安顺市| 中江县| 孝昌县| 图们市| 开鲁县| 平顺县| 兴安盟| 新绛县| 藁城市| 张家界市| 百色市| 四平市| 沅陵县| 武邑县| 鄂州市| 巴楚县| 揭东县| 库尔勒市| 民乐县| 舟山市| 沛县| 十堰市| 丰城市| 凌海市| 乌恰县|