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
ke1
. - Jika perangkat tidak mendukung flashing unlock, setel
ro.oem_unlock_supported
ke0
.
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
.