Uygulama güvenliği

Uygulama Unsurları

Android, mobil cihazlar için açık kaynaklı bir platform ve uygulama ortamı sağlar. Çekirdek işletim sistemi Linux çekirdeğine dayanmaktadır. Android uygulamaları çoğunlukla Java programlama dilinde yazılır ve Dalvik sanal makinesinde çalıştırılır. Ancak uygulamalar yerel kodla da yazılabilir. Uygulamalar, .apk dosya uzantısına sahip tek bir dosyadan yüklenir.

Ana Android uygulama yapı taşları şunlardır:

  • AndroidManifest.xml : AndroidManifest.xml dosyası, sisteme bir uygulamadaki tüm üst düzey bileşenlerle (özellikle aşağıda açıklanan etkinlikler, hizmetler, yayın alıcıları ve içerik sağlayıcılar) ne yapacağını söyleyen kontrol dosyasıdır. Bu ayrıca hangi izinlerin gerekli olduğunu belirtir.

  • Aktiviteler : Aktivite , genellikle, kullanıcı odaklı tek bir görevin kodudur. Genellikle kullanıcıya bir UI görüntülemeyi içerir, ancak zorunlu değildir - bazı Etkinlikler hiçbir zaman UI'leri göstermez. Tipik olarak, uygulamanın Faaliyetlerinden biri, bir uygulamaya giriş noktasıdır.

  • Hizmetler : Hizmet , arka planda çalışan bir kod gövdesidir. Kendi sürecinde veya başka bir uygulamanın süreci bağlamında çalışabilir. Diğer bileşenler bir Hizmete "bağlanır" ve uzaktan prosedür çağrıları yoluyla bu hizmetteki yöntemleri çağırır. Hizmete örnek olarak bir medya oynatıcı verilebilir: kullanıcı medya seçimi kullanıcı arayüzünden çıksa bile, kullanıcı muhtemelen müziğin çalmaya devam etmesini istemektedir. Hizmet, kullanıcı arayüzü tamamlandığında bile müziğin devam etmesini sağlar.

  • Broadcast Receiver : BroadcastReceiver , Intent olarak bilinen bir IPC mekanizması işletim sistemi veya başka bir uygulama tarafından yayınlandığında başlatılan bir nesnedir. Örneğin bir uygulama, düşük pil mesajı için bir alıcıyı kaydedebilir ve bu bilgiye dayalı olarak davranışını değiştirebilir.

Android İzin Modeli: Korumalı API'lere Erişim

Android'deki tüm uygulamalar bir Uygulama Korumalı Alanında çalışır. Varsayılan olarak, bir Android uygulaması yalnızca sınırlı bir dizi sistem kaynağına erişebilir. Sistem, yanlış veya kötü amaçlı kullanılırsa kullanıcı deneyimini, ağı veya cihazdaki verileri olumsuz etkileyebilecek kaynaklara Android uygulamasının erişimini yönetir.

Bu kısıtlamalar çeşitli şekillerde uygulanmaktadır. Bazı yetenekler, hassas işlevselliğe yönelik kasıtlı API eksikliği nedeniyle kısıtlanmıştır (örneğin, SIM kartı doğrudan manipüle etmek için bir Android API'si yoktur). Bazı durumlarda, depolamanın uygulama başına izolasyonunda olduğu gibi, rollerin ayrılması bir güvenlik önlemi sağlar. Diğer durumlarda, hassas API'lerin güvenilir uygulamalar tarafından kullanılması amaçlanmıştır ve İzinler olarak bilinen bir güvenlik mekanizmasıyla korunur.

Bu korumalı API'ler şunları içerir:

  • Kamera işlevleri
  • Konum verileri (GPS)
  • Bluetooth işlevleri
  • telefon fonksiyonları
  • SMS/MMS işlevleri
  • Ağ/veri bağlantıları

Bu kaynaklara yalnızca işletim sistemi üzerinden erişilebilir. Cihazdaki korumalı API'leri kullanmak için, bir uygulamanın ihtiyaç duyduğu yetenekleri manifest'inde tanımlaması gerekir. Tüm Android sürümleri 6.0 ve üstü, bir çalışma zamanı izinleri modeli kullanır. Bir kullanıcı, korumalı bir API gerektiren bir uygulamadan bir özellik isterse, sistem, kullanıcıdan izne izin vermesini veya izin vermesini isteyen bir iletişim kutusu görüntüler.

İzinler verildikten sonra, kurulu olduğu sürece uygulamaya uygulanır. Kullanıcının kafasını karıştırmamak için sistem, uygulamaya verilen izinler konusunda kullanıcıyı tekrar bilgilendirmez ve çekirdek işletim sistemine dahil edilen veya bir OEM tarafından paketlenen uygulamalar kullanıcıdan izin istemez. Bir uygulama kaldırılırsa izinler kaldırılır, bu nedenle sonraki yeniden yükleme izinlerin yeniden görüntülenmesine neden olur.

Cihaz ayarlarında kullanıcılar daha önce yükledikleri uygulamalar için izinleri görebilirler. Kullanıcılar ayrıca seçtikleri zaman GPS, radyo veya wi-fi'yi devre dışı bırakma gibi bazı işlevleri küresel olarak kapatabilirler.

Bir uygulamanın, uygulamanın bildiriminde bildirilmeyen korumalı bir özelliği kullanmaya çalışması durumunda, izin hatası genellikle uygulamaya bir güvenlik istisnasının geri gönderilmesine neden olur. Korumalı API izin kontrolleri, hileyi önlemek için mümkün olan en düşük seviyede uygulanır. Korunan API'lere erişim talep ederken bir uygulama yüklendiğinde kullanıcı mesajlarının bir örneği Şekil 2'de gösterilmektedir.

Sistem varsayılan izinleri https://developer.android.com/reference/android/Manifest.permission.html adresinde açıklanmıştır. Uygulamalar, diğer uygulamaların kullanması için kendi izinlerini beyan edebilir. Bu tür izinler yukarıdaki konumda listelenmez.

Bir izin tanımlanırken bir protectionLevel özniteliği, sisteme izin gerektiren uygulamalar hakkında kullanıcının nasıl bilgilendirileceğini veya kimlerin izin sahibi olduğunu söyler. Uygulamaya özel izinler oluşturmaya ve kullanmaya ilişkin ayrıntılar https://developer.android.com/guide/topics/security/security.html adresinde açıklanmıştır.

Üçüncü taraf uygulamalarda bulunmayan, ancak OEM tarafından önceden yüklenmiş uygulamalar tarafından kullanılabilen, SMS yayın amaçları gönderme yeteneği gibi bazı cihaz özellikleri vardır. Bu izinler, signOrSystem iznini kullanır.

Kullanıcılar Üçüncü Taraf Uygulamaları Nasıl Anlıyor?

Android, kullanıcılara üçüncü taraf uygulamalarla etkileşim kurduklarında bunu netleştirmeye ve kullanıcıyı bu uygulamaların sahip olduğu yetenekler hakkında bilgilendirmeye çalışır. Herhangi bir uygulamanın yüklenmesinden önce, kullanıcıya uygulamanın istediği farklı izinler hakkında net bir mesaj gösterilir. Yüklemeden sonra, kullanıcıdan herhangi bir izni onaylaması istenmez.

Kurulum zamanından hemen önce izinleri göstermenin birçok nedeni vardır. Bu, kullanıcının ihtiyaç ve beklentilerini karşılayıp karşılamadığını belirlemek için uygulama, geliştirici ve işlevsellik hakkındaki bilgileri aktif olarak gözden geçirdiği zamandır. Uygulamaya henüz zihinsel veya finansal bir taahhütte bulunmamış olmaları ve uygulamayı diğer alternatif uygulamalarla kolayca karşılaştırabilmeleri de önemlidir.

Diğer bazı platformlar, her oturumun başında veya uygulamalar kullanımdayken izin talep ederek, kullanıcı bildirimine farklı bir yaklaşım kullanır. Android'in vizyonu, kullanıcıların istedikleri zaman uygulamalar arasında sorunsuz bir şekilde geçiş yapmalarını sağlamaktır. Her seferinde onay vermek, kullanıcıyı yavaşlatır ve Android'in harika bir kullanıcı deneyimi sunmasını engeller. Yükleme sırasında kullanıcının inceleme izinlerine sahip olması, kullanıcıya, kendilerini rahatsız hissetmeleri durumunda uygulamayı yüklememe seçeneği sunar.

Ayrıca, birçok kullanıcı arabirimi çalışması, kullanıcıya fazla soru sormanın, kullanıcının gösterilen herhangi bir iletişim kutusuna "Tamam" demeye başlamasına neden olduğunu göstermiştir. Android'in güvenlik hedeflerinden biri, önemli güvenlik bilgilerini kullanıcıya etkin bir şekilde iletmektir; bu, kullanıcının yok sayması için eğitileceği diyaloglar kullanılarak yapılamaz. Önemli bilgileri bir kez ve yalnızca önemli olduğunda sunarak, kullanıcının neyi kabul ettikleri hakkında düşünmesi daha olasıdır.

Bazı platformlar, uygulama işlevselliği hakkında hiçbir bilgi göstermemeyi seçer. Bu yaklaşım, kullanıcıların uygulama yeteneklerini kolayca anlamasını ve tartışmasını engeller. Tüm kullanıcıların her zaman tam olarak bilinçli kararlar vermesi mümkün olmasa da, Android izinleri modeli, uygulamalar hakkındaki bilgilere geniş bir kullanıcı kitlesi tarafından kolayca erişilebilmesini sağlar. Örneğin, beklenmeyen izin istekleri, daha karmaşık kullanıcıları, uygulama işlevselliği hakkında kritik sorular sormaya ve endişelerini tüm kullanıcılar tarafından görülebilecekleri Google Play gibi yerlerde paylaşmaya yönlendirebilir.

Uygulama Yüklemesinde İzinler -- Google Haritalar Yüklü Bir Uygulamanın İzinleri -- Gmail
Uygulama Yüklemesinde İzinler -- Google HaritalarYüklü Bir Uygulamanın İzinleri -- Gmail

Şekil 1. Uygulamalar için izinlerin gösterimi

Arası iletişim

Süreçler, geleneksel UNIX tipi mekanizmalardan herhangi birini kullanarak iletişim kurabilir. Örnekler dosya sistemini, yerel soketleri veya sinyalleri içerir. Ancak, Linux izinleri hala geçerlidir.

Android ayrıca yeni IPC mekanizmaları sağlar:

  • Bağlayıcı : İşlem içi ve işlemler arası aramalar gerçekleştirirken yüksek performans için tasarlanmış hafif, yetenek tabanlı bir uzaktan yordam çağrısı mekanizması. Bağlayıcı, özel bir Linux sürücüsü kullanılarak uygulanır. https://developer.android.com/reference/android/os/Binder.html adresine bakın.

  • Hizmetler : Hizmetler (yukarıda tartışılan) bağlayıcı kullanılarak doğrudan erişilebilir arabirimler sağlayabilir.

  • Intents : Intent, bir şey yapma "niyetini" temsil eden basit bir mesaj nesnesidir. Örneğin, uygulamanız bir web sayfasını görüntülemek istiyorsa, bir Intent örneği oluşturup sisteme teslim ederek URL'yi görüntülemek için "Niyetini" ifade eder. Sistem, bu Niyeti nasıl işleyeceğini bilen başka bir kod parçasını (bu durumda Tarayıcı) bulur ve çalıştırır. Amaçlar, sistem genelinde ilginç olayları (bir bildirim gibi) yayınlamak için de kullanılabilir. https://developer.android.com/reference/android/content/Intent.html adresine bakın.

  • ContentProviders : ContentProvider, cihazdaki verilere erişim sağlayan bir veri deposudur; klasik örnek, kullanıcının kişi listesine erişmek için kullanılan ContentProvider'dır. Bir uygulama, diğer uygulamaların bir ContentProvider aracılığıyla açığa çıkardığı verilere erişebilir ve bir uygulama, kendi verilerini ortaya çıkarmak için kendi ContentProvider'larını da tanımlayabilir. https://developer.android.com/reference/android/content/ContentProvider.html adresine bakın.

Ağ soketleri veya dünya çapında yazılabilir dosyalar gibi diğer mekanizmaları kullanarak IPC'yi uygulamak mümkün olsa da, bunlar önerilen Android IPC çerçeveleridir. Android geliştiricileri, kullanıcıların verilerini güvence altına almaya ve güvenlik açıklarının ortaya çıkmasını önlemeye yönelik en iyi uygulamaları kullanmaya teşvik edilecek.

Maliyete Duyarlı API'ler

Maliyete duyarlı API, kullanıcı veya ağ için maliyet oluşturabilecek herhangi bir işlevdir. Android platformu, işletim sistemi tarafından kontrol edilen korumalı API'ler listesine maliyete duyarlı API'ler yerleştirmiştir. Kullanıcının, maliyete duyarlı API'lerin kullanımını talep eden üçüncü taraf uygulamalara açık izin vermesi gerekecektir. Bu API'ler şunları içerir:

  • telefon
  • SMS/MMS
  • Ağ/Veri
  • Uygulama İçi Faturalandırma
  • NFC Erişimi

Android 4.2, SMS kullanımı üzerinde daha fazla kontrol sağlar. Bir uygulama, ek ücretlere neden olabilecek premium hizmetleri kullanan bir kısa koda SMS göndermeye çalışırsa, Android bir bildirim sağlayacaktır. Kullanıcı, uygulamanın mesajı göndermesine veya engellemesine izin vermeyi seçebilir.

SIM Kart Erişimi

SIM karta düşük düzeyde erişim, üçüncü taraf uygulamalar tarafından kullanılamaz. İşletim sistemi, SIM kart belleğindeki kişisel bilgilere (kişiler) erişim de dahil olmak üzere SIM kartla tüm iletişimleri yönetir. Uygulamalar ayrıca AT komutlarına erişemez, çünkü bunlar yalnızca Radyo Arayüzü Katmanı (RIL) tarafından yönetilir. RIL, bu komutlar için üst düzey API'ler sağlamaz.

Kişisel bilgi

Android, kullanıcı verilerine erişim sağlayan API'leri korumalı API kümesine yerleştirmiştir. Normal kullanımda, Android cihazlar, kullanıcılar tarafından yüklenen üçüncü taraf uygulamalarda da kullanıcı verilerini toplayacaktır. Bu bilgileri paylaşmayı seçen uygulamalar, verileri üçüncü taraf uygulamalardan korumak için Android OS izin kontrollerini kullanabilir.

Yalnızca korumalı API'ler aracılığıyla kullanılabilen hassas kullanıcı verilerine erişim

Şekil 2. Hassas kullanıcı verilerine erişim yalnızca korumalı API'ler aracılığıyla sağlanır

Kişiler ve takvim gibi kişisel veya kişisel olarak tanımlanabilir bilgileri içermesi muhtemel sistem içerik sağlayıcıları, açıkça tanımlanmış izinlerle oluşturulmuştur. Bu ayrıntı düzeyi, kullanıcıya uygulamaya sağlanabilecek bilgi türlerinin açık bir göstergesini sağlar. Yükleme sırasında bir üçüncü taraf uygulaması bu kaynaklara erişim izni isteyebilir. İzin verilirse, uygulama yüklenebilir ve yüklendiğinde herhangi bir zamanda istenen verilere erişebilir.

Kişisel bilgileri toplayan tüm uygulamalar, varsayılan olarak bu verileri yalnızca belirli bir uygulamayla sınırlandıracaktır. Bir uygulama, verileri IPC aracılığıyla diğer uygulamalara sunmayı seçerse, erişim sağlayan uygulama, işletim sistemi tarafından zorlanan IPC mekanizmasına izinler uygulayabilir.

Hassas Veri Giriş Cihazları

Android cihazlar sıklıkla, uygulamaların kamera, mikrofon veya GPS gibi çevredeki ortamla etkileşime girmesine izin veren hassas veri giriş cihazları sağlar. Bir üçüncü taraf uygulamasının bu cihazlara erişmesi için, öncelikle kullanıcı tarafından Android İşletim Sistemi İzinleri kullanılarak erişim sağlanması gerekir. Kurulumun ardından, yükleyici, kullanıcıdan sensöre isimle izin vermesini ister.

Bir uygulama kullanıcının konumunu bilmek isterse, uygulamanın kullanıcının konumuna erişmek için izin alması gerekir. Kurulumun ardından yükleyici, kullanıcıya uygulamanın kullanıcının konumuna erişip erişemeyeceğini soracaktır. Herhangi bir zamanda, kullanıcı herhangi bir uygulamanın konumuna erişmesini istemiyorsa, kullanıcı "Ayarlar" uygulamasını çalıştırabilir, "Konum ve Güvenlik"e gidebilir ve "Kablosuz ağları kullan" ve "GPS uydularını etkinleştir" kutucuğunun işaretini kaldırabilir. . Bu, kullanıcının cihazındaki tüm uygulamalar için konum tabanlı hizmetleri devre dışı bırakacaktır.

Cihaz Meta Verileri

Android ayrıca, doğası gereği hassas olmayan, ancak dolaylı olarak kullanıcı, kullanıcı tercihleri ​​ve bir cihazı kullanma biçimleriyle ilgili özellikleri ortaya çıkarabilecek verilere erişimi kısıtlamaya çalışır.

Varsayılan olarak uygulamaların işletim sistemi günlüklerine, tarayıcı geçmişine, telefon numarasına veya donanım/ağ kimlik bilgilerine erişimi yoktur. Bir uygulama yükleme sırasında bu bilgilere erişim isterse, yükleyici kullanıcıya uygulamanın bilgilere erişip erişemeyeceğini sormasını ister. Kullanıcı erişim izni vermezse uygulama yüklenmeyecektir.

Sertifika yetkilileri

Android, sistem genelinde güvenilir olan bir dizi kurulu sistem Sertifika Yetkilisi içerir. Android 7.0'dan önce, cihaz üreticileri, cihazlarında gönderilen CA'ları değiştirebilirdi. Ancak, 7.0 ve üzerini çalıştıran cihazlarda, cihaz üreticileri tarafından değişiklik yapılmasına artık izin verilmediğinden, tek tip bir sistem CA'ları seti olacaktır.

Android stok kümesine yeni bir genel CA olarak eklenmek için, CA'nın Mozilla CA Ekleme İşlemini tamamlaması ve ardından Android'e karşı bir özellik isteği göndermesi gerekir ( https://code.google.com/p/android/issues/entry ) CA'nın Android Açık Kaynak Projesi'nde (AOSP) ayarlanan stok Android CA'sına eklenmesini sağlamak için.

Hala cihaza özel CA'lar vardır ve taşıyıcıların SMS/MMS ağ geçitleri gibi taşıyıcı altyapısının bileşenlerine güvenli bir şekilde erişmek için gerekebilecek özel CA'ları gibi temel AOSP CA'larına dahil edilmemesi gereken CA'lar vardır. Cihaz üreticilerinin özel CA'ları yalnızca bu CA'lara güvenmesi gereken bileşenlere/uygulamalara dahil etmeleri önerilir. Daha fazla ayrıntı için bkz. Ağ Güvenliği Yapılandırması .

Başvuru İmzalama

Kod imzalama , geliştiricilerin uygulamanın yazarını tanımlamasına ve karmaşık arabirimler ve izinler oluşturmadan uygulamalarını güncellemesine olanak tanır. Android platformunda çalıştırılan her uygulama geliştirici tarafından imzalanmalıdır. İmzalanmadan yüklemeye çalışan uygulamalar, Google Play veya Android cihazdaki paket yükleyici tarafından reddedilir.

Google Play'de uygulama imzalama, Google'ın geliştiriciye duyduğu güven ile geliştiricinin uygulamasına duyduğu güven arasında bir köprü oluşturur. Geliştiriciler, uygulamalarının Android cihazda değiştirilmeden sağlandığını bilir; ve geliştiriciler, uygulamalarının davranışlarından sorumlu tutulabilirler.

Android'de uygulama imzalama, bir uygulamayı Uygulama Korumalı Alanına yerleştirmenin ilk adımıdır. İmzalı uygulama sertifikası, hangi kullanıcı kimliğinin hangi uygulamayla ilişkili olduğunu tanımlar; farklı uygulamalar farklı kullanıcı kimlikleri altında çalışır. Uygulama imzalama, bir uygulamanın iyi tanımlanmış IPC aracılığıyla başka bir uygulamaya erişememesini sağlar.

Bir Android cihaza bir uygulama (APK dosyası) yüklendiğinde, Paket Yöneticisi APK'nin bu APK'da bulunan sertifikayla düzgün bir şekilde imzalandığını doğrular. Sertifika (veya daha doğrusu sertifikadaki genel anahtar), cihazdaki başka herhangi bir APK'yı imzalamak için kullanılan anahtarla eşleşirse, yeni APK, bildirimde, UID'yi diğeriyle benzer şekilde paylaşacağını belirtme seçeneğine sahiptir. -imzalı APK'lar.

Uygulamalar bir üçüncü taraf (OEM, operatör, alternatif pazar) tarafından imzalanabilir veya kendinden imzalı olabilir. Android, geliştiricilerin dışarıdan yardım veya izin almadan oluşturabileceği kendinden imzalı sertifikalar kullanarak kod imzalama sağlar. Başvuruların merkezi bir makam tarafından imzalanması gerekmez. Android şu anda uygulama sertifikaları için CA doğrulaması gerçekleştirmemektedir.

Uygulamalar ayrıca, farklı UID'leri ve Uygulama Korumalı Alanlarını korurken yalnızca aynı anahtarla imzalanmış uygulamalara erişimi kısıtlayarak, İmza koruma düzeyinde güvenlik izinleri bildirebilir. Aynı geliştirici anahtarıyla imzalanmış iki veya daha fazla uygulamanın bildirimlerinde paylaşılan bir UID bildirebildiği, paylaşılan UID özelliği aracılığıyla paylaşılan bir Uygulama Korumalı Alanı ile daha yakın bir ilişkiye izin verilir.

Uygulama Doğrulama

Android 4.2 ve sonraki sürümleri uygulama doğrulamasını destekler. Kullanıcılar, "Uygulamaları Doğrula"yı etkinleştirmeyi seçebilir ve uygulamaların kurulumdan önce bir uygulama doğrulayıcı tarafından değerlendirilmesini sağlayabilir. Uygulama doğrulama, zararlı olabilecek bir uygulamayı yüklemeye çalışırsa kullanıcıyı uyarabilir; bir uygulama özellikle kötüyse kurulumu engelleyebilir .

Dijital Hak Yönetimi

Android platformu, uygulamaların, içerikle ilişkili lisans kısıtlamalarına göre hakları korunan içeriği yönetmesine olanak tanıyan genişletilebilir bir DRM çerçevesi sağlar. DRM çerçevesi birçok DRM şemasını destekler; bir cihazın desteklediği DRM şemaları cihaz üreticisine bırakılır.

Android DRM çerçevesi iki mimari katmanda uygulanır (aşağıdaki şekle bakın):

  • Android uygulama çerçevesi aracılığıyla uygulamalara maruz kalan ve standart uygulamalar için Dalvik VM üzerinden çalışan bir DRM çerçevesi API'si.

  • DRM çerçevesini uygulayan ve çeşitli DRM şemaları için hak yönetimi ve şifre çözmeyi işlemek üzere DRM eklentileri (aracılar) için bir arabirim sunan yerel bir kod DRM yöneticisi

Android platformunda Dijital Hak Yönetimi Mimarisi

Şekil 3. Android platformunda Dijital Hak Yönetimi Mimarisi