Önyüklemeyi Doğrulamak

Doğrulanmış önyükleme, kullanılmadan önce başlatılan Android sürümünün parçası olan tüm yürütülebilir kod ve verilerin kriptografik olarak doğrulanmasını gerektirir. Buna çekirdek ( boot bölümünden yüklenir), aygıt ağacı ( dtbo bölümünden yüklenir), system bölümü, vendor bölümü vb. dtbo .

Yalnızca bir kez okunan boot ve dtbo gibi küçük bölümler, genellikle tüm içeriği belleğe yükleyerek ve ardından hash dtbo doğrulanır. Bu hesaplanan karma değer daha sonra beklenen karma değerle karşılaştırılır . Değer eşleşmezse 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), verilerin belleğe yüklenirken doğrulamanın sürekli bir işlem olduğu bir karma ağaç kullanabilir. Bu durumda, karma ağacı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 karması 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 tipik olarak her doğrulanmış bölümün sonunda veya başında, özel bir bölümde veya her ikisinde depolanır. En önemlisi, bu karmalar güven 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 bkz. Android Doğrulanmış Önyükleme .

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üme yeniden başlatması ve ardından kalıcı bir açıktan yararlanmak için bu Android sürümünü kullanması mümkündür. Oradan saldırgan, cihazın kalıcı olarak sahibidir ve güncellemeleri devre dışı bırakmak da dahil olmak üzere her şeyi yapabilir.

Bu tür saldırılara karşı korumaya Geri Alma Koruması denir. Geri alma koruması, genellikle Android'in en yeni sürümünü kaydetmek için kurcalanmaya karşı korumalı depolama kullanılarak ve kaydedilen sürümden daha düşükse Android'i başlatmayı reddederek uygulanır. Sürümler genellikle bölüm bazında izlenir.

AVB'nin geri alma korumalarını nasıl yönettiği hakkında 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ündeki hesaplanan karma beklenen karmayla eşleşmezse) veya çalışma zamanında (örneğin, dm-verity system bölümünde bir doğrulama hatasıyla karşılaşırsa) başarısız olabilir. Önyükleme sırasında doğrulama başarısız olursa, aygıt önyükleme yapamaz ve son kullanıcının aygıtı kurtarmak için adımlar atması 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, bir doğrulama hatasıyla karşılaşılırsa, cihaz, nedenini belirtmek için belirli bir bayrak setiyle hemen yeniden başlatılır. Önyükleyici bu bayrağı fark etmeli ve G / Ç Hatası ( eio ) modunu kullanmak için dm- eio ve yeni bir güncelleme yüklenene kadar bu modda kalmalıdır.

eio modunda önyükleme eio cihaz, kullanıcıyı bozulmanın algılandığını ve cihazın düzgün çalışmayabileceğini bildiren bir hata ekranı gösterir. Ekran, kullanıcı onu kapatana kadar gösterilir. eio modunda, bir doğrulama hatasıyla karşılaşılırsa, dm-verity sürücüsü aygıtı 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ışacağı (böylece bozulma hataları olmayan yeni bir işletim sistemi kurulabilir) ya da kullanıcının verilerinin mümkün olduğunca çoğunu cihazdan alabilmesidir. Yeni işletim sistemi kurulduktan sonra, önyükleyici yeni yüklenen işletim sistemini fark eder ve restart moduna geri döner.