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

使用Percepio View免費跟蹤工具分析Zephyr應用

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

使用Tracealyzer調試Zephyr中的優先級反轉

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

IAR加入Zephyr項目,強化開源協作承諾
IAR正式加入Zephyr項目,成為銀牌會員
IAR正式加入Zephyr項目
使用MCUXpresso for VS Code插件開發Zephyr的hello world

使用MCUXPresso插件開發Zephyr
深入解析Zephyr RTOS的技術細節

評論