Bellek güvenliği

Bu sayfada, bellek güvenliği hataları ve araçları açıklanmaktadır.

Bellek güvenliği ihlali

Bellek güvenliği hataları, yerel programlama dillerinde belleğin işlenmesiyle ilgili hatalar, Android kod tabanlarında en sık karşılaşılan sorundur. Bu güvenlik açıkları, yüksek önem düzeyli güvenlik açıklarının% 60'ından fazlasını ve kullanıcıların görebildiği milyonlarca kilitlenmeyi oluşturur.

 Bellek güvenliği hataları, kullanıcı deneyimini, maliyetleri ve güvenliği etkiler.

Şekil 1. Bellek güvenliği hataları ve bunların kalite, güvenlik ve maliyetler üzerindeki olumsuz etkisi.

Bellek güvenliği hataları, kalite ve kararlılığı olumsuz etkiler ve son kullanıcı cihazlarında gözlemlenen kilitlenmelerin önemli bir bölümünü oluşturur. Bu nedenle, yüksek yoğunlukta bellek güvenliği hatası, doğrudan kötü kullanıcı deneyimiyle ilişkilidir.
C, C++ ve Assembly gibi belleğin güvenli olmadığı dillerde yazılan yerel kod, Android platform kodunun% 70'inden fazlasını oluşturur ve Google Play Store uygulamalarının yaklaşık% 50'sinde bulunur.
Kodun karmaşıklığı sürekli arttığı için ilgilenilmediği takdirde zamanla bellek güvenliği hataları 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şımaktadır.
Son birkaç yıldır, donanım iş ortaklarımızla yakın bir şekilde çalışarak Arm bellek etiketleme gibi donanım teknolojileri geliştirdik 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ği hataları kaliteyi olumsuz etkiler.

Gizli bellek güvenliği hataları, sistemin durumuna bağlı olarak deterministik olmayan sonuçlara neden olabilir. Bu öngörülemeyen davranış, kullanıcılarımız için çökmelere ve rahatsızlığa yol açar.

Her gün son kullanıcı cihazlarından milyonlarca yerel kilitlenme gözlemliyoruz ve 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 ile yoğunluğu arasındaki korelasyonu doğrular ve Chrome'daki meslektaşlarımızın gözlemleriyle uyumludur (Chrome GWP-ASan bug hotlist'e bakın).

Bellek güvenliği hataları, güvenliği olumsuz etkiler.

Bellek güvenliği hataları, ilk Android sürümünden bu yana Android güvenlik açıklarının en büyük nedeni olmuştur.

Bellek güvenliği hataları, güvenliği olumsuz etkiler.

Şekil 2. Bellek güvenliği hataları, Android'deki güvenlik açıklarına katkıda bulunur.

Bu sorunun yalnızca Android'e özgü 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'daki Project Zero ekibi, kullanıcıları hedef alan gerçek saldırılarda kullanılan sıfır gün açıklarını sıfır gün güvenlik açıkları olarak izler. Bunlar varsayımsal hatalar değil, kullanıcılara yönelik saldırılarda aktif olarak kullanılan güvenlik açıklarıdır. Bellek güvenliği hataları (bellek bozulması ve serbest bırakıldıktan sonra kullanma) büyük çoğunluğu oluşturur.

Bellek güvenliği hataları maliyetleri artırır

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

Genellikle özel değişiklikler içeren düşük seviyeli satıcı kodundaki bellek güvenliği hatalarını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ına kadar azaltabileceğini gösteriyor. Ancak ekosistemimizin karmaşıklığı, bir satıcı tarafından yönetilen ortalama kod tabanı sayısı ve yazılımın giderek artan karmaşıklığı göz önüne alındığında tasarruf daha yüksek olabilir.

Bellek güvenliği

Android 12 ve sonraki sürümlerde, Android kod tabanlarındaki bellek güvenliği hatalarının yoğunluğunu azaltmak için sistem genelinde değişiklikler yapıldı. Android bellek güvenliği araçlarını genişletiyor ve ekosistemimizi bu hata kategorisini ele almaya teşvik eden yeni şartlar getiriyoruz. 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 sağlayacaktır.

Bellek güvenliği, önümüzdeki yıllarda kalite ve güvenlik açısından önemli bir fark yaratacak ve Android bu alanda öncülük etmeyi 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 tam bir Uyumluluk Test Paketi (CTS) çalıştırmasını geçmesini sağlamak istiyoruz. Bu çalıştırmada, bellek güvenliği araçları kullanılarak bu tür hataların bulunmadığı gösterilir. Örneğin, Arm v9 platformlarının bellek etiketleme etkinleştirilmiş bir CTS çalıştırması sağlaması gerekirken Arm v8 platformlarından HWASAN ve KASAN kullanılarak bir CTS çalıştırması sağlaması istenir.

Platform kodu için yeni bir programlama dili olarak Rust

Android 12'de platform dili olarak Rust kullanıma sunuldu. Rust, C/C++'a 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. Ancak şu anda Android platform kodunun% 70'inden fazlasını oluşturan, belleğin güvenli olmadığı tüm kodları Rust'ta yeniden yazmak mümkün değildir. Bundan sonra Rust, bellek güvenliği araçlarını tamamlayıcı bir rol üstlenecek.

Bellek güvenliği araçları

Android, bellek güvenliği hatalarını tespit etmeye yardımcı olan çeşitli araçları destekler. Aşağıdaki şekilde, kullanılabilen 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'deki bellek güvenliği araçlarının genel görünümü.

Araçlarımız çok çeşitli dağıtım senaryolarını ve hedeflerini kapsar. Bu bölümdeki belgelerde her bir araç açıklanmakta ve ürünlerinizde bu araçları kullanmayla ilgili referans bilgiler verilmektedir.