Doğrulanmış önyükleme, kullanılmadan önce önyüklenen Android sürümünün parçası olan tüm yürütülebilir kod ve verilerin kriptografik olarak doğrulanmasını gerektirir. Bu, çekirdeği ( boot
bölümünden yüklenen), aygıt ağacını ( dtbo
bölümünden yüklenen), system
bölümünü, vendor
bölümünü vb. içerir.
boot
ve dtbo
gibi yalnızca bir kez okunan küçük bölümler, genellikle tüm içeriğin belleğe yüklenmesi ve ardından karma değerinin hesaplanmasıyla doğrulanır. Hesaplanan bu karma değeri daha sonra beklenen karma değeriyle karşılaştırılır. Değer eşleşmiyorsa Android yüklenmez. Daha fazla ayrıntı için bkz . Önyükleme Akışı .
Belleğe sığmayan daha büyük bölümler (dosya sistemleri gibi), doğrulamanın veriler belleğe yüklenirken gerçekleşen sürekli bir süreç olduğu karma ağacı kullanabilir. Bu durumda, karma ağacının kök karması çalışma süresi boyunca hesaplanır ve beklenen kök karma değerine göre kontrol edilir. Android, daha büyük bölümleri doğrulamak için dm-verity sürücüsünü içerir. Bir noktada hesaplanan kök karma değeri beklenen kök karma değeriyle eşleşmezse veriler kullanılmaz ve Android bir hata durumuna girer. Daha fazla ayrıntı için bkz. dm-verity bozulması .
Beklenen karmalar genellikle doğrulanan her bölümün sonunda veya başında, özel bir bölümde veya her ikisinde depolanır. En önemlisi, bu hash'ler güvenin kökü tarafından (doğrudan veya dolaylı olarak) imzalanır. Örnek olarak, AVB uygulaması her iki yaklaşımı da destekler; ayrıntılar için Android Verified Boot'a bakın.
Geri alma koruması
Tamamen güvenli bir güncelleme işlemiyle bile, kalıcı olmayan bir Android çekirdeği istismarının, Android'in daha eski, daha savunmasız bir sürümünü manuel olarak yüklemesi, savunmasız sürümü yeniden başlatması ve ardından kalıcı bir istismar yüklemek için bu Android sürümünü kullanması mümkündür. Saldırgan bu noktadan itibaren cihazın kalıcı olarak sahibi olur ve güncellemeleri devre dışı bırakmak dahil her şeyi yapabilir.
Bu sınıftaki saldırılara karşı korumaya Geri Alma Koruması adı verilir. Geri alma koruması genellikle, Android'in en son sürümünü kaydetmek için kurcalanmaya karşı korumalı depolama kullanılarak ve kaydedilen sürümden daha düşükse Android'in başlatılmasının reddedilmesiyle uygulanır. Sürümler genellikle bölüm bazında izlenir.
AVB'nin geri alma korumalarını nasıl ele aldığına ilişkin daha fazla ayrıntı için AVB README'ye bakın.
Doğrulama hatalarını işleme
Doğrulama, önyükleme sırasında (örneğin, boot
bölümünde hesaplanan karma değerinin beklenen karma değeriyle eşleşmemesi durumunda) veya çalışma zamanında (örneğin, dm-verity'nin system
bölümünde bir doğrulama hatasıyla karşılaşması durumunda) başarısız olabilir. Doğrulama önyükleme sırasında başarısız olursa, aygıt önyükleme yapamaz ve son kullanıcının aygıtı kurtarmak için gerekli adımları izlemesi gerekir.
Doğrulama çalışma zamanında başarısız olursa akış biraz daha karmaşık hale gelir. Cihaz dm-verity kullanıyorsa restart
modunda yapılandırılmalıdır. restart
modunda, bir doğrulama hatasıyla karşılaşılırsa cihaz, nedenini belirtmek üzere belirli bir bayrak seti ile hemen yeniden başlatılır. Önyükleyici bu bayrağı fark etmeli ve G/Ç Hatası ( eio
) modunu kullanmak için dm-verity'yi değiştirmeli ve yeni bir güncelleme yüklenene kadar bu modda kalmalıdır.
eio
modunda önyükleme yaparken cihaz, kullanıcıya bozulmanın tespit edildiğini ve cihazın düzgün çalışmayabileceğini bildiren bir hata ekranı görüntüler. Kullanıcı kapatana kadar ekran gösterilir. eio
modunda, bir doğrulama hatasıyla karşılaşılırsa dm-verity sürücüsü cihazı yeniden başlatmaz; bunun yerine bir EIO hatası döndürülür ve uygulamanın hatayla ilgilenmesi gerekir.
Amaç, ya sistem güncelleyicinin çalışması (böylece bozulma hataları olmayan yeni bir işletim sisteminin kurulması) ya da kullanıcının mümkün olduğu kadar çok veriyi cihazdan alabilmesidir. Yeni işletim sistemi yüklendikten sonra, önyükleyici yeni kurulan işletim sistemini fark eder ve restart
moduna geçer.