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 kod incelemesini önemle tavsiye eder.
- Kapsamı sağlamak için inceleme yaparken kapsamlı güvenlik yönergelerine uyun. Tutarlı ve eksiksiz incelemeler yapmak için ilgili dahili veya harici standartları kullanın.
- Android SDK'sını kullanarak tüm uygulama kodunda Android Studio linter gibi bir linter çalıştırın ve tespit edilen sorunları düzeltin.
- Arabellek taşmaları ve bir sayı hatası gibi bellek yönetimi sorunlarını algılayabilen otomatik bir araç kullanarak yerel kodu analiz edin.
- Android derleme sistemi, hafızayla ilgili sorunların çalışma zamanında analizi için kullanılabilen AddressSanitizer ve UndefinedBehaviorSanitizer gibi birçok LLVM temizleyiciyi destekler. Android'de libFuzzer aracılığıyla desteklenen fuzzing ile birlikte kullanılan temizleyiciler, daha fazla inceleme gerektiren sıra dışı uç durumları ortaya çıkarabilir.
- Bilgili bir güvenlik denetçisi, kripto, ödeme işlemleri ve kimliği tanımlayabilecek bilgiler (PII) işleme gibi daha yüksek riskli kodları incelemelidir.
Otomatik test
Otomatik test, çok çeşitli güvenlik sorunlarını tespit etmeye yardımcı olabilir ve düzenli olarak yapılmalıdır.
- Sorunları erken tespit etmek ve düzeltme süresini kısaltmak için geliştirme süreci boyunca CTS'nin en son sürümünü düzenli olarak çalıştırın. Android, otomatik derleme sürecimizde sürekli entegrasyon kapsamında CTS'yi kullanır. Bu süreç günde birkaç kez derleme yapar.
- Hatalı girişlerle test etme (fuzz testi) dahil olmak üzere arayüzlerin güvenlik testini 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ındırılmasını sağlamaya yardımcı olabilir. Gelişmiş algılama, bu güvenlik açıklarını gidermek ve kullanıcılar ile cihazlar için riskleri önlemek 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 Zararlı Uygulamalar
Cihazınızda önceden yüklenmiş uygulamaların Potansiyel Olarak Zararlı Uygulamalar (PHA'lar) olmadığından emin olmanız önemlidir. Cihazlarınıza dahil edilen tüm uygulamaların davranışından siz sorumlusunuz. Cihaz lansmanından önce, önceden yüklenmiş tüm uygulamaları güvenlik açıkları açısından 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 Protect geliştirici dokümanlarını inceleyin.
Uygulama yükleme ve izinler
Önceden yüklenmiş uygulamalar için çok fazla izin verilmesi güvenlik riski oluşturabilir. Önceden yüklenmiş uygulamaları gerekli minimum izinlerle kısıtlayın ve gereksiz izinlere veya ayrıcalıklara erişemediklerinden emin olun. 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ına sahip uygulamaları ayrıntılı bir şekilde inceleyin.
- İstenen tüm izinlerin, söz konusu uygulamanın işlevi için alakalı ve gerekli olduğundan emin olun.
INSTALL_PACKAGES
iznini kullanan tüm önceden yüklenmiş uygulamalarda kullanıcı açıklamalarının bulunduğundan emin olun.- Geliştiricinin, UID 0 olarak hiçbir uygulama yüklememeye sözleşmeden bağlı olduğundan emin olun.
- Geliştiricinin ağı üzerinden yüklenecek tüm uygulamaların manifest dosyasında belirtilen izinleri değerlendirin.
- Geliştiricinin, uygulamayı cihaza sunmadan önce otomatik güncelleyici ve yükleyici uygulamalarının tüm indirme URL'lerini Google Güvenli Tarama API ile taramakla sözleşmeden doğan bir yükümlülüğü 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 anahtarı seçerken uygulamanın yalnızca tek bir cihazda mı yoksa birden fazla cihazda mı kullanılabildiğini göz önünde bulundurmanız önemlidir.
- Uygulamaların, herkes tarafından bilinen bir anahtarla (ör. AOSP geliştirici anahtarı) 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 ele alınmasıyla ilgili endüstri standardı uygulamalara uygun şekilde yönetildiğinden emin olun.
- Uygulamaların platform anahtarıyla imzalanmadığından emin olun. Bu işlem, uygulamaya platform imza izinlerine erişim sağlar. Bu izinler çok güçlüdür ve yalnızca işletim sisteminin bileşenleri tarafından kullanılması amaçlanmış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ıldığında 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 ayırma
Android korumalı alan modeli, doğru kullanıldığında uygulamalar ve işlemler için ekstra güvenlik sağlar.
Kök işlemleri izole etme
Kök süreçler, yetki yükseltme saldırılarının en sık hedefidir. Kök süreç sayısını azaltmak, yetki yükseltme riskini azaltır.
- Cihazların, gereken minimum kodu root olarak çalıştırdığından emin olun. Mümkünse kök işlem 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.
- Kök kod mümkün olduğunda güvenilmeyen verilerden izole edilmeli ve işlemler arası iletişim (IPC) aracılığıyla erişilmelidir. Örneğin, kök işlevini Binder üzerinden erişilebilen küçük bir hizmete indirin ve imza izni olan hizmeti, ağ trafiğini yönetmek için düşük ayrıcalıklara sahip veya ayrıcalığı olmayan bir uygulamaya gösterin.
- Kök süreçler bir ağ soketinde dinlememelidir.
- Kök işlemler, Java sanal makinesi 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 ayrıcalıklı başka bir hizmetin (ör. telefon) paylaşılan UID'sini kullanması gerekiyorsa kullanıcılar tarafından yüklenen üçüncü taraf uygulamaları tarafından erişilebilecek hizmetler, yayın alıcıları veya içerik sağlayıcılar dışa aktarılmamalıdır.
- Cihazların sistem olarak gereken minimum kodu çalıştırdığından emin olun. Mümkünse 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'yi yalnızca diğer güvenilir işlemlere açmalıdır.
- Sistem işlemleri bir ağ soketinde dinlememelidir. Bu, CTS şartıdır.
İşlemleri izole etme
Android Uygulama Korumalı Alanı, uygulamalara kök işlemler ve hata ayıklayıcılar da dahil olmak üzere sistemdeki diğer işlemlerden yalıtılmış bir ortam sunar. Hata ayıklama işlemi 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, root işlemlerinin tek tek uygulama veri 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.