Google 致力于为黑人社区推动种族平等。查看具体举措
Halaman ini diterjemahkan oleh Cloud Translation API.
Switch to English

Memverifikasi Boot

Booting terverifikasi memerlukan verifikasi kriptografis semua kode dan data yang dapat dieksekusi yang merupakan bagian dari versi Android yang sedang di-boot sebelum digunakan. Ini termasuk kernel (dimuat dari partisi boot ), pohon perangkat (dimuat dari partisi dtbo ), partisi system , partisi vendor , dan seterusnya.

Partisi kecil, seperti boot dan dtbo , yang hanya bisa 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 akan memuat. Untuk detail selengkapnya, lihat Alur Boot .

Partisi yang lebih besar yang tidak muat ke dalam memori (seperti, sistem file) dapat menggunakan pohon hash di mana verifikasi adalah proses berkelanjutan yang terjadi saat data dimuat ke memori. Dalam kasus ini, hash root dari pohon hash dihitung selama waktu berjalan dan diperiksa terhadap nilai hash root yang diharapkan . Android menyertakan driver dm-verity untuk memverifikasi partisi yang lebih besar. Jika pada titik tertentu hash root yang dihitung tidak cocok dengan nilai hash root yang diharapkan , data tersebut tidak akan digunakan dan Android memasuki status error. Untuk detail selengkapnya, lihat korupsi dm-verity .

Hash yang diharapkan biasanya disimpan di akhir atau di awal setiap partisi yang diverifikasi, di partisi khusus, atau keduanya. Yang terpenting, hash ini ditandatangani (baik secara langsung maupun tidak langsung) oleh root kepercayaan. Sebagai contoh, implementasi AVB mendukung kedua pendekatan tersebut, lihat Android Verified Boot untuk detailnya.

Perlindungan rollback

Bahkan dengan proses pembaruan yang sepenuhnya aman, mungkin saja kernel Android yang tidak persisten mengeksploitasi secara manual menginstal 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 terus-menerus. Dari sana penyerang secara permanen memiliki perangkat dan dapat melakukan apa saja, termasuk menonaktifkan pembaruan.

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

Untuk detail selengkapnya tentang cara AVB menangani perlindungan rollback, lihat AVB README .

Menangani kesalahan verifikasi

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

Jika verifikasi gagal saat run-time, alurnya sedikit lebih rumit. Jika perangkat menggunakan dm-verity, itu harus dikonfigurasi dalam mode restart . Dalam mode restart , jika kesalahan verifikasi ditemui, perangkat segera dimulai ulang dengan set bendera tertentu untuk menunjukkan alasannya. Boot loader akan melihat tanda ini dan mengganti dm-verity untuk menggunakan mode I / O Error ( eio ) dan tetap dalam mode ini sampai pembaruan baru telah diinstal.

Saat mem-boot dalam mode eio , perangkat menampilkan layar kesalahan yang memberi tahu pengguna bahwa korupsi telah terdeteksi dan perangkat mungkin tidak berfungsi dengan benar. Layar muncul sampai pengguna menutupnya. Dalam mode eio , driver dm- eio tidak akan memulai ulang perangkat jika kesalahan verifikasi ditemui, sebaliknya kesalahan EIO dikembalikan dan aplikasi perlu menangani kesalahan tersebut.

Maksudnya adalah agar pembaru sistem akan berjalan (sehingga OS baru tanpa kesalahan korupsi dapat diinstal) atau pengguna bisa mendapatkan data mereka sebanyak mungkin dari perangkat. Setelah OS baru diinstal, boot loader memperhatikan OS yang baru diinstal dan beralih kembali ke mode restart .