ล็อกและปลดล็อก Bootloader

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

เข้าสู่ Bootloader

คุณต้องอยู่ในโหมด Bootloader จึงจะออกคำสั่ง fastboot ได้ วิธีหนึ่งในการดำเนินการนี้คือการส่งคำสั่ง adb adb reboot bootloader โทรศัพท์บางรุ่นยังอนุญาตให้คุณรีบูตเข้าสู่ Bootloader ได้ด้วยการกดปุ่มผสม (โดยทั่วไปคือปุ่มลดระดับเสียง) ขณะบูตอุปกรณ์

ปลดล็อก Bootloader

เมื่ออยู่ในโหมด Bootloader แล้ว ให้เรียกใช้คำสั่ง fastboot flashing unlock ในอุปกรณ์เพื่อปลดล็อก Bootloader และเปิดใช้การแฟลชพาร์ติชันอีกครั้ง หลังจากตั้งค่าแล้ว โหมดปลดล็อกจะยังคงอยู่แม้จะรีบูต

อุปกรณ์ควรปฏิเสธคำสั่ง fastboot flashing unlock เว้นแต่จะตั้งค่า get_unlock_ability เป็น 1 หากตั้งค่าเป็น 0 ผู้ใช้ต้องบูตไปที่หน้าจอหลัก เปิดเมนู การตั้งค่า > ระบบ > ตัวเลือกสำหรับนักพัฒนาแอป และเปิดใช้ตัวเลือกการปลดล็อก OEM (ซึ่งจะตั้งค่า get_unlock_ability เป็น 1) หลังจากตั้งค่าแล้ว โหมดนี้จะยังคงอยู่แม้จะรีบูตและรีเซ็ตข้อมูลเป็นค่าเริ่มต้น

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

ระบบควรรีเซ็ต RAM ทั้งหมดที่ยังไม่ได้เขียนทับในระหว่างกระบวนการ fastboot flashing unlock มาตรการนี้จะป้องกันการโจมตีที่อ่านเนื้อหา RAM ที่เหลือจากการบูตครั้งก่อน ในทำนองเดียวกัน อุปกรณ์ที่ปลดล็อกแล้วควร ล้าง RAM ทุกครั้งที่บูต (เว้นแต่จะทำให้เกิดความล่าช้าที่ยอมรับไม่ได้) แต่ ควรปล่อยให้ภูมิภาคที่ใช้สำหรับ ramoops ของเคอร์เนล

ล็อก Bootloader

หากต้องการล็อก Bootloader และรีเซ็ตอุปกรณ์ ให้เรียกใช้คำสั่ง fastboot flashing lock ในอุปกรณ์ อุปกรณ์ที่จำหน่ายปลีกควรจัดส่งในสถานะล็อก (โดย get_unlock_ability แสดงผลเป็น 0) เพื่อให้แน่ใจว่าผู้โจมตีจะไม่สามารถบุกรุกอุปกรณ์ได้ด้วยการติดตั้งระบบหรืออิมเมจบูทใหม่

ตั้งค่าพร็อพเพอร์ตี้การล็อกและการปลดล็อก

ควรตั้งค่าพร็อพเพอร์ตี้ ro.oem_unlock_supported ในเวลาบิลด์โดยพิจารณาว่าอุปกรณ์รองรับการปลดล็อกการแฟลชหรือไม่

  • หากอุปกรณ์รองรับการปลดล็อกการแฟลช ให้ตั้งค่า ro.oem_unlock_supported เป็น 1
  • หากอุปกรณ์ไม่รองรับการปลดล็อกการแฟลช ให้ตั้งค่า ro.oem_unlock_supported เป็น 0

หากอุปกรณ์รองรับการปลดล็อกการแฟลช Bootloader ควรระบุสถานะการล็อกโดยตั้งค่าตัวแปรบรรทัดคำสั่งเคอร์เนล androidboot.flash.locked เป็น 1 หากล็อกไว้ หรือเป็น 0 หากปลดล็อกไว้ ต้องตั้งค่าตัวแปรนี้ใน bootconfig แทนที่จะตั้งค่าในบรรทัดคำสั่งเคอร์เนลใน Android 12

สำหรับอุปกรณ์ที่รองรับ dm-verity, ให้ใช้ ro.boot.verifiedbootstate เพื่อตั้งค่า ro.boot.flash.locked เป็น 0 ซึ่งจะปลดล็อก Bootloader หากสถานะการบูตที่ยืนยันเป็นสีส้ม

ปกป้องส่วนที่สำคัญ

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

การเปลี่ยนจากสถานะล็อกเป็นสถานะปลดล็อกควรต้องมีการโต้ตอบทางกายภาพกับอุปกรณ์ การโต้ตอบนี้คล้ายกับผลลัพธ์ของการเรียกใช้คำสั่ง fastboot flashing unlock แต่กำหนดให้ผู้ใช้ต้องกดปุ่มจริงบนอุปกรณ์ อุปกรณ์ไม่ควรอนุญาตให้เปลี่ยนจาก lock_critical เป็น unlock_critical โดยทางโปรแกรมโดยไม่มีการโต้ตอบทางกายภาพ และไม่ควรจัดส่งอุปกรณ์ในสถานะ unlock_critical