ยืนยันการบูต

การบูตที่ยืนยันแล้วกำหนดให้ต้องยืนยันโค้ดและข้อมูลที่เรียกใช้ได้ทั้งหมดที่เข้ารหัส ซึ่งเป็นส่วนหนึ่งในเวอร์ชัน Android ที่จะบูตก่อนใช้งาน ซึ่งรวมถึงเคอร์เนล (โหลดจากพาร์ติชัน boot), ต้นไม้อุปกรณ์ (โหลดจากพาร์ติชัน dtbo), พาร์ติชัน system, พาร์ติชัน vendor และอื่นๆ

โดยปกติแล้ว พาร์ติชันขนาดเล็ก เช่น boot และ dtbo ที่อ่านเพียงครั้งเดียวจะได้รับการยืนยันโดยการโหลดเนื้อหาทั้งหมดลงในหน่วยความจำ แล้วคำนวณแฮช จากนั้นระบบจะเปรียบเทียบค่าแฮชที่คำนวณนี้กับค่าแฮชที่คาดไว้ หากค่าไม่ตรงกัน Android จะไม่โหลด โปรดดูรายละเอียดเพิ่มเติมที่ขั้นตอนการบูต

พาร์ติชันขนาดใหญ่ที่หน่วยความจําไม่รองรับ (เช่น ระบบไฟล์) อาจใช้ต้นไม้แฮชที่การยืนยันเป็นกระบวนการต่อเนื่องที่เกิดขึ้นขณะที่โหลดข้อมูลลงในหน่วยความจํา ในกรณีนี้ ระบบจะคํานวณแฮชรูทของต้นไม้แฮชระหว่างรันไทม์และตรวจสอบกับค่าแฮชรูทที่คาดหวัง Android มีไดรเวอร์ dm-verity เพื่อยืนยันพาร์ติชันขนาดใหญ่ หากแฮชรูทที่คำนวณแล้วไม่ตรงกับค่าแฮชรูทที่คาดไว้ ระบบจะไม่ใช้ข้อมูลนั้นและ Android จะเข้าสู่สถานะข้อผิดพลาด โปรดดูรายละเอียดเพิ่มเติมที่ dm-verity corruption

โดยปกติแล้ว แฮชที่คาดไว้จะจัดเก็บไว้ที่ส่วนท้ายหรือส่วนต้นของพาร์ติชันที่ยืนยันแล้วแต่ละพาร์ติชัน ในพาร์ติชันเฉพาะ หรือทั้ง 2 อย่าง สิ่งสำคัญคือแฮชเหล่านี้ได้รับการลงนาม (โดยตรงหรือโดยอ้อม) โดยรูทของความน่าเชื่อถือ ตัวอย่างเช่น การใช้งาน AVB รองรับทั้ง 2 แนวทาง โปรดดูรายละเอียดที่การบูตที่ยืนยันแล้วของ Android

การป้องกันการย้อนกลับ

แม้ว่าจะมีกระบวนการอัปเดตที่ปลอดภัยอย่างสมบูรณ์ แต่ช่องโหว่ในเคอร์เนล Android ที่ไม่ถาวรก็อาจติดตั้ง Android เวอร์ชันเก่าที่มีช่องโหว่มากขึ้นด้วยตนเอง รีบูตเป็นเวอร์ชันที่มีช่องโหว่ แล้วใช้ Android เวอร์ชันนั้นเพื่อติดตั้งช่องโหว่ถาวร จากนั้นผู้โจมตีจะเป็นเจ้าของอุปกรณ์อย่างถาวรและทำสิ่งต่างๆ ได้ทั้งหมด รวมถึงปิดใช้การอัปเดต

การป้องกันการโจมตีประเภทนี้เรียกว่าการป้องกันการย้อนกลับ โดยปกติแล้วการป้องกันการย้อนกลับจะใช้พื้นที่เก็บข้อมูลที่ตรวจจับการดัดแปลงได้เพื่อบันทึก Android เวอร์ชันล่าสุดและปฏิเสธการบูต Android หากเวอร์ชันต่ำกว่าเวอร์ชันที่บันทึกไว้ โดยปกติแล้ว ระบบจะติดตามเวอร์ชันตามแต่ละพาร์ติชัน

ดูรายละเอียดเพิ่มเติมเกี่ยวกับวิธีที่ AVB จัดการการป้องกันการย้อนกลับได้ใน AVB README

จัดการข้อผิดพลาดในการยืนยัน

การยืนยันอาจไม่สำเร็จเมื่อบูต (เช่น หากแฮชที่คำนวณในพาร์ติชัน boot ไม่ตรงกับแฮชที่คาดไว้) หรือเมื่อรันไทม์ (เช่น หาก dm-verity พบข้อผิดพลาดในการยืนยันในพาร์ติชัน boot)system หากการยืนยันไม่สำเร็จเมื่อทำการบูต อุปกรณ์จะบูตไม่ได้ และผู้ใช้ปลายทางจะต้องทำตามขั้นตอนต่างๆ เพื่อกู้คืนอุปกรณ์

หากการยืนยันไม่สำเร็จเมื่อรันไทม์ ขั้นตอนจะซับซ้อนขึ้นเล็กน้อย หากอุปกรณ์ใช้ dm-verity ก็ควรกำหนดค่าในโหมด restart ในโหมด restart หากพบข้อผิดพลาดในการยืนยัน ระบบจะรีสตาร์ทอุปกรณ์ทันทีโดยตั้งค่า Flag ที่เฉพาะเจาะจงเพื่อระบุเหตุผล บูตโหลดเดอร์ควรสังเกตเห็น Flag นี้และเปลี่ยน dm-verity ไปใช้โหมดข้อผิดพลาด I/O (eio) และอยู่ในโหมดนี้จนกว่าจะมีการอัปเดตใหม่

เมื่อบูตในโหมด eio อุปกรณ์จะแสดงหน้าจอข้อผิดพลาดเพื่อแจ้งให้ผู้ใช้ทราบว่าตรวจพบความเสียหายและอุปกรณ์อาจทำงานไม่ถูกต้อง หน้าจอจะแสดงจนกว่าผู้ใช้จะปิด ในโหมด eio ไดรเวอร์ dm-verity จะไม่รีสตาร์ทอุปกรณ์หากพบข้อผิดพลาดในการยืนยัน แต่ระบบจะแสดงข้อผิดพลาด EIO แทน และแอปจะต้องจัดการกับข้อผิดพลาดดังกล่าว

เป้าหมายคือเพื่อให้โปรแกรมอัปเดตระบบทำงาน (เพื่อให้ติดตั้งระบบปฏิบัติการใหม่ได้โดยไม่มีข้อผิดพลาดจากการเสียหาย) หรือเพื่อให้ผู้ใช้สามารถดึงข้อมูลออกจากอุปกรณ์ให้ได้มากที่สุด เมื่อติดตั้งระบบปฏิบัติการใหม่แล้ว โปรแกรมโหลดบูตจะตรวจพบระบบปฏิบัติการที่ติดตั้งใหม่และเปลี่ยนกลับไปเป็นโหมด restart