亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        嵌入式設(shè)備固件仿真器綜述

        2023-10-27 02:50:36申珊靛楊澤霖張玉清
        計算機研究與發(fā)展 2023年10期
        關(guān)鍵詞:保真度仿真器外設(shè)

        張 浩 申珊靛 劉 鵬 楊澤霖 周 威 張玉清,5

        1(西安電子科技大學(xué)網(wǎng)絡(luò)與信息安全學(xué)院 西安 710071)

        2(中國科學(xué)院大學(xué)國家計算機網(wǎng)絡(luò)入侵防范中心 北京 101408)

        3(華中科技大學(xué)網(wǎng)絡(luò)空間安全學(xué)院 武漢 430074)

        4(分布式系統(tǒng)安全湖北省重點實驗室(湖北省大數(shù)據(jù)安全工程技術(shù)研究中心) 武漢 430074)

        5(海南大學(xué)計算機與網(wǎng)絡(luò)空間安全學(xué)院 ???570228)

        近年來物聯(lián)網(wǎng)行業(yè)發(fā)展迅速,嵌入式設(shè)備廣泛應(yīng)用于人類生活的各個領(lǐng)域.這些無處不在的嵌入式設(shè)備構(gòu)成了一個萬物互聯(lián)的巨大網(wǎng)絡(luò),極大地促進了人類社會的信息化、智能化發(fā)展.嵌入式設(shè)備作為物聯(lián)網(wǎng)中的重要組件,往往被針對性地賦予若干專用功能.基于商業(yè)成本控制,開發(fā)者在設(shè)計嵌入式設(shè)備時會在足以完成特定功能的情況下盡量節(jié)約成本,這使得嵌入式設(shè)備開發(fā)過程缺乏代碼審計、安全測試和地址空間隨機化等安全機制[1].同時,嵌入式設(shè)備作為萬物互聯(lián)的重要節(jié)點,其一旦被非法組織攻破,造成的危害后果極大.

        例如,2023 年4 月舉行的美國信息安全大會中指出,目前分布式拒絕服務(wù)攻擊(DDoS)比例超過了總體攻擊比重的50%,主要源于大量增長的物聯(lián)網(wǎng)設(shè)備極易被攻擊者控制[2].據(jù)統(tǒng)計,超過90%的嵌入式實時系統(tǒng)沒有實現(xiàn)數(shù)據(jù)段內(nèi)存不可執(zhí)行、段基地址隨機化和棧溢出保護等基本的漏洞緩解措施[1].此外,由于嵌入式設(shè)備包含多種專用外設(shè)接口,其存在的攻擊風(fēng)險遠大于通用計算機系統(tǒng).例如BroadPwn漏洞可以通過嵌入式設(shè)備的外設(shè)來攻擊其嵌入式系統(tǒng)[3].但是這種跨組件的漏洞一般無法通過分析單個嵌入式系統(tǒng)來發(fā)現(xiàn)或復(fù)制,因為這種漏洞利用的是嵌入式設(shè)備中多個硬件和軟件間的數(shù)據(jù)通信和行為模式中的缺陷.

        近年來,業(yè)界嘗試將各種表現(xiàn)良好的漏洞挖掘技術(shù)應(yīng)用到嵌入式領(lǐng)域中,但需要克服嵌入式設(shè)備存在的底層硬件復(fù)雜多樣、軟件和硬件資源有限、設(shè)備信息文檔不公開等問題.一方面,嵌入式設(shè)備廠商的軟硬件實現(xiàn)方式種類繁多,底層硬件平臺也復(fù)雜異構(gòu),使得通用計算機系統(tǒng)上的先進漏洞挖掘技術(shù)難以直接適用;另一方面,不同廠商有不同的設(shè)計風(fēng)格和編碼方式,出于行業(yè)競爭的考慮,其源碼文檔并不公開,導(dǎo)致嵌入式設(shè)備的安全測試工作難以順利進行,同時,出于成本和安全的考慮,嵌入式設(shè)備的計算資源十分有限,主頻通常只有幾百兆赫茲,導(dǎo)致動態(tài)分析等需要大量運行資源的漏洞挖掘技術(shù)遷移到嵌入式設(shè)備中的挖掘效率較低[4].

        之前多數(shù)研究人員對嵌入式設(shè)備和固件的安全分析僅通過靜態(tài)分析技術(shù)[5-8].雖然嵌入式設(shè)備和固件的靜態(tài)分析技術(shù)取得了不錯的成果,但是面對數(shù)量龐大的嵌入式設(shè)備,靜態(tài)分析人工成本高、誤報率高的缺點逐漸暴露.而相比之下動態(tài)分析技術(shù)準(zhǔn)度度高、自動化程度高,可以大幅提高漏洞挖掘的效率,消除不同平臺間的環(huán)境壁壘,幫助研究人員實現(xiàn)通用、高效的安全分析方案.然而,嵌入式設(shè)備硬件依賴性高,如何分離嵌入式固件和底層硬件或?qū)崿F(xiàn)嵌入式設(shè)備固件全系統(tǒng)硬件仿真,即嵌入式固件仿真技術(shù),成為目前學(xué)術(shù)界的研究熱點和工業(yè)界的首選分析工具[9-12].將嵌入式固件重新部署或重新托管到虛擬環(huán)境可以增加其物理系統(tǒng)上不具備的功能,例如可檢查性、可變性、可復(fù)制性、可擴展性和可處置性.這種虛擬環(huán)境可脫離嵌入式設(shè)備的硬件約束,能夠以任何粒度檢查重新托管的嵌入式固件的執(zhí)行狀態(tài)[13].通俗來講,這種虛擬系統(tǒng)的狀態(tài)是完全可變的處理器狀態(tài),在嵌入式固件執(zhí)行的任何階段都可以修改內(nèi)存,控制非確定性的來源,以便保證分析結(jié)果的可復(fù)制性.重新托管的嵌入式系統(tǒng)可以非常容易地克隆來進行分布式動態(tài)分析,提高漏洞挖掘效率或者與合作者共享分析進程.同時,虛擬系統(tǒng)的可復(fù)制性使得分析者不需要擔(dān)心某些危險操作損害系統(tǒng).因此,在原始物理系統(tǒng)上不可行的模糊測試、符號執(zhí)行等動態(tài)分析技術(shù)變得可行[14].然而,雖然傳統(tǒng)的嵌入式系統(tǒng)仿真研究例如嵌入式Linux 系統(tǒng)仿真已經(jīng)開展多年,但隨著基于微控制器的嵌入設(shè)備廣泛地應(yīng)用,其無法適用于各種專用嵌入式系統(tǒng)設(shè)備,難以應(yīng)對日益增長的物聯(lián)網(wǎng)設(shè)備硬件仿真需求.

        本文檢索了2013—2023 年間的網(wǎng)絡(luò)與系統(tǒng)安全國際四大頂級會議(IEEE S&P,CCS,USENIX Security,NDSS)中嵌入式設(shè)備固件仿真器的相關(guān)工作,從圖1中可以看到,固件仿真器的相關(guān)工作論文數(shù)量總體呈上升趨勢.

        Fig.1 Number of papers related to firmware emulators published in international conferences within 10 years圖1 10 年內(nèi)在國際會議中發(fā)表的與固件仿真器相關(guān)的論文數(shù)量

        在嵌入式設(shè)備安全研究綜述中,大多側(cè)重于安全分析技術(shù)的總結(jié)與應(yīng)用,例如 Wright 等人[15]總結(jié)了嵌入式固件的現(xiàn)狀與挑戰(zhàn),并為固件分析從業(yè)者提供選擇建議;Fasano 等人[14]主要對固件仿真工具進行對比實驗并提出新的發(fā)展方向;Feng 等人[16]和于穎超等人[4]總結(jié)了物聯(lián)網(wǎng)設(shè)備固件上常見的漏洞檢測技術(shù)和安全分析技術(shù).由此可見,這些相關(guān)研究綜述并未側(cè)重固件仿真器.并且,近年來嵌入式設(shè)備仿真技術(shù)發(fā)展迅速,這些綜述大多未包含最新成果,以及未對固件仿真器發(fā)展體系總結(jié).因此,有必要針對嵌入式設(shè)備固件仿真器的研究重新梳理,進一步分析和總結(jié)該領(lǐng)域的工作.

        本文的架構(gòu)框圖如圖2 所示,本文的主要貢獻包括5 個方面:

        Fig.2 Framework diagram of our proposed paper圖2 本文框架圖

        1)本文系統(tǒng)性地介紹了固件仿真器相關(guān)的基礎(chǔ)知識和工作流程.對固件仿真器中常見的系統(tǒng)仿真和固件重新托管進行說明和區(qū)分,幫助讀者初步了解固件仿真器的相關(guān)知識,以便更好地理解各種固件仿真器.

        2)分析回顧了嵌入式設(shè)備固件仿真器的發(fā)展歷史.根據(jù)國際著名安全會議上的相關(guān)工作梳理固件仿真器的發(fā)展歷程與方向,并介紹不同方向的開創(chuàng)性工作和富含重大意義的研究成果.加入了最新的固件仿真器工具并介紹固件仿真器不同方向的發(fā)展體系.

        3)根據(jù)仿真器的主要目標(biāo),將固件仿真器分為指令仿真和外設(shè)仿真2 個研究方向,進一步將外設(shè)仿真研究根據(jù)其主要仿真方式細化為硬件在環(huán)、基于符號執(zhí)行、基于人為假設(shè)、基于模糊測試反饋和基于硬件手冊等,并介紹各種固件仿真器的核心技術(shù)原理.

        4)使用保真度以及應(yīng)對各種挑戰(zhàn)的處理方式對各種嵌入式設(shè)備固件仿真器進行評估和比較,方便讀者更加直觀地認(rèn)識各種固件仿真器的特點.固件仿真器在不同的使用場景下的性能各不相同,本文結(jié)合固件仿真器的不同特性和優(yōu)勢為使用者提供固件仿真器選擇參考.

        5)結(jié)合各種新技術(shù)的發(fā)展和嵌入式設(shè)備固件仿真器的瓶頸,本文介紹了固件仿真器面臨的挑戰(zhàn)和機遇,從閉源二進制固件信息提取與還原、高保真度復(fù)雜設(shè)備外設(shè)仿真模型自動化構(gòu)建、不同設(shè)備固件仿真方案的兼容與融合方案、固件仿真器的可擴展性、基于固件仿真器的動態(tài)分析技術(shù)等方面為固件仿真器的下一步研究提供了方向參考.

        1 嵌入式固件仿真器

        1.1 嵌入式設(shè)備固件結(jié)構(gòu)

        嵌入式設(shè)備固件指設(shè)備上所有軟件代碼的集合,其通常被存儲在只讀存儲或者閃存中.嵌入式設(shè)備固件的格式復(fù)雜多樣,沒有統(tǒng)一的標(biāo)準(zhǔn),并且嵌入式系統(tǒng)中的數(shù)據(jù)和代碼往往交織在一起,執(zhí)行入口也通常為了中斷向量表,例如ARM Cortex-M 架構(gòu)而保存在固件中.如圖3 所示,常見的嵌入式系統(tǒng)包括固件和設(shè)備,系統(tǒng)可分為4 層,分別是硬件層、驅(qū)動層、操作系統(tǒng)層和應(yīng)用層.硬件層是指嵌入式設(shè)備依賴的硬件平臺,常由處理器、存儲器和外設(shè)組成.不同的嵌入式設(shè)備硬件環(huán)境的差異除了處理架構(gòu),更多地體現(xiàn)在外設(shè)種類的差異性.驅(qū)動層通過控制外設(shè)讀寫操作和硬件外設(shè)進行交互.驅(qū)動層代碼大多由設(shè)備廠商提供,包含于板級支持包(BSP)中或者使用開源的硬件抽象層接口(HAL).此外,大多嵌入式設(shè)備會包含嵌入式系統(tǒng),例如嵌入式Linux 和實時操作系統(tǒng)(RTOS)層,負責(zé)應(yīng)用程序的任務(wù)調(diào)度和控制等核心功能,具有內(nèi)核精簡、可配置、與應(yīng)用程序緊密關(guān)聯(lián)等特點.應(yīng)用層包含設(shè)備核心功能的嵌入式應(yīng)用程序、邏輯代碼和算法等.

        Fig.3 Embedded device firmware hierarchy diagram圖3 嵌入式設(shè)備固件層次圖

        1.2 嵌入式設(shè)備固件與外設(shè)交互方式

        嵌入式設(shè)備的核心功能依靠對外設(shè)的控制來實現(xiàn),例如機器人、無人機等.如圖4 所示,外設(shè)可分為片上外設(shè)和片外外設(shè),固件無法直接訪問片外外設(shè),只能通過片上外設(shè)與片外外設(shè)進行交互.交互方式主要是通過4 種方式:1)外設(shè)的硬件寄存器映射到處理器可訪問的內(nèi)存空間(memory mapped I/O,MMIO),并且外設(shè)的狀態(tài)、配置和數(shù)據(jù)都可以通過讀取和寫入特定的內(nèi)存位置來查詢.2)外設(shè)的硬件寄存器不會映射到內(nèi)存空間,而是通過使用指令查詢端口進行訪問.3)外設(shè)在計時器完成、新數(shù)據(jù)到達等情況時,通過觸發(fā)中斷來告知處理器,處理器再進行相應(yīng)的外設(shè)操作處理.4)外設(shè)也可以獨立于處理器和其他外設(shè)直接與主存進行數(shù)據(jù)傳輸,即DMA,該方式通常適用于大數(shù)據(jù)量傳輸.

        Fig.4 Hardware framework diagram of a certain microprocessor圖4 某微控制器的硬件框架圖

        1.3 嵌入式設(shè)備固件分類

        嵌入式設(shè)備功能的復(fù)雜程度決定它們的嵌入式系統(tǒng)的大小,既有定制版本的Linux 等桌面操作系統(tǒng)的大型多處理器系統(tǒng),又有幾KB 代碼的低成本、低功耗微處理器實時操作系統(tǒng).所以我們選擇參考Wright 等人[15]的分類方式,將嵌入式設(shè)備固件按系統(tǒng)類型分為3 類.

        第1 類是基于通用操作系統(tǒng)的嵌入式設(shè)備,主要使用服務(wù)器和桌面系統(tǒng)的通用操作系統(tǒng),包括實時Linux、樹莓派等系統(tǒng).這一類嵌入式設(shè)備的操作系統(tǒng)是傳統(tǒng)計算機操作系統(tǒng)針對嵌入式空間進行的變種,保留了大部分桌面功能,與外設(shè)的交互也是由特定的設(shè)備驅(qū)動負責(zé)的.這一類嵌入式設(shè)備的優(yōu)點是可以直接使用多數(shù)通用計算機系統(tǒng)的仿真工具,例如QEMU[17]等.

        第2 類是基于嵌入式操作系統(tǒng)的嵌入式設(shè)備,通常是商業(yè)物聯(lián)網(wǎng)產(chǎn)品,例如使用μCLinux 和ZephyrOS等系統(tǒng)的嵌入式設(shè)備.區(qū)分第2 類和第1 類的特征在于,第1 類的嵌入式設(shè)備中的系統(tǒng)和應(yīng)用程序可以單獨編譯.第2 類系統(tǒng)通常將操作系統(tǒng)與應(yīng)用程序等編譯為統(tǒng)一固件.第2 類操作系統(tǒng)適用于計算能力較低但實時性較高的嵌入式設(shè)備,例如小型無人機等.此外,如VxWorks 操作系統(tǒng),可以根據(jù)不同配置同時具備第1 類和第2 類的編譯方式和功能特點.需要注意的是,第2 類操作系統(tǒng)的仿真并不能直接使用通用計算機系統(tǒng)的仿真技術(shù),這一類仿真需要重新托管內(nèi)核和用戶空間,并且其內(nèi)核和用戶空間之間分隔的模糊性也給仿真帶來了困難[15].

        第3 類是不具備操作系統(tǒng)抽象的嵌入式設(shè)備,這類嵌入式設(shè)備大多只包含一個輕量級的操作系統(tǒng)庫,此時應(yīng)用程序往往直接訪問硬件,并且靜態(tài)鏈接到單個二進制文件中,如小型傳感器.此類嵌入式設(shè)備不存在操作系統(tǒng)內(nèi)核和應(yīng)用程序代碼之間的邏輯隔離.最近的固件重新托管工作也開始側(cè)重重新托管第3 類操作系統(tǒng).

        如表1 所示,第1 類操作系統(tǒng)功能豐富,內(nèi)存管理系統(tǒng)和文件系統(tǒng)完善,有明確的硬件系統(tǒng)調(diào)用接口,容易托管;第2 類操作系統(tǒng)的功能簡單,驅(qū)動與系統(tǒng)邊界模糊,不一定具備獨立文件系統(tǒng),內(nèi)存管理系統(tǒng)不健全;第3 類操作系統(tǒng)功能更加簡單,不存在內(nèi)存管理系統(tǒng)和文件系統(tǒng),應(yīng)用程序可直接對硬件進行操作.根據(jù)Chen 等人[18]統(tǒng)計的開源固件映像的信息,第1 類固件約占總固件映像的50%,第2 類固件約占總固件映像的8%,第3 類固件約占總固件映像的42%.但需要注意,實際中更多閉源嵌入式設(shè)備,如工控固件和軍用設(shè)備固件使用第2 類、第3 類嵌入式系統(tǒng).

        Table 1 Comparison of Firmware for Different Devices[4]表1 不同設(shè)備固件的比較[4]

        1.4 固件仿真器發(fā)展歷程

        在過去,仿真技術(shù)主要的用途是在硬件生產(chǎn)之前進行軟件開發(fā),從而減少產(chǎn)品開發(fā)時間和提高硬件與軟件間的兼容性.如今,仿真技術(shù)則逐漸成為安全分析和邏輯調(diào)試的流行工具.

        2005 年QEMU[17]架構(gòu)首次實現(xiàn)了多種指令集架構(gòu)跨平臺仿真.QEMU 將整個基本塊轉(zhuǎn)換為主機系統(tǒng)的指令集然后執(zhí)行轉(zhuǎn)換之后的指令,從而實現(xiàn)全系統(tǒng)仿真.QEMU 不需要檢查每個指令之間的中斷,減少了指令轉(zhuǎn)換開銷,并且具備一定程度的外設(shè)仿真.這些優(yōu)點使得QEMU 成為使用最廣泛的指令仿真器之一.特別是2017 年的Unicorn[19]進一步簡化QEMU 的系統(tǒng)仿真功能,只保留其指令仿真部分,同時增加了豐富的內(nèi)存、寄存器和外設(shè)轉(zhuǎn)發(fā)調(diào)試接口.因此,近十年的固件仿真器相關(guān)工作大多在QEMU和Unicorn 仿真器的基礎(chǔ)上進行開發(fā).此外,2019 年美國國家安全局開源了強大的逆向分析工具Ghidra,其包含多架構(gòu)指令仿真器Ghidra Emulator[20].Ghidra Emulator 支持比QEMU 更多的指令集仿真,能夠?qū)⒛嫦蚬こ膛c仿真結(jié)合到同一個環(huán)境中,并允許用戶自行添加新的指令集架構(gòu).

        然而,隨著物聯(lián)網(wǎng)設(shè)備種類的增多,特別是外設(shè)種類的多樣性和復(fù)雜化,無論是QEMU、Unicorn 還是Ghidra Emulator 均不足以支持全系統(tǒng)外設(shè)的仿真,所以近年來的研究更多地關(guān)注嵌入式設(shè)備仿真問題.

        2014 年的AVATAR[21]首次提出了一個具有可擴展外設(shè)仿真、內(nèi)存監(jiān)控等多種功能的接口框架,該框架基于QEMU 將仿真器的執(zhí)行與真實的硬件結(jié)合起來,即將無法仿真的外設(shè)的交互轉(zhuǎn)發(fā)給真實設(shè)備,以此支持嵌入式設(shè)備固件進行全系統(tǒng)動態(tài)分析.AVATAR 也是最早將符號執(zhí)行應(yīng)用于嵌入式設(shè)備固件分析領(lǐng)域的工具,它擁有專門的插件接口對事件進行攔截和轉(zhuǎn)發(fā),通過符號執(zhí)行檢測固件中存在的漏洞.2014 年的PROSPECT[22]和2015 年的SURROGATES[23]與AVATAR 一樣,均采用基于QEMU 的硬件轉(zhuǎn)發(fā)方法來解決缺少外設(shè)仿真的問題.SURROGATES 則是在嵌入式設(shè)備總線和仿真器之間使用了一個低延遲的FPGA 橋接器,橋接器負責(zé)固件與外設(shè)之間的轉(zhuǎn)發(fā)和狀態(tài)傳輸,因此傳輸速度與AVATAR相比有所提升.

        然而,這些“硬件在環(huán)”早期仿真器,由于硬件轉(zhuǎn)發(fā)的存在導(dǎo)致仿真實現(xiàn)效率過低、難以大規(guī)模分析,需要工作人員對嵌入式設(shè)備逐個調(diào)試.2015 年的PANDA[24]是一個基于QEMU 全系統(tǒng)仿真器的開源平臺,它的優(yōu)點是增加了記錄和重放的功能,可以記錄所有的硬件交互,然后在全虛擬化的環(huán)境下進行重放.然而,其并未建立外設(shè)仿真模型,因此當(dāng)重放結(jié)束后仍然無法判斷后續(xù)硬件輸入.在此基礎(chǔ)上,2019 年的Pretender[25]通過使用機器學(xué)習(xí)來學(xué)習(xí)硬件交互記錄進行建模,從而根據(jù)模型實現(xiàn)全系統(tǒng)仿真.然而,Pretender 本身仍然無法擺脫硬件依賴.

        之后研究人員摒棄了效率依舊較低且無法自動化運行的硬件在環(huán)方法,嘗試通過固件的重新托管技術(shù)犧牲掉部分虛擬運行的保真度來解決外設(shè)的仿真問題.2020 年的P2IM[26]首次提出基于外設(shè)交互的通用外設(shè)建模方案,并結(jié)合模糊測試向QEMU 仿真器提供外設(shè)的反饋,以此保證嵌入式設(shè)備固件的虛擬運行.該工具能夠在不使用硬件或外設(shè)的詳細知識的前提下,利用模糊器提供的輸入模擬運行固件.但是P2IM 需要盲猜狀態(tài)寄存器的響應(yīng),搜索范圍過大,難以適用于復(fù)雜的外設(shè)而且會導(dǎo)致崩潰和死機.2021 年的μEmu[27]和Jetset[28]將符號執(zhí)行框架S2E[9]或Angr[29]與固件重新托管技術(shù)結(jié)合來提高固件仿真效率.2021 年的DICE[30]在P2IM 的基礎(chǔ)上增加DMA仿真功能,支持識別并生成DMA 輸入來測試固件中跳過或無法訪問的代碼和狀態(tài),在不需要人工協(xié)助的情況下分析和測試DMA 相關(guān)的代碼.

        為了進一提高外設(shè)仿真模型的保真度,2022 年的最新的SEmu[31]提出了基于硬件描述手冊來自動化構(gòu)建高精準(zhǔn)度外設(shè)仿真模型的方案.SEmu 通過自然語言處理技術(shù)將外設(shè)行為轉(zhuǎn)換為一組結(jié)構(gòu)化的條件規(guī)則,然后為每個外設(shè)建立一個模型.因此,SEmu擁有更好的仿真準(zhǔn)確度,并能夠進行固件代碼合規(guī)性檢查.

        此外,為了進一步提高外設(shè)仿真模型的適用范圍,F(xiàn)uzzware[32]和Ember-IO[33]將部分硬件輸入也作為模糊測試輸入從而擴大模糊測試輸入空間,以此提高模糊測試的代碼覆蓋率,但卻引入了更多的漏報和誤報.

        除了通過外設(shè)仿真實現(xiàn)全系統(tǒng)模擬,還有研究人員通過替換外設(shè)依賴代碼來實現(xiàn)全系統(tǒng)仿真,例如2020 年的HALucinator[34].HALucinator 觀察到嵌入式設(shè)備固件與外設(shè)的交互通常是由硬件抽象層執(zhí)行,所以它使用AVATAR2 和QEMU 來攔截硬件抽象層調(diào)用并進行替換.但AVATAR2 和QEMU 依賴標(biāo)準(zhǔn)驅(qū)動庫并且通常需要一定的人工成本.

        圖5 顯示了從2002 年至今經(jīng)典的嵌入式固件仿真器的研究工作.最初,傳統(tǒng)的固件仿真器的相關(guān)工作大多針對傳統(tǒng)操作系統(tǒng)仿真,例如Linux,或者QEMU,需要大量人工不斷添加新的硬件仿真支持,并不適合如今復(fù)雜多樣的嵌入式設(shè)備和外設(shè).后來,針對復(fù)雜多樣的外設(shè)等挑戰(zhàn),相繼產(chǎn)生了硬件在環(huán)、抽象、基于符號執(zhí)行、基于模糊化、基于規(guī)則等更加先進自動化的嵌入式固件仿真器,不斷優(yōu)化的固件仿真器也提高了嵌入式固件的漏洞挖掘效率,使得嵌入式設(shè)備的安全性得以提升,也促進了動態(tài)分析技術(shù)的發(fā)展.

        Fig.5 Technical implementation relationships between firmware simulators圖5 固件仿真器之間的技術(shù)實現(xiàn)關(guān)系

        1.5 嵌入式固件仿真器工作流程

        仿真和分析一個嵌入式設(shè)備固件,首先需要獲取固件.固件可以從供應(yīng)商網(wǎng)站或Github 等第三方網(wǎng)站下載.當(dāng)固件無法直接下載,或固件屬于不易提取的專屬文件格式時,可以使用網(wǎng)絡(luò)捕獲工具在固件更新期間捕獲網(wǎng)絡(luò)流量,從中提取固件.在獲得固件之后,需要對固件解包以提取固件的關(guān)鍵信息,例如固件的指令集架構(gòu)、固件基址、分析入口點、內(nèi)存布局和控制流圖等.固件解析包常用的工具有Binwalk[39]和BAT[40],F(xiàn)irmadyne[18]和Costin[41]工具均使用Binwalk 完成解包.雖然本文介紹的大多數(shù)固件仿真器默認(rèn)固件的關(guān)鍵信息是已知的,但是固件獲取和固件解包是仿真和分析一個嵌入式固件必不可少的第1 環(huán).

        在獲得固件的關(guān)鍵信息之后,固件仿真器開始對固件進行仿真運行或重新托管.但大多數(shù)固件仿真器并不是完全自動化仿真,此時需要根據(jù)實際情況對固件仿真器進行設(shè)置.例如為新處理器添加支持說明;為硬件在環(huán)的固件仿真器配置外設(shè)交互;給外設(shè)建模,解決固件缺少代碼的問題;設(shè)置功能識別或標(biāo)簽等.手動處理的固件仿真器需要在仿真之前進行部分設(shè)置,然后才能進入固件仿真運行或重新托管階段.在此階段可能會出現(xiàn)運行失敗的問題,可能是寄存器分配錯誤、中斷處理錯誤、計時器未處理、多線程未處理等,此時需要重新設(shè)置固件仿真器或者進入調(diào)試步驟.如果順利解決問題,則固件仿真或重新托管成功,固件仿真器進入下一步驟.

        當(dāng)固件仿真器成功運行之后,我們需要使用模糊測試、控制流分析、污點分析、符號執(zhí)行等固件仿真器支持的動態(tài)分析技術(shù)對固件進行漏洞挖掘.最后,挖掘到的漏洞僅存在于虛擬環(huán)境下運行的固件中.還需要在真實嵌入式設(shè)備中對漏洞進行分析和復(fù)現(xiàn),確保漏洞真實存在.至此,嵌入式固件完整的仿真和分析工作完成.

        1.6 固件仿真專有名詞釋義

        在嵌入式固件的安全分析相關(guān)工作中,經(jīng)常會出現(xiàn)系統(tǒng)仿真(system emulation)、系統(tǒng)模擬(system simulation)和固件重新托管(firmware re-hosting).部分研究人員可能會將這3 類工作混淆,但是這3 類工作是有區(qū)別的,特別是系統(tǒng)仿真和系統(tǒng)模擬之間的差距很大.系統(tǒng)仿真是指通過硬件和指令集仿真實現(xiàn),使嵌入式設(shè)備固件能夠在其他架構(gòu)平臺上執(zhí)行.而系統(tǒng)模擬則只是針對設(shè)備常見的功能進行建模,并非對真實固件的執(zhí)行環(huán)境進行仿真.固件重新托管則是指將固件重新托管到可以用來運行該固件的虛擬環(huán)境中.這個虛擬環(huán)境可以是通過系統(tǒng)仿真的虛擬環(huán)境,也可以是通過替換一些內(nèi)部構(gòu)件對系統(tǒng)進行建模的系統(tǒng)模擬的虛擬執(zhí)行環(huán)境.

        為了挖掘真實固件代碼中的安全問題,本文主要針對圍繞系統(tǒng)仿真或固件重新托管開展的工作進行介紹和總結(jié).

        本文參考 Fasano 等人[14]對專有名詞進行釋義:

        1)虛擬執(zhí)行環(huán)境(virtual execution environment):代碼可以透明執(zhí)行的軟件環(huán)境.

        2)硬件仿真系統(tǒng)(hardware emulation system):一種虛擬環(huán)境,目的是準(zhǔn)確地重新創(chuàng)建1 個或多個特定硬件的特征,即上文提到的仿真器.

        3)固件托管(firmware rehosting):為給定的嵌入式系統(tǒng)構(gòu)件重組嵌入式系統(tǒng)來完成指定的分析任務(wù)的過程.托管的過程可能包含對固件的修改,其可以通過系統(tǒng)仿真來實現(xiàn)或者通過硬件依賴代碼的替換來完成.

        本文把具有外設(shè)接口和指令仿真功能的QEMU、Unicorn 等工具看作基礎(chǔ)仿真平臺,其他工具基于基礎(chǔ)仿真平臺進行改造或升級,有些工具依舊保持了全系統(tǒng)仿真,有些工具只保留了嵌入式系統(tǒng)的文件系統(tǒng),有些工具則是實現(xiàn)了固件重新托管,但是本文將這些工具統(tǒng)稱為嵌入式設(shè)備固件仿真器.

        1.7 嵌入式固件仿真器的基本要求

        根據(jù) Fasano 等人[14]的描述,仿真的層級可以從指令級到處理器內(nèi)核,再到片上系統(tǒng)甚至包含到連接嵌入式系統(tǒng)的物理系統(tǒng),范圍很大,各層級保真度要求也不相同.本文中重點關(guān)注固件仿真中針對安全分析的基本要求.

        例如,對于模糊測試來說,其要求測試對象具有可探測性,必須支持基本塊級別的指令仿真,并且能夠收集路徑和基本塊反饋[42].此外,為了保證程序可持續(xù)執(zhí)行以及接受和處理測試程序,模糊測試[43]也需要一定程度的外設(shè)仿真,否則固件遇到硬件操作將出現(xiàn)異常行為.而污點分析需要檢測對象的可檢查性來識別保留輸入影響固件的敏感部分的執(zhí)行路徑,以更好地發(fā)現(xiàn)漏洞,所以其對數(shù)據(jù)保真度要求更多,需要更好的指令和外設(shè)仿真能力.總而言之,安全分析領(lǐng)域下的固件仿真器的基本要求為:基本塊級別的指令仿真和一定程度的外設(shè)仿真.

        實際上,當(dāng)前的固件仿真器一般針對特定安全分析目標(biāo),犧牲一部分的準(zhǔn)確性來提高自動化程度或者適用性.具體的仿真要求不同,其針對不同的測試對象的優(yōu)勢往往不同.雖然最新的研究開始嘗試大規(guī)模地自動化全系統(tǒng)仿真,但是該領(lǐng)域還有待發(fā)展和研究.因此,本文后續(xù)將進一步總結(jié)不同固件仿真器的優(yōu)勢和特點,以便固件仿真器的使用者根據(jù)不同用途選擇合適的固件仿真器.

        2 固件仿真器分類

        實現(xiàn)全系統(tǒng)的固件仿真主要需要解決2 大技術(shù)難點:一是處理器架構(gòu)仿真,包括指令譯碼和處理器基礎(chǔ)架構(gòu)仿真;二是固件依賴的周圍硬件設(shè)備仿真,即外設(shè)仿真.根據(jù)不同的固件仿真器側(cè)重點不同,本節(jié)分別介紹基本的處理器架構(gòu)仿真工具和通過替換函數(shù)解決硬件依賴的固件仿真工具,以及重點介紹各種不同方案的外設(shè)仿真器.

        2.1 以處理器架構(gòu)仿真為主的基礎(chǔ)固件仿真器

        無論是系統(tǒng)仿真還是指令仿真均需要以指令仿真為基礎(chǔ).不同處理器的指令集往往不同,所以處理器仿真本質(zhì)是指動態(tài)指令譯碼,即從原始架構(gòu)指令動態(tài)譯碼為待測主機架構(gòu)指令集指令.處理器指令譯碼和基礎(chǔ)的處理器架構(gòu)仿真都是固件仿真的基礎(chǔ).

        常用的基礎(chǔ)架構(gòu)仿真器主要有Simics[44],QEMU[17]和Ghidra Emulator[20].2002 年的仿真器Simics[44]支持Alpha,x86-64,IA-64 ARM,MIPS,MSP430,PowerPC,SPARC-V8 以及x86 等多種架構(gòu)的指令譯碼.并且Simics 提供配置管理、腳本編寫、自動調(diào)試等內(nèi)置功能來幫助構(gòu)建仿真系統(tǒng),并且Simics 允許任何2 條指令間的中斷測試,指令級別具有保真度.在2016 年的DARPA 網(wǎng)絡(luò)大挑戰(zhàn)就是使用Simics 自動審查提交的文件來檢查提交的二進制文件是否符合標(biāo)準(zhǔn).

        2005 年QEMU[17]推出的QEMU 指令譯碼是基于基本塊級別的,它將整個基本塊中的指令轉(zhuǎn)換成中間代碼后再整體轉(zhuǎn)換為目標(biāo)主機架構(gòu)指令代碼執(zhí)行.因此,與Simics 相比,QEMU 不再需要檢查每個指令間的中斷,QEMU 利用執(zhí)行緩存大大減少了譯碼轉(zhuǎn)換開銷,所以QEMU 工作得更快.QEMU 同樣支持IA-32,x86,MIPS,SPARC,ARM,SH4,PowerPC,ETRAX CRIS,MicroBlaze 和RISCV 等多種架構(gòu),還提供部分常見的外設(shè)仿真.此外,Unicorn[19]進一步簡化了QEMU 的系統(tǒng)仿真功能,只保留其指令仿真部分,同時增加豐富的內(nèi)存、寄存器和外設(shè)轉(zhuǎn)發(fā)調(diào)試接口.這使得QEMU 和Unicorn 成為使用最為廣泛的全系統(tǒng)仿真器.如今的嵌入式固件仿真器大多都是在QEMU 和Unicorn 仿真器處理器架構(gòu)的基礎(chǔ)上進行的二次開發(fā).

        2019 年的Ghidra Emulato[20]是美國國家安全局開發(fā)的包含仿真工具的開源軟件逆向工具,它的一大優(yōu)勢便是能夠?qū)⒛嫦蜢o態(tài)分析與指令仿真結(jié)合到同一個環(huán)境之中.并且Ghidra Emulato 支持比QEMU更多的指令集架構(gòu),并且允許用戶自行添加新的指令集架構(gòu).Ghidra Emulator 介于Simics 和QEMU 之間,基于其自定義的子指令級P-Code 完成譯碼,每個譯碼后的機器指令可對應(yīng)多個仿真器子指令,具有子指令級別的保真度.例如,最新的MetaEmu[38]通過Ghidra Emulator 解決車機固件常使用不常見處理器架構(gòu)和自定義指令語言架構(gòu)的難題.MetaEmu 能夠為多個不同處理器指令架構(gòu)的固件統(tǒng)一合成一套仿真環(huán)境,并進行符號執(zhí)行、模糊測試等復(fù)雜的動態(tài)分析.2023 年的Icicle[37]同樣基于Ghidra Emulato r 的P-Code 實現(xiàn)更細粒度的指令插樁,從而支持模糊測試更細粒度的執(zhí)行反饋,如比較指令對比反饋等功能.

        2.2 基于硬件依賴層替換的固件仿真器

        嵌入式設(shè)備不同于通用計算機系統(tǒng),通用計算機系統(tǒng)大多硬件依賴較少,借助通用處理器架構(gòu)仿真器即可實現(xiàn)全虛擬化執(zhí)行.但嵌入式設(shè)備需要解決硬件環(huán)境仿真復(fù)雜的難題,所以本節(jié)介紹通過識別硬件依賴接口層進行轉(zhuǎn)發(fā)替換,實現(xiàn)固件托管的仿真方案.經(jīng)典的基于硬件依賴層替換的固件仿真器有Firmadyne[18],F(xiàn)irmAE[45],ECMO[46],HALucinator[34]和PMCU[47].

        傳統(tǒng)的嵌入式Linux 系統(tǒng)的第1 類固件有著明確的系統(tǒng)調(diào)用接口,例如Firmadyne,F(xiàn)irmAE 和ECMO 都是通過借助Linux 的系統(tǒng)調(diào)用接口實現(xiàn)常用的硬件轉(zhuǎn)發(fā)替換仿真.但基于微控制器的固件缺乏標(biāo)準(zhǔn)的系統(tǒng)調(diào)用接口,其驅(qū)動行為更加多樣化和碎片化.因此,2020 年HALucinator 提出通過對固件的硬件抽象層接口進行替換轉(zhuǎn)發(fā),可以適用于大部分裸機第3 類固件.HALucinator 使用Avatar2 和Unicorn 攔截固件對硬件抽象接口層的函數(shù)調(diào)用,將函數(shù)調(diào)用替換為軟件實現(xiàn)的相似仿真功能.但其不僅需要使用庫匹配工具識別嵌入式設(shè)備固件中的硬件抽象層函數(shù),還需要人為編寫替換函數(shù),適用性受限且人工成本較高.

        2021 年的PMCU[47]則直接使用嵌入式操作系統(tǒng)中的便攜式操作系統(tǒng)接口POSIX 來實現(xiàn)轉(zhuǎn)發(fā)替換.并且PMCU 直接將硬件架構(gòu)指令依賴相關(guān)代碼也進行了替換,從而實現(xiàn)將嵌入式源代碼直接編譯為目標(biāo)主機代碼,直接省去了指令譯碼的過程,大幅度提高了代碼執(zhí)行效率.但需要注意的是PMCU 需要依賴源代碼進行插樁,其替換在本質(zhì)上并不屬于固件仿真器而是屬于嵌入式系統(tǒng)源碼仿真器.

        基于替換的固件托管仿真方案,雖然相比原始外設(shè)仿真效率有所提高,保真度適中,但是存在人工成本較高且無法測試被替換代碼的安全性問題.

        2.3 外設(shè)仿真

        由于物聯(lián)網(wǎng)的快速發(fā)展,物聯(lián)網(wǎng)設(shè)備外設(shè)種類的多樣性成為現(xiàn)今固件全系統(tǒng)仿真工具的最主要技術(shù)挑戰(zhàn).如何自動化構(gòu)建針對一個物聯(lián)網(wǎng)設(shè)備高保真度的外設(shè)仿真模型是一項復(fù)雜且艱巨的任務(wù).針對每個外設(shè)人工建模的方案顯然無法滿足自動化大規(guī)模的測試需求.因此,現(xiàn)階段學(xué)術(shù)界通常以犧牲準(zhǔn)確度和適用范圍為代價,自動化構(gòu)建各種外設(shè)仿真模型.

        根據(jù)不同固件仿真器在處理外設(shè)建模時的應(yīng)對方法不同,本節(jié)將固件仿真器分為硬件在環(huán)的固件仿真器、基于人為假設(shè)的仿真模型、基于符號執(zhí)行的外設(shè)仿真模型、基于模糊測試的外設(shè)仿真模型和基于硬件手冊的外設(shè)仿真模型這5 類.

        2.3.1 硬件在環(huán)的固件仿真器

        硬件在環(huán)HITL(hardware in the loop)是指使用固件仿真器執(zhí)行指令,但是當(dāng)需要對外設(shè)進行訪問時,固件仿真器將其對外設(shè)的讀寫訪問轉(zhuǎn)發(fā)到實際硬件中進行交互.簡而言之,硬件在環(huán)技術(shù)是將對硬件和外設(shè)的訪問轉(zhuǎn)發(fā)到實際物理設(shè)備上,來實現(xiàn)高保真度的模擬執(zhí)行.經(jīng)典的使用硬件在環(huán)方法的固件仿真器有AVATAR[21],PROSPECT[22],SURROGATES[23],和Inception[48].

        如上所述,2014 年的AVATAR[21]和AVATAR2[35]是最早基于QEMU 設(shè)計的可實現(xiàn)硬件轉(zhuǎn)發(fā)的框架,其可轉(zhuǎn)發(fā)QEMU 對外設(shè)的讀寫訪問到真實硬件,同樣也可以兼容Angr[29]等動態(tài)程序分析工具.PROSPECT[22]通過與嵌入式設(shè)備進行正常的總線連接來轉(zhuǎn)發(fā)仿真器與外設(shè)和硬件之間的交互.與AVATAR 相比,PROSPECT 這種通過總線連接來轉(zhuǎn)發(fā)交互的方法提高了仿真器與真實物理硬件之間交互的效率,提高了仿真速度.SURROGATES[23]則是在主機PCI Express總線和被測系統(tǒng)之間使用了一個定制的低延遲的FPGA 橋.通過定制的低延遲FPGA 橋,SURROGATES的系統(tǒng)與外設(shè)硬件之間的轉(zhuǎn)發(fā)和狀態(tài)傳輸速度更快、更穩(wěn)定,但同時提高了硬件成本.“硬件在環(huán)”本質(zhì)上并不是實現(xiàn)外設(shè)仿真,而是通過轉(zhuǎn)發(fā)硬件操作到真實設(shè)備而繞過外設(shè)仿真這一難題.因此,理論上其可以實現(xiàn)更準(zhǔn)確的仿真執(zhí)行效果,但受限于真實設(shè)備硬件的效率,硬件在環(huán)的固件仿真器難以支持模糊測試自動化測試,效率過低.盡管從AVATAR 到Inception 不斷優(yōu)化硬件在環(huán)的固件仿真器運行效率,但是依舊不能滿足如今大規(guī)模固件自動動態(tài)分析的需要.

        2019 年P(guān)retender[25]試圖將硬件在環(huán)和外設(shè)仿真分開.即首先記錄固件在硬件在環(huán)時真實的硬件反饋,然后利用機器學(xué)習(xí)來生成不同的外設(shè)仿真模型從而支持全系統(tǒng)固件仿真.然而Pretender 仍然需要硬件依賴,在實際固件分析中分析人員難以獲得原始的真實硬件設(shè)備.

        2.3.2 基于人為假設(shè)的外設(shè)仿真模型

        2020 年的P2IM[26]提出無硬件依賴的自動化外設(shè)仿真模型構(gòu)建方法,其根據(jù)固件對外設(shè)的使用模式來推測外設(shè)寄存器類型,繼而利用更加不同的外設(shè)寄存器類別來建立不同的外設(shè)反饋模型.實踐證明,該方法可以成功重新托管外設(shè)簡單的嵌入式設(shè)備固件.但由于其人為假設(shè)無法處理外設(shè),特別是針對復(fù)雜的初始化判斷時,其寄存器類別常常推斷錯誤,成功率較低.2021 年的DICE[30]采取了類似的方法,通過對DMA 訪問模式建模來自動化構(gòu)建DMA 仿真模型,從而使固件仿真能夠支持基于DMA 的外設(shè).但其同樣受限于過多的人為假設(shè),無法適用于以太網(wǎng)和USB 等復(fù)雜設(shè)備的DMA 傳輸模擬.

        2.3.3 基于符號執(zhí)行的外設(shè)仿真模型

        基于符號執(zhí)行的外設(shè)仿真模型是指利用符號執(zhí)行探索可達的路徑范圍,從而生成對應(yīng)的路徑約束來作為外設(shè)反饋模擬,代表性工作包括Laelaps[36],μEmu[27],Jetset[28].

        2020 年,Laelasps[36]首先提出結(jié)合符號執(zhí)行來進行外設(shè)反饋模擬的方案,即遇到未知外設(shè)讀取則返回符號值,然后利用符號執(zhí)行探索一定范圍內(nèi)的后續(xù)程序執(zhí)行路徑,從而確定合理的執(zhí)行路徑.但這種仿真一直需要符號執(zhí)行在執(zhí)行循環(huán)中,實際開銷成本過大,特別是具體執(zhí)行和符號執(zhí)行切換時.

        2021 年的μEmu[27]提出通過觀察程序的異常狀態(tài)從而自動化判斷合理的執(zhí)行路徑,從而將其外設(shè)建模與模擬執(zhí)行分離.即首先利用符號執(zhí)行的學(xué)習(xí)合理路徑約束生成外設(shè)反饋知識庫,進而在仿真執(zhí)行時利用此靜態(tài)知識庫即可,無需持續(xù)切換符號執(zhí)行狀態(tài),避免了LaeLaps 的性能開銷問題,并且其相比人為假設(shè)模型準(zhǔn)確度更高.與μEmu 相似的基于路徑約束條件來實現(xiàn)固件重新托管的工作是2021 年的Jetset[28],Jetset 使用符號執(zhí)行自動推斷嵌入式設(shè)備固件對其目標(biāo)硬件的期望行為,并使用這種推斷的行為來合成可用于在模擬器中執(zhí)行固件的目標(biāo)硬件設(shè)備的模型,從而實現(xiàn)固件的重新托管,它通過基于增量控制流圖構(gòu)建的搜索策略引導(dǎo)符號執(zhí)行保證固件運行.

        2.3.4 基于模糊測試反饋的外設(shè)仿真模型

        雖然基于符號執(zhí)行生成的路徑約束可以支持構(gòu)建外設(shè)仿真模型,但2022 年的Fuzzware[32]指出基于符號執(zhí)行路徑約束的仿真方案會過度限制可達路徑,導(dǎo)致模糊測試時難以覆蓋到一些特定程序執(zhí)行路徑.為了提高代碼覆蓋率,F(xiàn)uzzware 提出了結(jié)合模糊測試的外設(shè)反饋方案,即只使用符號執(zhí)行生成粗粒度的外設(shè)反饋約束,而不是直接使用路徑約束的具體值,在模糊測試階段允許輸入各種滿足約束的變異值,從而探索更多的可達路徑.此方案相比于之前的基于符號執(zhí)行路徑約束的外設(shè)仿真模型,其在模糊測試階段代碼覆蓋率提高更大,但也引入了更多的誤報和漏報.

        2023 年的Ember-IO[33]進一步提出了全模糊測試反饋方案,即不生成外設(shè)仿真模型,所有硬件輸入均通過模糊測試生成,只是利用代碼覆蓋率更大的模糊測試值進行緩存來提高模糊測試的執(zhí)行速度,從而進一步快速提高代碼覆蓋率,但與此同時引入了更多的誤報和漏報.

        2.3.5 硬件手冊的外設(shè)仿真模型構(gòu)建

        2022 年的SEmu[31]指出之前的通用外設(shè)仿真模型無論是基于假設(shè)、符號執(zhí)行或者是模糊測試均缺少真實外設(shè)的硬件邏輯如中斷觸發(fā)時機,因此只能實現(xiàn)近似的外設(shè)仿真,應(yīng)用模糊測試時的誤報和漏洞較高.為了進一步提高外設(shè)仿真模型的自動化,SEmu 利用自然語言處理技術(shù)將人類語言中的外設(shè)行為描述語句轉(zhuǎn)換為一組結(jié)構(gòu)化條件動作規(guī)則,然后通過運行時正確執(zhí)行和鏈接這些規(guī)則,從而自動為固件執(zhí)行期間訪問的每個外設(shè)動態(tài)建立一個外設(shè)模型,以此在簡單外設(shè)上達到接近100%的基本塊級別的真機一致性.

        表2 總結(jié)了目前最新的和經(jīng)典的固件仿真器的分類及其核心技術(shù)特點.

        Table 2 Classification and Feature of Common Firmware Emulators表2 常見的固件仿真器類別與特性

        3 固件仿真器保真度評估

        保真度是固件重新托管工作中非常重要的屬性,所以本文決定引入指令執(zhí)行保真度和數(shù)據(jù)內(nèi)存保真度這二維保真度來對各種分析工具進行分類.這種分類下,我們不用詳細區(qū)分DRAM、SRAM、閃存等各種內(nèi)存,只需要簡單區(qū)分內(nèi)部內(nèi)存和外部內(nèi)存即可,其中外部內(nèi)存可以被認(rèn)為是外設(shè).根據(jù)仿真器在仿真嵌入式設(shè)備與真實嵌入式系統(tǒng)運行的匹配程度,本文參考Wright 等人[15]的分類方法,將仿真器的執(zhí)行仿真度分為黑盒執(zhí)行保真度、模塊執(zhí)行保真度、函數(shù)執(zhí)行保真度、基本塊執(zhí)行保真度、指令級執(zhí)行保真度、周期級執(zhí)行保真度、完美執(zhí)行保真度.數(shù)據(jù)和內(nèi)存保真度則是從最粗糙的粒度到最精細的粒度分為黑盒數(shù)據(jù)內(nèi)存保真度、內(nèi)存級數(shù)據(jù)內(nèi)存保真度、寄存器級數(shù)據(jù)內(nèi)存保真度和完美數(shù)據(jù)內(nèi)存保真度.

        保真度的分類是從嵌入式固件的角度看嵌入式設(shè)備固件仿真時的執(zhí)行過程和內(nèi)存與真實的嵌入式硬件設(shè)備的一致程度.執(zhí)行保真度是指嵌入式固件的指令執(zhí)行與真實的嵌入式固件指令執(zhí)行相比,是完全相同的指令執(zhí)行還是只保證外部行為模式相同而不保證指令執(zhí)行的順序和內(nèi)容相同.數(shù)據(jù)內(nèi)存保真度是指嵌入式固件在運行時各個周期的數(shù)據(jù)和內(nèi)存與真實的嵌入式固件相比,是保證各個寄存器中的數(shù)據(jù)與真實嵌入式設(shè)備完全相同還是只保證輸入和輸出的數(shù)據(jù)與嵌入式設(shè)備完全相同.

        3.1 指令執(zhí)行保真度

        黑盒執(zhí)行保真度的仿真器在執(zhí)行層面表現(xiàn)出和真實嵌入式系統(tǒng)運行相同的外部行為模式,但是它的內(nèi)部可能僅執(zhí)行與真實嵌入式系統(tǒng)執(zhí)行的部分指令,或者直接不執(zhí)行與真實嵌入式系統(tǒng)執(zhí)行的任何相似指令.模塊執(zhí)行保真度會提供模塊級別的保真度,例如Firmadyne[18]直接將原始固件的內(nèi)核替換成自己的內(nèi)核,固件的某些模塊未被修改就執(zhí)行,并且其他模塊都被替換,所以這類固件重新托管技術(shù)僅提供模塊級別的執(zhí)行保真度.函數(shù)執(zhí)行保真度是在函數(shù)級別對真實嵌入式系統(tǒng)進行建模,例如HALucinator[34]替換了函數(shù)級別的硬件抽象層調(diào)用,以實現(xiàn)外設(shè)的建模仿真.基本塊執(zhí)行保真度和指令級執(zhí)行保真度分別是指仿真器在基本塊層面和指令級層面精準(zhǔn)地仿真嵌入式系統(tǒng).周期級執(zhí)行保真度則是完全模擬處理器指令周期,這是當(dāng)前仿真器最高級別的執(zhí)行保真度.完美執(zhí)行保真度是指完全一致地仿真真實嵌入式系統(tǒng)的執(zhí)行過程,但當(dāng)前仿真器無法做到.

        3.2 數(shù)據(jù)內(nèi)存保真度

        黑盒數(shù)據(jù)內(nèi)存保真度意味著仿真器只有外部可見的數(shù)據(jù)是和真實嵌入式系統(tǒng)的數(shù)據(jù)相同的,即仿真器只能保證給定與真實嵌入式系統(tǒng)相同的輸入時相同的輸出.內(nèi)存級數(shù)據(jù)內(nèi)存保真度則是指在固件運行的每個執(zhí)行點,仿真器的隨機存取存儲器等內(nèi)部存儲器與真實嵌入式設(shè)備的內(nèi)部存儲器一致.寄存器級數(shù)據(jù)內(nèi)存保真度則是指內(nèi)部存儲器和寄存器在較高的執(zhí)行保真度下都是正確的.而完美數(shù)據(jù)內(nèi)存保真度則是指所有存儲組件在所需的執(zhí)行保真度級別上與給定的真實嵌入式系統(tǒng)完全一致,這是極為困難的,當(dāng)前仿真器無法完美做到該級別數(shù)據(jù)內(nèi)存保真度.

        劃分完具體的執(zhí)行保真度和數(shù)據(jù)內(nèi)存保真度后,本文為每個固件仿真器分配它的執(zhí)行保真度和數(shù)據(jù)內(nèi)存保真度.當(dāng)然,每個固件仿真器都是在權(quán)衡自己需要解決的問題以及固件仿真器的性能和復(fù)雜性等方面之后選擇的特定保真度.因為過高的保真度通常意味著較低的性能和較高的復(fù)雜性,所以根據(jù)保真度對不同固件仿真器進行分類并不是對固件仿真器的好壞進行分類,利用保真度對固件仿真器進行評估的目的是加深對不同固件仿真器間區(qū)別的理解.

        3.3 仿真器保真度總結(jié)分析

        如表3 所示,Simics[44]和Ghidra Emulator[20]屬于指令級仿真,所以其具有指令級執(zhí)行保真度,指令執(zhí)行的特點使得Simics 和Ghidra Emulator 在數(shù)據(jù)內(nèi)存保真度方面具有寄存器級數(shù)據(jù)內(nèi)存保真度,它們屬于保真度極高的指令仿真器.而QEMU[17]只支持基本塊級別的指令譯碼,所以QEMU 的執(zhí)行保真度和數(shù)據(jù)內(nèi)存保真度都略低于Simics 和Ghidra Emulator仿真器,屬于基本塊執(zhí)行保真度和內(nèi)存級數(shù)據(jù)內(nèi)存保真度.AVATAR2[35],Inception[48],SURROGATES[23]和PROSPECT[22]這些硬件在環(huán)仿真器,因為含有真實硬件,所以具有較高的執(zhí)行保真度和數(shù)據(jù)內(nèi)存保真度.

        Table 3 Firmware emulator evaluation表3 固件仿真器評估

        對于替換類型的固件仿真器,如HALucinator[34],其等效替換了硬件仿真功能,因此其雖然無法達到內(nèi)存級別的數(shù)據(jù)一致性,但高于黑盒級別的功能一致性.

        最后,對于通用外設(shè)仿真模型,其大多僅適用于模糊測試,只需保證程序控制流的基本一致性,數(shù)據(jù)層面大多低于黑盒級別,即無法仿真真實的硬件輸出和功能,特別是對基于模糊測試反饋的外設(shè)仿真工具,如Fuzzware[32]等.此外,雖然Pretender[25]使用了硬件記錄來生成仿真模型,其仿真模型的準(zhǔn)確度相比無硬件依賴的方案有所提高,但其本質(zhì)并未理解硬件本身的邏輯,因此其數(shù)據(jù)保真度無法達到內(nèi)存級別.相比之下,SEmu[31]借助硬件手冊,按照真實硬件邏輯生成反饋,其數(shù)據(jù)保真度大多數(shù)情況下可以到達內(nèi)存級別.

        3.4 固件仿真器的選擇

        不同的嵌入式固件仿真器各有優(yōu)劣,使用者的需求不同,適合的固件仿真器也不同.如果單純考慮仿真執(zhí)行的準(zhǔn)確度,可以考慮將實際硬件與仿真結(jié)合使用,那么AVATAR[21],AVATAR2[35],PROSPECT[22],SURROGATES[23],Muench[49]或Inception[48]這些“硬件在環(huán)”的固件仿真器,雖然不具備大規(guī)模自動化分析的能力,但是在人工配置成功后,可提供最接近真實硬件的仿真調(diào)試環(huán)境.

        如果研究人員目標(biāo)僅為支持固件模糊測試并且沒有原始設(shè)備,那么可以選擇通用的外設(shè)仿真器進行測試,例如P2IM[26],μEmu[27],Jetset[28],DICE[30],F(xiàn)uzzware[32],Ember-IO[33],但存在需要人為處理誤報的問題,特別是基于純模糊測試反饋的外設(shè)仿真方案.雖然P2IM,μEmu,Jetset,Pretender 等仿真器的數(shù)據(jù)內(nèi)存保真度有所降低,但是其自動化程度較高,對使用人員的門檻更低.如果需要考慮兼容固件仿真器的保真度,并且不考慮驅(qū)動層面的代碼測試的話,HALucinator 等基于函數(shù)替換的固件托管效率和準(zhǔn)確度更高.如果同時需要測試驅(qū)動代碼,那么最新的SEmu 固件仿真器將是最好的選擇,即使需要一定程度的人工成本來修正自然語言處理的結(jié)果是錯誤的.

        4 固件仿真技術(shù)及其安全應(yīng)用的挑戰(zhàn)與機遇

        雖然近年來業(yè)界對嵌入式設(shè)備固件仿真以及相關(guān)動態(tài)安全分析技術(shù)研究的逐漸興起,并取得了一定的進展,然而由于物聯(lián)網(wǎng)設(shè)備海量、異構(gòu)和閉源等問題,相比于通用計算機軟件,該領(lǐng)域仍處于起步階段,面臨諸多開放性技術(shù)挑戰(zhàn),亟待進一步研究.本節(jié)通過對大量工作的總結(jié)分析,指出現(xiàn)階段固件仿真技術(shù)特別是針對安全的五大關(guān)鍵挑戰(zhàn)討論相應(yīng)的解決方案,并在圖6 中展示五大挑戰(zhàn)對應(yīng)的研究機遇.

        4.1 閉源二進制固件信息的提取與還原

        現(xiàn)階段大多數(shù)固件動態(tài)仿真器均需要開發(fā)者配置固件的基本內(nèi)存布局、起始地址等信息,或者假設(shè)固件為elf 等包含符號表或完整動態(tài)運行所需信息格式的固件.但對于真實設(shè)備中保存的固件,通常為去除符號信息的純二進制固件,其加載內(nèi)存地址、起始運行地址的定義根據(jù)不同的微處理器型號均有所不同.同時,一些設(shè)備的啟動代碼、功能代碼會分別編譯為不同的固件存放在不同的存儲器中.因此,真實設(shè)備固件代碼通常難以被提取完整.待分析的固件代碼會出現(xiàn)不完整和信息嚴(yán)重缺失的情況.此外,由于固件中語義缺失和硬件加載方式的差異,導(dǎo)致固件中包含的文件系統(tǒng)和其他關(guān)鍵代碼難以被提取和分析.

        然而,固件動態(tài)仿真必須依賴?yán)绻碳噶罴軜?gòu)、入口地址、內(nèi)存布局等這些基本信息才可正確運行.

        1)指令集判定與文件系統(tǒng)提取.Binwalk[39]固件解包工具使用capstone 反匯編程序確定固件的指令集等基本信息并提取其包含的文件系統(tǒng).然而其只針對標(biāo)準(zhǔn)格式的Linux 系統(tǒng)的elf 文件,對于更多未知架構(gòu)和系統(tǒng)例如Vxworks 固件等,目前仍然難以實現(xiàn)自動化固件指令集準(zhǔn)確判斷與文件系統(tǒng)還原.

        2)內(nèi)存布局與基址獲取.Firmadyne[18]和Costin等人[41]基于Linux 的工具通過QEMU 定制Linux 內(nèi)核統(tǒng)一的運行基址.然而針對其他系統(tǒng)固件,業(yè)界并沒有提供有效的解決方案.

        3)固件入口點獲取.Ghidra 和IDA[50]針對二進制的固件具有掃描二進制文件的腳本,試圖查找函數(shù)序言指令和函數(shù)返回等信息,生成并分析有向函數(shù)調(diào)用圖,調(diào)用圖中弱連接組件的任何根節(jié)點都可以被視為潛在的入口點.雖然固件通常具有多個有效的入口點,但是也必須從調(diào)用圖技術(shù)返回的多個入口點中識別正確的仿真入口點.Firmadyne[18]和Costin等人[41]依舊是使用替換內(nèi)核的方法成功繞過了尋找入口點.

        這些基礎(chǔ)信息缺失大大限制了現(xiàn)階段學(xué)術(shù)界研發(fā)的動態(tài)分析工具面對真實固件的實用性.如何結(jié)合靜態(tài)分析技術(shù)例如通過對固定編譯變量的分析確定基址等方法實現(xiàn)自動化提取和補充構(gòu)建豐富的固件信息知識庫成為現(xiàn)階段固件仿真器需要首先解決的技術(shù)難題之一.

        4.2 高保真度復(fù)雜設(shè)備外設(shè)仿真模型自動化構(gòu)建

        現(xiàn)階段雖然研究人員提出了多種自動化外設(shè)模型構(gòu)建方案,但面對復(fù)雜的真實嵌入式設(shè)備特別是一些自定義硬件設(shè)備時,這些自動化構(gòu)建技術(shù)的適用性會大大降低,與真實設(shè)備的一致性(保真度)也會大大下降,現(xiàn)階段還有沒有任何一個工具可以準(zhǔn)確自動化構(gòu)建例如USB,WiFi 一類的復(fù)雜外設(shè).基于低保真度外設(shè)仿真模型的固件模擬與動態(tài)分析平臺應(yīng)用的漏洞檢測技術(shù)效率和準(zhǔn)確度均會大大下降.因此,現(xiàn)階段面對復(fù)雜設(shè)備的固件分析仍然以人工輔助的靜態(tài)分析為主,或者是人工定制化外設(shè)仿真模型.如何保證自動化以及脫離真實硬件環(huán)境下復(fù)雜外設(shè)仿真模型的高精度復(fù)現(xiàn)仍然是現(xiàn)階段固件仿真技術(shù)面臨的主要技術(shù)瓶頸.

        4.3 不同設(shè)備固件仿真方案的兼容與融合方案

        隨著固件仿真技術(shù)的發(fā)展,如本文第2 節(jié)介紹這些仿真方案大多面向不同層次,例如基于Linux 系統(tǒng)或硬件抽象層的替換方案和直接面向外設(shè)硬件仿真方案,或面向不同應(yīng)用場景如MetaEmu 主要針對車機汽車控制單元,因此,其適用范圍和適用類型各不相同,導(dǎo)致其針對不同的測試集效果差異大、穩(wěn)定性不足.因此,對于固件模擬器的可擴展性主要分為2個方面,一方面是仿真平臺是否能夠兼容并且容易擴展到其他硬件架構(gòu)的固件中,另一方面是仿真平臺是否能夠支持不同的或者新的動態(tài)分析技術(shù),特別是模糊測試以外的技術(shù),例如符號執(zhí)行、污點分析等.

        4.4 固件仿真器的可擴展性

        現(xiàn)階段的固件仿真器大多僅針對特定架構(gòu)例如ARM Cortex-M 以及特定的動態(tài)分析工具例如模糊測試技術(shù).因此,對于固件仿真器的可擴展性主要可分為2 個方面:1)仿真平臺是否能夠兼容并且容易擴展到其他硬件架構(gòu)的固件中;2)仿真平臺是否能夠支持不同的或者新的動態(tài)分析技術(shù),特別是除了模糊測試以外的例如符號執(zhí)行、污點分析等技術(shù).

        4.5 基于固件仿真器的動態(tài)分析技術(shù)研究

        目前,固件仿真器工作大多僅關(guān)注固件能否成功地在虛擬化環(huán)境下執(zhí)行,從而直接應(yīng)用面向傳統(tǒng)軟件的動態(tài)分析技術(shù)來挖掘嵌入式固件中的漏洞.然而,由于固件自身的特性,專門用于仿真環(huán)境下的固件動態(tài)分析技術(shù)仍然有待進一步研究,其中包括模糊分析、污點分析和符號執(zhí)行[16].

        1)模糊測試.需要針對性地設(shè)計一個可處理具有實時性要求的固件的模糊框架,并探索根據(jù)固件的時間敏感行為來確定測試案例生成的優(yōu)先級的策略;此外需要研究自動推斷和模擬固件特定的輸入格式或協(xié)議的技術(shù),例如創(chuàng)建一個可以處理具有復(fù)雜或定制通信接口(如I2C、SPI 或CAN 總線)的固件的模糊測試解決方案,以提高嵌入式系統(tǒng)模糊測試的適用性.

        2)污點分析.需要研究針對固件中特定數(shù)據(jù)類型、結(jié)構(gòu)或編碼方案的污點傳播策略,以提高嵌入式系統(tǒng)中污點分析的精度和召回率;并且探索使用污點分析自動識別和跟蹤固件中敏感數(shù)據(jù)的技術(shù),如加密密鑰或認(rèn)證憑證等.

        3)符號執(zhí)行.利用選擇性符號執(zhí)行、狀態(tài)合并或協(xié)同執(zhí)行等技術(shù)[51-58],研究為大型或復(fù)雜固件擴展符號執(zhí)行的策略;探索識別并模擬固件運行的特定假設(shè)或約束(如硬件配置、時鐘速率或中斷優(yōu)先級)的方法,以實現(xiàn)更準(zhǔn)確和高效的符號執(zhí)行.

        5 結(jié)束語

        面對日益嚴(yán)峻的嵌入式設(shè)備安全威脅,自動化嵌入設(shè)備漏洞檢測與分析成為迫在眉睫的安全需求.嵌入設(shè)備固件仿真已經(jīng)成為嵌入式設(shè)備固件動態(tài)分析的首選方案.本文對嵌入式設(shè)備固件仿真器進行了全面總結(jié),系統(tǒng)介紹了固件仿真器的發(fā)展歷程以及工作流程基礎(chǔ)信息,幫助讀者更好地理解固件仿真器.然后對固件仿真器進行分類和評估,幫助固件仿真器使用者根據(jù)不同需求來選擇適合的固件仿真器.最后對固件仿真器面臨的挑戰(zhàn)和機遇進行展望.為實現(xiàn)自動高效的安全分析,固件仿真器既需要追求自動化,又需要有較高的保真度.早期的固件仿真器在自動化和保真度方面往往不能兼得,現(xiàn)階段隨著程序分析與人工智能技術(shù)的不斷發(fā)展,同時具備高自動化、高保真度和廣泛適用的固件仿真分析平臺將成為未來研究的熱點.

        作者貢獻聲明:張浩負責(zé)論文的整體撰寫;申珊靛、劉鵬、楊澤霖負責(zé)部分章節(jié)的撰寫;周威、張玉清負責(zé)論文的指導(dǎo)和修改.

        猜你喜歡
        保真度仿真器外設(shè)
        實現(xiàn)超冷原子光晶格中大規(guī)模高保真度原子糾纏對制備
        科學(xué)(2020年4期)2020-01-11 08:10:14
        基于多線程的慣導(dǎo)邏輯仿真器設(shè)計
        計算機工程(2015年4期)2015-07-05 08:28:57
        單模真空場-耦合雙原子系統(tǒng)的量子保真度演化
        Microchip推出具備雙ADC外設(shè)的全新器件,擴展其低成本8位PIC?單片機產(chǎn)品線
        天文測量仿真器模擬星圖精度分析
        級聯(lián)三能級原子與光場相互作用模型中的保真度
        并行片上網(wǎng)絡(luò)仿真器ParaNSim的設(shè)計及性能分析
        密度算子的保真度的向量表示
        基于32位SPARC處理器的JTAG仿真器設(shè)計與實現(xiàn)
        貼身呵護 必不可少的PSP外設(shè)
        а天堂中文地址在线| 91精品国产无码在线观看| 白白白色视频在线观看播放| 开心五月天第四色婷婷| 国产精品亚洲αv天堂无码| 日本一区二区精品88| 最近亚洲精品中文字幕| 国产在线一区二区av| 亚洲乱亚洲乱妇| 国产精品国语对白露脸在线播放| 精品国产你懂的在线观看| 美丽小蜜桃1一3在线观看| 不卡一卡二卡三乱码免费网站 | 青青草国内视频在线观看| 东北熟妇露脸25分钟| 亚洲国产精品毛片av不卡在线| 亚洲丁香婷婷综合久久小说 | 一区二区高清视频免费在线观看| 久久婷婷五月综合色欧美| 在线永久看片免费的视频| 日本丰满少妇高潮呻吟| 噜噜中文字幕一区二区| 国产乱码精品一区二区三区四川人| 亚洲伊人久久一次| 蜜桃色av一区二区三区麻豆| 亚洲av片无码久久五月| 丁香五香天堂网| 久久国产精品老人性| 国产黄久色一区2区三区| 伊人久久大香线蕉av不卡| 91伊人久久| 国产三级c片在线观看| 欧美伦费免费全部午夜最新| 精品香蕉久久久爽爽| 少妇高潮无码自拍| 国产精品狼人久久影院软件介绍 | 无码人妻丰满熟妇区毛片| avtt一区| 女同性恋一区二区三区av| 久久成人国产精品| 国产成人精品日本亚洲语音1|