互聯(lián)嵌入式系統(tǒng)在我們的日常生活中變得越來越普遍,也更容易受到攻擊。嵌入式軟件安全測試的現(xiàn)有技術(shù)依賴于源代碼或二進(jìn)制文件。但是,測試二進(jìn)制代碼是檢測漏洞的困難方法,因為源代碼語義會丟失。這使得識別內(nèi)存安全違規(guī)和損壞變得困難。在嵌入式系統(tǒng)中,高級源代碼往往與手寫匯編代碼混合在一起,當(dāng)前基于源代碼的工具無法直接處理這些代碼。
但是,有一個新框架可用,使您能夠?qū)?a href="http://www.zgszdi.cn/soft/data/21-22/" target="_blank">嵌入式系統(tǒng)軟件執(zhí)行系統(tǒng)范圍的安全測試。開源的 Inception 框架引入了嵌入式系統(tǒng)中符號執(zhí)行的新技術(shù)。簡而言之,符號執(zhí)行是一種實現(xiàn)高代碼覆蓋率并在檢測到錯誤時生成測試用例的技術(shù)。我的EURECOM同事Giovanni Camurati和Aurélien Francillon,以及我將在論文中更多地談?wù)揑nception。
Inception背后的動機是幫助開發(fā)人員發(fā)現(xiàn)其連接的嵌入式系統(tǒng)中的漏洞。畢竟,嵌入式軟件中的漏洞可能會產(chǎn)生可怕的后果。例如,用于越獄某些智能手機的引導(dǎo)ROM漏洞無法在軟件中修補,因為引導(dǎo)加載程序在掩碼ROM中是硬編碼的。因此,能夠徹底測試此類低級嵌入式軟件至關(guān)重要。與僅使用二進(jìn)制代碼相比,基于源代碼的測試可以更好地檢測錯誤。但是,高級編程語言 (C/C++) 通常與手寫匯編混合(以執(zhí)行手動優(yōu)化或啟用硬件功能)。在某些情況下,為板級支持包或?qū)S袔齑a提供二進(jìn)制代碼。由于這些原因,測試嵌入式系統(tǒng)軟件需要對所有這些語言的大量支持。
Inception 如何發(fā)現(xiàn)漏洞
初始由三個關(guān)鍵組件組成:
Inception 轉(zhuǎn)換器從高級源代碼、手寫程序集、二進(jìn)制庫和部分處理器硬件行為生成和合并 LLVM 位代碼。
基于 KLEE 的 Inception 符號虛擬機執(zhí)行符號執(zhí)行。它使用多種策略來管理不同級別的內(nèi)存抽象、與外圍設(shè)備的交互和中斷。
Inception Debugger是一個高性能的JTAG調(diào)試器,它將內(nèi)存訪問重定向到真實硬件。
Camurati,F(xiàn)rancillon和我使用53,000個測試驗證了我們的實現(xiàn),這些測試將Inception執(zhí)行與Arm Cortex-M3芯片上的具體執(zhí)行進(jìn)行了比較。在 USENIX 的演講中,我們將討論我們?nèi)绾卧?1624 個合成易受攻擊的程序、4 個真實的開源和工業(yè)應(yīng)用程序以及 20 個演示的基準(zhǔn)上展示 Inception 的優(yōu)勢。在這次檢查中,我們發(fā)現(xiàn)了八個崩潰和兩個以前未知的漏洞,這突出了Inception框架在嵌入式設(shè)備固件測試方面的效果。
在實際的產(chǎn)品開發(fā)方案中,Inception 框架對于商業(yè)引導(dǎo)加載程序非常有用,因為它們具有低級代碼并且經(jīng)常解析不受信任的輸入。當(dāng)真正的硬件尚不可用時,引導(dǎo)加載程序很難測試。我們分析了一個安全引導(dǎo)加載程序,它支持存儲在一次性可編程(OTP)內(nèi)存中的多個引導(dǎo)選項。在特定模式下執(zhí)行時,引導(dǎo)加載程序會填充一個結(jié)構(gòu),其中包含有關(guān)要加載的應(yīng)用程序的信息。結(jié)構(gòu)位置保存在未初始化的SRAM位置(未初始化的指針稱為p_header)。如果無效寫入未觸發(fā)任何其他錯誤,引導(dǎo)加載程序仍可以在start_address時執(zhí)行并成功加載應(yīng)用程序,這使得問題難以在實際硬件上檢測到。它不會在FPGA原型上崩潰,因為SRAM在啟動時初始化為0,而硅片上的情況并非如此。此外,稍后嘗試檢測錯誤(例如在硅片上)將付出高昂的代價。因此,攻擊者可以獲得對p_header值的部分控制權(quán)。我們還在商用芯片的軟件開發(fā)工具包上測試了Inception。硬件原型尚不可用,因此我們將外設(shè)讀取配置為返回不受約束的符號值。Inception 發(fā)現(xiàn)了一個測試用例,其中逐位移位依賴于不受信任的值;該錯誤會導(dǎo)致外圍設(shè)備配置錯誤和意外行為。最后,我們將 Inception 框架應(yīng)用于正在開發(fā)的商業(yè)支付終端。我們 使用 其 FPGA 原型 來 重新 定向 大多數(shù) 外 設(shè) 和 其 中斷。Inception檢測到八個潛在漏洞。
增強嵌入式軟件測試
在嵌入式應(yīng)用程序中,手寫匯編和第三方二進(jìn)制庫的使用相當(dāng)普遍。通常,即使內(nèi)存變得更便宜并且編譯器效率提高,也有必要手動優(yōu)化代碼。程序集還用于直接與一些低級處理器功能交互。但是,這限制了傳統(tǒng)的基于源代碼的測試框架的使用。Inception 框架提供了一種強大的方法,可以在源代碼可用時增強嵌入式軟件測試。
審核編輯:郭婷
-
處理器
+關(guān)注
關(guān)注
68文章
19409瀏覽量
231207 -
嵌入式
+關(guān)注
關(guān)注
5094文章
19178瀏覽量
307732 -
源代碼
+關(guān)注
關(guān)注
96文章
2946瀏覽量
66963
發(fā)布評論請先 登錄
相關(guān)推薦
嵌入式軟件測試的參考書籍有哪些?
什么是嵌入式軟件
基于CodeTEST的嵌入式軟件測試技術(shù)
嵌入式軟件測試參考書籍
![<b class='flag-5'>嵌入式</b><b class='flag-5'>軟件</b><b class='flag-5'>測試</b>參考書籍](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
嵌入式軟件測試研究意義,嵌入式軟件測試的研究
![<b class='flag-5'>嵌入式</b><b class='flag-5'>軟件</b><b class='flag-5'>測試</b>研究意義,<b class='flag-5'>嵌入式</b><b class='flag-5'>軟件</b><b class='flag-5'>測試</b>的研究](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
嵌入式軟件接口怎么測試,嵌入式系統(tǒng)接口測試策略.doc
![<b class='flag-5'>嵌入式</b><b class='flag-5'>軟件</b>接口怎么<b class='flag-5'>測試</b>,<b class='flag-5'>嵌入式</b>系統(tǒng)接口<b class='flag-5'>測試</b>策略.doc](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
評論