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ğini temel alır. Android uygulamaları çoğunlukla Java programlama dilinde yazılır ve Android Runtime (ART) 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 uygulamasının 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 yapılacağını söyleyen kontrol dosyasıdır. Bu aynı zamanda hangi izinlerin gerekli olduğunu da belirtir.

  • Faaliyetler : Bir Faaliyet genellikle tek, kullanıcı odaklı bir görevin kodudur. Genellikle kullanıcıya bir kullanıcı arayüzünün görüntülenmesini içerir, ancak bu zorunlu değildir; bazı Etkinlikler hiçbir zaman kullanıcı arayüzlerini görüntülemez. Genellikle 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 onun üzerindeki 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 hâlâ müziğin çalmaya devam etmesini istiyor. Bir Hizmet, kullanıcı arayüzü tamamlandığında bile müziğin devam etmesini sağlar.

  • Broadcast Alıcısı : BroadcastReceiver , işletim sistemi veya başka bir uygulama tarafından Intent olarak bilinen bir IPC mekanizması yayınlandığında başlatılan bir nesnedir. Örneğin bir uygulama, düşük pil mesajı için bir alıcı kaydedebilir ve bu bilgiye göre 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ı sayıda sistem kaynağına erişebilir. Sistem, yanlış veya kötü amaçlı kullanıldığında 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şlevlerde kasıtlı olarak API bulunmaması nedeniyle sınırlandırılmıştır (örneğin, SIM kartı doğrudan yönetmek için bir Android API yoktur). Bazı durumlarda, depolamanın uygulama bazında 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çlanır ve İzinler olarak bilinen bir güvenlik mekanizması aracılığı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 aracılığıyla erişilebilir. Cihazdaki korumalı API'lerden yararlanmak için bir uygulamanın ihtiyaç duyduğu yetenekleri manifest dosyasında tanımlaması gerekir. Tüm Android sürümleri 6.0 ve üzeri, çalışma zamanı izinleri modelini kullanır. Bir kullanıcı, korumalı bir API gerektiren bir uygulamadan bir özellik talep ederse sistem, kullanıcıdan izni reddetmesini veya izin vermesini isteyen bir iletişim kutusu görüntüler.

İzinler verildikten sonra, uygulama yüklü olduğu sürece uygulamaya uygulanır. Kullanıcının kafa karışıklığını önlemek için sistem, uygulamaya verilen izinler konusunda kullanıcıya bir daha bildirimde bulunmaz ve çekirdek işletim sisteminde bulunan veya bir OEM tarafından paketlenen uygulamalar kullanıcıdan izin istemez. Bir uygulama kaldırılırsa izinler de kaldırılır; dolayısıyla daha sonraki yeniden yükleme, izinlerin yeniden görüntülenmesine neden olur.

Kullanıcılar, cihaz ayarlarında daha önce yükledikleri uygulamaların izinlerini görüntüleyebilir. Kullanıcılar ayrıca GPS'i, radyoyu veya Wi-Fi'yi devre dışı bırakmak gibi bazı işlevleri istedikleri zaman genel olarak kapatabilirler.

Bir uygulamanın, uygulamanın bildiriminde belirtilmeyen 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, hileli atlamayı önlemek için mümkün olan en düşük düzeyde uygulanır. Korumalı API'lere erişim talep edilirken bir uygulama yüklendiğinde kullanıcı mesajlaşmasının bir örneği Şekil 2'de gösterilmektedir.

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

Bir izin tanımlanırken, bir korumaSeviyesi niteliği sisteme, izin gerektiren uygulamalar hakkında kullanıcının nasıl bilgilendirileceğini veya kimin izne sahip olmasına izin verildiğini bildirir. Uygulamaya özel izinlerin oluşturulması ve kullanılmasıyla ilgili ayrıntılar https://developer.android.com/guide/topics/security/security.html adresinde açıklanmaktadır.

Üçüncü taraf uygulamalar tarafından kullanılamayan ancak OEM tarafından önceden yüklenen uygulamalar tarafından kullanılabilen, SMS yayın niyetleri gönderme yeteneği gibi bazı cihaz özellikleri vardır. Bu izinler,signorSystem iznini kullanır.

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

Android, üçüncü taraf uygulamalarla etkileşimde bulunduklarında kullanıcılara bunu açıklığa kavuşturmaya ve bu uygulamaların sahip olduğu yetenekler konusunda kullanıcıyı bilgilendirmeye çalışmaktadır. Herhangi bir uygulamanın kurulumundan önce kullanıcıya, uygulamanın istediği farklı izinler hakkında net bir mesaj gösterilir. Kurulumdan sonra kullanıcıdan herhangi bir izni onaylaması tekrar istenmez.

İzinlerin kurulum zamanından hemen önce gösterilmesinin birçok nedeni vardır. Bu, kullanıcının ihtiyaç ve beklentilerine uyup uymadığını belirlemek için uygulama, geliştirici ve işlevsellik hakkındaki bilgileri aktif olarak incelediği zamandır. Uygulamaya henüz zihinsel ya da finansal bir bağlılık oluşturmamış olmaları ve uygulamayı diğer alternatif uygulamalarla rahatlıkla karşılaştırabilmeleri de önemlidir.

Diğer bazı platformlar, her oturumun başında veya uygulamalar kullanımdayken izin isteyerek kullanıcı bildirimi konusunda farklı bir yaklaşım kullanır. Android'in vizyonu, kullanıcıların uygulamalar arasında istedikleri zaman sorunsuz geçiş yapmalarını sağlamaktır. Her seferinde onay sağlamak 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 kendisini rahatsız hissetmesi durumunda uygulamayı yüklememe seçeneği sunar.

Ayrıca, birçok kullanıcı arayüzü araştırması, kullanıcıya aşırı komut vermenin, 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 etkili bir şekilde iletmektir; bu, kullanıcının görmezden gelmek üzere 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 ettiği hakkında düşünme olasılığı artar.

Bazı platformlar, uygulamanın işlevselliği hakkında hiçbir bilgi göstermemeyi tercih eder. 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 tamamen bilinçli kararlar vermesi mümkün olmasa da Android izin modeli, uygulamalar hakkındaki bilgilerin geniş bir kullanıcı kitlesi tarafından kolayca erişilebilir olmasını sağlar. Örneğin, beklenmeyen izin talepleri, daha bilgili kullanıcıların, uygulamanın işlevselliği hakkında kritik sorular sormalarına ve endişelerini Google Play gibi tüm kullanıcıların görebileceği yerlerde paylaşmalarına neden olabilir.

Uygulama Kurulumunda İzinler — Google Translate Yüklü Bir Uygulamanın İzinleri — Gmail
Uygulama Kurulumunda İzinler -- Google ÇeviriYüklü Bir Uygulamanın İzinleri — Gmail

Şekil 1. Uygulamalara ilişkin izinlerin görüntülenmesi

Arası iletişim

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

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

  • Binder : Süreç içi ve süreçler arası çağrılar gerçekleştirirken yüksek performans için tasarlanmış, hafif, yetenek tabanlı bir uzaktan prosedür çağrı mekanizması. Binder, özel bir Linux sürücüsü kullanılarak uygulanır. Bkz. https://developer.android.com/reference/android/os/Binder.html .

  • Hizmetler : Hizmetler (yukarıda tartışılmıştır), bağlayıcı kullanılarak doğrudan erişilebilen arayüzler sağlayabilir.

  • Niyetler : Bir Niyet, bir şeyi 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 bunu sisteme teslim ederek URL'yi görüntüleme "Intent"ini ifade eder. Sistem, bu Niyeti nasıl işleyeceğini bilen başka bir kod parçasını (bu durumda Tarayıcı) bulur ve onu çalıştırır. Niyetler ayrıca ilginç olayları (bildirim gibi) sistem çapında yayınlamak için de kullanılabilir. Bkz. https://developer.android.com/reference/android/content/Intent.html .

  • 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, bir ContentProvider aracılığıyla diğer uygulamaların açığa çıkardığı verilere erişebilir ve bir uygulama, kendi verilerini açığa çıkarmak için kendi ContentProvider'larını da tanımlayabilir. Bkz. https://developer.android.com/reference/android/content/ContentProvider.html .

Ağ yuvaları veya herkesin yazabileceği dosyalar gibi diğer mekanizmaları kullanarak IPC'yi uygulamak mümkün olsa da bunlar önerilen Android IPC çerçeveleridir. Android geliştiricilerinin, kullanıcı verilerinin güvenliğinin sağlanması ve güvenlik açıklarının ortaya çıkmasının önlenmesi konusunda en iyi uygulamaları kullanması teşvik edilecektir.

Maliyete Duyarlı API'ler

Maliyete duyarlı API, kullanıcı veya ağ için maliyet oluşturabilecek herhangi bir işlevdir. Android platformu, maliyete duyarlı API'leri işletim sistemi tarafından kontrol edilen korumalı API'ler listesine 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ğlıyor. Bir uygulama, premium hizmetleri kullanan bir kısa koda SMS göndermeye çalışırsa, bu durum ek ücretlendirmeye neden olabilir, Android bir bildirim sağlayacaktır. Kullanıcı, uygulamanın mesajı göndermesine izin vermeyi veya engellemeyi 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 hafızasındaki kişisel bilgilere (kişilere) erişim de dahil olmak üzere SIM kartla yapılan tüm iletişimi 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 yüksek düzeyde API 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 biriktirecektir. Bu bilgileri paylaşmayı seçen uygulamalar, verileri üçüncü taraf uygulamalardan korumak için Android işletim sistemi 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 mümkündü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 şekilde belirtilmesini sağlar. Kurulum sırasında üçüncü taraf bir uygulama bu kaynaklara erişim izni isteyebilir. İzin verildiği takdirde uygulama kurulabilir ve kurulduğu anda istenilen verilere erişebilir.

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

Hassas Veri Giriş Cihazları

Android cihazlar sıklıkla uygulamaların çevredeki ortamla etkileşime girmesine olanak tanıyan kamera, mikrofon veya GPS gibi hassas veri giriş cihazları sağlar. Üçüncü taraf bir uygulamanın bu cihazlara erişebilmesi için öncelikle Android İşletim Sistemi İzinleri kullanılarak kullanıcıya açıkça erişim sağlanması gerekir. Kurulumun ardından kurulumcu, kullanıcıdan sensöre adıyla izin istemesini isteyecektir.

Bir uygulama kullanıcının konumunu bilmek istiyorsa, kullanıcının konumuna erişim iznine ihtiyaç duyar. Kurulumun ardından yükleyici, kullanıcıya uygulamanın kullanıcının konumuna erişip erişemeyeceğini soracaktır. Kullanıcı istediği zaman herhangi bir uygulamanın kendi konumuna erişmesini istemezse, "Ayarlar" uygulamasını çalıştırabilir, "Konum ve Güvenlik" bölümüne gidebilir ve "Kablosuz ağları kullan" ve "GPS uydularını etkinleştir" seçeneğinin 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 aynı zamanda doğası gereği hassas olmayan ancak kullanıcının özelliklerini, kullanıcı tercihlerini ve cihazı kullanma biçimini dolaylı olarak açığa çıkarabilecek verilere erişimi kısıtlamaya çalışmaktadı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 talep ederse, yükleyici kullanıcıdan 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üvenilen bir dizi yüklü sistem Sertifika Yetkilisi içerir. Android 7.0'dan önce cihaz üreticileri, cihazlarında gönderilen CA setini değiştirebiliyordu. 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 grubuna yeni bir genel CA olarak eklenmek için CA'nın Mozilla CA Ekleme Sürecini tamamlaması ve ardından Android'e karşı bir özellik isteğinde bulunması gerekir ( https://code.google.com/p/android/issues/entry ) CA'nın Android Açık Kaynak Projesinde (AOSP) ayarlanan stok Android CA'sına eklenmesini sağlamak.

SMS/MMS ağ geçitleri gibi operatör altyapısının bileşenlerine güvenli bir şekilde erişmek için gerekli olabilecek operatörlerin özel CA'ları gibi cihaza özgü ve çekirdek AOSP CA'ları grubuna dahil edilmemesi gereken CA'lar hâlâ mevcuttur. Cihaz üreticilerinin özel CA'ları yalnızca bu CA'lara güvenmesi gereken bileşenlere/uygulamalara dahil etmesi ö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 arayüzler ve izinler oluşturmadan uygulamalarını güncellemesine olanak tanır. Android platformunda çalıştırılan her uygulamanın geliştirici tarafından imzalanması gerekir. İmzalanmadan yükleme yapmaya çalışan uygulamalar, Google Play veya Android cihazdaki paket yükleyici tarafından reddedilir.

Google Play'de uygulama imzalama, Google'ın geliştiriciye olan güveni ile geliştiricinin uygulamasına olan güveni arasında köprü oluşturur. Geliştiriciler, uygulamalarının Android cihaza değiştirilmeden sağlandığını biliyor; ve geliştiriciler, uygulamalarının davranışından sorumlu tutulabilir.

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 dışında başka bir uygulamaya erişememesini sağlar.

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

Başvurular bir üçüncü taraf (OEM, operatör, alternatif pazar) tarafından veya kendi imzasıyla imzalanabilir. Android, geliştiricilerin harici yardım veya izin olmadan oluşturabilecekleri, kendinden imzalı sertifikaları kullanarak kod imzalama sağlar. Başvuruların merkezi bir otorite tarafından imzalanması zorunlu değildir. Android şu anda uygulama sertifikaları için CA doğrulaması gerçekleştirmiyor.

Uygulamalar aynı zamanda İmza koruma düzeyinde güvenlik izinleri beyan edebilir, farklı UID'leri ve Uygulama Korumalı Alanlarını korurken erişimi yalnızca aynı anahtarla imzalanmış uygulamalarla kısıtlayabilir. Aynı geliştirici anahtarıyla imzalanan 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ğrulaması

Android 4.2 ve üzeri uygulama doğrulamayı 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ıştığında kullanıcıyı uyarabilir; bir uygulama özellikle kötüyse kurulumu engelleyebilir. .

Dijital Haklar Yönetimi

Android platformu, uygulamaların içerikle ilişkili lisans kısıtlamalarına göre haklarla 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 hangi DRM şemalarını desteklediği cihaz üreticisine bırakılmıştır.

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

  • Android uygulama çerçevesi aracılığıyla uygulamalara sunulan ve standart uygulamalar için ART VM aracılığıyla çalışan bir DRM çerçeve API'si.

  • DRM çerçevesini uygulayan ve çeşitli DRM şemaları için hak yönetimini ve şifre çözmeyi yönetmek üzere DRM eklentileri (aracılar) için bir arayüz sunan yerel kodlu bir DRM yöneticisi

Android platformunda Dijital Haklar Yönetimi Mimarisi

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