Bellek Güvenliği

Bellek güvensizliği

Bellek güvenliği hataları, yerel programlama dillerinde belleğin işlenmesindeki hatalar, Android kod tabanlarında en yaygın sorundur. Yüksek önem derecesine sahip güvenlik açıklarının %60'ından fazlasının ve kullanıcıların görebildiği milyonlarca çökmenin nedeni bunlardır.

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 etkileri

Bellek güvenliği hataları, kaliteyi ve kararlılığı olumsuz etkiler ve son kullanıcı cihazlarında gözlemlenen çökmelerin önemli bir kısmına neden olur. Bu nedenle, yüksek yoğunluktaki bellek güvenliği hataları, kötü kullanıcı deneyimiyle doğrudan ilişkilidir.
C, C++ ve Assembly gibi belleğe güvenli olmayan dillerde yazılan yerel kod, Android platform kodunun %70'inden fazlasını temsil eder ve Play Store uygulamalarının yaklaşık %50'sinde bulunur.
Kodun giderek artan karmaşıklığı göz önüne alındığında, dikkat edilmediği takdirde bellek güvenliği hataları zamanla artacaktır. Bu nedenle ekosistemimize bu tür hataları tespit edip azaltabilecek araç ve teknolojileri sağlamak, uzun vadeli başarımız açısından kritik öneme sahiptir.
Son birkaç yıldır, Arm Memory Tagging gibi donanım teknolojilerini geliştirmek için donanım ortaklarımızla yakın işbirliği içerisinde çalışıyoruz ve Rust'u Android kod tabanına dahil ettik.
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ı olacak.

Bellek güvenliği hataları kaliteyi olumsuz etkiliyor

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

Her gün son kullanıcı cihazlarından milyonlarca yerel çökme gözlemliyoruz ve GWP-ASan'ın kullanıma sunulmasıyla bunların çoğunluğ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 ilişkiyi doğrular ve Chrome meslektaşlarımızın gözlemleriyle uyumludur (bkz. Chrome GWP-ASan hata listesi ).

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

Bellek güvenliği hataları, ilk Android sürümüne kadar uzanan bir geçmişe sahip olup, Android güvenlik açıklarına sürekli olarak en çok katkıda bulunanlardan biri olmuştur.

Bellek güvenliği hataları güvenliği olumsuz etkiler.
Şekil 2 : Bellek güvenliği hatalarının Android güvenlik açıklarına 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'daki Project Zero ekibi, kullanıcılara yönelik 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 izliyor . Bunlar varsayımsal hatalar değil, kullanıcılara yönelik saldırılarda aktif olarak kullanılan istismarlardır. Bellek güvenliği hataları (bellek bozulması ve serbest kullanım sonrası) büyük çoğunluğu oluşturur.

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

Cihazları güvenlik düzeltmeleriyle güncel tutmak kullanıcılarımızı güvende tutar ancak ekosistemimize maddi bir maliyet getirir.

Genellikle özel modifikasyonlara sahip olan düşük seviyeli satıcı kodundaki yüksek yoğunluktaki bellek güvenliği hataları, düzeltme ve test maliyetlerini önemli ölçüde artırır. Ancak bu hataların geliştirme döngüsü sırasında erken tespit edilmesi bu maliyetleri azaltabilir.

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

Bellek güvenliği

Android 12'den başlayarak, Android kod tabanlarındaki bellek güvenliği hatalarının yoğunluğunu azaltmak için sistemik değişiklikler yaptık. Android bellek güvenliği araçlarını genişletiyor ve ekosistemimizi bu hata kategorisine çözüm bulmaya teşvik eden yeni gereksinimler sunuyoruz. Zamanla bunlar, kullanıcılarımız için daha yüksek kalite ve daha iyi güvenlik, tedarikçilerimiz içinse daha düşük maliyetler anlamına gelecektir.

Bellek güvenliğinin önümüzdeki yıllarda kalite ve güvenlik açısından fark yaratacak bir unsur olması muhtemeldir ve Android bu yolda öncülük etmeyi planlıyor.

Bellek güvenliğini destekleyen gereksinimler

Android Uyumluluk Tanımı Belgesi (CDD), geliştirme sırasında bellek güvenliği araçlarının kullanılmasını şiddetle 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 işbirliği içinde çalışıyoruz.
Zamanla, her cihazın bellek güvenlik araçlarını kullanarak tam Uyumluluk Testi Paketi ( CTS ) çalıştırmasını geçmesini sağlamak istiyoruz; bu, bu tür bir hatanın bulunmadığını gösterir. Örneğin, Arm v9 platformlarının Bellek Etiketleme etkinleştirilmiş bir CTS çalıştırması sağlaması gerekirken Arm v8 platformlarının HWASAN ve KASAN kullanarak bir CTS çalıştırması sağlaması istenecektir.

Platform kodu için yeni bir programlama dili olarak Rust

Android 12 , Rust'u bir platform dili olarak tanıttı. Rust, C/C++'a benzer performans düzeylerinde bellek ve iş parçacığı güvenliği sağlar. Rust'un çoğu yeni yerel proje için tercih edilen seçenek olmasını bekliyoruz. Ancak, şu anda Android platform kodunun %70'inden fazlasını temsil eden güvenli olmayan bellek kodunun tamamını Rust'ta yeniden yazmak mümkün değil. İleriye dönük olarak Rust, bellek güvenliği araçlarını tamamlayıcı nitelikte olacaktır.

Bellek güvenliği araçları

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

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

Araçlarımız çok çeşitli dağıtım senaryolarını ve hedeflerini kapsar. Aşağıdaki belgelerde her bir araç açıklanmakta ve bunları ürünlerinizde kullanmak için bir referans sağlanmaktadır.