引導程序U-Boot缺乏邊界檢查,開機瞬間即觸發memory corruption
- 發布單位:TWCERT/CC
- 更新日期:2019-04-03
- 點閱次數:751
CVE編號
內文
●概述:
由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設備。
影響產品
解決辦法
相關連結
- https://www.cybersecurity-help.cz/vdb/SB2018110702
- https://github.com/inversepath/usbarmory/blob/master/software/secure_boot/Security_Advisory-Ref_IPVR
- https://www.bleepingcomputer.com/news/security/u-boots-trusted-boot-validation-bypassed/
- https://docs.microsoft.com/en-us/windows-hardware/design/device-experiences/oem-secure-boot
- https://firmwaresecurity.com/2018/11/02/cve-2018-18440-and-cve-2018-18439-u-boot-boundary-checks/
- https://lists.denx.de/pipermail/u-boot/2018-June/330487.html
- https://zh.wikipedia.org/wiki/Das_U-Boot
- http://www.denx.de/wiki/U-Boot/
- https://seclists.org/oss-sec/2018/q4/125
- https://www.securityorb.com/vulnerability/u-boot-verified-boot-bypass-vulnerabilities-cve-2018-18439
- https://blog.xuite.net/tzeng015/twblog/113272847-6.1++Bootloader
- https://www.ossystems.com.br/images/u-boot-logo-2735e590.png