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

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

ควรรีเซ็ต 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

หากอุปกรณ์รองรับการปลดล็อกด้วยการแฟลช บูตโหลดเดอร์ควรระบุสถานะการล็อกโดยการตั้งค่าตัวแปรบรรทัดคำสั่งเคอร์เนล 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