Memverifikasi Boot

Boot terverifikasi memerlukan verifikasi kriptografis semua kode dan data yang dapat dieksekusi yang merupakan bagian dari versi Android yang di-boot sebelum digunakan. Ini termasuk kernel (dimuat dari partisi boot ), pohon 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 dan kemudian menghitung hashnya. Nilai hash yang dihitung ini kemudian dibandingkan dengan nilai hash yang diharapkan . Jika nilainya tidak cocok, Android tidak dapat dimuat. Untuk detail selengkapnya, lihat Alur Booting .

Partisi yang lebih besar yang tidak muat ke dalam memori (seperti, sistem file) mungkin menggunakan pohon hash di mana verifikasi adalah proses berkelanjutan yang terjadi saat data dimuat ke dalam memori. Dalam hal ini, hash akar dari pohon hash dihitung selama run time dan diperiksa terhadap nilai hash akar yang diharapkan . Android menyertakan driver dm-verity untuk memverifikasi partisi yang lebih besar. Jika suatu saat hash root yang dihitung tidak cocok dengan nilai hash root yang diharapkan , data tidak akan digunakan dan Android akan memasuki status kesalahan. Untuk detail lebih lanjut, lihat korupsi 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 atau tidak langsung) oleh akar kepercayaan. Sebagai contoh, implementasi AVB mendukung kedua pendekatan tersebut, lihat Boot Terverifikasi Android untuk detailnya.

Perlindungan kemunduran

Bahkan dengan proses pembaruan yang benar-benar aman, eksploitasi kernel Android non-persisten mungkin saja menginstal secara manual versi Android yang lebih lama dan lebih rentan, melakukan boot ulang ke versi yang rentan, dan kemudian menggunakan versi Android tersebut untuk menginstal eksploitasi yang persisten. Dari sana, penyerang memiliki perangkat tersebut secara permanen dan dapat melakukan apa saja, termasuk menonaktifkan pembaruan.

Perlindungan terhadap serangan kelas ini disebut Rollback Protection . Perlindungan rollback biasanya diterapkan dengan menggunakan penyimpanan anti-rusak untuk mencatat versi terbaru Android dan menolak mem-boot Android jika lebih rendah dari versi yang direkam. Versi biasanya dilacak berdasarkan per partisi.

Untuk rincian lebih lanjut tentang bagaimana AVB menangani perlindungan rollback, lihat AVB README .

Menangani kesalahan verifikasi

Verifikasi bisa gagal pada saat boot (misalnya, jika hash yang dihitung pada partisi boot tidak cocok dengan hash yang diharapkan) atau pada saat dijalankan (misalnya, jika dm-verity mengalami kesalahan verifikasi pada partisi system ). Jika verifikasi gagal saat boot, perangkat tidak dapat melakukan booting dan pengguna akhir harus melalui langkah-langkah untuk memulihkan perangkat.

Jika verifikasi gagal pada saat run-time, alurnya menjadi sedikit lebih rumit. Jika perangkat menggunakan dm-verity, perangkat harus dikonfigurasi dalam mode restart . Dalam mode restart , jika terjadi kesalahan verifikasi, perangkat akan segera dimulai ulang dengan tanda tertentu yang disetel untuk menunjukkan alasannya. Pemuat boot akan memperhatikan tanda ini dan mengalihkan dm-verity untuk menggunakan mode Kesalahan I/O ( eio ) dan tetap dalam mode ini hingga pembaruan baru telah diinstal.

Saat melakukan booting dalam mode eio , perangkat menampilkan layar kesalahan yang memberi tahu pengguna bahwa kerusakan telah terdeteksi dan perangkat mungkin tidak berfungsi dengan benar. Layar ditampilkan hingga pengguna menutupnya. Dalam mode eio , driver dm-verity tidak akan memulai ulang perangkat jika terjadi kesalahan verifikasi, melainkan kesalahan EIO yang dikembalikan dan aplikasi perlu menangani kesalahan tersebut.

Tujuannya adalah agar pembaru sistem akan berjalan (sehingga OS baru tanpa kesalahan yang rusak dapat diinstal) atau pengguna dapat memperoleh data sebanyak mungkin dari perangkat. Setelah OS baru diinstal, boot loader akan mengetahui OS yang baru diinstal dan beralih kembali ke mode restart .