Google’ın Pixel telefonlarını duyuracağı 4 Ekim etkinliği pek de güzel haberlerle gelmiyor… Android 7.0 ile sağlanan kesintisiz güncelleme (seamless update) özelliği geliştiriciler bazında işi oldukça karmaşıklaştıracak gözüküyor. Nasıl mı?
Geleneksel Root’lamanın Katili: dm-verity
Peşisıra gelen güncellemelerin getirdiği ek özelliklere her ne kadar hayır demiyor olsa da bizim gibi kullanıcılar (poweruser) telefonunun özelliklerinden kısıtlı olarak faydalanmak istemez. Ancak malumunuz Android’in varlığından beri root’lamak ancak sistemdeki açıklardan faydalanarak (exploit) mümkün oluyor. Bu sistem açıkları sadece sistem çapında reklam engellemek, temalarını değiştirmek ya da farklı ROM yüklemek isteyen telefon sahipleri tarafından kullanılmıyor, zararlı yazılımlar da aynı açıklardan faydalanabiliyor. Bu nedenle Google bu açıkları kapatmanın yollarını ararken her geliştirdiği Android sürümüyle geliştiricilere kapıyı tamamen kapatmayı, ya da bu yönde kapsamlı bir değişikliğe gitmeyi tercih etmedi.
Şimdiye kadar bütün Nexus cihazlarda, hatta OnePlus 3, Axon 7 ve Honor 8 gibi güncel cihazlarda kilidi açılabilen bootloader kullanılması bazı bilinçli tüketiciler nezdinde savaşın açık kaynak/özgür yazılım yönünde iyiye gittiği yanlış algısına yol açtı. Ancak kapalı kapılar ardında Google tarafından Linux çekirdeğinde bulunan device mapper verity (dm-verity)’nin Android’e dahil edilmesiyle beraber alışık olduğumuz tek APK yükleyerek root erişimi sağlama tarihe karışmış oldu.
dm-verity’nin yaptığı işlem başlangıç (boot) zamanında /system bölüntüsünün (partition) bütünlüğünü kontrol etmek (integrity check). Her katmanda 4KiB’lık blokların SHA256 özet (hash) değerleri hesaplanarak en üstteki katmanda üreticiye ait anahtarla şifreleniyor. /system bölüntüsündeki tek bitlik değişiklik bile dm-verity’den geçemeyeceğinden eski geleneksel yöntemlerimiz resmi olarak eskimiş oluyor. Bu bölüntüdeki değişiklikten sonra telefona erişim izni verilip verilmeyeceği telefon üreticilerine (OEM) bırakılmış, ancak Google dm-verity’yi varsayılan olarak sıkı kontrollü zorunlu onaylı başlangıç (strictly enforced verified boot)’ta yeniden başlatmaya ayarlamış durumda. Yani bloklarda herhangi bir değişiklik tespit edildiğinde telefon yeniden başlatmaya zorlanacak. Bu arada sıkı kontrollü zorunlu onaylı başlangıcın da Android 7.0’dan itibaren bir zorunluluk olduğunu söylemekte fayda var, yani zorla değil mecburi.
Peki gelecek gerçekten bu kadar karanlık mı?
Sistemsiz Root’un Yükselişi
Android 6.0’dan itibaren root yetkisi isteyen kullanıcılar değiştirilmiş bir boot imajı kullanmak durumundaydılar. Bu boot.img içeriğinde çekirdeği ve ramdisk’i, aynı zamanda dosya sistemini bindirmeden (mount) önce yüklenmesi gereken kritik dosyaları barındırıyor. Tabi bu dosyayı düzenlemek için de kilidi açılmış bir bootloader gerekiyor. Günümüzde bootloader kilidi açılamamış telefonlar düşünüldüğünde girilen tünelin sonundaki ışık henüz gözükmüyor denebilir.
Sistemsiz root işlemi Chainfire tarafından Lolipop cihazlar ve Samsung için KitKat sonrası cihazlar için geliştirilmiş bir yöntem. Bu yöntemle Chainfire’ın SuperSU isimli aracı ramdisk’i düzenleyerek kendisini bir şekilde başlangıç (boot) aşamasında çağırıyor ve önce dm-verity’yi daha sonra zorunlu şifrelemeyi (forced encryption) mümkünse devredışı bırakıyor.
Sistemsiz Root’un Geleceği
Android Nugat çekirdeğindeki şu ve yeni Pixel telefon ROM’undaki bu değişiklikten anlaşılıyor ki (teşekkürler Dees_Troy – XDA) Google kesintisiz güncellemelerini de düşünerek /system bölüntüsünde büyük bir değişikliğe gitmiş. Eskiden ramdisk olarak telaffuz ettiğimiz kısım da dahil olmak üzere /system bölüntüsü bir kök dosya sistemine (root filesystem) dönüştürülmüş durumda. dm-verity’nin de bu bölüntüde değişikliğe izin vermediğini bildiğimize göre, sistemsiz root yöntemleri de geçersiz kılınıyor.
Yok mu çaresi?
Google’ın yeni Apple, Android’in de yeni iOS olacağı piyasada zaten sözü edilir bir endişeydi. Şirket politikası olarak Chromium için de benzer bir yol izleyen Google, Chrome tarayıcısını hala –sanılanın tam aksine– kapalı kaynak olarak devam ettiriyor.* Konumuza dönecek olursak dm-verity bir çekirdek modülü olduğuna göre akla ilk gelecek olan çözüm çekirdeği düzenlemek olacaktır. Tabi çekirdek düzenleyerek dm-verity’nin devredışı bırakılması yazıldığı kadar kolay bir şey elbette ki olmayacak, ama beyaz atlı prensimiz Chainfire her Android sürümü için bizi alıştırdığı hızlı tutumunu tek başına devam ettirebilecek mi bunu sanırım biraz zamana bırakmak gerekecek.
Bilgiye önem verilmeyen ve saygı gösterilmeyen ülkemiz için Chainfire örneğinden gidecek olursak şunu hatırlatmakta fayda var; kendisi saatlerini verdiği hizmetleri bütün insanlığa ücretsiz olarak sağlıyor, ancak emeğine karşılık olmayacak dahi olsa bağış yaparak kendisine destek vermek belki ufak bir teşekkür olabilir.
*Evet bu bir Chrome kullanmayın çağrısıdır.