Google致力於提高黑人社區的種族平等。 怎麼看。
本頁面由 Cloud Translation API 翻譯而成。
Switch to English

驗證啟動

經過驗證的啟動需要在使用前以密碼方式驗證作為啟動的Android版本一部分的所有可執行代碼和數據。這包括內核(從boot分區加載),設備樹(從dtbo分區加載), system分區, vendor分區等。

通常僅將一次讀取的小分區(例如bootdtbo加載到內存中,然後計算其哈希值即可進行驗證。然後,將計算出的哈希值與預期哈希值進行比較 。如果該值不匹配,則不會加載Android。有關更多詳細信息,請參見引導流

無法容納在內存中的較大分區(例如文件系統)可能會使用哈希樹,在哈希樹中,驗證是在數據加載到內存時發生的連續過程。在這種情況下,將在運行時計算哈希樹的根哈希,並對照預期的根哈希值進行檢查。 Android包含dm-verity驅動程序以驗證更大的分區。如果在某些時候計算出的根哈希值預期的根哈希值不匹配,則不使用數據,Android進入錯誤狀態。有關更多詳細信息,請參見dm-verity損壞

預期的哈希通常存儲在每個已驗證分區的末尾或開始,專用分區中或兩者中。至關重要的是,這些哈希值是由信任根簽名的(直接或間接)。例如,AVB實現支持兩種方法,有關詳細信息,請參見Android驗證啟動

回滾保護

即使具有完全安全的更新過程,非持久性Android內核漏洞也有可能手動安裝較舊的,更易受攻擊的Android版本,重新啟動到易受攻擊的版本,然後使用該Android版本安裝持久性漏洞。攻擊者從那里永久擁有該設備,並且可以執行任何操作,包括禁用更新。

針對此類攻擊的防護稱為回滾防護 。回滾保護通常是通過使用防篡改存儲來記錄最新版本的Android並在其低於所記錄版本的情況下拒絕啟動Android來實現的。通常按分區跟踪版本。

有關AVB如何處理回滾保護的更多詳細信息,請參見AVB README

處理驗證錯誤

驗證可能在啟動時(例如,如果boot分區上計算出的哈希值與預期的哈希值不匹配)或運行時(例如,dm-verity在system分區上遇到驗證錯誤)失敗。如果啟動時驗證失敗,則設備無法啟動,最終用戶需要執行步驟來恢復設備。

如果在運行時驗證失敗,則流程會更加複雜。如果設備使用dm-verity,則應將其配置為restart模式。在restart模式下,如果遇到驗證錯誤,則會立即通過設置特定標誌以指示原因的方式重新啟動設備。引導加載程序應注意此標誌,並切換dm-verity以使用I / O錯誤( eio )模式,並保持此模式,直到安裝了新更新。

eio模式下啟動時,設備會顯示錯誤屏幕,通知用戶已檢測到損壞,並且設備可能無法正常運行。屏幕顯示直到用戶將其關閉為止。在eio模式下,如果遇到驗證錯誤,dm-verity驅動程序將不會重新啟動設備,而是會返回EIO錯誤,並且應用程序需要處理該錯誤。

目的是運行系統更新程序(以便可以安裝沒有損壞錯誤的新操作系統),或者用戶可以從設備中獲取盡可能多的數據。一旦安裝了新的操作系統,引導加載程序就會注意到新安裝的操作系統,並切換回restart模式。