Güvenliği uygulama

Android Güvenlik Ekibi, Android cihazlardaki olası güvenlik sorunlarını önleme hakkında düzenli olarak bilgi istekleri alır. Ayrıca, zaman zaman cihazları kontrol eder ve cihaz üreticilerini ve etkilenen iş ortaklarını olası sorunlardan haberdar ederiz.

Bu sayfada, geliştiricilere sunduğumuz Güvenlik için Tasarım dokümanlarını genişleten ve cihazlara sistem düzeyinde yazılım oluşturmaya veya yüklemeye özgü ayrıntılar içeren, deneyimlerimize dayalı güvenlikle ilgili en iyi uygulamalar sunulmaktadır.

Android Güvenlik Ekibi, bu en iyi uygulamaların benimsenmesini kolaylaştırmak için mümkün olduğunda Android Uyumluluk Test Paketi'ne (CTS) ve Android Lint'e testler ekler. Cihaz uygulayıcılarını, diğer Android kullanıcılarına yardımcı olabilecek testler sunmaya teşvik ediyoruz (Güvenlikle ilgili testleri root/cts/tests/tests/security/src/android/security/cts adresinde görebilirsiniz).

Geliştirme süreci

Geliştirme süreçlerinizde ve ortamınızda aşağıdaki en iyi uygulamalardan yararlanın.

Kaynak kodunu inceleme

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. En iyi uygulamalar:

  • Android SDK'sını kullanarak tüm uygulama kodunda Android Lint'i çalıştırın ve tespit edilen sorunları düzeltin.
  • Yerel kod, arabellek taşmaları ve bir sayı hatası gibi bellek yönetimi sorunlarını algılayabilen otomatik bir araç kullanılarak analiz edilmelidir.
  • Android derleme sistemi, bu amaçla kullanılabilecek AddressSanitizer ve UndefinedBehaviorSanitizer gibi birçok LLVM temizleyiciyi destekler.

Otomatik testleri kullanma

Otomatik test, aşağıda açıklanan çeşitli sorunlar da dahil olmak üzere çok çeşitli güvenlik sorunlarını algılayabilir. En iyi uygulamalar:

  • CTS, güvenlik testleriyle düzenli olarak güncellenir. Uyumluluğu doğrulamak için CTS'nin en son sürümünü çalıştırın.
  • Sorunları erken tespit etmek ve düzeltme süresini kısaltmak için CTS'yi geliştirme süreci boyunca 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 birden fazla kez derleme yapar.
  • Cihaz üreticileri, hatalı girişlerle test etme (fuzz testi) dahil olmak üzere arayüzlerin güvenlik testini otomatikleştirmelidir.

Tabela sistemi resimleri

Sistem görüntüsünün imzası, cihazın bütünlüğünü belirlemek için kritik öneme sahiptir. En iyi uygulamalar:

  • Cihazlar, herkes tarafından bilinen bir anahtarla imzalanmamış olmalıdır.
  • Cihazları imzalamak için kullanılan anahtarlar, sınırlı ve denetlenebilir erişim sağlayan bir donanım güvenlik modülü (HSM) dahil olmak üzere hassas anahtarlarla ilgili endüstri standardı uygulamalarla tutarlı bir şekilde yönetilmelidir.

Uygulamaları (APK'ları) imzalama

Uygulama imzaları, cihaz güvenliğinde önemli bir rol oynar ve yazılım güncellemelerinin yanı sıra izin kontrolleri 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ılacağını göz önünde bulundurmanız önemlidir. En iyi uygulamalar:

  • Uygulamalar herkes tarafından bilinen bir anahtarla imzalanmamış olmalıdır.
  • Uygulamaları imzalamak için kullanılan anahtarlar, sınırlı ve denetlenebilir erişim sağlayan bir HSM de dahil olmak üzere hassas anahtarları işlemeyle ilgili endüstri standardı uygulamalara uygun şekilde yönetilmelidir.
  • Uygulamalar platform anahtarıyla imzalanmamış olmalıdır.
  • Aynı paket adına sahip uygulamalar farklı anahtarlarla imzalanmalıdır. 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.

Uygulama yayınlama

Google Play, cihaz üreticilerine tam sistem güncellemesi yapmadan uygulamaları güncelleme olanağı sunar. Bu sayede güvenlik sorunlarına daha hızlı yanıt verebilir, yeni özellikleri daha hızlı sunabilir ve uygulamanızın benzersiz bir paket adına sahip olmasını sağlayabilirsiniz. En iyi uygulamalar:

  • Tam kablosuz (OTA) güncelleme gerektirmeden otomatik güncellemelere izin vermek için uygulamalarınızı Google Play'e yükleyin. Yüklenen ancak yayınlanmayan uygulamalar kullanıcılar tarafından doğrudan indirilemez ancak güncellenmeye devam eder. Uygulamayı daha önce yüklemiş olan kullanıcılar uygulamayı yeniden yükleyebilir ve/veya başka cihazlara yükleyebilir.
  • Şirket ticari markasını kullanarak şirketinizle açıkça ilişkilendirilmiş bir uygulama paketi adı oluşturun.
  • Üçüncü taraf kullanıcıların paket adı kimliğine bürünmesini önlemek için cihaz üreticileri tarafından yayınlanan uygulamalar Google Play Store'a yüklenmelidir. Bir cihaz üreticisi, uygulamayı Play Store'da yayınlamadan bir cihaza yüklerse başka bir geliştirici aynı uygulamayı yükleyebilir, aynı paket adını kullanabilir ve uygulamanın meta verilerini değiştirebilir. Uygulama kullanıcıya sunulduğunda bu alakasız meta veriler kafa karışıklığına neden olabilir.

Olaylara yanıt verme

Kuruluş dışı tarafların, cihaza özgü güvenlik sorunları hakkında cihaz üreticileriyle iletişime geçebilmesi gerekir. Güvenlik olaylarını yönetmek için herkese açık bir e-posta adresi oluşturmanızı öneririz. En iyi uygulamalar:

  • guvenlik@sirketiniz.com veya benzer bir adres oluşturup bunu herkese açık hale getirin.
  • Android OS'i veya birden fazla cihaz üreticisinin Android cihazlarını etkileyen bir güvenlik sorunu fark ederseniz güvenlik hatası raporu göndererek Android Güvenlik Ekibi ile iletişime geçmeniz gerekir.

Ürünleri uygulama

Ürün uygularken aşağıdaki en iyi uygulamalardan yararlanın.

Kök işlemleri izole etme

Kök süreçler, yetki yükseltme saldırılarının en sık hedefidir. Bu nedenle, kök süreç sayısını azaltmak, yetki yükseltme riskini azaltır. CTS, kök işlemleri listeleyen bir bilgi testi içerir. En iyi uygulamalar:

  • Cihazlar, gerekli minimum kodu kök olarak çalıştırmalıdır. Mümkünse kök işlem yerine normal bir Android işlemi kullanın. ICS Galaxy Nexus'ta yalnızca altı kök işlem bulunur: vold, inetd, zygote, tf_daemon, ueventd ve init. Bir işlemin cihazda root olarak çalışması gerekiyorsa işlemi, herkese açık olarak incelenebilmesi için AOSP özellik isteğinde açıklayın.
  • Kök kod mümkün olduğunda güvenilmeyen verilerden izole edilmeli ve IPC üzerinden erişilmelidir. Örneğin, root işlevini Binder aracılığıyla erişilebilen küçük bir hizmete indirin ve hizmeti, ağ trafiğini işleme konusunda düşük ayrıcalıklara sahip veya hiç ayrıcalığı olmayan bir uygulamaya imza izniyle gösterin.
  • Kök süreçler bir ağ soketinde dinlememelidir.
  • Kök işlemler, uygulamalar için genel amaçlı bir çalışma zamanı (ör. Java sanal makinesi) sağlamamalıdır.

Sistem uygulamalarını yalıtma

Genel olarak, önceden yüklenmiş uygulamalar paylaşılan sistem UID'si ile çalışmamalıdır. Bununla birlikte, bir uygulamanın sistemin veya başka bir ayrıcalıklı hizmetin paylaşılan UID'sini kullanması gerekiyorsa kullanıcılar tarafından yüklenen üçüncü taraf uygulamaları tarafından erişilebilecek hiçbir hizmeti, yayın alıcısını veya içerik sağlayıcıyı dışa aktarmamalıdır. En iyi uygulamalar:

  • Cihazlar, sistem olarak gerekli minimum kodu çalıştırmalıdır. 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.

İş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, uygulama ve kullanıcı tarafından özel olarak etkinleştirilmediği sürece hiçbir uygulama bu beklentiyi ihlal etmemelidir. En iyi uygulamalar:

  • Root işlemleri, belgelenmiş bir Android hata ayıklama yöntemi kullanılmadığı sürece tek tek uygulama veri klasörlerindeki verilere erişmemelidir.
  • Belgelenmiş bir Android hata ayıklama yöntemi kullanılmadığı sürece kök süreçler, uygulamaların belleğine erişmemelidir.
  • Cihazlar, diğer uygulamaların veya işlemlerin verilerine ya da belleğine erişen hiçbir uygulama içermemelidir.

SUID dosyalarını güvende tutma

Yeni setuid programlarına güvenilmeyen programlar tarafından erişilemez. Setuid programları, kök erişimi elde etmek için kullanılabilecek güvenlik açıklarının sıklıkla bulunduğu yerlerdir. Bu nedenle, setuid programının güvenilmeyen uygulamalar tarafından kullanılmasını en aza indirmeye çalışın. En iyi uygulamalar:

  • SUID süreçleri, Android güvenlik modelini atlatmak için kullanılabilecek bir kabuk veya arka kapı sağlamamalıdır.
  • SUID programları hiçbir kullanıcı tarafından yazılabilir olmamalıdır.
  • SUID programları herkes tarafından okunabilir veya çalıştırılabilir olmamalıdır. Bir grup oluşturun, SUID ikilisine erişimi bu grubun üyelerine sınırlayın ve SUID programını çalıştırması gereken tüm uygulamaları bu gruba yerleştirin.
  • SUID programları, kullanıcıların cihazları rootlamasının yaygın bir nedenidir. Bu riski azaltmak için SUID programları kabuk kullanıcısı tarafından çalıştırılmamalıdır.

CTS doğrulayıcısı, SUID dosyalarını listeleyen bilgilendirici bir test içerir. CTS testleri için bazı setuid dosyalarına izin verilmez.

Güvenli dinleme yuvaları

Bir cihaz herhangi bir bağlantı noktasında veya arayüzde dinliyorsa CTS testleri başarısız olur. Başarısızlık durumunda Android, aşağıdaki en iyi uygulamaların kullanıldığını doğrular:

  • Cihazda dinleme bağlantı noktası olmamalıdır.
  • Dinleme bağlantı noktaları, OTA olmadan devre dışı bırakılabilmelidir. Bu, sunucu veya kullanıcı cihazı yapılandırma değişikliği olabilir.
  • Kök süreçleri hiçbir bağlantı noktasında dinlememelidir.
  • Sistem UID'sine ait süreçler herhangi bir bağlantı noktasında dinlememelidir.
  • Soket kullanan yerel IPC için uygulamaların, erişimi bir grupla sınırlı olan bir UNIX alan soketi kullanması gerekir. IPC için bir dosya tanımlayıcısı oluşturun ve belirli bir UNIX grubu için +RW olarak ayarlayın. Tüm istemci uygulamaları bu UNIX grubunda olmalıdır.
  • Birden fazla işlemciye sahip bazı cihazlar (ör. uygulama işlemciden ayrı bir radyo/modem), işlemciler arasında iletişim kurmak için ağ soketlerini kullanır. Bu gibi durumlarda, işlemci içi iletişim için kullanılan ağ soketi, cihazdaki yetkisiz uygulamaların erişimini engellemek amacıyla izole bir ağ arayüzü kullanmalıdır (yani, cihazdaki diğer uygulamaların erişimini engellemek için iptables kullanılmalıdır).
  • Dinleme bağlantı noktalarını işleyen daemon'lar, hatalı biçimlendirilmiş verilere karşı güçlü olmalıdır. Google, yetkisiz bir istemci ve mümkünse yetkili istemci kullanarak bağlantı noktasına karşı fuzz testi yapabilir. Tüm kilitlenmeler, uygun önem derecesine sahip hatalar olarak kaydedilir.

Günlük verileri

Verilerin günlüğe kaydedilmesi, bu verilerin açığa çıkma riskini artırır ve sistem performansını düşürür. Android cihazlara varsayılan olarak yüklenen uygulamalar tarafından hassas kullanıcı verilerinin günlüğe kaydedilmesi sonucunda birden fazla herkese açık güvenlik olayı meydana geldi. En iyi uygulamalar:

  • Uygulamalar veya sistem hizmetleri, üçüncü taraf uygulamalarından sağlanan ve hassas bilgiler içerebilecek verileri günlüğe kaydetmemelidir.
  • Uygulamalar, normal çalışmanın bir parçası olarak kimliği tanımlayabilecek bilgileri (PII) günlüğe kaydetmemelidir.

CTS, sistem günlüklerinde hassas olabilecek bilgilerin bulunup bulunmadığını kontrol eden testler içerir.

Dizin erişimini sınırlama

Herkesin yazabileceği dizinler güvenlik zayıflıkları oluşturabilir ve uygulamaların güvenilir dosyaları yeniden adlandırmasına, dosyaları değiştirmesine veya sembolik bağlantı tabanlı saldırılar gerçekleştirmesine olanak tanıyabilir (saldırganlar, güvenilir bir programı kandırarak yapmaması gereken işlemleri yapması için dosyanın sembolik bağlantısını kullanabilir). Yazılabilir dizinler, bir uygulamanın kaldırılmasının uygulamayla ilişkili tüm dosyaların düzgün bir şekilde temizlenmesini de engelleyebilir.

En iyi uygulama olarak, sistem veya kök kullanıcılar tarafından oluşturulan dizinler herkese yazılabilir olmamalıdır. CTS testleri, bilinen dizinleri test ederek bu en iyi uygulamanın uygulanmasını sağlar.

Güvenli yapılandırma dosyaları

Birçok sürücü ve hizmet, /system/etc ve /data gibi dizinlerde depolanan yapılandırma ve veri dosyalarına ihtiyaç duyar. Bu dosyalar ayrıcalıklı bir işlem tarafından işleniyorsa ve herkes tarafından yazılabilirse bir uygulamanın, herkes tarafından yazılabilir dosyaya kötü amaçlı içerikler ekleyerek işlemdeki bir güvenlik açığından yararlanması mümkündür. En iyi uygulamalar:

  • Ayrıcalıklı süreçler tarafından kullanılan yapılandırma dosyaları herkese açık olmamalıdır.
  • Ayrıcalıklı süreçler tarafından kullanılan yapılandırma dosyaları herkese açık olarak yazılabilir olmamalıdır.

Yerel kod kitaplıklarını saklama

Ayrıcalıklı cihaz üreticisi işlemleri tarafından kullanılan tüm kodlar /vendor veya /system içinde olmalıdır. Bu dosya sistemleri, önyükleme sırasında salt okunur olarak bağlanır. En iyi uygulama olarak, sistem tarafından kullanılan veya cihaza yüklenen diğer yüksek ayrıcalıklı uygulamalar tarafından kullanılan kitaplıklar da bu dosya sistemlerinde olmalıdır. Bu, saldırganların ayrıcalıklı bir işlemin yürüttüğü kodu kontrol etmesine olanak tanıyabilecek bir güvenlik açığını önleyebilir.

Cihaz sürücüsü erişimini sınırlama

Yalnızca güvenilir kod sürücülere doğrudan erişebilmelidir. Mümkün olduğunda, sürücüye çağrılar yapan ve sürücünün bu daemon'a erişimini kısıtlayan tek amaçlı bir daemon sağlamak tercih edilen mimaridir. En iyi uygulama olarak, sürücü cihazı düğümleri herkes tarafından okunabilir veya yazılabilir olmamalıdır. CTS testleri, bilinen sürücülerin maruz kaldığı durumları kontrol ederek bu en iyi uygulamanın uygulanmasını sağlar.

ADB'yi devre dışı bırakma

Android hata ayıklama köprüsü (adb), değerli bir geliştirme ve hata ayıklama aracıdır ancak kontrollü ve güvenli ortamlarda kullanılmak üzere tasarlanmıştır ve genel kullanım için etkinleştirilmemelidir. En iyi uygulamalar:

  • ADB varsayılan olarak devre dışı bırakılmalıdır.
  • ADB, bağlantıları kabul etmeden önce kullanıcının ADB'yi açmasını gerektirmelidir.

Bootloader'ların kilidini açma

Birçok Android cihaz, kilit açma özelliğini destekler. Bu özellik, cihaz sahibinin sistem bölümünü değiştirmesine ve/veya özel bir işletim sistemi yüklemesine olanak tanır. Üçüncü taraf ROM yükleme ve cihazda sistem düzeyinde geliştirme yapma, bu modun yaygın kullanım alanlarından bazılarıdır. Örneğin, bir Google Nexus cihaz sahibi, kilit açma işlemini başlatmak için fastboot oem unlock komutunu çalıştırabilir. Bu komut, kullanıcıya aşağıdaki mesajı gösterir:

Bootloader'ın kilidini açmak istiyor musunuz?

Bootloader'ın kilidini açarsanız bu cihaza özel işletim sistemi yazılımı yükleyebilirsiniz.

Özel OS, orijinal OS ile aynı testlere tabi değildir ve cihazınızın ve yüklü uygulamaların düzgün çalışmamasına neden olabilir.

Kişisel verilerinize yetkisiz erişimi önlemek için bootloader'ın kilidini açtığınızda cihazınızdaki tüm kişisel veriler de silinir ("fabrika verilerini sıfırlama").

Evet veya Hayır'ı seçmek için Ses yukarı/aşağı düğmelerine basın. Ardından devam etmek için Güç düğmesine basın.

Evet: Bootloader'ın kilidini açın (garanti geçersiz olabilir)

Hayır: Bootloader'ın kilidini açmayın ve cihazı yeniden başlatmayın.


En iyi uygulama olarak, kilidi açılabilen Android cihazların kilidi açılmadan önce tüm kullanıcı verilerinin güvenli bir şekilde silinmesi gerekir. Kilit açıldığında tüm verilerin düzgün bir şekilde silinmemesi, fiziksel olarak yakın bir saldırganın gizli Android kullanıcı verilerine yetkisiz erişmesine neden olabilir. Kullanıcı verilerinin ifşa edilmesini önlemek için, kilit açma özelliğini destekleyen cihazların bu özelliği düzgün bir şekilde uygulaması gerekir (cihaz üreticilerinin kilit açma özelliğini yanlış uyguladığı çok sayıda durumla karşılaştık). Düzgün bir şekilde uygulanan kilit açma işlemi aşağıdaki özelliklere sahiptir:

  • Kilit açma komutu kullanıcı tarafından onaylandığında cihazın hemen veri silme işlemini başlatması gerekir. Güvenli silme işlemi tamamlanana kadar unlocked işareti ayarlanmamalıdır.
  • Güvenli silme işlemi tamamlanamazsa cihaz kilitli durumda kalmalıdır.
  • Temel blok cihaz tarafından destekleniyorsa ioctl(BLKSECDISCARD) veya eşdeğeri kullanılmalıdır. eMMC cihazlarda bu, Güvenli Silme veya Güvenli Kırpma komutunun kullanılması anlamına gelir. eMMC 4.5 ve sonraki sürümler için bu, normal bir Silme veya Kırpma işleminin ardından bir Sanitize işleminin kullanılması anlamına gelir.
  • BLKSECDISCARD, temeldeki blok cihaz tarafından desteklenmiyorsa bunun yerine ioctl(BLKDISCARD) kullanılmalıdır. eMMC cihazlarda bu normal bir Trim işlemidir.
  • BLKDISCARD desteklenmiyorsa blok cihazların tüm sıfırlarla üzerine yazılabilir.
  • Son kullanıcının, bir bölümün yanıp sönmeden önce kullanıcı verilerinin silinmesini zorunlu kılma seçeneği olmalıdır. Örneğin, Nexus cihazlarda bu işlem fastboot oem lock komutu ile yapılır.
  • Cihazlar, efuse veya benzer bir mekanizma aracılığıyla kilidinin açılıp açılmadığını ve/veya yeniden kilitlenip kilitlenmediğini kaydedebilir.

Bu şartlar, kilit açma işleminin tamamlanmasının ardından tüm verilerin yok edilmesini sağlar. Bu korumaların uygulanmaması orta düzeyde bir güvenlik açığı olarak kabul edilir.

Kilidi açılmış bir cihaz, fastboot oem lock komutu kullanılarak yeniden kilitlenebilir. Bootloader'ı kilitlemek, yeni özel işletim sisteminde kullanıcı verilerine orijinal cihaz üreticisinin işletim sisteminde sağlananla aynı korumayı sağlar (ör. cihazın kilidi tekrar açılırsa kullanıcı verileri silinir).