Bellek güvenliği

Bellek güvenliğinin olmaması

Android kod tabanlarında en yaygın sorun, yerel programlama dillerinde bellek kullanımıyla ilgili hatalar ve bellek güvenliğiyle ilgili hatalar (bellek kullanımıyla ilgili hatalar) olarak karşımıza çıkar. Bu tür hatalar, yüksek önem düzeyindeki güvenlik açıklarının% 60'ından fazlasını ve kullanıcıların gördüğü milyonlarca kilitlenmeyi oluşturur.

 Bellek güvenliğiyle ilgili hatalar kullanıcı deneyimini, maliyetleri ve güvenliği etkiler.
Şekil 1: Bellek güvenliğiyle ilgili hatalar ve bu hataların kalite, güvenlik ve maliyetler üzerindeki olumsuz etkisi

Bellek güvenliğiyle ilgili hatalar kaliteyi ve kararlılığı olumsuz etkiler ve son kullanıcı cihazlarında gözlemlenen kilitlenmelerin önemli bir kısmını oluşturur. Bu nedenle, hafıza güvenliğiyle ilgili hataların yüksek yoğunluğu doğrudan kötü kullanıcı deneyimiyle ilişkilidir.
C, C++ ve Assembly gibi bellek açısından güvenli olmayan dillerde yazılmış doğal kod, Android platform kodunun% 70'inden fazlasını temsil eder ve Google Play Store uygulamalarının yaklaşık% 50'sinde bulunur.
Kodun giderek artan karmaşıklığı göz önüne alındığında, dikkate alınmazsa hafıza güvenliğiyle ilgili hatalar zaman içinde artacaktır. Bu nedenle, ekosistemimize bu tür hataları tespit edip azaltabilecek araçlar ve teknolojiler sunmak uzun vadeli başarımız için kritik önem taşıyor.
Son birkaç yıldır Arm Bellek Etiketleme gibi donanım teknolojileri geliştirmek için donanım iş ortaklarımızla yakın bir şekilde çalışıyoruz ve Android kod tabanında Rust'ı kullanıma sunduk.
Bu teknolojiler, bellek güvenliğine giden yolumuzu hızlandıracak ve daha geniş yazılım sektörünün önemli bir sorun alanını ele almasına yardımcı olacaktır.

Bellek güvenliğiyle ilgili hatalar kaliteyi olumsuz etkiler

Gizli bellek güvenliğiyle ilgili hatalar, sistemin durumuna bağlı olarak kesin olmayan sonuçlara neden olabilir. Bu öngörülemeyen davranış, kilitlenmelere ve kullanıcılarımızın canını sıkan durumlara yol açmaktadır.

Her gün son kullanıcı cihazlarında milyonlarca yerel kilitlenme gözlemliyoruz. GWP-ASan'ın kullanıma sunulmasıyla birlikte, bunların çoğunun bellek güvenliği hatalarından kaynaklandığını tespit ettik.
Bu veri noktası, bellek güvenliği hatalarının kalitesi ve yoğunluğu arasındaki korelasyonla ilgili doğrulama sağlar ve Chrome'daki iş arkadaşlarımızın gözlemleriyle uyumludur (Chrome GWP-ASan hatalarının önemli listesi bölümüne bakın).

Bellek güvenliğiyle ilgili hatalar güvenliği olumsuz etkiler

Bellek güvenliğiyle ilgili hatalar, ilk Android sürümünden bu yana Android güvenlik açıklarına en çok katkıda bulunan unsur olmuştur.

Bellek güvenliğiyle ilgili hatalar güvenliği olumsuz yönde etkiler.
Şekil 2: Android güvenlik açıklarına hafıza güvenliği hatalarının katkısı

Bunun yalnızca Android'e özgü bir sorun olmadığını bilmek cesaret verici olsa da (Chrome ve Microsoft istatistiklerine bakın) kullanıcılarımızın güvenliği için daha fazlasını yapmamız gerekiyor.
Google'ın Project Zero ekibi, kullanıcılara karşı gerçek saldırılarda kullanılan sıfır gün açıklarını sıfır gün güvenlik açığı olarak izler. Bunlar varsayımsal hatalar değil, kullanıcılara karşı saldırılarda aktif olarak kullanılan açıklardır. Bellek güvenliğiyle ilgili hatalar (bellek bozulması ve serbest bırakıldıktan sonra kullanma) bu sorunların büyük bir kısmını oluşturur.

Bellek güvenliğiyle ilgili hatalar maliyetleri artırır

Cihazları güvenlik düzeltmeleriyle güncel tutmak kullanıcılarımızın güvenliğini sağlar ancak ekosistemimiz için maddi bir maliyeti vardır.

Genellikle özel değişiklikler içeren düşük düzey tedarikçi kodunda bellek güvenliğiyle ilgili hataların yüksek yoğunluğu, düzeltme ve test maliyetlerini önemli ölçüde artırır. Ancak bu hataları geliştirme döngüsünün erken aşamalarında tespit etmek bu maliyetleri düşürebilir.

Araştırmalar, hataları daha erken tespit etmenin maliyetleri altı kat azaltabileceğini gösteriyor. Ancak ekosistemimizin karmaşıklığı, bir tedarikçi firma tarafından yönetilen ortalama kod tabanı sayısı ve yazılımların giderek artan karmaşıklığı göz önüne alındığında, tasarruflar daha yüksek olabilir.

Bellek güvenliği

Android 12'den itibaren, Android kod tabanlarındaki hafıza güvenliği hatalarının yoğunluğunu azaltmak için sistemsel değişiklikler yaptık. Android bellek güvenliği araçlarını genişletiyor ve ekosistemimizi bu kategorideki hataları gidermeye teşvik edecek yeni şartlar uyguluyoruz. Bu değişiklikler, zaman içinde kullanıcılarımız için daha yüksek kalite ve daha iyi güvenlik, tedarikçilerimiz için ise daha düşük maliyetler anlamına gelecektir.

Bellek güvenliğinin önümüzdeki yıllarda kalite ve güvenlik açısından belirleyici bir unsur haline gelmesi bekleniyor. Android bu alanda öncü olmayı planlıyor.

Bellek güvenliğini destekleyen şartlar

Android Uyumluluk Tanımlama Belgesi (CDD), geliştirme sırasında bellek güvenliği araçlarının kullanılmasını önemle tavsiye eder.
Bellek güvenliği araçlarının kullanımını artırmak ve bunları sürekli entegrasyon ve test süreçlerine entegre etmek için ekosistemimizle yakın bir şekilde çalışıyoruz.
Zaman içinde, her cihazın hafıza güvenliği araçlarını kullanarak tam bir Uyumluluk Test Paketi (CTS) çalıştırmasını ve bu tür bir hatanın bulunmadığını doğrulamasını isteriz. Örneğin, Arm v9 platformlarının Bellek Etiketleme'nin etkin olduğu bir CTS çalıştırması sağlaması gerekirken Arm v8 platformlarından HWASAN ve KASAN'ı kullanan bir CTS çalıştırması istenecektir.

Platform kodu için yeni bir programlama dili olarak Rust

Android 12, platform dili olarak Rust'u kullanıma sundu. Rust, C/C++'ye benzer performans seviyelerinde bellek ve iş parçacığı güvenliği sağlar. Rust'ın, yeni yerel projelerin çoğunda tercih edilen seçenek olmasını bekliyoruz. Ancak şu anda Android platform kodunun% 70'inden fazlasını temsil eden tüm güvenli olmayan bellek kodunun Rust'ta yeniden yazılması mümkün değildir. Bundan sonra Rust, bellek güvenliği araçlarını tamamlayacak.

Bellek güvenliği araçları

Android, bellek güvenliği hatalarını tespit etmeye yardımcı olan çok çeşitli araçları destekler. Aşağıdaki şekilde, mevcut Android bellek güvenliği araçlarının sınıflandırması gösterilmektedir.

Bellek güvenliğiyle ilgili hatalar güvenliği olumsuz yönde etkiler.
Şekil 3: Android bellek güvenliği araçları görünümü

Araçlar, çok çeşitli dağıtım senaryolarını ve hedeflerini kapsar. Aşağıdaki dokümanlar her bir aracı açıklar ve bunları ürünlerinizde kullanmayla ilgili referans sağlar.