Uygulama güvenliği en iyi uygulamaları

Bu bölümde, Android cihazlardaki uygulamaların güvenliğini sağlamaya yönelik öneriler yer almaktadır.

Kaynak kodu incelemesi

Kaynak kodu incelemesi, bu belgede tanımlananlar da dahil olmak üzere çok çeşitli güvenlik sorunlarını tespit edebilir. Android, hem manuel hem de otomatik kaynak kodu incelemesini önemle tavsiye eder.

  • Kapsamlı güvenlik yönergelerini izleyerek incelemeler yapın ve kapsamı sağlayın. Tutarlı ve eksiksiz incelemeler sağlamak için ilgili dahili veya harici standartlardan yararlanın.
  • Android SDK'yı kullanan tüm uygulama kodlarında Android Studio linter gibi bir linter çalıştırın ve tespit edilen sorunları düzeltin.
  • Bellek yönetimi sorunlarını (ör. arabellek taşmaları ve bir eksik hataları) tespit edebilen otomatik bir araç kullanarak yerel kodu analiz edin.
  • Android derleme sistemi, bellek ile ilgili sorunların çalışma zamanı analizinde kullanılabilecek AddressSanitizer ve UndefinedBehaviorSanitizer gibi birçok LLVM temizleyicisini destekler. Android'de libFuzzer aracılığıyla desteklenen bulanıklaştırma ile birlikte kullanıldığında temizleyiciler, daha ayrıntılı inceleme gerektiren sıra dışı uç durumları ortaya çıkarabilir.
  • Bilgili bir güvenlik değerlendiricisi, şifreleme, ödeme işleme ve kimliği tanımlayabilecek bilgilerin işlenmesi gibi daha yüksek riskli kodları incelemelidir.

Otomatik test

Otomatik test, çok çeşitli güvenlik sorunlarının tespit edilmesine yardımcı olabilir ve düzenli olarak yapılmalıdır.

  • Geliştirme süreci boyunca düzenli olarak CTS'nin en yeni sürümünü çalıştırarak sorunları erken aşamada tespit edin ve düzeltme süresini kısaltın. Android, günde birden çok kez derleme yapan otomatik derleme sürecimizde sürekli entegrasyonun bir parçası olarak CTS'yi kullanır.
  • Arayüzlerin güvenlik testini otomatikleştirin. Buna, hatalı girişlerle test etme (bulanıklaştırma testi) dahildir. Android'in derleme sistemi, fuzz testleri yazmak için libFuzzer'ı destekler.

Güvenlik açığı taraması

Güvenlik açığı taraması, önceden yüklenmiş uygulamalarda bilinen güvenlik açığı bulunmadığından emin olmanıza yardımcı olabilir. Gelişmiş algılama, bu güvenlik açıklarının giderilmesi ve kullanıcılar ile cihazların riskten korunması için gereken süreyi ve maliyeti azaltabilir.

  • Sektörde tanınan bir uygulama güvenlik açığı tarama aracı kullanarak önceden yüklenmiş tüm uygulamaları tarayın ve tespit edilen güvenlik açıklarını giderin.

Potansiyel olarak zararlı uygulamalar

Cihazınızda önceden yüklenmiş uygulamaların Potansiyel Olarak Zararlı Uygulamalar (PHAs) olmadığından emin olmanız önemlidir. Cihazlarınızda bulunan tüm uygulamaların davranışlarından siz sorumlusunuzdur. Cihaz lansmanından önce, önceden yüklenmiş tüm uygulamalarda güvenlik açığı taraması yapın.

PHA'lar ve Google'ın Play Store'da bunlarla nasıl mücadele ettiği hakkında daha fazla bilgi için Google Play Protect geliştirici dokümanlarına bakın.

Uygulama yükleme ve izinleri

Önceden yüklenmiş uygulamalar için aşırı izinler güvenlik riski oluşturabilir. Önceden yüklenmiş uygulamaları gerekli olan minimum izinlerle sınırlandırın ve gereksiz izinlere veya ayrıcalıklara erişimlerinin olmamasını sağlayın. Uygulama izinleri AndroidManifest.xml dosyasında açıklanır.

  • Önceden yüklenmiş uygulamalara gereksiz izinler veya ayrıcalıklar vermeyin. Çok hassas izinlere sahip olabilecekleri için sistem ayrıcalıkları olan uygulamaları dikkatlice inceleyin.
  • İstenen tüm izinlerin, söz konusu uygulamanın işlevleri için alakalı ve gerekli olduğundan emin olun.
  • INSTALL_PACKAGES iznini kullanan tüm önceden yüklenmiş uygulamalar için kullanıcı açıklaması olduğundan emin olun.
  • Geliştiricinin, UID 0 olarak herhangi bir uygulama yüklememesi için sözleşmeyle yükümlü olduğundan emin olun.
  • Geliştiricinin ağı üzerinden yüklenecek tüm uygulamaların manifestinde belirtilen izinleri değerlendirin.
  • Geliştiricinin, uygulamaları cihaza sunmadan önce otomatik güncelleyici ve yükleyici uygulamalarının tüm indirme URL'lerini Google Güvenli Tarama API'si ile taramakla sözleşmeyle yükümlü olduğundan emin olun.

Uygulama imzalama

Uygulama imzaları, cihaz güvenliğinde önemli bir rol oynar ve izin kontrolleri ile yazılım güncellemeleri için kullanılır. Uygulamaları imzalamak için kullanılacak bir anahtar seçerken uygulamanın yalnızca tek bir cihazda mı yoksa birden fazla cihazda mı kullanılabildiğini göz önünde bulundurmak önemlidir.

  • Uygulamaların, AOSP geliştirici anahtarı gibi herkes tarafından bilinen bir anahtarla imzalanmadığından emin olun.
  • Uygulamaları imzalamak için kullanılan anahtarların, sınırlı ve denetlenebilir erişim sağlayan bir donanım güvenlik modülü (HSM) dahil olmak üzere hassas anahtarların işlenmesiyle ilgili sektör standardı uygulamalarına uygun şekilde yönetildiğinden emin olun.
  • Uygulamaların platform anahtarıyla imzalanmadığından emin olun. Bu işlem, uygulamaya platform imzası izinlerine erişim olanağı tanır. Bu izinler çok güçlüdür ve yalnızca işletim sisteminin bileşenleri tarafından kullanılmak üzere tasarlanmıştır. Sistem uygulamaları ayrıcalıklı izinler kullanmalıdır.
  • Aynı paket adına sahip uygulamaların farklı anahtarlarla imzalanmadığından emin olun. Bu durum genellikle farklı cihazlar için uygulama oluştururken, özellikle de platform anahtarı kullanılırken ortaya çıkar. Uygulama cihazdan bağımsızsa cihazlar arasında aynı anahtarı kullanın. Uygulama cihaza özelse cihaz ve anahtar başına benzersiz paket adları oluşturun.

Uygulamaları ve işlemleri yalıtma

Android korumalı alan modeli, doğru kullanıldığında uygulamalar ve işlemler için ekstra güvenlik sağlar.

Kök işlemlerini izole etme

Kök süreçler, ayrıcalık yükseltme saldırılarının en sık hedefidir. Kök süreçlerin sayısını azaltmak, ayrıcalık yükseltme riskini azaltır.

  • Cihazların, gereken minimum kodu kök olarak çalıştırdığından emin olun. Mümkün olan yerlerde, root işlemi yerine normal bir Android işlemi kullanın. Bir işlemin cihazda root olarak çalışması gerekiyorsa işlemi, herkese açık olarak incelenebilmesi için AOSP özellik isteğinde belgeleyin.
  • Mümkün olduğunda, kök kod güvenilmeyen verilerden izole edilmeli ve süreçler arası iletişim (IPC) aracılığıyla erişilmelidir. Örneğin, root işlevselliğini Binder üzerinden erişilebilen küçük bir hizmete indirgeyebilir ve hizmeti, ağ trafiğini işlemek için az veya hiç ayrıcalığı olmayan bir uygulamaya imza izniyle sunabilirsiniz.
  • Kök işlemler bir ağ yuvasını dinlememelidir.
  • Kök işlemler, Java VM gibi genel amaçlı bir çalışma zamanı içermemelidir.

Sistem uygulamalarını yalıtma

Genel olarak, önceden yüklenmiş uygulamalar paylaşılan sistem benzersiz tanımlayıcısı (UID) ile çalışmamalıdır. Bir uygulamanın sistemin veya başka bir ayrıcalıklı hizmetin (ör. telefon) paylaşılan UID'sini kullanması gerekiyorsa uygulama, kullanıcılar tarafından yüklenen üçüncü taraf uygulamaları tarafından erişilebilen hizmetleri, yayın alıcıları veya içerik sağlayıcıları dışa aktarmamalıdır.

  • Cihazların sistem olarak gereken minimum kodu çalıştırdığından emin olun. Mümkün olduğunda, sistem UID'sini yeniden kullanmak yerine kendi UID'si olan bir Android işlemi kullanın.
  • Mümkün olduğunda sistem kodu, güvenilmeyen verilerden izole edilmeli ve IPC yalnızca diğer güvenilir işlemlere sunulmalıdır.
  • Sistem işlemleri bir ağ yuvasını dinlememelidir. Bu, CTS gereksinimidir.

İşlemleri izole etme

Android uygulama korumalı alanı, uygulamalara kök işlemleri ve hata ayıklayıcılar da dahil olmak üzere sistemdeki diğer işlemlerden yalıtılma beklentisi sunar. Uygulama ve kullanıcı tarafından hata ayıklama özellikle etkinleştirilmediği sürece hiçbir uygulama bu beklentiyi ihlal etmemelidir.

  • Belgelenmiş bir Android hata ayıklama yöntemi kullanılmadığı sürece kök işlemlerin, tek tek uygulama verileri klasörlerindeki verilere erişmediğinden emin olun.
  • Belgelenmiş bir Android hata ayıklama yöntemi kullanılmadığı sürece kök işlemlerin uygulamaların belleğine erişmediğinden emin olun.
  • Cihazlarda, diğer uygulamaların veya işlemlerin verilerine ya da belleğine erişen bir uygulama bulunmadığından emin olun.