Uygulama Güvenliği En İyi 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 şiddetle tavsiye eder.

  • Kapsamı sağlamak için incelemeler yaparken kapsamlı güvenlik yönergelerini izleyin. Tutarlı ve eksiksiz incelemeler sağlamak için ilgili iç ve dış standartlardan yararlanın.
  • Android SDK'yı kullanarak tüm uygulama kodlarında Android Studio linter gibi bir linter çalıştırın ve belirlenen sorunları düzeltin.
  • Arabellek taşmaları ve tek tek hatalar gibi bellek yönetimi sorunlarını tespit edebilen otomatik bir araç kullanarak yerel kodu analiz edin.
  • Android derleme sistemi, bellekle ilgili sorunların çalışma zamanı analizi için kullanılabilen AdresSanitizer ve UnDefinitionBehaviorSanitizer gibi LLVM temizleyicilerin çoğunu destekler. Android'de libFuzzer aracılığıyla desteklenen fuzzing ile birleştirilen sanitizerler, daha fazla araştırma gerektiren sıra dışı durumları ortaya çıkarabilir.
  • Bilgili bir güvenlik değerlendiricisinin kripto para, ödeme işleme ve PII işleme gibi daha yüksek riskli kodları incelemesi gerekir.

Otomatik test

Otomatik testler, çok çeşitli güvenlik sorunlarının tespit edilmesine yardımcı olabilir ve düzenli olarak gerçekleştirilmelidir.

  • Sorunları erken tespit etmek ve düzeltme süresini kısaltmak için CTS'nin en son sürümünü geliştirme süreci boyunca düzenli olarak çalıştırın. Android, günde birden çok kez oluşturulan otomatik derleme sürecimizdeki sürekli entegrasyonun bir parçası olarak CTS'yi kullanır.
  • Hatalı girdilerle yapılan testler (fuzz testi) dahil olmak üzere arayüzlerin güvenlik testlerini otomatikleştirin. Android'in derleme sistemi, fuzz testleri yazmak için libFuzzer'ı destekler.

Güvenlik açığı taraması

Güvenlik açığı taraması, önceden yüklenmiş uygulamaların bilinen güvenlik açıklarından arınmış olmasını sağlamaya yardımcı olabilir. Gelişmiş algılama, bu güvenlik açıklarını ele almak ve kullanıcılara ve cihazlara yönelik riskleri önlemek için gereken süreyi ve maliyeti azaltabilir.

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

Potansiyel Zararlı Uygulamalar

Cihazınıza önceden yüklenmiş uygulamaların Potansiyel Olarak Zararlı Uygulamalar (PHA'lar) olmadığından emin olmak önemlidir. Cihazlarınızda bulunan tüm uygulamaların davranışından siz sorumlusunuz. Cihazı başlatmadan önce, önceden yüklenmiş tüm uygulamaları güvenlik açıklarına karşı tarayı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 Koruma geliştirici belgelerine bakın.

Uygulama kurulumu ve izinler

Önceden yüklenmiş uygulamalara aşırı izin verilmesi güvenlik riski oluşturabilir. Önceden yüklenmiş uygulamaları gerekli minimum izinlerle sınırlayın ve gereksiz izinlere veya ayrıcalıklara erişimlerinin olmadığından emin olun. Uygulama izinleri AndroidManifest.xml dosyasında açıklanmıştır.

  • Önceden yüklenmiş uygulamalara gereksiz izinler veya ayrıcalıklar vermeyin. Çok hassas izinlere sahip olabileceğinden, sistem ayrıcalıklarına sahip uygulamaları iyice inceleyin.
  • İstenen tüm izinlerin söz konusu uygulamanın işlevselliği için alakalı ve gerekli olduğundan emin olun.
  • INSTALL_PACKAGES iznini kullanan önceden yüklenmiş tüm uygulamalar için kullanıcı açıklamasının olduğundan emin olun.
  • Geliştiricinin sözleşmeye bağlı olarak herhangi bir uygulamayı UID 0 olarak yüklememekle yükümlü olduğundan emin olun.
  • Geliştiricinin ağı üzerinden yüklenecek tüm uygulamaların manifest dosyasında belirtilen izinleri değerlendirin.
  • Uygulamaları cihaza sunmadan önce geliştiricinin, sözleşmeye bağlı olarak, otomatik güncelleyici ve yükleyici uygulamalarının tüm indirme URL'lerini Google Güvenli Tarama API'sı ile taramakla yükümlü olduğundan emin olun.

Uygulama imzalama

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

  • Uygulamaların, AOSP geliştirici anahtarı gibi genel olarak bilinen bir anahtarla imzalanmadığından emin olun.
  • Uygulamaları imzalamak için kullanılan anahtarların, sınırlı, denetlenebilir erişim sağlayan bir donanım güvenlik modülü (HSM) dahil olmak üzere, hassas anahtarların işlenmesine yönelik endüstri standardı uygulamalarla tutarlı bir şekilde yönetildiğinden emin olun.
  • Uygulamaların platform anahtarıyla imzalanmadığından emin olun. Bunu yapmak, uygulamaya çok güçlü olan ve yalnızca işletim sisteminin bileşenleri tarafından kullanılması amaçlanan platform imza izinlerine erişim sağlar. Sistem uygulamaları ayrıcalıklı izinleri kullanmalıdır.
  • Aynı paket adına sahip uygulamaların farklı anahtarlarla imzalanmadığından emin olun. Bu genellikle farklı cihazlar için bir uygulama oluştururken, özellikle de platform anahtarını kullanırken meydana gelir. 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 süreçleri ayırma

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

Kök süreçlerin yalıtılması

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 gerekli minimum kodu root olarak çalıştırdığından emin olun. Mümkün olduğunda root işlemi yerine normal bir Android işlemi kullanın. Bir işlemin bir cihazda root olarak çalıştırılması gerekiyorsa, genel olarak incelenebilmesi için süreci bir AOSP özellik isteğinde belgeleyin.
  • Mümkün olduğunda, kök kodu güvenilmeyen verilerden yalıtılmalı ve süreçler arası iletişim (IPC) yoluyla erişilmelidir. Örneğin, kök işlevselliğini Binder aracılığıyla erişilebilen küçük bir Hizmete indirin ve imza iznine sahip Hizmeti, ağ trafiğini işlemek için düşük ayrıcalıklara sahip olan veya hiç ayrıcalıkları olmayan bir uygulamaya gösterin.
  • Kök süreçlerin bir ağ yuvasını dinlememesi gerekir.
  • Kök işlemler, Java VM gibi genel amaçlı bir çalışma zamanı içermemelidir).

Sistem uygulamalarını ayırma

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

  • Cihazların sistem olarak gerekli minimum kodu çalıştırdığından emin olun. Mümkün olduğunda, sistem UID'sini yeniden kullanmak yerine, kendi UID'sine sahip bir Android işlemi kullanın.
  • Mümkün olduğunda sistem kodu güvenilmeyen verilerden yalıtılmalı ve IPC yalnızca diğer güvenilir işlemlere açık hale getirilmelidir.
  • Sistem işlemleri bir ağ yuvasını dinlememelidir. Bu bir CTS gerekliliğidir.

Yalıtım süreçleri

Android Uygulama Korumalı Alanı, uygulamalara, kök işlemler ve hata ayıklayıcılar da dahil olmak üzere sistemdeki diğer işlemlerden izolasyon beklentisi sağlar. Hata ayıklama, uygulama ve kullanıcı tarafından özel olarak 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 süreçlerin ayrı uygulama veri klasörlerindeki verilere erişmediğinden emin olun.
  • Belgelenmiş bir Android hata ayıklama yöntemi kullanılmadığı sürece kök süreçlerin uygulama belleğine erişmediğinden emin olun.
  • Cihazların, diğer uygulamaların veya işlemlerin verilerine veya hafızasına erişen herhangi bir uygulamayı içermediğinden emin olun.