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

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

เข้าสู่ Bootloader

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

ปลดล็อก Bootloader

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

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

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

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

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