Doğrulanmış önyükleme, Android sürümünün bir parçası olan tüm yürütülebilir kodun ve verilerin, kullanılmadan önce kriptografik olarak doğrulanmasını gerektirir. Çekirdek (boot
bölümünden yüklenir), cihaz ağacı (dtbo
bölümünden yüklenir), system
bölümü, vendor
bölümü vb. bu kapsamdadır.
Yalnızca bir kez okunan boot
ve dtbo
gibi küçük bölümler, genellikle içeriğin tamamının belleğe yüklenmesi ve ardından karmasının hesaplanması yoluyla doğrulanır. Hesaplanan bu karma oluşturma değeri daha sonra beklenen karma oluşturma değeri ile karşılaştırılır. Değerler eşleşmezse Android yüklenmez.
Daha fazla bilgi için Başlatma Akışı başlıklı makaleyi inceleyin.
Belleğe sığmayan daha büyük bölümler (ör. dosya sistemleri), veriler belleğe yüklenirken doğrulamanın sürekli bir süreç olduğu bir karma ağacı kullanabilir. Bu durumda, karma ağacının kök karması çalışma zamanında hesaplanır ve beklenen kök karma değeri ile karşılaştırılır. Android, daha büyük bölümleri doğrulamak için dm-verity sürücüsünü içerir. Hesaplanan kök karması bir noktada beklenen kök karma değeri ile eşleşmezse veriler kullanılmaz ve Android bir hata durumuna girer. Daha fazla bilgi için dm-verity bozulması başlıklı makaleyi inceleyin.
Beklenen karma oluşturma işlemleri genellikle doğrulanmış her bölümün sonunda veya başında, özel bir bölümde ya da her ikisinde de depolanır. En önemlisi, bu karma oluşturma işlemleri güven kökü tarafından (doğrudan veya dolaylı olarak) imzalanır. Örneğin, AVB uygulaması her iki yaklaşımı da destekler. Ayrıntılar için Android Doğrulanmış Başlatma başlıklı makaleyi inceleyin.
Geri alma koruması
Tamamen güvenli bir güncelleme işleminde bile, kalıcı olmayan bir Android çekirdek istismarının Android'in daha eski ve daha savunmasız bir sürümünü manuel olarak yüklemesi, savunmasız sürüme 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. Bu noktadan itibaren saldırgan, cihazın kalıcı sahibi olur ve güncellemeleri devre dışı bırakmak da dahil olmak üzere her şeyi yapabilir.
Bu saldırı sınıfına karşı korumaya Geri Alma Koruması denir. Geri alma koruması genellikle Android'in en son sürümünü kaydetmek için bozulmaya karşı korumalı depolama alanı kullanılarak ve Android'in kaydedilen sürümden daha düşük bir sürümde başlatılması reddedilerek uygulanır. Sürümler genellikle bölüm bazında izlenir.
AVB'nin geri alma korumalarını nasıl ele aldığı hakkında daha fazla bilgi için AVB README dosyasını inceleyin.
Doğrulama hatalarını ele alma
Doğrulama, önyükleme sırasında (ör. boot
bölümünde hesaplanan karma, beklenen karmayla eşleşmezse) veya çalışma zamanında (ör. dm-verity, boot
bölümünde bir doğrulama hatasıyla karşılaşırsa) başarısız olabilir.system
Doğrulama, önyükleme sırasında başarısız olursa cihaz önyükleme yapamaz ve son kullanıcının cihazı kurtarmak için adımları uygulaması gerekir.
Doğrulama çalışma zamanında başarısız olursa akış biraz daha karmaşıktır. Cihaz dm-verity kullanıyorsa restart
modunda yapılandırılmalıdır. restart
modunda, doğrulama hatasıyla karşılaşılırsa cihaz hemen yeniden başlatılır ve nedeni belirtmek için belirli bir işaret ayarlanır. Önyükleme yükleyici bu işareti fark edip dm-verity'yi G/Ç Hatası (eio
) modunu kullanacak şekilde değiştirir ve yeni bir güncelleme yüklenene kadar bu modda kalır.
eio
modunda başlatılırken cihaz, kullanıcıya bozulma algılandığını ve cihazın düzgün çalışmayabileceğini bildiren bir hata ekranı gösterir. Ekran, kullanıcı kapatana kadar gösterilir. eio
modunda, doğrulama hatası karşılaşıldığında dm-verity sürücüsü cihazı yeniden başlatmaz. Bunun yerine bir EIO hatası döndürülür ve uygulamanın hatayı ele alması gerekir.
Amaç, sistem güncelleyicinin çalıştırılması (böylece bozulma hataları içermeyen yeni bir işletim sistemi yüklenebilir) veya kullanıcının verilerinin mümkün olduğunca çoğunu cihazdan almasıdır. Yeni işletim sistemi yüklendikten sonra önyükleme yükleyici, yeni yüklenen işletim sistemini fark eder ve restart
moduna geri döner.