隨著物聯(lián)網(wǎng)設(shè)備的普及,嵌入式安全攻擊也隨之增加。從歷史上看,嵌入式系統(tǒng)工程師忽略了設(shè)備層的安全性,盡管嵌入式設(shè)備的許多領(lǐng)域都容易受到錯(cuò)誤的影響。串行端口、無線電接口,甚至編程/調(diào)試接口都可能被黑客利用。模糊測試是工程師發(fā)現(xiàn)嵌入式設(shè)備弱點(diǎn)的重要場所,應(yīng)考慮用于強(qiáng)化物聯(lián)網(wǎng)設(shè)備接口。
什么是模糊測試?
模糊測試就像神話中的百萬只猴子隨機(jī)打字寫莎士比亞。在實(shí)踐中,小說作品需要許多隨機(jī)組合來產(chǎn)生一個(gè)簡單的短語,但對(duì)于嵌入式系統(tǒng),我們只需要從一個(gè)已知的好句子中更改幾個(gè)字母。
許多商業(yè)和開源工具可用于實(shí)施模糊攻擊。這些工具生成隨機(jī)字節(jié)串,也稱為模糊向量或攻擊向量,并將它們提交到正在測試的接口,跟蹤可能表示錯(cuò)誤的結(jié)果行為。
模糊測試是一個(gè)數(shù)字游戲,但我們不能嘗試無限數(shù)量的可能輸入。相反,我們專注于通過最大化模糊向量提交率、模糊向量的有效性和錯(cuò)誤檢測算法來優(yōu)化測試時(shí)間。
模糊測試概念
由于許多模糊測試工具都是為測試 PC 應(yīng)用程序而設(shè)計(jì)的,因此如果您將嵌入式代碼作為本地編譯的 PC 應(yīng)用程序運(yùn)行,則更容易適應(yīng)它們。在 PC 上運(yùn)行嵌入式代碼會(huì)產(chǎn)生巨大的性能優(yōu)勢,但也有兩個(gè)缺點(diǎn)。首先,PC 微處理器的反應(yīng)與嵌入式微控制器不同。其次,我們必須重新編寫任何涉及硬件的代碼。然而,在實(shí)踐中,在 PC 上運(yùn)行的優(yōu)勢大于劣勢。真正的障礙是移植代碼以在 PC 上本地編譯的困難。
我們?nèi)绾沃滥:蛄亢螘r(shí)觸發(fā)錯(cuò)誤?崩潰很容易發(fā)現(xiàn),但很難識(shí)別導(dǎo)致重置的模糊向量。內(nèi)存溢出錯(cuò)誤或雜散指針寫入(對(duì)黑客最有價(jià)值的錯(cuò)誤類型)幾乎不可能從系統(tǒng)外部辨別出來,因?yàn)樗鼈兺ǔ2粫?huì)導(dǎo)致崩潰或重置。
許多現(xiàn)代編譯器,例如 GCC 和 Clang,都有一個(gè)稱為內(nèi)存清理的功能。這將內(nèi)存塊標(biāo)記為干凈或臟,具體取決于它們是否正在使用,并標(biāo)記任何訪問臟內(nèi)存的嘗試。但是,內(nèi)存清理會(huì)消耗閃存、RAM 和 CPU 周期,使其難以在嵌入式設(shè)備上運(yùn)行。因此,相反,我們可以測試代碼子集,構(gòu)建具有更多資源的設(shè)備版本,或者使用 PC。
測試的有效性可以通過執(zhí)行的代碼量來評(píng)估。在這里,編譯器也可以通過使用面包屑子例程調(diào)用來跟蹤內(nèi)存使用情況。代碼覆蓋率庫為每個(gè)代碼路徑維護(hù)一個(gè)使用值表,在面包屑執(zhí)行時(shí)遞增它們。
然而,對(duì)于嵌入式模糊測試來說,代碼覆蓋率數(shù)字很難解釋,因?yàn)榇蟛糠执a對(duì)于模糊向量來說是不可訪問的;例如,獨(dú)立于接口運(yùn)行的外圍設(shè)備的設(shè)備驅(qū)動(dòng)程序。因此,很難為嵌入式系統(tǒng)定義“完整的代碼覆蓋率”——也許只有 20% 的嵌入式代碼是可訪問的。代碼覆蓋還消耗大量閃存、RAM 和 CPU 周期,并且需要專門的硬件或 PC 目標(biāo)才能運(yùn)行。
錯(cuò)誤報(bào)告
當(dāng)模糊測試發(fā)現(xiàn)導(dǎo)致不良行為的向量時(shí),我們需要詳細(xì)信息。錯(cuò)誤發(fā)生在哪里?調(diào)用堆棧的狀態(tài)是什么?錯(cuò)誤的具體類型是什么?所有這些信息都有助于分類并最終修復(fù)錯(cuò)誤。
錯(cuò)誤分類在模糊測試中至關(guān)重要。新的 fuzz 項(xiàng)目經(jīng)常會(huì)發(fā)現(xiàn)很多 bug,我們需要一種自動(dòng)的方法來確定它們的嚴(yán)重性。此外,模糊錯(cuò)誤往往會(huì)阻止錯(cuò)誤,因?yàn)樗鼈兺ǔ?huì)在代碼路徑中進(jìn)一步掩蓋其他錯(cuò)誤。我們需要快速解決模糊測試期間出現(xiàn)的問題。
嵌入式客戶端不像 PC 那樣愿意透露他們的信息。通常,崩潰只會(huì)導(dǎo)致設(shè)備重置并重新啟動(dòng)。雖然這在現(xiàn)場是需要的,但它會(huì)擦除設(shè)備的狀態(tài),從而難以了解是否發(fā)生了崩潰、發(fā)生的地點(diǎn)或原因,或者所采用的代碼路徑。工程師必須找到一致的再現(xiàn)向量,然后使用調(diào)試器跟蹤不良行為并找到錯(cuò)誤。
在模糊測試中,一個(gè)測試可能會(huì)為幾個(gè)錯(cuò)誤產(chǎn)生數(shù)千個(gè)崩潰向量,給人一種錯(cuò)誤系統(tǒng)的錯(cuò)誤印象。快速確定哪些向量與相同的潛在錯(cuò)誤相關(guān)聯(lián)非常重要。對(duì)于嵌入式設(shè)備,崩潰本身的位置對(duì)于錯(cuò)誤通常是唯一的,通常不需要找到完整的調(diào)用堆棧跟蹤。
連續(xù)模糊測試
由于模糊測試的隨機(jī)性,長時(shí)間運(yùn)行它們會(huì)增加他們發(fā)現(xiàn)問題的機(jī)會(huì)。但是,任何項(xiàng)目計(jì)劃都不能吸收開發(fā)結(jié)束時(shí)冗長的模糊測試周期造成的延遲。
在實(shí)踐中,模糊測試將在發(fā)布過程之后在其自己的分支上開始。任何新發(fā)現(xiàn)的錯(cuò)誤都將在本地分支中修復(fù),以便測試可以繼續(xù),而新錯(cuò)誤不會(huì)阻止額外的錯(cuò)誤發(fā)現(xiàn)。作為發(fā)布周期的一部分,從模糊測試先前版本中發(fā)現(xiàn)的錯(cuò)誤將被評(píng)估以包含在新版本中。最后,應(yīng)該將發(fā)現(xiàn)錯(cuò)誤的模糊向量添加到正常的質(zhì)量保證過程中,以驗(yàn)證修復(fù)并確保這些錯(cuò)誤不會(huì)無意中重新引入代碼中。
我們應(yīng)該在不同場景下對(duì)設(shè)備進(jìn)行模糊測試;例如,如果聯(lián)網(wǎng),設(shè)備對(duì)連接請(qǐng)求的響應(yīng)會(huì)有所不同。在每個(gè)可能的場景上運(yùn)行模糊測試是不切實(shí)際的,但我們可以為每個(gè)可能狀態(tài)的值包括模糊測試。例如,對(duì)每種不同的設(shè)備類型運(yùn)行模糊測試,同時(shí)保持其他變量相同。然后為一個(gè)設(shè)備類型的另一個(gè)變量(例如網(wǎng)絡(luò)連接狀態(tài))運(yùn)行不同的值。
模糊測試架構(gòu)
兩種突出的模糊測試架構(gòu)是定向模糊測試,其中模糊向量由工程師在測試前指定,以及覆蓋引導(dǎo)模糊測試,其中模糊工具從一組初始測試向量開始,并根據(jù)數(shù)據(jù)包的滲透程度自動(dòng)改變它們編碼。
此外,并非所有代碼都可以在 PC 上運(yùn)行,并且為嵌入式應(yīng)用程序開發(fā) PC 模擬器可能是不切實(shí)際的,具體取決于所測試的內(nèi)容。
以下是四種模糊測試架構(gòu)的總結(jié):
嵌入式硬件上的直接接口測試——在嵌入式設(shè)備上運(yùn)行正常的生產(chǎn)映像,并通過接口注入模糊數(shù)據(jù)包
數(shù)據(jù)包(堆棧)注入測試——直接調(diào)用傳入的數(shù)據(jù)包例程,而無需通過無線運(yùn)行接口
使用模擬器進(jìn)行定向模糊測試——使用基于 PC 的模擬技術(shù)開發(fā)和測試嵌入式代碼
使用模擬器進(jìn)行覆蓋引導(dǎo)的模糊測試(如下所示的 Libfuzz)

多個(gè)模糊測試器
在使用調(diào)試接口鎖定和安全啟動(dòng)鎖定嵌入式設(shè)備后,我們需要考慮對(duì)設(shè)備接口進(jìn)行模糊測試。用于保護(hù) Web 服務(wù)器的許多相同工具和概念可以適用于嵌入式設(shè)備。
為工作使用正確的工具。Coverage-guided fuzzing 對(duì)于連續(xù)模糊測試是必要的,但如果您的代碼僅在嵌入式硬件上執(zhí)行,那么定向模糊器可能是提供一定程度的模糊測試覆蓋率的不錯(cuò)選擇。
最后,您應(yīng)該在盡可能多的場景中使用多個(gè)模糊測試器,因?yàn)槊總€(gè)測試器都會(huì)對(duì)設(shè)備進(jìn)行略微不同的測試,從而最大限度地提高覆蓋率,從而提高嵌入式設(shè)備的安全性。
審核編輯:郭婷
-
嵌入式
+關(guān)注
關(guān)注
5210文章
20680瀏覽量
337416 -
物聯(lián)網(wǎng)
+關(guān)注
關(guān)注
2950文章
48147瀏覽量
418878 -
編譯器
+關(guān)注
關(guān)注
1文章
1673瀏覽量
51965
發(fā)布評(píng)論請(qǐng)先 登錄
Microchip ATSHA204A:高安全性硬件認(rèn)證設(shè)備的深度解析
Bug 躲貓貓?信而泰X-NetFuzzer模糊測試,一鍵“照妖鏡”顯形!
請(qǐng)問CW32L052C8T6這種安全性低功耗MCU的安全固件部分怎么實(shí)現(xiàn)?
Lora基站在物聯(lián)網(wǎng)應(yīng)用的重要性
芯源半導(dǎo)體在物聯(lián)網(wǎng)設(shè)備中具體防護(hù)方案
請(qǐng)問如何協(xié)同工作來保障物聯(lián)網(wǎng)設(shè)備固件安全的?
在物聯(lián)網(wǎng)設(shè)備面臨的多種安全威脅中,數(shù)據(jù)傳輸安全威脅和設(shè)備身份安全威脅有何本質(zhì)區(qū)別?
軟包電池測試全指南:性能、安全與可靠性全面解析
學(xué)習(xí)物聯(lián)網(wǎng)可以做什么工作?
有哪些技術(shù)可以提高邊緣計(jì)算設(shè)備的安全性?
物聯(lián)網(wǎng)藍(lán)牙模塊有哪些優(yōu)勢?
物聯(lián)網(wǎng)設(shè)備五大安全認(rèn)證和標(biāo)準(zhǔn)
模糊測試如何加強(qiáng)物聯(lián)網(wǎng)設(shè)備的安全性
評(píng)論