Booting Terverifikasi memerlukan verifikasi kriptografis semua kode dan data yang dapat dieksekusi yang merupakan bagian dari versi Android yang sedang di-booting sebelum digunakan. Hal ini mencakup
kernel (dimuat dari partisi boot
), device tree (dimuat
dari partisi dtbo
), partisi system
,
partisi vendor
, dan sebagainya.
Partisi kecil, seperti boot
dan dtbo
, yang hanya dibaca
sekali biasanya diverifikasi dengan memuat seluruh konten ke dalam memori, lalu
menghitung hash-nya. Nilai hash yang dihitung ini kemudian dibandingkan dengan
nilai hash yang diharapkan. Jika nilainya tidak cocok, Android tidak akan dimuat.
Untuk mengetahui detail selengkapnya, lihat Alur Booting.
Partisi yang lebih besar yang tidak muat ke dalam memori (seperti sistem file) dapat menggunakan pohon hash yang memverifikasi secara berkelanjutan saat data dimuat ke dalam memori. Dalam hal ini, hash root dari pohon hash dihitung selama waktu proses dan diperiksa terhadap nilai hash root yang diharapkan. Android menyertakan driver dm-verity untuk memverifikasi partisi yang lebih besar. Jika pada suatu saat hash root yang dihitung tidak cocok dengan nilai hash root yang diharapkan, data tidak akan digunakan dan Android akan memasuki status error. Untuk mengetahui detail selengkapnya, lihat kerusakan dm-verity.
Hash yang diharapkan biasanya disimpan di akhir atau awal setiap partisi yang diverifikasi, dalam partisi khusus, atau keduanya. Yang penting, hash ini ditandatangani (secara langsung atau tidak langsung) oleh root of trust. Sebagai contoh, penerapan AVB mendukung kedua pendekatan tersebut. Lihat Booting Terverifikasi Android untuk mengetahui detailnya.
Perlindungan rollback
Meskipun proses update sepenuhnya aman, eksploitasi kernel Android yang tidak persisten dapat menginstal versi Android yang lebih lama dan lebih rentan secara manual, melakukan reboot ke versi yang rentan, lalu menggunakan versi Android tersebut untuk menginstal eksploitasi persisten. Dari sana, penyerang akan memiliki perangkat secara permanen dan dapat melakukan apa saja, termasuk menonaktifkan update.
Perlindungan terhadap kelas serangan ini disebut Perlindungan Rollback. Perlindungan rollback biasanya diterapkan dengan menggunakan penyimpanan yang tahan terhadap upaya merusak untuk mencatat versi Android terbaru dan menolak mem-booting Android jika versinya lebih rendah daripada versi yang tercatat. Versi biasanya dilacak berdasarkan per-partisi.
Untuk mengetahui detail selengkapnya tentang cara AVB menangani perlindungan rollback, lihat README AVB.
Menangani error verifikasi
Verifikasi dapat gagal saat waktu booting (misalnya, jika hash yang dihitung pada partisi boot
tidak cocok dengan hash yang diharapkan) atau saat runtime (misalnya, jika dm-verity mengalami error verifikasi pada partisi system
). Jika verifikasi gagal saat waktu booting, perangkat tidak dapat melakukan booting dan pengguna akhir harus melakukan langkah-langkah untuk memulihkan perangkat.
Jika verifikasi gagal saat runtime, alurnya akan sedikit lebih rumit. Jika
perangkat menggunakan dm-verity, perangkat harus dikonfigurasi dalam mode restart
. Dalam
mode restart
, jika terjadi error verifikasi, perangkat akan
segera dimulai ulang dengan setelan flag tertentu untuk menunjukkan alasannya. Bootloader akan melihat tanda ini dan mengalihkan dm-verity untuk menggunakan mode Error I/O (eio
) dan tetap dalam mode ini hingga update baru diinstal.
Saat melakukan booting dalam mode eio
, perangkat akan menampilkan layar error yang memberi tahu pengguna bahwa kerusakan telah terdeteksi dan perangkat mungkin tidak berfungsi dengan benar. Layar akan ditampilkan hingga pengguna menutupnya. Dalam mode
eio
, driver dm-verity tidak akan memulai ulang perangkat jika terjadi
error verifikasi, tetapi error EIO akan ditampilkan dan aplikasi harus menangani error tersebut.
Tujuannya adalah agar pengupdate sistem berjalan (sehingga OS baru tanpa error kerusakan dapat diinstal) atau pengguna dapat mengeluarkan sebanyak mungkin data mereka dari perangkat. Setelah OS baru diinstal, boot loader akan mendeteksi OS yang baru diinstal dan beralih kembali ke mode restart
.