การบูตที่ยืนยันแล้วจำเป็นต้องมีการตรวจสอบรหัสปฏิบัติการและข้อมูลแบบเข้ารหัสทั้งหมดที่เป็นส่วนหนึ่งของเวอร์ชัน Android ที่กำลังบูทก่อนที่จะใช้งาน ซึ่งรวมถึงเคอร์เนล (โหลดจากพาร์ติชัน boot
ระบบ), โครงสร้างอุปกรณ์ (โหลดจากพาร์ติชัน dtbo
), พาร์ติชัน system
, พาร์ติชัน vendor
และอื่นๆ
พาร์ติชันขนาดเล็ก เช่น boot
และ dtbo
ที่อ่านได้เพียงครั้งเดียว โดยทั่วไปจะตรวจสอบโดยการโหลดเนื้อหาทั้งหมดลงในหน่วยความจำ แล้วคำนวณแฮชของพาร์ติชัน ค่าแฮชที่คำนวณได้นี้จะถูกเปรียบเทียบกับ ค่าแฮชที่คาดหวัง หากค่าไม่ตรงกัน Android จะไม่โหลด สำหรับรายละเอียดเพิ่มเติม โปรดดูที่ โฟลว์การบูต
พาร์ติชันขนาดใหญ่กว่าที่ไม่พอดีกับหน่วยความจำ (เช่น ระบบไฟล์) อาจใช้โครงสร้างแฮชที่การตรวจสอบเป็นกระบวนการต่อเนื่องที่เกิดขึ้นเมื่อมีการโหลดข้อมูลลงในหน่วยความจำ ในกรณีนี้ แฮชรูทของทรีแฮชจะถูกคำนวณในระหว่างรันไทม์ และตรวจสอบกับ ค่าแฮชรูทที่คาดไว้ Android มี ไดรเวอร์ dm-verity เพื่อตรวจสอบพาร์ติชันที่ใหญ่กว่า หาก ณ จุดใดจุดหนึ่ง แฮชรูทที่คำนวณไม่ตรงกับ ค่าแฮชรูตที่คาดไว้ ระบบ จะไม่ใช้ข้อมูลและ Android จะเข้าสู่สถานะข้อผิดพลาด สำหรับรายละเอียดเพิ่มเติม โปรดดูที่ ความเสียหายของ dm-verity
โดยทั่วไป แฮชที่คาดหวัง จะถูกเก็บไว้ที่ส่วนท้ายหรือจุดเริ่มต้นของแต่ละพาร์ติชันที่ได้รับการตรวจสอบ ในพาร์ติชันเฉพาะ หรือทั้งสองอย่าง สิ่งสำคัญที่สุดคือแฮชเหล่านี้ได้รับการลงนาม (ไม่ว่าทางตรงหรือทางอ้อม) โดยรากฐานของความไว้วางใจ ตามตัวอย่าง การใช้งาน AVB รองรับทั้งสองวิธี โปรดดูรายละเอียดที่ Android Verified Boot
การป้องกันการย้อนกลับ
แม้ว่ากระบวนการอัปเดตจะมีความปลอดภัยอย่างสมบูรณ์ ก็เป็นไปได้ที่เคอร์เนล Exploit ของ Android ที่ไม่ถาวรจะติดตั้ง Android เวอร์ชันเก่าและมีความเสี่ยงมากกว่าด้วยตนเอง รีบูทเป็นเวอร์ชันที่มีช่องโหว่ จากนั้นใช้เวอร์ชัน Android นั้นเพื่อติดตั้งช่องโหว่ถาวร จากนั้นผู้โจมตีจะเป็นเจ้าของอุปกรณ์อย่างถาวรและสามารถทำอะไรก็ได้ รวมถึงการปิดใช้งานการอัปเดตด้วย
การป้องกันการโจมตีประเภทนี้เรียกว่า Rollback Protection โดยทั่วไปการป้องกันการย้อนกลับจะดำเนินการโดยใช้พื้นที่เก็บข้อมูลที่ชัดเจนเพื่อบันทึก Android เวอร์ชันล่าสุด และปฏิเสธที่จะบูต Android หากต่ำกว่าเวอร์ชันที่บันทึกไว้ โดยทั่วไปแล้วเวอร์ชันต่างๆ จะถูกติดตามเป็นรายพาร์ติชั่น
สำหรับรายละเอียดเพิ่มเติมเกี่ยวกับวิธีที่ AVB จัดการกับการป้องกันการย้อนกลับ โปรดดูที่ AVB README
การจัดการข้อผิดพลาดในการตรวจสอบ
การยืนยันอาจล้มเหลวในเวลาบูต (เช่น หากแฮชที่คำนวณได้บนพาร์ boot
สำหรับเริ่มระบบไม่ตรงกับแฮชที่คาดไว้) หรือขณะรันไทม์ (เช่น หาก dm-verity พบข้อผิดพลาดในการตรวจสอบบนพาร์ติชัน system
) หากการตรวจสอบล้มเหลวในเวลาบูต อุปกรณ์จะไม่สามารถบู๊ตได้ และผู้ใช้จะต้องทำตามขั้นตอนต่างๆ เพื่อกู้คืนอุปกรณ์
หากการตรวจสอบล้มเหลวในขณะดำเนินการ ขั้นตอนก็จะซับซ้อนขึ้นเล็กน้อย หากอุปกรณ์ใช้ dm-verity ควรกำหนดค่าในโหมด restart
ในโหมด restart
หากพบข้อผิดพลาดในการตรวจสอบ อุปกรณ์จะรีสตาร์ททันทีโดยตั้งค่าสถานะเฉพาะเพื่อระบุเหตุผล ตัวโหลดการบูตควรสังเกตเห็นแฟล็กนี้และสลับ dm-verity เพื่อใช้โหมดข้อผิดพลาด I/O ( eio
) และอยู่ในโหมดนี้จนกว่าจะมีการติดตั้งการอัปเดตใหม่
เมื่อบูตในโหมด eio
อุปกรณ์จะแสดงหน้าจอข้อผิดพลาดเพื่อแจ้งให้ผู้ใช้ทราบว่าตรวจพบความเสียหายและอุปกรณ์อาจทำงานไม่ถูกต้อง หน้าจอจะแสดงจนกระทั่งผู้ใช้ปิดมัน ในโหมด eio
ไดรเวอร์ dm-verity จะไม่รีสตาร์ทอุปกรณ์หากพบข้อผิดพลาดในการตรวจสอบ แต่จะส่งคืนข้อผิดพลาด EIO แทน และแอปพลิเคชันจำเป็นต้องจัดการกับข้อผิดพลาด
จุดประสงค์คือตัวอัปเดตระบบจะทำงาน (เพื่อให้สามารถติดตั้งระบบปฏิบัติการใหม่ที่ไม่มีข้อผิดพลาดเสียหายได้) หรือผู้ใช้สามารถดึงข้อมูลออกจากอุปกรณ์ได้มากที่สุดเท่าที่จะเป็นไปได้ เมื่อติดตั้งระบบปฏิบัติการใหม่แล้ว ตัวโหลดการบูตจะสังเกตเห็นระบบปฏิบัติการที่ติดตั้งใหม่และสลับกลับไปเป็นโหมด restart