Mengunci/Membuka Kunci Bootloader

Secara default, sebagian besar perangkat Android dikirimkan dengan bootloader yang terkunci, artinya pengguna tidak dapat mem-flash bootloader atau partisi perangkat. Jika diperlukan, Anda (dan pengguna perangkat dengan opsi Pengembang diaktifkan) dapat membuka kunci bootloader untuk mem-flash gambar baru.

Membuka kunci bootloader

Untuk membuka kunci bootloader dan mengaktifkan partisi untuk di-reflash, jalankan perintah fastboot flashing unlock pada perangkat. Setelah pengaturan, mode buka kunci tetap ada di seluruh reboot.

Perangkat harus menolak perintah fastboot flashing unlock kecuali get_unlock_ability disetel ke 1 . Jika disetel ke 0 , pengguna perlu boot ke layar beranda, buka menu Pengaturan > Sistem > Opsi pengembang dan aktifkan opsi buka kunci OEM (yang menyetel get_unlock_ability ke 1 ). Setelah pengaturan, mode ini tetap ada di seluruh reboot dan reset data pabrik.

Saat perintah fastboot flashing unlock dikirim, perangkat harus meminta pengguna untuk memperingatkan mereka bahwa mereka mungkin mengalami masalah dengan gambar tidak resmi. Setelah pengguna mengakui peringatan tersebut, perangkat harus melakukan reset data pabrik untuk mencegah akses data yang tidak sah. Bootloader harus mengatur ulang perangkat meskipun tidak dapat memformat ulang dengan benar. Hanya setelah reset, flag persisten dapat disetel sehingga perangkat dapat di-reflash.

Semua RAM yang belum ditimpa harus diatur ulang selama proses fastboot flashing unlock . Tindakan ini mencegah serangan yang membaca sisa isi RAM dari boot sebelumnya. Demikian pula, perangkat yang tidak terkunci harus mengosongkan RAM pada setiap boot (kecuali jika ini menyebabkan penundaan yang tidak dapat diterima), tetapi harus meninggalkan wilayah yang digunakan untuk ramoops kernel.

Mengunci bootloader

Untuk mengunci bootloader dan mengatur ulang perangkat, jalankan perintah fastboot flashing lock pada perangkat. Perangkat yang ditujukan untuk ritel harus dikirim dalam keadaan terkunci (dengan get_unlock_ability mengembalikan 0 ) untuk memastikan bahwa penyerang tidak dapat membahayakan perangkat dengan memasang sistem baru atau boot image.

Mengatur kunci/membuka properti

Properti ro.oem_unlock_supported harus disetel pada waktu pembuatan berdasarkan apakah perangkat mendukung pembukaan kunci yang berkedip.

  • Jika perangkat mendukung flashing unlock, setel ro.oem_unlock_supported ke 1 .
  • Jika perangkat tidak mendukung flashing unlock, setel ro.oem_unlock_supported ke 0 .

Jika perangkat mendukung flashing unlock, maka bootloader harus menunjukkan status penguncian dengan menyetel variabel baris perintah kernel androidboot.flash.locked ke 1 jika terkunci atau ke 0 jika tidak terkunci. Variabel ini harus disetel di bootconfig, bukan di baris perintah kernel di Android 12.

Untuk perangkat yang mendukung dm- verity , gunakan ro.boot.verifiedbootstate untuk menyetel nilai ro.boot.flash.locked ke 0 ; ini membuka kunci bootloader jika status boot terverifikasi berwarna oranye.

Melindungi bagian kritis

Perangkat harus mendukung penguncian dan pembukaan kunci bagian penting, yang didefinisikan sebagai apa pun yang diperlukan untuk mem-boot perangkat ke dalam bootloader. Bagian tersebut mungkin termasuk sekering, partisi virtual untuk hub sensor, bootloader tahap pertama, dan banyak lagi. Untuk mengunci bagian kritis, Anda harus menggunakan mekanisme yang mencegah kode (kernel, citra pemulihan, kode OTA, dll.) yang berjalan di perangkat agar tidak secara sengaja mengubah bagian penting apa pun. OTA harus gagal memperbarui bagian penting jika perangkat dalam keadaan kritis terkunci.

Transisi dari keadaan terkunci ke tidak terkunci harus memerlukan interaksi fisik dengan perangkat. Interaksi ini mirip dengan apa efek menjalankan perintah fastboot flashing unlock tetapi mengharuskan pengguna untuk menekan tombol fisik pada perangkat. Perangkat tidak boleh mengizinkan transisi terprogram dari lock critical ke unlock critical tanpa interaksi fisik, dan perangkat tidak boleh dikirim dalam keadaan unlock critical .