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 güvenliğiyle ilgili hatalar) olarak bilinir. 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örülen kilitlenmelerin önemli bir kısmını oluşturur. Bu nedenle, bellek güvenliği hatası sayısının yüksek olması, kötü kullanıcı deneyimiyle doğrudan 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 teknolojilerini 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 endüstrisinin ö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ği hataları, sistemin durumuna bağlı olarak belirleyici olmayan sonuçlara neden olabilir. Bu öngörülemeyen davranış, kilitlenmelere ve kullanıcılarımızın rahatsız olmasına neden oluyor.

Her gün son kullanıcıların cihazlarından milyonlarca yerel kilitlenme gözlemliyoruz. GWP-ASan'ın kullanıma sunulmasıyla bunların çoğunu bellek güvenliği hatalarıyla 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 iş arkadaşlarımızın gözlemleriyle uyumludur (Chrome GWP-ASan hata önem 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 sadece Android'le ilgili 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 güvenlik açıklarıdı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.

Düşük düzey tedarikçi kodunda bellek güvenliğiyle ilgili hataların yüksek yoğunluğu (genellikle özel değişiklikler içerir) 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 maliyeti altı kata kadar azaltabileceğini gösteriyor. Ancak ekosistemimizin karmaşıklığı, bir tedarikçinin yönettiği ortalama kod tabanı sayısı ve yazılımın gittikçe artan karmaşıklığı göz önünde bulundurulduğunda daha fazla tasarruf sağlayabiliriz.

Bellek güvenliği

Android 12'den itibaren Android kod tabanlarında bellek güvenliği hatalarının yoğunluğunu azaltmak için sistemli 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ı gerekirken Arm v8 platformlarının HWASAN ve KASAN kullanarak CTS çalıştırması istenir.

Platform kodu için yeni bir programlama dili olarak Rust

Android 12, platform dili olarak Rust'ı kullanıma sundu. Rust, C/C++ ile benzer performans seviyelerinde bellek ve iş parçacığı güvenliği sağlar. Rust'ın çoğu yeni yerel proje için tercih edilen seçenek olmasını bekliyoruz. Bununla birlikte, şu anda Android platform kodunun% 70'inden fazlasını temsil eden güvenli olmayan bellek kodlarının tümünün 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ın tespit edilmesine yardımcı olan ç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ği hataları, güvenliği olumsuz 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.