隨著物聯(lián)網(wǎng)設(shè)備的普及,嵌入式安全攻擊也隨之增加。從歷史上看,嵌入式系統(tǒng)工程師忽略了設(shè)備層的安全性,盡管嵌入式設(shè)備的許多領(lǐng)域都容易受到錯(cuò)誤的影響。串行端口、無線電接口,甚至編程/調(diào)試接口都可能被黑客利用。模糊測(cè)試是工程師發(fā)現(xiàn)嵌入式設(shè)備弱點(diǎn)的重要場(chǎng)所,應(yīng)考慮用于強(qiáng)化物聯(lián)網(wǎng)設(shè)備接口。
什么是模糊測(cè)試?
模糊測(cè)試就像神話中的百萬只猴子隨機(jī)打字寫莎士比亞。在實(shí)踐中,小說作品需要許多隨機(jī)組合來產(chǎn)生一個(gè)簡(jiǎn)單的短語,但對(duì)于嵌入式系統(tǒng),我們只需要從一個(gè)已知的好句子中更改幾個(gè)字母。
許多商業(yè)和開源工具可用于實(shí)施模糊攻擊。這些工具生成隨機(jī)字節(jié)串,也稱為模糊向量或攻擊向量,并將它們提交到正在測(cè)試的接口,跟蹤可能表示錯(cuò)誤的結(jié)果行為。
模糊測(cè)試是一個(gè)數(shù)字游戲,但我們不能嘗試無限數(shù)量的可能輸入。相反,我們專注于通過最大化模糊向量提交率、模糊向量的有效性和錯(cuò)誤檢測(cè)算法來優(yōu)化測(cè)試時(shí)間。
模糊測(cè)試概念
由于許多模糊測(cè)試工具都是為測(cè)試 PC 應(yīng)用程序而設(shè)計(jì)的,因此如果您將嵌入式代碼作為本地編譯的 PC 應(yīng)用程序運(yùn)行,則更容易適應(yīng)它們。在 PC 上運(yùn)行嵌入式代碼會(huì)產(chǎn)生巨大的性能優(yōu)勢(shì),但也有兩個(gè)缺點(diǎn)。首先,PC 微處理器的反應(yīng)與嵌入式微控制器不同。其次,我們必須重新編寫任何涉及硬件的代碼。然而,在實(shí)踐中,在 PC 上運(yùn)行的優(yōu)勢(shì)大于劣勢(shì)。真正的障礙是移植代碼以在 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)行。因此,相反,我們可以測(cè)試代碼子集,構(gòu)建具有更多資源的設(shè)備版本,或者使用 PC。
測(cè)試的有效性可以通過執(zhí)行的代碼量來評(píng)估。在這里,編譯器也可以通過使用面包屑子例程調(diào)用來跟蹤內(nèi)存使用情況。代碼覆蓋率庫(kù)為每個(gè)代碼路徑維護(hù)一個(gè)使用值表,在面包屑執(zhí)行時(shí)遞增它們。
然而,對(duì)于嵌入式模糊測(cè)試來說,代碼覆蓋率數(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)模糊測(cè)試發(fā)現(xiàn)導(dǎo)致不良行為的向量時(shí),我們需要詳細(xì)信息。錯(cuò)誤發(fā)生在哪里?調(diào)用堆棧的狀態(tài)是什么?錯(cuò)誤的具體類型是什么?所有這些信息都有助于分類并最終修復(fù)錯(cuò)誤。
錯(cuò)誤分類在模糊測(cè)試中至關(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ò)誤。我們需要快速解決模糊測(cè)試期間出現(xiàn)的問題。
嵌入式客戶端不像 PC 那樣愿意透露他們的信息。通常,崩潰只會(huì)導(dǎo)致設(shè)備重置并重新啟動(dòng)。雖然這在現(xiàn)場(chǎng)是需要的,但它會(huì)擦除設(shè)備的狀態(tài),從而難以了解是否發(fā)生了崩潰、發(fā)生的地點(diǎn)或原因,或者所采用的代碼路徑。工程師必須找到一致的再現(xiàn)向量,然后使用調(diào)試器跟蹤不良行為并找到錯(cuò)誤。
在模糊測(cè)試中,一個(gè)測(cè)試可能會(huì)為幾個(gè)錯(cuò)誤產(chǎn)生數(shù)千個(gè)崩潰向量,給人一種錯(cuò)誤系統(tǒng)的錯(cuò)誤印象。快速確定哪些向量與相同的潛在錯(cuò)誤相關(guān)聯(lián)非常重要。對(duì)于嵌入式設(shè)備,崩潰本身的位置對(duì)于錯(cuò)誤通常是唯一的,通常不需要找到完整的調(diào)用堆棧跟蹤。
連續(xù)模糊測(cè)試
由于模糊測(cè)試的隨機(jī)性,長(zhǎng)時(shí)間運(yùn)行它們會(huì)增加他們發(fā)現(xiàn)問題的機(jī)會(huì)。但是,任何項(xiàng)目計(jì)劃都不能吸收開發(fā)結(jié)束時(shí)冗長(zhǎng)的模糊測(cè)試周期造成的延遲。
在實(shí)踐中,模糊測(cè)試將在發(fā)布過程之后在其自己的分支上開始。任何新發(fā)現(xiàn)的錯(cuò)誤都將在本地分支中修復(fù),以便測(cè)試可以繼續(xù),而新錯(cuò)誤不會(huì)阻止額外的錯(cuò)誤發(fā)現(xiàn)。作為發(fā)布周期的一部分,從模糊測(cè)試先前版本中發(fā)現(xiàn)的錯(cuò)誤將被評(píng)估以包含在新版本中。最后,應(yīng)該將發(fā)現(xiàn)錯(cuò)誤的模糊向量添加到正常的質(zhì)量保證過程中,以驗(yàn)證修復(fù)并確保這些錯(cuò)誤不會(huì)無意中重新引入代碼中。
我們應(yīng)該在不同場(chǎng)景下對(duì)設(shè)備進(jìn)行模糊測(cè)試;例如,如果聯(lián)網(wǎng),設(shè)備對(duì)連接請(qǐng)求的響應(yīng)會(huì)有所不同。在每個(gè)可能的場(chǎng)景上運(yùn)行模糊測(cè)試是不切實(shí)際的,但我們可以為每個(gè)可能狀態(tài)的值包括模糊測(cè)試。例如,對(duì)每種不同的設(shè)備類型運(yùn)行模糊測(cè)試,同時(shí)保持其他變量相同。然后為一個(gè)設(shè)備類型的另一個(gè)變量(例如網(wǎng)絡(luò)連接狀態(tài))運(yùn)行不同的值。
模糊測(cè)試架構(gòu)
兩種突出的模糊測(cè)試架構(gòu)是定向模糊測(cè)試,其中模糊向量由工程師在測(cè)試前指定,以及覆蓋引導(dǎo)模糊測(cè)試,其中模糊工具從一組初始測(cè)試向量開始,并根據(jù)數(shù)據(jù)包的滲透程度自動(dòng)改變它們編碼。
此外,并非所有代碼都可以在 PC 上運(yùn)行,并且為嵌入式應(yīng)用程序開發(fā) PC 模擬器可能是不切實(shí)際的,具體取決于所測(cè)試的內(nèi)容。
以下是四種模糊測(cè)試架構(gòu)的總結(jié):
嵌入式硬件上的直接接口測(cè)試——在嵌入式設(shè)備上運(yùn)行正常的生產(chǎn)映像,并通過接口注入模糊數(shù)據(jù)包
數(shù)據(jù)包(堆棧)注入測(cè)試——直接調(diào)用傳入的數(shù)據(jù)包例程,而無需通過無線運(yùn)行接口
使用模擬器進(jìn)行定向模糊測(cè)試——使用基于 PC 的模擬技術(shù)開發(fā)和測(cè)試嵌入式代碼
使用模擬器進(jìn)行覆蓋引導(dǎo)的模糊測(cè)試(如下所示的 Libfuzz)
多個(gè)模糊測(cè)試器
在使用調(diào)試接口鎖定和安全啟動(dòng)鎖定嵌入式設(shè)備后,我們需要考慮對(duì)設(shè)備接口進(jìn)行模糊測(cè)試。用于保護(hù) Web 服務(wù)器的許多相同工具和概念可以適用于嵌入式設(shè)備。
為工作使用正確的工具。Coverage-guided fuzzing 對(duì)于連續(xù)模糊測(cè)試是必要的,但如果您的代碼僅在嵌入式硬件上執(zhí)行,那么定向模糊器可能是提供一定程度的模糊測(cè)試覆蓋率的不錯(cuò)選擇。
最后,您應(yīng)該在盡可能多的場(chǎng)景中使用多個(gè)模糊測(cè)試器,因?yàn)槊總€(gè)測(cè)試器都會(huì)對(duì)設(shè)備進(jìn)行略微不同的測(cè)試,從而最大限度地提高覆蓋率,從而提高嵌入式設(shè)備的安全性。
審核編輯:郭婷
-
嵌入式
+關(guān)注
關(guān)注
5096文章
19199瀏覽量
308231 -
物聯(lián)網(wǎng)
+關(guān)注
關(guān)注
2914文章
45013瀏覽量
377770 -
編譯器
+關(guān)注
關(guān)注
1文章
1642瀏覽量
49330
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
借助Qorvo QPG6200簡(jiǎn)化物聯(lián)網(wǎng)設(shè)備安全設(shè)計(jì)
![借助Qorvo QPG6200簡(jiǎn)化<b class='flag-5'>物</b><b class='flag-5'>聯(lián)網(wǎng)</b><b class='flag-5'>設(shè)備</b><b class='flag-5'>安全</b>設(shè)計(jì)](https://file1.elecfans.com/web3/M00/05/EA/wKgZPGeGDyaAc7N2AAAorYDNrPk677.png)
物聯(lián)網(wǎng)就業(yè)有哪些高薪崗位?
物聯(lián)網(wǎng)設(shè)備安全性:挑戰(zhàn)和解決方案
![<b class='flag-5'>物</b><b class='flag-5'>聯(lián)網(wǎng)</b><b class='flag-5'>設(shè)備</b><b class='flag-5'>安全性</b>:挑戰(zhàn)和解決方案](https://file1.elecfans.com/web3/M00/05/42/wKgZPGd-L-6APGirAALJyGnHTb0537.png)
電池的安全性測(cè)試項(xiàng)目有哪些?
![電池的<b class='flag-5'>安全性</b><b class='flag-5'>測(cè)試</b>項(xiàng)目有哪些?](https://file1.elecfans.com/web3/M00/01/44/wKgZPGdSWXaAKUfjAABjfIXWbA4979.png)
電池安全性測(cè)試關(guān)鍵:圓柱與軟包電池測(cè)試設(shè)備指南
![電池<b class='flag-5'>安全性</b><b class='flag-5'>測(cè)試</b>關(guān)鍵:圓柱與軟包電池<b class='flag-5'>測(cè)試</b><b class='flag-5'>設(shè)備</b>指南](https://file1.elecfans.com/web3/M00/01/43/wKgZPGdSVMyAYbB3AABfPhFdjEA137.png)
在電氣安裝中通過負(fù)載箱實(shí)現(xiàn)最大效率和安全性
藍(lán)牙AES+RNG如何保障物聯(lián)網(wǎng)信息安全
深圳南柯電子 大功率電源EMC測(cè)試整改實(shí)驗(yàn)室:確保設(shè)備的安全性
![深圳南柯電子 大功率電源EMC<b class='flag-5'>測(cè)試</b>整改實(shí)驗(yàn)室:確保<b class='flag-5'>設(shè)備</b>的<b class='flag-5'>安全性</b>](https://file1.elecfans.com//web1/M00/F3/F3/wKgaoWch1GaABopEAAImDSAxSmM156.jpg)
如何提高物聯(lián)網(wǎng)設(shè)備的互聯(lián)性
如何測(cè)試物聯(lián)網(wǎng)設(shè)備的功耗
![如何<b class='flag-5'>測(cè)試</b><b class='flag-5'>物</b><b class='flag-5'>聯(lián)網(wǎng)</b><b class='flag-5'>設(shè)備</b>的功耗](https://file1.elecfans.com/web2/M00/AB/2E/wKgZomUx2bWAf0USAABJQUnICdg481.png)
利用JTAGLOCK特性增強(qiáng)設(shè)備安全性
![利用JTAGLOCK特性增強(qiáng)<b class='flag-5'>設(shè)備</b><b class='flag-5'>安全性</b>](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
基于物聯(lián)網(wǎng)的設(shè)備管理
![基于<b class='flag-5'>物</b><b class='flag-5'>聯(lián)網(wǎng)</b>的<b class='flag-5'>設(shè)備</b>管理](https://file1.elecfans.com/web2/M00/B6/F7/wKgaomWCnqCAVALtAAAoP02go7w921.png)
開關(guān)電源安全性測(cè)試項(xiàng)目有哪些?如何測(cè)試?
![開關(guān)電源<b class='flag-5'>安全性</b><b class='flag-5'>測(cè)試</b>項(xiàng)目有哪些?如何<b class='flag-5'>測(cè)試</b>?](https://file1.elecfans.com/web2/M00/AD/A8/wKgZomVCE1WAT7X4AAEYhw5Zcc4652.png)
DC電源模塊的安全性能評(píng)估與測(cè)試方法
![DC電源模塊的<b class='flag-5'>安全性</b>能評(píng)估與<b class='flag-5'>測(cè)試</b>方法](https://file1.elecfans.com/web2/M00/BE/B5/wKgZomW17JqAfFvMAAGBz-gmVP8805.png)
如何解決物聯(lián)網(wǎng)應(yīng)用的網(wǎng)絡(luò)安全性議題?
![如何解決<b class='flag-5'>物</b><b class='flag-5'>聯(lián)網(wǎng)</b>應(yīng)用的網(wǎng)絡(luò)<b class='flag-5'>安全性</b>議題?](https://file1.elecfans.com/web2/M00/C1/50/wKgaomXVVT-AXU4DAABER8FdsfE184.png)
評(píng)論