Memverifikasi Booting

Boot terverifikasi memerlukan verifikasi kriptografis untuk semua kode dan data yang dapat dieksekusi yang merupakan bagian dari versi Android yang di-booting sebelum digunakan. Hal ini mencakup kernel (dimuat dari partisi boot), hierarki perangkat (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 detail selengkapnya, lihat Alur Booting.

Partisi yang lebih besar yang tidak akan muat dalam memori (seperti, sistem file) dapat menggunakan hierarki hash dengan verifikasi sebagai proses berkelanjutan yang terjadi saat data dimuat ke dalam memori. Dalam hal ini, hash root dari hierarki 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 terverifikasi, di partisi khusus, atau keduanya. Yang terpenting, hash ini ditandatangani (baik secara langsung maupun tidak langsung) oleh root of trust. Sebagai contoh, penerapan AVB mendukung kedua pendekatan tersebut, lihat Booting Terverifikasi Android untuk mengetahui detailnya.

Perlindungan rollback

Meskipun dengan proses update yang sepenuhnya aman, eksploit kernel Android yang tidak persisten dapat menginstal versi Android lama yang lebih rentan secara manual, memulai ulang ke versi yang rentan, lalu menggunakan versi Android tersebut untuk menginstal eksploit persisten. Dari sana, penyerang akan memiliki perangkat secara permanen dan dapat melakukan apa saja, termasuk menonaktifkan update.

Perlindungan terhadap jenis serangan ini disebut Rollback Protection. Perlindungan rollback biasanya diterapkan dengan menggunakan penyimpanan yang tahan modifikasi untuk merekam versi Android terbaru dan menolak mem-booting Android jika lebih rendah dari versi yang direkam. 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 pada waktu booting (misalnya, jika hash yang dihitung pada partisi boot tidak cocok dengan hash yang diharapkan) atau pada waktu proses (misalnya, jika dm-verity mengalami error verifikasi pada partisi system). Jika verifikasi gagal pada waktu booting, perangkat tidak dapat melakukan booting dan pengguna akhir harus melakukan langkah-langkah untuk memulihkan perangkat.

Jika verifikasi gagal pada waktu proses, alur akan sedikit lebih rumit. Jika menggunakan dm-verity, perangkat harus dikonfigurasi dalam mode restart. Dalam mode restart, jika terjadi error verifikasi, perangkat akan segera dimulai ulang dengan flag tertentu yang ditetapkan untuk menunjukkan alasannya. Loader booting akan melihat tanda ini dan mengalihkan dm-verity untuk menggunakan mode Error I/O (eio) dan tetap dalam mode ini hingga update baru telah 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. Sebagai gantinya, error EIO akan ditampilkan dan aplikasi harus menangani error tersebut.

Tujuannya adalah agar update sistem akan berjalan (sehingga OS baru tanpa error kerusakan dapat diinstal) atau pengguna dapat mengambil data mereka sebanyak mungkin dari perangkat. Setelah OS baru diinstal, bootloader akan melihat OS yang baru diinstal dan beralih kembali ke mode restart.