Başlatmayı doğrulama

Doğrulanmış Önyükleme, önyüklenen Android sürümünün bir parçası olan tüm yürütülebilir kod ve verilerin kullanılmadan önce kriptografik olarak doğrulanmasını gerektirir. Buna ç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. dahildir.

Yalnızca bir kez okunan boot ve dtbo gibi küçük bölümler genellikle tüm içeriklerin belleğe yüklenmesi ve ardından karma değerinin hesaplanmasıyla doğrulanır. Daha sonra bu hesaplanan karma değer, beklenen karma değer ile karşılaştırılır. Değer 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), verilerin belleğe yüklenmesiyle birlikte doğrulamanın sürekli olarak gerçekleştiği 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ılarak kontrol edilir. Android, daha büyük bölümleri doğrulamak için dm-verity sürücüsünü içerir. Hesaplanan kök karma bir noktada beklenen kök karma değeriyle eşleşmezse veriler kullanılmaz ve Android hata durumuna girer. Daha fazla bilgi için dm-verity bozulması başlıklı makaleyi inceleyin.

Beklenen karma değerler genellikle her bir doğrulanmış bölümün sonunda veya başında, özel bir bölümde ya da her ikisinde birden depolanır. En önemlisi, bu karmalar 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ılı bilgi için Android Verified Boot başlıklı makaleyi inceleyin.

Geri alma koruması

Tamamen güvenli bir güncelleme süreciyle bile kalıcı olmayan bir Android çekirdek güvenlik açığının, Android'in eski ve daha savunmasız bir sürümünü manuel olarak yüklemesi, savunmasız sürümde yeniden başlatması ve ardından kalıcı bir güvenlik açığı yüklemek için bu Android sürümünü kullanması mümkündür. Saldırgan bu noktadan sonra cihazın kalıcı sahibi olur ve güncellemeleri devre dışı bırakma da dahil olmak üzere her şeyi yapabilir.

Bu tür 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 kurcalamaya karşı korumalı depolama alanı kullanılarak ve kaydedilen sürümden daha düşükse Android'in 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ına bakın.

Doğrulama hatalarını ele alma

Doğrulama, başlatma sırasında (ör. boot bölümünde hesaplanan karma, beklenen karmayla eşleşmiyorsa) veya çalışma zamanında (ör. dm-verity, boot bölümünde bir doğrulama hatasıyla karşılaşıyorsa) başarısız olabilir.system Doğrulama başlatma sırasında başarısız olursa cihaz başlatılamaz 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şık hale gelir. Cihaz dm-verity kullanıyorsa restart modunda yapılandırılmalıdır. restart modunda, doğrulama hatasıyla karşılaşılırsa cihaz, nedeni belirten belirli bir işaret ayarlanarak hemen yeniden başlatılır. Önyükleyici bu işareti fark etmeli ve dm-verity'yi G/Ç hatası (eio) modunu kullanacak şekilde değiştirmeli ve yeni bir güncelleme yüklenene kadar bu modda kalmalıdır.

eio modunda başlatılırken cihaz, kullanıcının bozulma tespit edildiğini ve cihazın düzgün çalışmayabileceğini bildiren bir hata ekranı gösteriyor. Ekran, kullanıcı tarafından kapatılana kadar gösterilir. eio modunda, doğrulama hatasıyla karşılaşılırsa dm-verity sürücüsü cihazı yeniden başlatmaz. Bunun yerine EIO hatası döndürülür ve uygulamanın hatayla ilgilenmesi gerekir.

Amaç, sistem güncelleyicinin çalıştırılması (böylece bozulma hataları olmadan yeni bir işletim sistemi yüklenebilir) veya kullanıcının verilerinin mümkün olduğunca fazlasını cihazdan alabilmesidir. Yeni işletim sistemi yüklendikten sonra önyükleyici, yeni yüklenen işletim sistemini fark eder ve restart moduna geri döner.