Android系統的安全問題 - Android的啟動時驗證

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)
內核驗證 systemvendor 等分區DM-verity(基于哈希的驗證)
Android 系統檢查系統完整性(如 SELinux、APK 簽名)通過 initfs_mgr 實現

3. Verified Boot 的關鍵技術

(1)Android Verified Boot (AVB)

  • 作用:Google 設計的標準驗證協議,用于 Bootloader 驗證 boot.img 和系統分區。
  • 主要機制
    • 分區哈希驗證vbmeta 分區存儲各分區的哈希值或簽名。
    • 公鑰驗證:Bootloader 使用設備內置公鑰驗證 vbmeta 簽名。
    • A/B 無縫更新支持:確保系統更新后仍能通過驗證。
  • 三種驗證模式
    • enforcing(嚴格模式):驗證失敗則拒絕啟動。
    • logging(日志模式):僅記錄驗證錯誤,仍允許啟動(用于調試)。
    • disabled(禁用模式):不驗證(僅用于開發設備)。

(2)DM-verity

  • 作用:在內核層驗證 systemvendor 等只讀分區的完整性。
  • 原理
    • 分區被劃分為多個 4KB 塊,每個塊對應一個哈希值(存儲在 hashtree 中)。
    • 啟動時內核驗證哈希樹,運行時按需檢查訪問的塊是否被篡改。
  • 防篡改能力:如果攻擊者修改系統文件,DM-verity 會檢測到哈希不匹配并拒絕讀取。

(3)Bootloader 鎖定(Locked Bootloader)

  • 作用:防止未簽名的鏡像被刷入設備(如自定義 ROM)。
  • 用戶影響
    • 鎖定狀態:僅允許加載官方簽名鏡像(OEM 密鑰)。
    • 解鎖狀態:可刷入第三方鏡像(但會觸發 Verified Boot 失敗警告)。

4. Verified Boot 的啟動流程

  1. Power-On → ROM Bootloader

    • 芯片內置的只讀代碼(如高通 PBL)加載并驗證 Bootloader(如 abl.elf)。
  2. Bootloader → vbmeta 驗證

    • Bootloader 讀取 vbmeta 分區,驗證其簽名(使用設備公鑰)。
    • 檢查 boot.imgsystem 等分區的哈希是否匹配。
  3. 內核啟動 → DM-verity 初始化

    • 內核掛載 system 分區時,加載 hashtree 并啟用實時驗證。
  4. 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)共同構建了從啟動到運行的完整防護體系。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/75770.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/75770.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/75770.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【操作系統】(四)體系結構

(一)大內核與微內核 把橘色部分劃分到內核中的操作系統屬于大內核,不把橘色劃到內核中的操作系統屬于微內核 大內核與微內核的具體區別: (二)計算機的層次結構 (三)操作系統內核非內…

Kotlin 協程官方文檔知識匯總(一)

1、協程基礎 Kotlin 是一門僅在標準庫中提供最基本底層 API 以便其他庫能夠利用協程的語言。與許多其他具有類似功能的語言不同,async 與 await 在 Kotlin 中并不是關鍵字,甚至都不是標準庫的一部分。此外,Kotlin 的掛起函數概念為異步操作提…

MySQL 的 JSON 查詢

MySQL 的 JSON 路徑格式 MySQL 使用特定的 JSON 路徑表達式語法來導航和提取 JSON 文檔中的數據 基本結構 MySQL 中的 JSON 路徑遵循以下通用格式 $[路徑組件]路徑組件詳解 | 操作符 | 描述 | 示例 | | ----------- | --------- | ----------…

Wi-SUN技術,強勢賦能智慧城市構筑海量IoT網絡節點

在智慧城市領域中,當一個智慧路燈項目因信號盲區而被迫增設數百個網關時,當一個傳感器網絡因入網設備數量爆增而導致系統通信失效時,當一個智慧交通系統因基站故障而導致交通癱瘓時,星型網絡拓撲與蜂窩網絡拓撲在構建廣覆蓋與高節…

Leetcode13-羅馬數字轉整數

題目鏈接&#xff1a;13. 羅馬數字轉整數 - 力扣&#xff08;LeetCode&#xff09; 如同上一題&#xff0c;直接用暴力法破解&#xff0c;簡單好理解 int romanToInt(char* s) {int len strlen(s);int res 0;for(int i 0; i < len; i) {switch(s[i]) {case M:res 1000…

Linux系統加固筆記

檢查口令為空的賬戶 判斷依據&#xff1a;存在則不符合 特殊的shell a./bin/false:將用戶的shell設置為/bin/false&#xff0c;用戶會無法登錄&#xff0c;并且不會有任何提示信息b./sbib/nologin&#xff1a;nologin會禮貌的向用戶發送一條消息&#xff0c;并且拒絕用戶登錄…

23種設計模式-責任鏈(Chain of Responsibility)設計模式

責任鏈設計模式 &#x1f6a9;什么是責任鏈設計模式&#xff1f;&#x1f6a9;責任鏈設計模式的特點&#x1f6a9;責任鏈設計模式的結構&#x1f6a9;責任鏈設計模式的優缺點&#x1f6a9;責任鏈設計模式的Java實現&#x1f6a9;代碼總結&#x1f6a9;總結 &#x1f6a9;什么是…

【宇宙回響】從Canvas到MySQL:飛機大戰的全棧交響曲【附演示視頻與源碼】

?? 這是星際大戰系列的第三篇,感謝一路以來支持和關注這個項目的每一位朋友! ?? 文章力求嚴謹,但難免有疏漏之處,歡迎各位朋友指出,讓我們一起在交流中進步。 ?? 項目代碼、文檔和相關資源都可以免費獲取,希望能幫助到更多對游戲開發感興趣的朋友。 ?? 如果您有任…

MyBatis-Plus(Ⅵ)插件

目錄 一、分頁插件 1.添加配置類 2.在測試類測試 結果 二、xml實現分頁的自定義 1.UserMapper中定義接口方法 2.創建UserMapper.xml文件 3.在測試類測試 結果 三、樂觀鎖 1.場景 2.樂觀鎖與悲觀鎖 3.模擬修改沖突 數據庫中添加商品表 添加數據 添加實體類 添加map…

火山引擎云上實戰: DeepSeek R1 大模型(全尺寸)

本文將介紹兩種在火山引擎云上部署 DeepSeek-R1 全尺寸模型服務的方案&#xff0c;涵蓋大模型推理服務的 Terraform 一鍵部署、容器化部署、資源彈性伸縮和模型可觀測。 來源 | 火山引擎云基礎 在 AI 大模型日新月異的當下&#xff0c;企業在使用大模型時往往面臨著數據隱私保…

vue遺漏的知識點(動態組件.)

----動態組件&#xff08;vue2vue3通用&#xff09; <component :is"..."> 的作用 <component> 是 Vue 的內置組件&#xff0c;用于動態渲染其他組件。:is 屬性 用于指定要渲染的組件。它的值可以是&#xff1a; 組件的名稱&#xff08;字符串&#xf…

工作流引擎Flowable介紹及SpringBoot整合使用實例

Flowable簡介 Flowable 是一個輕量級的業務流程管理&#xff08;BPM&#xff09;和工作流引擎&#xff0c;基于 Activiti 項目發展而來&#xff0c;專注于提供高性能、可擴展的工作流解決方案。它主要用于企業級應用中的流程自動化、任務管理和審批流等場景。 Flowable 的核心…

【uni-app】引用公共組件

目錄 一、建立公共組件 1.1新建vue文件 1.2編寫公共文件代碼 1.3使用 注意事項 一、建立公共組件 1.1新建vue文件 在公共組件文件目錄下新建所需要的功能文件 1.2編寫公共文件代碼 按需求寫對應功能的代碼 1.3使用 在需要使用的文件下引用公共組件 注意事項 想要使用s…

STL中vector模擬實現

vector各個接口函數 //構造函數 vector() vector(size_t n,const T& valT()) vector(int n,const T& val T()) //拷貝構造函數 vector(const vector<T>& v) //迭代器版本的 vector(inputiterator first, inputiterator end) //賦值運算符重載 vector<T&…

DML 數據操縱語言學習筆記

一、DML 核心概念體系 1.1 語言定位與邊界 DML&#xff08;Data Manipulation Language&#xff09;作為 SQL 三大核心語言之一&#xff0c;專注于數據行級操作&#xff0c;區別于 DDL&#xff08;結構定義&#xff09;和 DCL&#xff08;權限控制&#xff09;。其核心指令包…

springboot的跨域是什么?遇到跨域問題如何解決?

在Spring Boot中&#xff0c;跨域是指當瀏覽器中的前端應用&#xff08;如運行在某個域名和端口下的前端頁面&#xff09;請求后端接口時&#xff0c;如果后端接口所在的域名、端口或協議與前端應用不一致&#xff0c;瀏覽器會阻止這種跨域請求。這是由于瀏覽器的同源策略&…

嘯叫抑制(AFS)從算法仿真到工程源碼實現-第八節-系統搭建

一、概述 系統分為錄音模塊、數據處理模塊、播音模塊。錄音模塊和播音模塊使用alsa庫進行讀寫數據。各模塊為獨立進程處理&#xff0c;模塊之間使用命名管道進行數據的傳輸。數據處理模塊我們使用基于頻域的自適應濾波去嘯叫算法。 二、工程實現 2.1 系統流程圖 2.2 錄音模塊…

HTML——什么是塊級元素,什么是內聯元素,有何區別

在 HTML 中&#xff0c;塊級元素&#xff08;Block-level element&#xff09;和內聯元素&#xff08;Inline element&#xff09;是兩種不同類型元素&#xff0c;它們在頁面布局和樣式應用方面有不同的行為和特性。 塊級元素&#xff08;Block-level element&#xff09; 塊級…

01 設計模式和設計原則

類設計原則&#xff1a; 單一職責原則&#xff08;Single Responsibility Principle&#xff0c;SRP&#xff09;&#xff1a;實現類要職責單一開閉原則&#xff08;Open Close Principle&#xff0c;OCP&#xff09;&#xff1a;對擴展開放&#xff0c;對修改關閉里氏替換原則…

【踩坑日記】springboot 打包后實現類無法找到

試過了所有改什么目錄 依賴 clean都以失敗告終 最后將實現類的文件名從Impl改成impl宣布成功 記得使用idea自帶的重構