Google, üretim ortamında uygulamaların ihtiyaç duymadığı IOCTL komutlarını kısıtlayarak Android'deki grafik işlem birimlerinin saldırı yüzeyinin küçültülmesini öneriyor. Bu yaklaşım, yalnızca tek tek güvenlik açıklarını keşfedip düzeltmeye dayanmak yerine uygulanıyor. Bu uygulama, Android Red Team ekibi ile Arm'ın Mali GPU birimini ve sürücüsünü analiz etmek üzere gerçekleştirdiği iş birliğinin sonucu olarak ortaya çıktı ve SELinux kullanarak gereksiz işlevlere erişimin engellenmesine odaklandı.
Grafik işlem birimi, karmaşıklığı ve sistem içinde yüksek ayrıcalıklara sahip olması nedeniyle saldırganlar için cazip bir hedef hâline geldiğinden, bu adım güvenlik açısından önem taşıyor. Maddeye göre, 2021'den bu yana Android çekirdek sürücülerine dayalı istismarların çoğu grafik işlem birimini hedefledi ve saldırılar esas olarak kullanıcı alanındaki UMD olarak bilinen sürücü ile çekirdek modunda çalışan, yüksek ayrıcalıklara sahip KMD arasındaki arayüze odaklandı.
Saldırı yüzeyini küçültmek neden öncelik taşıyor?
Bu arayüzden geçen kötü amaçlı girdiler, bellek bozulmasına yol açan kusurlardan yararlanabilir. Google, gereksiz yolları erişilemez hâle getirmenin, yazılım hatalarını keşfetme ve düzeltme çalışmalarını sürdürürken koruma seviyesini artırmak için etkili ve çoğu zaman daha hızlı bir yöntem olduğunu düşünüyor.
Arm ile gerçekleştirilen ortak analiz, Android cihazların yaklaşık %45'inde kullanılan Mali sürücüsünü kapsadı ve güvenlik riski oluşturan ancak cihazların üretim ortamında çalışması için gerekli olmayan saldırı yüzeyi bölümlerinin belirlenmesine yardımcı oldu. Buna dayanarak politika, grafik işlem birimi sürücüsünün girdilerini ve çıktılarını temsil eden ve dolayısıyla saldırı yüzeyinin önemli bir bölümünü oluşturan IOCTL komutlarına odaklandı.
Önerilen yaklaşımda Mali komutları üç kategoriye ayrılıyor:
- Kısıtlanmamış komutlar: Normal çalışma için gereklidir ve uygulamalara açık kalır.
- Ölçüm ve araç komutları: Grafik işlem biriminin performansını izlemek üzere performans analizi ve hata ayıklama araçları tarafından kullanılır.
- Kısıtlanmış komutlar: Üretim uygulamaları tarafından kullanılmamaları gerekir. Bunlar, grafik işlem biriminin geliştirilmesine özel komutların yanı sıra cihazın mevcut UMD sürümünde artık kullanılmayan eski komutları da içerir.
Politika, üretim ortamında eski ve hata ayıklama komutlarını engellemeyi, ölçüm komutlarını ise kabukla veya hata ayıklanabilir olarak işaretlenmiş uygulamalarla sınırlamayı amaçlıyor. Üretim komutları normal uygulamalara açık kalıyor.
SELinux politikasının aşamalı olarak kullanıma sunulması
Google, meşru uygulamaların çalışmasını engelleme olasılığını azaltmak için aşamalı bir yaklaşım benimsedi. Süreç isteğe bağlı bir politikayla başladı ve ölçüm komutlarını engelleyen gpu_harden adlı yeni bir SELinux niteliği oluşturuldu; ardından etkisini test etmek üzere belirli bir sistem uygulamaları grubuna uygulandı. Bu aşamada erişim girişimlerini doğrudan engellemek yerine kaydetmek için allowxperm kuralı kullanıldı ve herhangi bir çökme meydana gelmediğini doğrulamak amacıyla reddetme günlükleri izlendi.
Yaklaşımın güvenli olduğu doğrulandıktan sonra politika, daha katı bir varsayılan modele taşındı ve ölçüm komutlarına erişime izin veren gpu_debug adlı bir alan oluşturuldu. Böylece uygulamalar varsayılan olarak korunurken geliştiricilere belirli durumlarda istisna tanındı:
- Uygulamayı root yetkilerine sahip bir cihazda çalıştırmak.
- Uygulamanın bildirim dosyasında android:debuggable="true" özelliğini ayarlamak.
- Uygulamanın SELinux politikasında kalıcı bir istisna talep etmek.
Politikanın cihazlara uygulanma adımları
Google, ortakların ve daha geniş ekosistemin benzer bir mekanizmayı benimsemesine yardımcı olmak için, genel politika mantığını her cihaza veya sürücüye ilişkin ayrıntılardan ayıran kılavuzlar sunuyor. Süreç, Android platformu düzeyinde system/sepolicy içinde bulunan genel bir makro modülünün kullanılmasıyla başlıyor. Bu modül /sepolicy/public/te_macros dosyasında yer alıyor ve cihaz politikalarının filtrelenmesi gereken IOCTL komut listelerini aktarmasına olanak tanıyor.
Modül; tüm uygulamaların veya appdomain'in kısıtlanmamış komutlar listesine erişmesine, hassas ölçüm komutlarının ise uygulama hata ayıklanabilir olduğunda shell veya runas_app gibi hata ayıklama araçlarıyla sınırlandırılmasına izin verecek şekilde tasarlandı. Ayrıca hedeflenen SDK sürümüne bağlı olarak yüksek ayrıcalıklı komutları engellerken eski uygulamalarla uyumluluğu koruyor.
Daha sonra cihaz geliştiricisi, cihazın SELinux politika klasörü içinde, örneğin device/your_company/your_device/sepolicy/ioctl_macros yolunda bir ioctl_macros dosyası oluşturur ve grafik işlem birimi sürücüsüne özgü komut listelerini tanımlar. Google, en azından üretim komutları, ölçüm komutları ve hata ayıklama komutları için ayrı listeler bulunmasını ve bu listelerde sürücüye ait onaltılık IOCTL numaralarının yer almasını öneriyor.
Arm, IOCTL komutları için resmî bir sınıflandırmayı r54p2 sürümünde Documentation/ioctl-categories.rst dosyasında sundu ve listenin gelecekteki sürücü sürümleriyle güncellenmeye devam edeceğini belirtti.
Uygulamadan önce test
Bir sonraki adımda politika, cihaz politika klasöründe bir gpu.te dosyası oluşturulması, ardından genel makro modülünün çağrılması ve cihaz etiketiyle önceden tanımlanmış IOCTL listelerinin aktarılması yoluyla grafik işlem biriminin cihaz düğümüne uygulanır.
Google, SELinux politikasının geliştirilmesinin test, iyileştirme ve ardından uygulamayı içeren yinelemeli bir süreç olması gerektiğini vurguluyor. Bu yaklaşım, gerçek kullanım verilerinin toplanmasını, istisna gerektirebilecek durumların keşfedilmesini ve geniş kısıtlamaların baştan uygulanması yerine politikanın kapsamının kademeli olarak genişletilmesini sağlıyor.
Google, saldırı yüzeyini küçültmenin yalnızca bilinen güvenlik açıklarına karşı koruma sağlamadığını, aynı zamanda henüz keşfedilmemiş veya gelecekte ortaya çıkabilecek güvenlik açıklarını da kısıtlanmış yollar üzerinden erişilemez hâle getirebileceğini düşünüyor. Bu yaklaşımın genişletilmesi Android, cihaz üreticileri ve ekosistem ortakları arasında iş birliği gerektiriyor. Android güvenlik ekipleri ise bu önlemlerin daha geniş ölçekte benimsenmesini desteklemeye kararlı olduklarını belirtti.