GRUB2 中難以修復的漏洞可讓您繞過 UEFI 安全啟動

GRUB8引導程式中已揭露了2個漏洞,這些漏洞允許繞過UEFI安全開機機制並執行未經驗證的程式碼,例如,在引導程式或核心層級執行惡意軟體。

讓我們回想一下,在大多數 Linux 發行版中,為了在 UEFI 安全啟動模式下驗證啟動,會使用一個小的填充層,並由 Microsoft 進行數位簽章。 該層使用自己的憑證驗證 GRUB2,這使得發行版開發人員不必讓每個核心和 GRUB 更新都經過 Microsoft 認證。 GRUB2 中的漏洞可讓您在成功驗證 shim 後、載入作業系統之前的階段執行程式碼,在安全啟動模式處於活動狀態時嵌入信任鏈並獲得對進一步啟動過程的完全控制,包括載入另一個作業系統、修改作業系統組件系統並繞過鎖定保護。

與去年的BootHole 漏洞一樣,更新引導程式不足以阻止該問題,因為攻擊者無論使用什麼作業系統,都可以使用帶有舊的、數位簽署的、易受攻擊的GRUB2 版本的可引導媒體來破壞UEFI 安全開機。 該問題只能透過更新憑證撤銷清單(dbx、UEFI 撤銷清單)來解決,但在這種情況下,Linux 將失去使用舊安裝媒體的能力。

在韌體具有更新的憑證撤銷清單的系統上,只能在 UEFI 安全開機模式下載入 Linux 發行版的更新版本。 發行版需要更新安裝程式、引導程式、核心包、fwupd 韌體和 shim 層,為它們產生新的數位簽章。 使用者將需要更新安裝映像和其他可啟動媒體,並將憑證撤銷清單 (dbx) 載入到 UEFI 韌體中。 在將 dbx 更新到 UEFI 之前,無論作業系統中是否安裝了更新,系統仍然容易受到攻擊。 漏洞的狀態可在以下頁面評估:Ubuntu、SUSE、RHEL、Debian。

為了解決分發吊銷證書時出現的問題,未來計劃使用 SBAT(UEFI Secure Boot Advanced Targeting)機制,GRUB2、shim 和 fwupd 已實現對該機制的支持,並且從下次更新開始用於代替dbxtool 包提供的功能。 SBAT 是與 Microsoft 共同開發的,涉及向 UEFI 元件的可執行檔添加新的元數據,其中包括有關製造商、產品、元件和版本的資訊。 指定的元資料經過數位簽章認證,也可以包含在 UEFI 安全啟動允許或禁止的元件清單中。 因此,SBAT 將允許您在撤銷期間操作元件版本號,而無需重新產生安全啟動金鑰,也無需為核心、shim、grub2 和 fwupd 產生新簽章。

已發現的漏洞:

  • CVE-2020-14372 – 使用GRUB2 中的acpi 命令,本地系統上的特權使用者可以透過將SSDT(輔助系統描述表)放置在/boot/efi 目錄中並更改grub.cfg 中的設定來載入修改後的ACPI 表。 儘管安全啟動模式處於活動狀態,但建議的 SSDT 將由核心執行,並可用於停用阻止 UEFI 安全啟動旁路路徑的鎖定保護。 這樣,攻擊者就可以在不檢查數位簽章的情況下,透過 kexec 機制實作載入其核心模組或執行程式碼。
  • CVE-2020-25632 是 rmmod 命令實現中的釋放後使用記憶體訪問,當嘗試卸載任何模組而不考慮與其關聯的依賴項時,就會發生這種情況。 該漏洞不排除創建可能導致程式碼執行繞過安全啟動驗證的漏洞。
  • CVE-2020-25647 初始化 USB 裝置時呼叫的 grub_usb_device_initialize() 函式中出現越界寫入。 可以透過連接專門準備的 USB 裝置來利用該問題,該裝置產生的參數的大小與為 USB 結構分配的緩衝區的大小不對應。 攻擊者可以透過操縱USB設備來執行未經安全啟動驗證的程式碼。
  • CVE-2020-27749 是 grub_parser_split_cmdline() 函數中的緩衝區溢出,可能是由於在 GRUB2 命令列上指定大於 1 KB 的變數引起的。 該漏洞允許程式碼執行繞過安全啟動。
  • CVE-2020-27779 – cutmem 指令允許攻擊者從記憶體中刪除一系列位址以繞過安全啟動。
  • CVE-2021-3418 - 對 shim_lock 的變更創建了一個額外的向量來利用去年的漏洞 CVE-2020-15705。 透過在 dbx 中安裝用於對 GRUB2 進行簽署的證書,GRUB2 允許直接載入任何內核,而無需驗證簽章。
  • CVE-2021-20225 - 執行具有大量選項的命令時可能會寫入越界資料。
  • CVE-2021-20233 - 使用引號時,由於緩衝區大小計算不正確,可能會導致資料寫入越界。 計算大小時,假設需要三個字元來轉義單引號,而實際上需要四個字元。

來源: opennet.ru

添加評論