Android 啟動時驗證(Verified Boot)
Android 的 啟動時驗證(Verified Boot) 是一項關鍵安全機制,用于確保設備啟動過程中加載的所有系統鏡像(如 Bootloader、內核、系統分區)未被篡改,防止惡意軟件植入或 Root 攻擊。其核心思想是 逐級驗證,從硬件信任根開始,直到 Android 系統完全啟動。
參考:Google官方文檔 Android的啟動時驗證
1. Verified Boot 的核心目標
- 完整性檢查:驗證每個啟動階段的固件和系統鏡像是否未被修改。
- 防回滾保護:防止攻擊者降級系統到存在漏洞的舊版本。
- 可信鏈建立:從硬件信任根(Root of Trust)到 Android 系統,形成完整的信任鏈。
2. Verified Boot 的信任鏈(Chain of Trust)
Android 的啟動驗證是一個 逐級驗證 的過程,依賴以下關鍵組件:
啟動階段 | 驗證內容 | 驗證方式 |
---|---|---|
硬件 Root of Trust | 設備唯一密鑰(如熔斷式密鑰) | 由芯片廠商固化,不可更改 |
Bootloader | 驗證 boot.img (內核 + initramfs) | 使用設備密鑰簽名驗證(如 AVB) |
內核 | 驗證 system 、vendor 等分區 | DM-verity(基于哈希的驗證) |
Android 系統 | 檢查系統完整性(如 SELinux、APK 簽名) | 通過 init 和 fs_mgr 實現 |
3. Verified Boot 的關鍵技術
(1)Android Verified Boot (AVB)
- 作用:Google 設計的標準驗證協議,用于 Bootloader 驗證
boot.img
和系統分區。 - 主要機制:
- 分區哈希驗證:
vbmeta
分區存儲各分區的哈希值或簽名。 - 公鑰驗證:Bootloader 使用設備內置公鑰驗證
vbmeta
簽名。 - A/B 無縫更新支持:確保系統更新后仍能通過驗證。
- 分區哈希驗證:
- 三種驗證模式:
enforcing
(嚴格模式):驗證失敗則拒絕啟動。logging
(日志模式):僅記錄驗證錯誤,仍允許啟動(用于調試)。disabled
(禁用模式):不驗證(僅用于開發設備)。
(2)DM-verity
- 作用:在內核層驗證
system
、vendor
等只讀分區的完整性。 - 原理:
- 分區被劃分為多個 4KB 塊,每個塊對應一個哈希值(存儲在
hashtree
中)。 - 啟動時內核驗證哈希樹,運行時按需檢查訪問的塊是否被篡改。
- 分區被劃分為多個 4KB 塊,每個塊對應一個哈希值(存儲在
- 防篡改能力:如果攻擊者修改系統文件,DM-verity 會檢測到哈希不匹配并拒絕讀取。
(3)Bootloader 鎖定(Locked Bootloader)
- 作用:防止未簽名的鏡像被刷入設備(如自定義 ROM)。
- 用戶影響:
- 鎖定狀態:僅允許加載官方簽名鏡像(OEM 密鑰)。
- 解鎖狀態:可刷入第三方鏡像(但會觸發 Verified Boot 失敗警告)。
4. Verified Boot 的啟動流程
-
Power-On → ROM Bootloader
- 芯片內置的只讀代碼(如高通 PBL)加載并驗證 Bootloader(如
abl.elf
)。
- 芯片內置的只讀代碼(如高通 PBL)加載并驗證 Bootloader(如
-
Bootloader →
vbmeta
驗證- Bootloader 讀取
vbmeta
分區,驗證其簽名(使用設備公鑰)。 - 檢查
boot.img
、system
等分區的哈希是否匹配。
- Bootloader 讀取
-
內核啟動 → DM-verity 初始化
- 內核掛載
system
分區時,加載hashtree
并啟用實時驗證。
- 內核掛載
-
Android 啟動 →
init
檢查init
進程驗證關鍵文件(如selinux
策略)的完整性。- 如果使用
fs-verity
(文件級驗證),進一步檢查 APK 簽名。
5. 安全增強:Android 13+ 的改進
- Init Boot 驗證:在
init
階段驗證啟動腳本和關鍵配置文件。 - Fs-verity:文件級完整性驗證(用于 APK、系統配置文件等)。
- 動態分區驗證:支持動態分區的哈希驗證(如
super
分區)。
6. 開發者相關
(1)調試 Verified Boot
-
查看驗證狀態:
adb shell getprop ro.boot.verifiedbootstate
- 返回
green
(驗證通過)、yellow
(解鎖 Bootloader)、red
(驗證失敗)。
- 返回
-
強制進入
logging
模式(僅調試):fastboot set_active other
(2)自定義 ROM 兼容性
- 如果設備啟用 AVB,刷入第三方 ROM 需滿足:
- 使用設備支持的簽名密鑰(如社區簽名密鑰)。
- 或解鎖 Bootloader(但會降低安全性)。
7. 攻擊與防護
已知攻擊方式
- Bootloader 漏洞:利用未修補的漏洞跳過驗證(如 CVE-2022-20452)。
- 物理攻擊:通過 JTAG 或芯片拆解繞過驗證(需高端設備)。
防護措施
- 防回滾(Anti-Rollback):熔斷計數器阻止降級到舊版本。
- 安全芯片(如 Titan M):存儲根密鑰,防止軟件層攻擊。
8. 總結
關鍵點 | 說明 |
---|---|
硬件信任根 | 芯片廠商固化密鑰,確保 Bootloader 可信。 |
AVB(Verified Boot) | Bootloader 驗證 vbmeta ,確保內核和系統分區未被篡改。 |
DM-verity | 內核實時驗證 system 分區的完整性。 |
用戶可見影響 | 解鎖 Bootloader 會觸發警告,部分功能(如銀行應用)可能禁用。 |
Verified Boot 是 Android 設備安全的基石,與 TEE(如 Trusty)、加密(如 FBE)共同構建了從啟動到運行的完整防護體系。