按 Enter 到主內容區
:::

TWCERT-電子報

:::

引導程序U-Boot缺乏邊界檢查,開機瞬間即觸發memory corruption

發布日期:
字型大小:
  • 發布單位:TWCERT/CC
  • 更新日期:2019-04-03
  • 點閱次數:751
引導程序U-Boot缺乏邊界檢查,開機瞬間即觸發memory corruption

CVE編號

CVE-2018-18440 CVE-2018-18439

內文

●概述:
由DENX發行的Universal Boot Loader(簡稱U-Boot),係結合C和組合語言所發展之嵌入式設備開機引導程序,U-Boot支援Power PC、ARM、AVR32、MIPS等CPU架構,且具備verified boot功能,此功能合乎電腦工業Secure boot安全標準,能檢查kernel image數位簽章,防禦惡意檔案被載入,經F-Secure首席硬體安全分析師 Andrea Barisani指出,U-Boot忽略檢查載入image檔案大小,即使超過設備RAM,仍直接寫入資料,甚至bootloader專屬記憶體區段亦恐遭覆蓋,因載入時間點發生在verified boot之前,故駭客以惡意image訛詐受害者開機,必直接造成memory corruption,可能引發RCE,此際verified boot生效也是徒然,因為探勘早已得手,目前尚無修補方案,且至少有network或filesystem二種假造image來源,可對U-Boot設備發動入侵,判斷尚有其他探勘途徑,危及所有U-Boot版本。
●編註:
(1)何謂bootloader
對嵌入式設備而言,開機後到作業系統啟動之前,需要一套引導程序,稱作bootloader,bootloader在第1階段、第2階段過程中,進行硬體配置初始化,並載入OS kernel,載入方式有3種:網路啟動、硬碟啟動、Flash啟動,各家bootloader分別支援各種架構的處理器,如本文介紹的Das U-Boot,可搭配Power PC、ARM、AVR32、MIPS、x86、68k等廠CPU,其商業應用現蹤於Chromebooks、Amazon Kindle及多款路由器。
(2)memory corruption
嵌入式設備開機後,U-Boot程式以load指令加載filesystem image,然load指令未對檔案長度檢測,根據變數addr指派之起始位址,直接存放image資料,load完成後,才進行檔案完整性檢查,囿於U-Boot原始設計欠缺可用記憶體檢查機制,若所載入image檔案過大,極可能覆蓋設備上RAM,譬如將129M資料塞入128M記憶體,甚至將改寫bootloader專屬記憶體區段,衍生任意代碼執行,此際就算verified boot功能發現image遭竄改,亦於事無補。
針對癥結提出對策,有人提出以參數bytes定義載入檔案上限,交給load指令即可避免開機過程就發生overflow,但在網路啟動模式則無法防禦,因U-Boot使用Trivial File Transfer Protocol (TFTP),無法以參數限制檔案size,攻擊者分別偽造network或filesystem來源image,誘使受害者運用之則觸發memory corruption,故目前至少二種探勘手段可入侵U-Boot設備。

影響產品

U-Boot 2018.09-rc1以前版本

解決辦法

回頁首