開源 Zephyr RTOS 和 MCUboot 項(xiàng)目在物聯(lián)網(wǎng)生態(tài)系統(tǒng)中的供應(yīng)商和開發(fā)人員中越來越受歡迎,因?yàn)樗鼈円黄鸢ㄩ_發(fā)適合的成熟應(yīng)用程序所需的所有驅(qū)動程序、庫、堆棧和文件系統(tǒng)微型邊緣設(shè)備。他們是免費(fèi)的也沒有什么壞處。
與任何開源技術(shù)一樣,維護(hù)和改進(jìn) Zephyr 和 MCUboot 代碼庫屬于社區(qū),這在許多人看來等同于提高安全性。事實(shí)上,福布斯最近一篇報(bào)道 Zephyr 項(xiàng)目的文章指出“開源軟件通常被認(rèn)為更安全,因?yàn)槿魏稳硕伎梢詸z查和調(diào)試代碼。 ”
全球最大的安全咨詢公司之一NCC 集團(tuán)最近進(jìn)行了一項(xiàng)獨(dú)立研究檢查,分析了 Zephyr RTOS 和 MCUboot 安全引導(dǎo)加載程序的安全狀況,發(fā)現(xiàn)了更多 26 個(gè)不同嚴(yán)重程度的漏洞。
NCC 研究主管 Jennifer Fernick 與 Embedded Computing Design 就該公司“研究報(bào)告 - Zephyr 和 MCUboot 安全評估”中的發(fā)現(xiàn)進(jìn)行了交談。
在您對 Zephyr RTOS 和 MCUboot 安全引導(dǎo)加載程序的檢查中發(fā)現(xiàn)了哪些嚴(yán)重漏洞,更重要的是,它們對物聯(lián)網(wǎng)系統(tǒng)的安全性有何影響?
FERNICK:本報(bào)告中的研究重點(diǎn)是 Zephyr RTOS 和 MCUboot 引導(dǎo)加載程序,研究人員在其中發(fā)現(xiàn)了 Zephyr 中的 25 個(gè)漏洞和 MCUboot 中的 1 個(gè)漏洞。我們知道 Zephyr RTOS 擁有約 3% 的物聯(lián)網(wǎng)市場份額,并且由于包括英特爾、NXP、Nordic Semiconductor 等許多芯片組制造商的支持,這種影響力正在迅速增長。
關(guān)鍵漏洞都在 Zephyr 網(wǎng)絡(luò)堆棧中,其中包括堆棧緩沖區(qū)溢出攻擊和內(nèi)存損壞漏洞。通過利用這個(gè)特定的緩沖區(qū)溢出,當(dāng)在啟用特定構(gòu)建選項(xiàng)的設(shè)備上接收到惡意 ICMP 數(shù)據(jù)包時(shí),攻擊者可能會導(dǎo)致拒絕服務(wù)或在設(shè)備內(nèi)核中執(zhí)行代碼,而通過利用這個(gè)特定的內(nèi)存損壞漏洞遠(yuǎn)程攻擊者可以發(fā)送帶有格式錯(cuò)誤的標(biāo)頭的 MQTT 數(shù)據(jù)包,以在 Zephyr 內(nèi)核中引發(fā)內(nèi)存損壞,從而可能導(dǎo)致代碼執(zhí)行。
高風(fēng)險(xiǎn)漏洞既是 Zephyr USB 堆棧中的數(shù)據(jù)驗(yàn)證錯(cuò)誤,也包括用于通過 USB 進(jìn)行固件更新的驅(qū)動程序中的全局緩沖區(qū)溢出攻擊,以及 USB 大容量存儲驅(qū)動程序中的任意讀取/限制寫入。通過利用這些 USB 漏洞,對 Zephyr 設(shè)備具有物理訪問權(quán)限的攻擊者可以誘導(dǎo)拒絕服務(wù)或可能在內(nèi)核中實(shí)現(xiàn)代碼執(zhí)行。拒絕服務(wù)漏洞可能意味著部署在遠(yuǎn)程位置的物聯(lián)網(wǎng)設(shè)備可能需要物理訪問設(shè)備以執(zhí)行手動重啟,然后設(shè)備才能再次運(yùn)行,并且內(nèi)核級代碼執(zhí)行允許攻擊者破壞并完全控制設(shè)備,運(yùn)行任意代碼,破壞設(shè)備的功能,
修復(fù)這些 Zephyr 漏洞有多難?讓我們特別關(guān)注 USB 堆棧中的那些?
FERNICK: NCC Group 報(bào)告了 Zephyr USB 堆棧中的五個(gè)漏洞。風(fēng)險(xiǎn)最高的漏洞是USB DFU 模式可以溢出 DFU_Upload 命令中的全局緩沖區(qū)以及 USB 海量存儲驅(qū)動程序中的任意讀取和有限寫入。
USB DFU 模式全局緩沖區(qū)溢出攻擊涉及利用 Zephyr 的 USB DFU 驅(qū)動程序中存在的緩沖區(qū)溢出漏洞,該驅(qū)動程序通常用于通過 USB 進(jìn)行本地固件更新。通過此漏洞,對設(shè)備具有物理訪問權(quán)限的攻擊者至少能夠在設(shè)備內(nèi)引發(fā)拒絕服務(wù),在某些情況下甚至可以在內(nèi)核中執(zhí)行代碼,方法是通過以下方式將惡意負(fù)載插入內(nèi)部閃存USB DFU 接口,然后觸發(fā)全局緩沖區(qū)溢出。但是,應(yīng)該注意的是,這種可利用性取決于特定 Zephyr 構(gòu)建的內(nèi)存布局。此問題已得到修復(fù),可以通過對特定輸入變量的大小進(jìn)行基本檢查以減輕緩沖區(qū)溢出來解決。
在研究 USB 海量存儲驅(qū)動程序時(shí),我們的團(tuán)隊(duì)發(fā)現(xiàn) USB 海量存儲驅(qū)動程序(用于使 Zephyr 設(shè)備充當(dāng) USB 存儲驅(qū)動器)與 RAM 存儲之間的交互存在問題大于 RAM 磁盤總大小的地址將導(dǎo)致 USB 驅(qū)動程序出錯(cuò),從而導(dǎo)致惡意磁盤讀取查詢能夠讀取超過全局緩沖區(qū)末尾的內(nèi)存,這可能會泄露內(nèi)核內(nèi)存內(nèi)容并啟用攻擊者在內(nèi)核中獲取代碼執(zhí)行。此問題已得到修復(fù),可以通過對特定輸入變量中的大小進(jìn)行基本檢查來緩解緩沖區(qū)溢出,并確保以不會無意中從生產(chǎn)構(gòu)建中剝離的方式執(zhí)行邊界檢查。
一個(gè)中等風(fēng)險(xiǎn)的漏洞是USB 大容量存儲器內(nèi)存寫入處理程序中大小未對齊的越界寫入。memoryWrite 處理程序中的發(fā)現(xiàn)是,當(dāng) USB 數(shù)據(jù)包和存儲塊大小未對齊時(shí),在從 buf 到頁面的 USB 傳輸數(shù)據(jù)的復(fù)制過程中,頁面數(shù)組可能會被覆蓋,這取決于特定全局變量的布局/順序,可能在有些情況是可以利用的。此問題已得到解決,可以通過增加頁面緩沖區(qū)的大小以滿足某個(gè)最小閾值以及在寫入完成后將任何剩余數(shù)據(jù)移動到緩沖區(qū)的開頭來解決此問題。
另一個(gè)中等風(fēng)險(xiǎn)漏洞是USB 海量存儲驅(qū)動程序?qū)懭牒万?yàn)證處理程序中的整數(shù)下溢。此漏洞與 Zephyr 中的 memoryWrite 和 memoryVerify 函數(shù)有關(guān),其中輸入清理未正確執(zhí)行,導(dǎo)致整數(shù)溢出。此漏洞使攻擊者能夠根據(jù)所選大小值泄漏堆棧內(nèi)存內(nèi)容或破壞全局內(nèi)核內(nèi)存,但僅可用于特定內(nèi)存布局,因?yàn)楣粽卟恢苯涌刂贫褩>彌_區(qū)的必要部分。此問題已以類似于前面討論的其他輸入清理檢查的方式修復(fù)。
最后,一個(gè)低風(fēng)險(xiǎn)漏洞是USB DFU 模式允許讀取主插槽繞過圖像加密。這一發(fā)現(xiàn)意味著,在啟用(可選)USB DFU 模式時(shí),可以通過在啟用 Zephyr USB DFU 和 MCUboot 加密映像功能時(shí)使用上傳命令從主映像插槽中讀取明文固件映像來解密加密固件映像。 這種攻擊需要對設(shè)備進(jìn)行物理訪問。此問題尚未得到解決,但可以通過在 Zephyr 中提供禁用 DFU_Upload 命令的選項(xiàng)(允許讀取固件映像)或簡單地在 MCUboot 文檔中說明繞過固件映像加密是“允許以任何方式轉(zhuǎn)儲內(nèi)部閃存的攻擊向量,”文檔警告說,MCUboot 的威脅模型并未涵蓋這一點(diǎn)。
MCUboot 應(yīng)該能夠覆蓋多少 Zephyr 中的潛在危害,以及在開源安全引導(dǎo)加載程序中發(fā)現(xiàn)的漏洞的影響是什么?
FERNICK:引導(dǎo)鏈實(shí)現(xiàn)的穩(wěn)健性在嵌入式操作系統(tǒng)的安全性中起著重要作用。在 Zephyr 和 MCUboot 的情況下,MCUboot 執(zhí)行大部分啟動時(shí)固件完整性驗(yàn)證檢查,盡管 Zephyr 對運(yùn)行時(shí)執(zhí)行的固件升級保留一些責(zé)任。此外,安全啟動保證所需的芯片配置的某些方面超出了 兩者的范圍 MCUboot 和 Zephyr,而是在制造過程中由設(shè)備 OEM 負(fù)責(zé)。這方面的一些示例包括禁用 JTAG 或 SWD 以防止運(yùn)行時(shí)調(diào)試,或啟用閃存讀取保護(hù)以防止提取設(shè)備機(jī)密。因此,安全引導(dǎo)鏈對于運(yùn)行 Zephyr 或任何其他 RTOS 的嵌入式系統(tǒng)的高度安全保證是必要的,但還不夠。出于這個(gè)原因,來自整個(gè)供應(yīng)鏈的多個(gè)級別的利益相關(guān)者和組件必須承擔(dān)特定的責(zé)任,以確保實(shí)現(xiàn)所需的安全屬性。
MCUboot漏洞是串行啟動過程中對未初始化變量的潛在訪問,意味著由于MCUboot中的輸入處理函數(shù)存在缺陷,該函數(shù)可能會利用未首先初始化的變量,如果該值這個(gè)變量非常大或非常小,它可能會寫入內(nèi)存或整數(shù)下溢/溢出,最終在解碼字節(jié)寫入輸出緩沖區(qū)時(shí)導(dǎo)致內(nèi)存損壞。
那么這對 Zephyr/MCUboot 用戶意味著什么呢?應(yīng)該避免它們嗎?有快速修復(fù)嗎?還有什么?
FERNICK:經(jīng)過初步安全審查后,與內(nèi)部未經(jīng)審查的同類系統(tǒng)相比,用戶對 Zephyr 和 MCUboot 的安全性有了一定程度的信心。但是,我要提醒的是,審查所需的覆蓋范圍優(yōu)先考慮了一些被認(rèn)為具有最高安全風(fēng)險(xiǎn)的系統(tǒng)組件,而其他系統(tǒng)組件則未經(jīng)檢查,因此并不完整。全面的安全審計(jì)需要進(jìn)一步的工作。
研究人員確實(shí)發(fā)現(xiàn)了一些進(jìn)一步的內(nèi)核加固機(jī)會,以及許多不正確的系統(tǒng)調(diào)用驗(yàn)證的證據(jù),即內(nèi)核/用戶隔離在系統(tǒng)范圍內(nèi)不一定是健壯的。
不正確的數(shù)據(jù)驗(yàn)證是不安全代碼中的常見漏洞類型,無論生態(tài)系統(tǒng)如何 - 例如,未能驗(yàn)證用戶生成的輸入數(shù)據(jù)是 SQL 注入攻擊和跨站點(diǎn)腳本的根本原因,這些攻擊無處不在,足以成為其中的一部分OWASP 前十名。當(dāng)然,物聯(lián)網(wǎng)設(shè)備作為一個(gè)類別往往以經(jīng)常包含更多漏洞而聞名,這些漏洞通常會在其他類型的系統(tǒng)中看到,包括但當(dāng)然不限于數(shù)據(jù)驗(yàn)證漏洞。
一般來說,當(dāng)嵌入式設(shè)備和用于構(gòu)建物聯(lián)網(wǎng)設(shè)備的相關(guān)組件的設(shè)計(jì)者和制造商認(rèn)真對待安全性時(shí),物聯(lián)網(wǎng)設(shè)備的用戶會更加安全,例如擁有漏洞披露程序、默認(rèn)啟用產(chǎn)品安全性等。設(shè)計(jì)和運(yùn)營承諾,例如最近在 ioXt 承諾中概述的承諾。
Zephyr 項(xiàng)目對所披露的漏洞的反應(yīng)非常好,其中最高風(fēng)險(xiǎn)的組件和其他幾個(gè)已被修補(bǔ),并且 Zephyr 項(xiàng)目似乎熱衷于向他們的用戶宣傳我們的發(fā)現(xiàn)和項(xiàng)目的總體安全性。在我們向 Zephyr 團(tuán)隊(duì)披露我們的發(fā)現(xiàn)后,他們創(chuàng)建了一個(gè) 產(chǎn)品創(chuàng)建者漏洞警報(bào)注冊表, 以幫助他們更好地與在其產(chǎn)品中使用 Zephyr 的客戶建立聯(lián)系。致力于不斷提高安全性以及圍繞減輕物聯(lián)網(wǎng)設(shè)備中的安全風(fēng)險(xiǎn)進(jìn)行透明通信是朝著更安全的世界邁出的重要一步。
審核編輯:郭婷
-
嵌入式
+關(guān)注
關(guān)注
5150文章
19665瀏覽量
317456 -
usb
+關(guān)注
關(guān)注
60文章
8182瀏覽量
272831 -
物聯(lián)網(wǎng)
+關(guān)注
關(guān)注
2930文章
46230瀏覽量
392311
發(fā)布評論請先 登錄
全網(wǎng)最全學(xué)習(xí)Zephyr開發(fā)教程資料匯總-從基礎(chǔ)文檔視頻到上手實(shí)操示例
使用Percepio View免費(fèi)跟蹤工具分析Zephyr應(yīng)用

nRF Connect SDK(NCS)/Zephyr固件升級詳解 – 重點(diǎn)講述MCUboot和藍(lán)牙空中升級

使用Tracealyzer調(diào)試Zephyr中的優(yōu)先級反轉(zhuǎn)

使用RT1060的mcuboot開源sdk示例擦除主插槽中的錯(cuò)誤鏡像怎么解決?
恩智浦分享Zephyr調(diào)試技巧
恩智浦解讀Zephyr log系統(tǒng)的使用 Zephyr的shell和log功能介紹

IAR加入Zephyr項(xiàng)目,強(qiáng)化開源協(xié)作承諾
IAR正式加入Zephyr項(xiàng)目,成為銀牌會員
IAR正式加入Zephyr項(xiàng)目
使用MCUXpresso for VS Code插件開發(fā)Zephyr的hello world

使用MCUXPresso插件開發(fā)Zephyr
深入解析Zephyr RTOS的技術(shù)細(xì)節(jié)

堆棧和內(nèi)存的基本知識

評論