View
187
Download
8
Category
Preview:
Citation preview
T.C.
BEYKENT ÜNİVERSİTESİ
FEN BİLİMLERİ ENSTİTÜSÜ
BİLGİSAYAR MÜHENDİSLİĞİ ANABİLİM DALI
BİLGİSAYAR MÜHENDİSLİĞİ BİLİM DALI
MOBİL İŞLETİM SİSTEMLERİNDE GÜVENLİK
( Yüksek Lisans Projesi )
Projeyi Hazırlayan:
Fuat SAVAŞ
İSTANBUL, 2015
T.C.
BEYKENT ÜNİVERSİTESİ
FEN BİLİMLERİ ENSTİTÜSÜ
BİLGİSAYAR MÜHENDİSLİĞİ ANABİLİM DALI
BİLGİSAYAR MÜHENDİSLİĞİ BİLİM DALI
MOBİL İŞLETİM SİSTEMLERİNDE GÜVENLİK
( Yüksek Lisans Projesi )
Projeyi Hazırlayan:
Fuat SAVAŞ
Öğrenci No:
110820031
Danışman:
Yrd. Doç. Dr. Ediz ŞAYKOL
İSTANBUL, 2015
YEMİN METNİ
Yüksek lisans projesi olarak sunduğum “ Mobil İşletim Sistemlerinde Güvenlik ”
başlıklı bu çalışmanın, bilimsel ahlak ve geleneklere uygun şekilde tarafımdan
yazıldığını, yararlandığım eserlerin tamamının kaynaklarda gösterildiğini ve
çalışmamın içinde kullanıldıkları her yerde bunlara atıf yapıldığını belirtir ve bunu
onurumla doğrularım. ( 29.01.2015 )
Fuat SAVAŞ
TEŞEKKÜR
Proje çalışmalarım esnasında bana yardımcı olan proje danışmanım Beykent
Üniversitesi Yrd. Doç. Dr. Ediz ŞAYKOL'a ve manevi desteğini üzerimden hiç eksik
etmeyen rahmetli validem Ayşe SAVAŞ hanımefendiye teşekkür ederim.
Fuat SAVAŞ
I
MOBİL İŞLETİM SİSTEMLERİNDE GÜVENLİK
Projeyi Hazırlayan: Fuat SAVAŞ
ÖZET
Türkiye'de mobil cihaz kullanımının her geçen gün yaygınlaşmasıyla birlikte
kullanıcılar tıpkı masaüstü ve dizüstü bilgisayarlarda olduğu gibi mobil cihazlarda da
artık belli başlı özellikler aramaktadırlar. Bunlar; işletim sistemi, tasarım, alışkanlık
ve diğer teknik özelliklere göre değişmektedir. Fakat mesleki sebepler dışında
güvenlik konusunu umursayan pek kimse yok ne yazık ki.
Oysa Mobil uygulama geliştiricisi Lookout'un yayınladığı "2013 Mobil Güvenlik
Öngörüleri" başlıklı raporda web tabanlı mobil tehditler, 2013 yılı içinde
kullanıcıların en çok dikkat etmesi gereken tehditler arasında başta yer almaktadır.
Ortada yeterince kimsenin farkında olmadığı çok ciddi bir güvenlik riski
bulunmaktadır. Burada önemli olan henüz yeni gelişmekte olan bu mobil hacking
karşısında önlem almaktır.
Mobil cihazların hacklenmesiyle birlikte bilgisayarlardan farklı olarak telefon
rehberimiz, mesajlarımız, sosyal medya bilgilerimiz, mobil uygulamalardaki
verilerimizde tamamen kötü niyetli kişilerin eline geçebilecek. Bu muhtemel
sorunları telefonları kullanım amaçlarına göre çeşitlendirebiliriz.
Anahtar Kelimeler: Android, IOS, API, Sandbox, Linux.
II
SECURITY ON MOBILE OPERATING SYSTEMS
Prepared by Fuat SAVAŞ
ABSTRACT
Users demand some special features from mobile devices as in laptop and desktop
computers in line with gradually increasing usage of them. Those features vary
according to operating systems, designs, habits and other technical specialities.
However, nobody unfortunately cares about security issues except occupational
reasons. In fact, web based mobile threats comes first within the most noticable ones
indicated by the “Mobile Security Projections” report which has been published by
Lookout, mobile application developer.
There is a very important security risk outstanding that nobody be aware of. The
most important point is here to take measures against this newly developing mobile
hacking.
With the mobile hacking, unlike in computers, bad persons will be able to get our
telephone books, messages, social media user infos and our dats in mobile
applications. We can categorize those potential problems in terms of our aims to use
mobile devices.
Key Words: Android, IOS, API, Sandbox, Linux
III
İÇİNDEKİLER
ÖZET .............................................................................................. ............................ I
ABSTRACT ............................................................................................ ................. II
ŞEKİLLER LİSTESİ............................................................................................ VII
KISALTMALAR LİSTESİ .............................................................................. .. VIII
1. GİRİŞ ...................................................................................................................... 1
2. IOS GÜVENLİK .................................................................................................... 1
2.1. SİSTEM MİMARİSİ ..................................................................................... 2
2.1.1. GÜVENLİK ÖNYÜKLEME ZİNCİRİ .................................................. 2
2.1.2. SİSTEM YAZILIMI KİŞİSELLEŞTİRME ............................................. 3
2.1.3. UYGULAMA KOD İMZALAMA ......................................................... 4
2.1.4. ÇALIŞMA ZAMANI İŞLEM GÜVENLİĞİ .......................................... 5
2.2. AĞ GÜVENLİĞİ ........................................................................................... 7
2.2.1. SSL, TSL ................................................................................................. 7
2.2.2. VPN ......................................................................................................... 7
2.2.3. WI - FI ..................................................................................................... 8
2.2.4. BLUETOOTH ......................................................................................... 8
2.3. VERİ KORUMA VE ŞİFRELEME ............................................................. 9
2.3.1. DONANIM VE GÜVENLİK ÖZELLİKLERİ ........................................ 9
2.3.2. DOSYA VERİLERİNİ KORUMA ........................................................ 10
2.3.3. GEÇİŞ KODLARI ................................................................................. 11
2.3.4. ANAHTARLIK VERİ KORUMA ........................................................ 14
2.3.5. KEYBAGS ........................................................................................... 16
2.4. CİHAZ ERİŞİMİ ......................................................................................... 18
2.4.1. GEÇİŞ KODU KORUMASI ................................................................. 18
IV
2.4.2. YAPILANDIRMA UYGULAMA ........................................................ 19
2.4.3. MOBİL CİHAZ YÖNETİMİ ................................................................. 20
2.4.4. APPLE YAPILANDIRICISI ................................................................. 21
2.4.5. CİHAZ KISITLAMALARI ................................................................... 21
2.4.6. UZAKTAN SİLME ............................................................................... 22
3. ANDROID GÜVENLİK ................................................................................. 23
3.1. GİRİŞ ....................................................................................................... 23
3.1.1. ANDROID GÜVENLİK GENEL BAKIŞ ....................................... 23
3.1.2. ANDROID GÜVENLİK MİMARİSİ ................................................ 25
3.2. SİSTEM VE ÇEKİRDEK GÜVENLİK DÜZEYİ ................................ 26
3.2.1. LINUX GÜVENLİK .......................................................................... 26
3.2.2. APPLICATION SANDBOX ............................................................. 27
3.2.3. SİSTEM BÖLÜMÜ VE GÜVENLİ MOD ....................................... 28
3.2.4. DOSYA SİSTEMİ İZİNLERİ ........................................................... 28
3.2.5. ŞİFRELEME ..................................................................................... 29
3.2.6. BELLEK YÖNETİMİ GÜVENLİK GELİŞTİRMELERİ ................ 29
3.2.7. CİHAZLARIN KÖKLEŞMESİ ........................................................ 32
3.2.8. KULLANICI GÜVENLİK ÖZELLİKLERİ ..................................... 33
3.2.8.1. DOSYA SİSTEMİ ŞİFRELEME ................................................ 33
3.2.8.2. PAROLA KORUMASI ............................................................... 34
3.2.8.3. CİHAZ YÖNETİMİ .................................................................... 34
3.3. ANDROID UYGULAMA GÜVENLİĞİ ................................................ 35
3.3.1. UYGULAMANIN UNSURLARI ....................................................... 35
3.3.2. ANDROID İZİN MODELİ: ERİŞİM KORUMALI API' LER .......... 36
3.3.3. KULLANICILAR 3.PARTİ UYGULAMALARI NASIL ANLAR ... 38
3.3.4. İŞLEMLERARASI İLETİŞİM ........................................................... 39
V
3.3.5. MALİYET DUYARLI API' LER ....................................................... 40
3.3.6. SIM KART ERİŞİM ............................................................................ 40
3.3.7. KİŞİSEL BİLGİLER ........................................................................... 40
3.3.8. HASSAS VERİ GİRİŞ CİHAZLARI ................................................. 41
3.3.9. UYGULAMA İMZALAMA ............................................................... 42
3.3.10. UYGULAMA DOĞRULAMASI ..................................................... 42
3.3.11. DİJİTAL HAKLAR YÖNETİMİ ...................................................... 43
3.4. ANDROID GÜNCELLEMELERİ ............................................................... 43
3.5. GÜVENLİK İPUÇLARI ............................................................................... 44
3.5.1. VERİ DEPOLAMA ................................................................................... 45
3.5.1.1. DAHİLİ DEPOLAMAYI KULLANMAK ....................................... 45
3.5.1.2. HARİCİ DEPOLAMAYI KULLANMAK ....................................... 46
3.5.1.3. İÇERİK SAĞLAYICILARI KULLANMAK ................................... 46
3.5.2. İZİNLERİ KULLANMA .......................................................................... 47
3.5.2.1. İZİNLERİ İSTEMEK ........................................................................ 47
3.5.2.2. İZİNLERİ OLUŞTURMAK ............................................................. 48
3.5.3. AĞ KULLANMA .................................................................................... 49
3.5.3.1. IP AĞI KULLANMA .......................................................................... 49
3.5.3.2. TELEFON AĞI KULLANMA ........................................................... 49
3.5.4. GİRİŞ DOĞRULAMASI GERÇEKLEŞTİRME ................................ 50
3.5.5. KULLANICI VERİLERİ İŞLEME ...................................................... 50
3.5.5.1. WEBVIEW KULLANARAK ............................................................ 52
3.5.5.1.1. KİMLİK BİLGİLERİ KULLANARAK ..................................... 52
3.5.5.2. ŞİFRELEME KULLANARAK ...................................................... 53
3.5.5.3. İŞLEMLERARASI İLETİŞİM KULLANARAK .............................. 54
3.5.5.3.1. NİYETLERİ KULLANARAK ................................................... 54
VI
3.5.5.3.2. SERVİSLERİ KULLANARAK ................................................. 55
3.5.5.3.3. BINDER / MESSENGER ARABİRİMLERİ KULLANARAK 55
3.5.5.3.4. YAYIN ALICILARI KULLANARAK ...................................... 56
3.5.6. DİNAMİK YÜKLEME KODU ................................................................. 56
3.5.7. SANAL MAKİNEDE GÜVENLİK ......................................................... 57
3.5.8. YEREL KOD GÜVENLİĞİ ..................................................................... 58
4. SÖZLÜK .............................................................................................................. 58
SONUÇ VE ÖNERİLER ........................................................................................ 61
KAYNAKLAR ........................................................................................................ 62
VII
ŞEKİLLER LİSTESİ
ŞEKİL 1. ANDROID YAZILIM YIĞINI ................................................................ 26
ŞEKİL 2. UYGULAMA İÇİN İZİNLER GÖSTERİMİ ........................................... 37
ŞEKİL 3. HASSAS KULLANICI VERİLERİNE ERİŞİM ..................................... 41
ŞEKİL 4. DİJİTAL HAKLAR YÖNETİMİNİN MİMARİSİ .................................. 43
VIII
KISALTMALAR LİSTESİ
API : Application Programming Interface (Uygulama Programlama Arabirimi)
IPC : Inter Process Communication ( İşlemler Arası İletişim )
SSP : System Software Personalization ( Sistem Yazılımı Kişiselleştirme )
OTA : Over The Air ( Şebeke Üzerinden )
GCM : Galois Counter Mode ( Galois Sayaç Modu )
MDM : Mobile Device Management ( Mobil Cihaz Yönetimi )
SDK : Software Development Kit ( Yazılım Geliştirme Kiti )
LLB : Low Level Bootloader ( Düşük Seviye Önyükleme Yükleyicisi )
DFU : Device Firmware Upgrade ( Cihaz Yazılım Yükseltmesi )
RNG : Random Number Generator ( Rastgele Sayı Üreteci )
APK : Android Package ( Android Paketi )
OEM : Original Equipment Manufacturer ( Orijinal Ekipman Üreticisi )
RIL : Radio Interface Layer ( Radyo Arabirimi Katmanı )
NDA : Non-Disclosure Agreement ( Gizlilik Sözleşmesi )
GID : Group Identity Device ( Aygıt Grup Kimliği )
DRM : Dijital Rights Management ( Dijital Haklar Yönetimi )
ARM : Acorn Risc Machine ( Acorn Risk Makinesi )
UID : Unique Identity Device ( Cihazın Benzersiz Bir Kullanıcı Kimliği )
ECID : Device Unique Identity Device (Cihazın Benzersiz Kullanıcı Kimliği )
SKAG : Shared Keychain Access Groups (Paylaşılan Anahtarlık Erişim Gruplar)
ASLR : Address Space Layout Randomization (Adres Alanı Düzeni Rastgelesi)
UI : User Interface ( Kullanıcı Arabirimi )
IV : Initialization Vector ( Başlangıç Vektörü )
APNS : Apple Push Notification Service ( Apple Push Bildirim Hizmeti )
1
1.GİRİŞ
Mobil İşletim Sistemleri, akıllı telefonlar ve tablet bilgisayarlar için üretilmiş
yazılımlardır. Bugün dünyada en yaygın ve bilinenleri IOS ve Android'tir. Bu iki
işletim sistemi dışında 3.cü olarak Windows Phone bulunmaktadır. Ayrıca, Firefox
4.cü olarak mobil işletim sistemi piyasasına güçlü bir giriş yapmak için
hazırlanmaktadır. IOS yalnızca Apple ve Windows Phone yalnızca Sony Ericsson
akıllı telefonlarında kullanılırken Android ise Samsung, Htc, Huawei, LG, Acer ve
General Mobile gibi birçok akıllı telefonda kullanılmaktadır. Böylelikle, pazarın
aslan payına sahiptir fakat IOS'ta Apple çatısı altında olmasının avantajıyla hatırı
sayılır bir paya sahiptir.
Android, açık kaynak kodlu bir yazılım olduğu için birçok yazılımcı tarafından da
sempati görmektedir. IOS'un, her ne kadar yerleşik güvenlik önlemleri bakımından
daha güvenli olduğu söylense de Android cihazların kullanımının kolaylığı hakkında
kullanıcılar arasında fikirbirliği vardır.
Her iki işletim sistemi de kendilerinin kullanıcı güvenliğini sağlama da daha
güvenilir olduklarını belirtselerde kullanıcıların ezici bir çoğunluğunun birçok dahili
ve harici olmak üzere birçok güvenlik önleminden habersiz oldukları bilinen bir
gerçektir. Kullanıcılar, akıllı telefonlarını sosyal medya, ücretsiz sohbet uygulamaları
ve kamera / fotoğraf makinesi olarak kullanmaktan ibaret gördüğü için veri güvenliği
konusunda duyarsızdır. Hangi işlev için kullanılır olursa olsun bilinçsiz kullanım
sonucunda mail, mesaj, rehber, banka, adres, fotoğraf, bireysel ve kurumsal tüm bilgi
ile belgelerin kötü niyetli insanların eline geçmesi ciddi bir risktir.
2. IOS GÜVENLİK
Mobil cihazlarda bilgi güvenliği ister kişisel ister kurumsal kullanıcı için olsun
oldukça önemlidir. Çünkü; müşteri veya kullanıcı, kişisel veya kurumsal
farketmeksizin bilgilerini depolamaktadır. IOS cihazlar, her kullanıcının bilgisinin
güvenli olması gerektiğinden yola çıkarak güçlü güvenlik teknolojileri sağlamaktadır
ve aynı zamanda kullanımı kolaydır. Cihazlar, güvenliği mümkün olduğunca şeffaf
yapmak için tasarlandığından güvenlik özelliklerinin çoğu varsayılan olarak etkindir
bu yüzden bilgi teknolojisi departmanları kapsamlı yapılandırmalar gerçekleştirmeye
ihtiyaç duymaz. Örneğin; cihaz şifreleme gibi bazı temel özellikler yapılandırılabilir
değildir, böylelikle kullanıcılar yanlışlıkla bunları devre dışı bırakamaz [5].
2
IOS cihazlar güvenlik katmanlarıyla tasarlanmıştır. Düşük düzey donanım ve
yazılım özellikleri, kötü amaçlı yazılımlara ve virüslere karşı koruma sağlar. Üst
düzey işletim sistemi özellikleri, kişisel ve kurumsal bilgilerinize güvenli erişime izin
verir ve yetkisiz kullanım ile saldırıları önlemeye yardımcı olur. IOS güvenlik
modeli, mobil kullanım senkronizasyon ve 3.parti uygulamaları etkinleştirirken
bilgileri korur. Sistemin çoğu endüstri standardı güvenli tasarım ilkelerine dayanır.
2.1. SİSTEM MİMARİSİ
IOS cihazlarda yazılım ve donanımın sıkı entegrasyonu cihazın tüm katmanları
arasındaki faaliyetlerin onaylanmasına izin verir. IOS, yazılım yükleme ve 3.parti
uygulamalar sayesinde ilk açılıştan itibaren her bir aşamada her kaynağın düzgün
kullanıldığından ve faaliyetlerin güvenilir olduğundan emin olmak için analiz edilir
ve onaylanır [5].
Sistem çalışmaya başladıktan sonra bu entegre güvenlik mimarisi, XNU' nun
güvenilirliği ve bütünlüğüne bağlıdır. XNU, güvenlik özelliklerini zamanında
çalışmaya zorlar, üst düzey fonksiyonlar ve uygulamalara güvenmek için gereklidir.
2.1.1. GÜVENLİ ÖNYÜKLEME ZİNCİRİ
Açılış işleminin her adımı bütünlüğü sağlamak için Apple tarafından imzalanmış
şifreli bileşenleri içerir ve sadece güven zinciri doğruladıktan sonra devam eder. Bu
önyükleme yükleyiciler; çekirdek, çekirdek uzantıları ve baseband yazılım içerir.
Bir IOS cihaz açık olduğunda, uygulama işlemcisi hemen Boot ROM olarak bilinen
salt okunur bellek üzerinden kodu çalıştırır. Bu değişmez kod, çip üretim sırasında
koyulur ve dolaylı olarak güvenilirdir. Boot ROM kodu, LLB yüklemek için izin
vermeden önce Apple tarafından imzalanmış olduğunu doğrulamak için kullanılan
Apple Kök CA ortak anahtarı içerir. Bu, her adımın bir sonrakisinin Apple tarafından
imzalanmış olmasını sağlayan güven zincirinin ilk adımıdır. LLB görevlerini
bitirdiğinde, bu doğrular ve sonraki aşama Önyükleme yükleyicisi sırayla doğrular ve
IOS çekirdeği çalışır.
Bu güvenli önyükleme zinciri, bu yazılımın en düşük seviyelerinin tahrif
edilmemesini sağlar ve IOS yalnızca doğrulanmış Apple cihazları çalıştırmak için
izin verir [5].
3
Eğer bu önyükleme işleminin bir adımı yükleme veya sonrasında doğrulama
yapamıyorsa, boot-up durur ve cihaz "i-Tunes' a bağlayın" ekranını görüntüler. Bu
kurtarma modu olarak adlandırılır. Eğer Boot ROM bile, LLB yüklemek veya
doğrulamak için mümkün değilse DFU moduna girer. Her iki durumda da, cihaz
USB ile iTunes'a bağlanmalı ve varsayılan fabrika ayarlarına geri yüklenmelidir.
DFU MODUNA GİRME
DFU moduna, hem Home hem de Sleep / Wake tuşlarına basılı tutarken, USB
kablosu kullanarak cihazı bir bilgisayara manuel olarak bağlayarak girilebilir. 8
saniye geçtikten sonra Home tuşuna basılı tutmaya devam ederken Sleep / Wake
tuşunu serbest bırakın.
NOT: DFU modunda ekranda hiçbirşey görüntülenmeyecek. Apple logosu
görülürse Sleep / Wake tuşuna uzun süre basılı tutun. Geri yüklenen bir cihaz DFU
moduna girdikten sonra yalnızca Apple imzalı değiştirilmemiş mevcut kod ile
kesinlikle bilinen iyi bir duruma geri döner.
2.1.2. SİSTEM YAZILIMI KİŞİSELLEŞTİRME
Apple, ortaya çıkan güvenlik endişelerini gidermek için düzenli olarak yazılım
güncellemeleri yayımlar. Bu güncellemeler, destekleyen tüm cihazlar için aynı anda
sağlanır.
Kullanıcılar; cihaz üzerinde ve iTunes üzerinden IOS güncelleme bildirimlerini alır
ve güncellemeler kablosuz olarak teslim edilir, son güvenlik düzeltmeleri hızla
benimsenir.
Yukarıda açıklanan önyükleme işlemi, sadece Apple imzalı kodun bir cihazda yüklü
olmasını sağlar. Cihazları en son güvenlik güncelleştirmelerinden yoksun eski
sürümlere döndürmemek için, IOS SSP denilen bir işlem kullanır. Eğer gerileştirme
mümkün olsaydı, bir saldırgan IOS'un eski bir sürümünü yükleyebilir ve cihazın yeni
sürümde elde ettiği giderilmiş olan bir güvenlik açığından yararlanabilirdi.
IOS yazılım güncellemeleri iTunes kullanarak veya cihaz üzerindeki OTA üzerinden
yüklenebilir. iTunes ile IOS'un tam bir kopyası indirilir ve yüklenir. OTA yazılım
güncelleştirmeleri ağ verimliliği için deltalar gibi sağlanmaktadır.
4
IOS yükleme veya yükseltme sırasında, Apple kurulum yetkilendirme sunucusuna
bağlanır ve ECID, rastgele bir antireplay değeri ve yükleme paketinin yüklenecek her
bölümü ( LLB, iBoot, çekirdek ve OS görüntü ) için şifreleme ölçümlerinin listesini
gönderir.
Sunucu, sürümlere karşı yükleme izni için ölçümlerin sunulan listesini denetler, eğer
bir eşleşme bulursa, ölçüme ECID ekler ve sonucu imzalar. İmzalanan verilerin
komple tam dizisi, sunucudan yükleme veya yükseltme sürecinin bir parçası olarak
cihaza geçirilir. ECID ekleme, talep eden cihaz için "kişiselleştiren"
yetkilendirmedir. Sunucu, bilinen ölçümler için yetkilendirerek ve sadece
imzalayarak Apple tarafından sağlanan güncelleştirmenin tam olmasını sağlar.
Önyükleme süresi; imza ile kaplı eşleşme, cihazın benzersiz kimliği ile birlikte
diskten yüklenen öğenin ölçümü ve Apple'den imzalı gelen güven değerlendirme
zincirini doğrular.
Bu adımlar yetkilendirme sağlar ve belirli bir cihaz için eski bir IOS sürümü bir
cihazdan diğerine kopyalanamaz. Antireplay, saldırganın sunucunun yanıtını
kaydetmesini ve bunu kullanarak kullanıcının cihazı gelecekte downgrade için
kullanmasını önler.
2.1.3. UYGULAMA KOD İMZALAMA
IOS çekirdek başladıktan sonra, kullanıcı işlemlerini ve uygulamaları çalıştırmayı
kontrol edebilir. Tahrif edilmemiş, bilinen ve onaylanmış bir kaynaktan gelen tüm
uygulamaları sağlamak için IOS ile Apple tarafından verilmiş bir sertifikayı
kullanarak tüm kod çalıştırılabilir. 3.parti uygulamalar doğrulanmış ve Apple
tarafından verilmiş bir sertifika kullanılarak imzalanmış olmalıdır. Zorunlu kod
imzalama, işletim sistemi uygulamaları için güven zinciri kavramını genişletir.
3.parti uygulamalar, imzasız kod kaynakları veya kendini değiştiren kodu kullanarak
yüklenmesini engeller.
Geliştiriciler, IOS cihazlarda uygulamalar kurmak ve geliştirmek için Apple ile kayıt
olmalı ve IOS geliştirici programına katılmalıdır. Her geliştiricinin gerçek dünyadaki
kimliği, ister bir birey veya faaliyet olsun onların sertifikası verilmeden önce Apple
tarafından doğrulanır [5].
5
Bu sertifika uygulamaları imzalamak için geliştiricilere olanak sağlar ve onları
dağıtım için Apple Store'a teslim eder. Sonuç olarak, Apple Store'daki tüm
uygulamalar, kötü niyetli uygulamalar oluşturulması için bir caydırıcı olarak hizmet
veren tanımlanabilir bir kişi veya kuruluş tarafından teslim edilmiştir.
İşletmeler ayrıca şirket içi uygulamaları kendi bünyesinde kullanılmak üzere
çalışanlara dağıtmak için yazma yeteneğine sahiptir. İşletmeler ve kuruluşlar, bir D-
U-N-S numarası ile IOS geliştirici Enterprise programına başvurabilir. Apple, kimlik
ve uygunluğunu kontrol ettikten sonra başvuruyu onaylar. Bir organizasyon IDEP
üyesi olduktan sonra, bu yetki cihazlarda çalıştırmak için organizasyon içi
uygulamalara izin veren bir "hazırlama profili" elde etmek için kayıt olunabilinir.
Kullanıcılar, organizasyon için uygulamaları çalıştırmak için hazırlama profili yüklü
olmalıdır. Bu yalnızca, kuruluşun hedeflenen kullanıcıların IOS cihazlar üzerine
uygulamaları yüklemesinin mümkünlüğünü sağlar.
Diğer mobil platformların aksine IOS, kullanıcıların kötü amaçlı imzasız
uygulamaları web sitelerinden yüklemeye veya güvenilmeyen kod çalıştırmasına izin
vermez. Çalışma zamanında, bir uygulamanın son güncelleme veya yüklemeden
sonra değiştirilmemişliğini sağlamak için onları yüklü oldukları gibi tüm
çalıştırılabilir bellek sayfalarının kod imza kontrolleri yapılır.
2.1.4. ÇALIŞMA ZAMANI İŞLEM GÜVENLİĞİ
Bir uygulama onaylanmış bir kaynaktan doğrulandıktan sonra, IOS diğer
uygulamalar veya sistemin geri kalanını garantiye almak için güvenlik önlemlerini
güçlendirir.
Tüm 3.parti uygulamalar "sandboxed" yani korumalıdır, bu yüzden onların diğer
uygulamalar tarafından depolanan dosyalara erişmesi veya cihazda değişiklik
yapması kısıtlıdır. Bu, uygulamaların diğer uygulamalar tarafından depolanan
bilgileri değiştirmelerini veya toplamalarını engeller. Her uygulamanın, dosyaları
için uygulama kurulduğunda rastgele atanmış benzersiz bir giriş dizini vardır.
Bir 3. parti uygulamanın kendi dışındaki bilgilere erişmesi gerekiyorsa sadece
API'ler ve IOS tarafından sağlanan hizmetleri kullanarak yapar. Sistem dosyaları ve
kaynakları da kullanıcının uygulamalarından korumalıdır. IOS çoğunluğu, tüm
3.parti uygulamaları gibi ayrıcalıklı olmayan "mobil" kullanıcı gibi çalışır.
6
Tüm işletim sistemi bölümü salt okunur monte edilmiştir. Böyle uzaktan oturum
açma hizmetleri gibi gereksiz araçlar sistem yazılımına dahil değildir ve API'ler,
uygulamalara diğer uygulamaların veya IOS'un kendi ayrıcalıklarını değiştirmesi için
yükseltmesine izin vermez [5].
3.parti uygulamalar ile kullanıcı bilgi ve özelliklerine erişim, iCloud gibi yetki
bildirimleri kullanılarak kontrol edilir. Yetkilerin, bir uygulama için imzalanmış olan
şifre / değer çiftleri vardır ve UNIX kullanıcı kimliği gibi çalışma zamanı
faktörlerinin haricinde kimlik doğrulamasına izin verir. Yetkiler, dijital olarak
imzalanmış olduğundan değiştirilemez. Yetkiler, sistem uygulamaları ve araçlar
tarafından ayrıcalıklı belirli işlemler için yoğun olarak kullanılmaktadır aksi taktirde
"root" olarak çalıştırmak için işlem gerekir. Bu büyük ölçüde sistem uygulaması
veya araçlar tarafından bir uzlaşmayla ayrıcalık yükseltme olasılığını azaltır.
Uygulamalar sadece sistem tarafından sağlanan API'ler sayesinde arka plan işlemi
gerçekleştirebilir. Bu, uygulamaların performansını düşürmeden veya pil ömrünü
önemli ölçüde etkilemeden işlevine devam etmesini sağlar. Uygulamalar birbirleri ile
doğrudan veri paylaşmaz; paylaşım, uygulamalar özel URL şemalarını kullanarak
yalnızca hem alma hem gönderme veya SKAG aracılığıyla gerçekleştirilebilir.
ASLR, bellek bozulması hatalarını sömürüye karşı korur. Yerleşik uygulamalar, tüm
bellek bölgelerinin rastgele başlatılmasını sağlamak için ASLR kullanır. İlaveten,
cihaz her açılışta sistem paylaşılan kütüphane konumlarını rastgele seçer. Xcode IOS
geliştirme ortamı, açık ASLR desteği ile otomatik olarak 3.parti programları derler.
Daha fazla koruma, IOS'un ARM'nin bellek sayfalarını yürütülemez olarak
işaretleyen Execute Never özelliğini kullanmasıyla sağlanmaktadır. Hem yazılabilir
hem de yürütülebilir olarak işaretlenmiş bellek sayfaları sıkı şekilde denetlenen
koşullar altında yalnızca uygulamalar tarafından kullanılabilir:
Çekirdek, sadece Apple'ın varlığı için "dinamik kod imzalama" yetkisini denetler. O
zaman bile, rastgele seçme adresi verilen yürütülebilir ve yazılabilir bir sayfa istemek
için sadece tek bir "mmap" çağrı yapılabilir. Safari, bu işlevi kendi JavaScript JIT
derleyicisi için kullanır.
7
2.2. AĞ GÜVENLİĞİ
Mobil kullanıcıların, dünyanın herhangi bir yerinden kurumsal bilgi ağlarına
erişmesi gerekebilir, bu yüzden onların yetkilerini ve veri iletimi sırasında
korunmasını sağlamak önemlidir. IOS, kimliği doğrulanmış yetkili ve şifreli iletişim
için standart ağ protokollerini kullanır ve geliştirici erişimi sağlar. IOS, hem Wi-Fi
hem de hücresel veri ağ bağlantıları için kanıtlanmış teknolojiler ve bu güvenlik
hedeflerini gerçekleştirmek için en son standartları sağlar.
Diğer platformlarda, çok sayıda açık iletişim portlarını izinsiz girişlere karşı
korumak için güvenlik duvarı yazılımı gereklidir. Çünkü, IOS dinlenme bağlantı
portlarını sınırlayarak azaltılmış bir saldırı yüzeyini elde eder ve telnet, kabuklar
veya bir web sunucusu gibi gereksiz ağ programlarını kaldırır, bu güvenlik duvarı
yazılımı gerektirmez. Ayrıca; iMessage, Facetime ve APNS kullanarak iletişim
tamamen şifrelenir ve kimlik doğrulanır.
2.2.1. SSL, TSL
IOS, DTLS ve Aktarım Katmanı Güvenliği ( TLS v1.1, TLS v1.2 ) gibi Güvenli
Yuva Katmanı'nı ( SSL v3 ) da destekler. Safari, Takvim, Mail ve diğer internet
uygulamaları ağ hizmetleri ve cihaz arasında şifreli bir iletişim kanalı etkinleştirmek
için otomatik olarak bu mekanizmaları kullanır. Düşük seviyeli ( SecureTransport )
API'ler "ince taneli kontrolü" sağlarken, Yüksek seviyeli ( CFNetwork gibi ) API'ler
geliştiricilerin kendi uygulamalarında TLS benimsemesini kolaylaştırır [4].
2.2.2. VPN
Güvenli ağ hizmetleri, sanal özel ağ gibi tipik olarak IOS cihazlar ile çalışmak için
en az kurulum ve yapılandırma gerektirir. IOS cihazlar, aşağıdaki protokolleri ve
kimlik doğrulama yöntemlerini destekleyen VPN sunucuları ile çalışır:
* Apple Store'dan uygun istemci uygulaması kullanarak Juniper Networks, Cisco,
Aruba Networks, SonicWALL, Check Point, and F5 Networks SSL-VPN
Bu uygulamalar, yerleşik IOS desteği için kullanıcı kimlik doğrulaması sağlar.
* Şifre, RSA SecurID veya CRYPTOCard tarafından kullanıcı kimlik doğrulaması
ile Cisco IPSec ve paylaşılmış gizlilik ve sertifikalar ile makine kimlik doğrulaması
8
* Cisco IPSec, cihaz yapılandırması sırasında belirtilen etki alanları için VPN On
Demand'ı destekler.
* MS-CHAPV2 şifre, RSA SecurID veya CRYPTOCard tarafından kullanıcı kimlik
doğrulaması ile L2TP/IPSec ve paylaşılmış gizlilik ve sertifikalar ile makine kimlik
doğrulaması
* MS-CHAPV2 şifre, RSA SecurID veya CRYPTOCard tarafından kullanıcı kimlik
doğrulaması ile PPTP
IOS, sertifika tabanlı kimlik doğrulaması kullanan ağlar için VPN On Demand'ı
destekler. Bilgi Teknolojileri politikaları, hangi etki alanlarının bir yapılandırma
profili kullanarak bir VPN bağlantısı gerektirdiğini belirler.
2.2.3. WI - FI
IOS, kablosuz kurumsal ağlara kimliği doğrulanmış erişim sağlamak için WPA2
Kurumsal dahil olmak üzere endüstri standardı Wi-Fi protokollerini destekler.
WPA2 Kurumsal, veri gönderirken kullanıcılara en yüksek seviyede güvence
vererek 128-bit AES şifreleme kullanır ve Wi-Fi üzerinden veri alır. 802.1X desteği
ile IOS cihazlar, RADIUS kimlik doğrulama ortamlarında geniş bir yelpazeye
entegre edilebilir. 802.1X, iPhone ve iPad'te EAP-TLS, EAP-TTLS, EAP-FAST,
EAP-SIM, PEAPv0, PEAPv1, ve LEAP dahil kablosuz kimlik doğrulama
yöntemlerini destekler [4].
2.2.4. BLUETOOTH
IOS'un Bluetooth desteği gereksiz yere artan özel veriye erişim olmadan yararlı
işlevsellik sağlamak üzere tasarlanmıştır. IOS cihazlar; Şifreleme Modu 3, Güvenlik
Modu 4 ve Servis Seviyesi 1 bağlantılarını destekler.
IOS, aşağıdaki Bluetooth profillerini destekler:
* Eller serbest profili ( HFP 1.5 )
* Telefon defteri erişim profili ( PBAP )
* Gelişmiş ses dağıtım profili ( A2DP )
* Ses / video uzaktan kumanda profili ( AVRCP )
* Kişisel alan ağı profili ( PAN )
* İnsan arabirim cihaz profili ( HID )
9
2.3. VERİ KORUMA VE ŞİFRELEME
Güvenli önyükleme zinciri, kod imzalama ve çalışma zamanı işlem güvenliğini
sağlamak için sadece güvenilen kod ve uygulamaları bir cihaz üzerinde
çalıştırılabilinir. IOS, güvenlik altyapısının bir cihaz üzerinde yetkisiz değişiklikler
ile diğer bölgelerde tehlikeye düştüğü durumlarda bile kullanıcı verilerini korumak
için ek güvenlik özellikleri vardır. Sistem mimarisi kendisi gibi, bu şifreleme ve veri
koruma yetenekleri yazılım teknolojilerini ve entegre donanım katmanlarını kullanır
[4].
2.3.1. DONANIM GÜVENLİK ÖZELLİKLERİ
Mobil cihazlarda, hız ve güç verimliliği kritik öneme sahiptir. Şifreleme işlemleri
karmaşıktır. Doğru tasarlanmamış ve uygulanmamışsa, performans veya pil ömrü
sorunlarıyla karşılaşılabilinir. Her IOS cihazın, flash depolama ve ana sistem belleği
ile DMA içinde dosya şifrelemeyi çok verimli yapan adanmış bir AES 256 şifreleme
motoru vardır. AES motor ile birlikte SHA - 1, daha fazla şifreleme işleminin
yükünü azaltarak donanımda uygulanmaktadır.
UID ve GID üretim sırasında AES 256-bit anahtarları uygulama işlemcisinin içine
kaynaşır. Hiçbir yazılım veya ürün bilgisi, onları doğrudan okuyamaz; onlar, bunları
kullanarak gerçekleştirilen şifreleme ve şifre çözme işlemlerin yalnızca sonuçlarını
görebilir. UID her cihaz için benzersizdir ve Apple veya tedarikçilerin herhangi birisi
tarafından kaydedilmez [5].
GID, cihaz sınıfının tüm işlemcileri için ortaktır. Yükleme ve geri yükleme sırasında
sistem yazılımı teslim edilirken ek bir koruma seviyesi olarak da kullanılır. Hararetli
bu anahtarlar, silikon içinde bunların tahrif veya bypass edilmesini engeller ve
sadece AES motoru tarafından ulaşılabilir olduğunu garanti eder.
UID, verilerin şifreli olarak belirli bir cihaza bağlanmasına olanak sağlar. Örneğin;
dosya sistemini koruyan anahtar hiyerarşisi kullanıcı kimliği içerir, bu yüzden bellek
yongaları fiziksel olarak bir cihazdan başka bir cihaza taşınırsa dosyalar erişilemez
olur. UID, cihazdaki başka bir tanımlayıcı ile ilişkili değildir.
UID ve GID dışındaki diğer tüm şifreleme anahtarları "yarrow" 'a dayalı bir
algoritmayı kullanarak sistemin RNG'si tarafından oluşturulur.
10
Sistem entropisi, önyükleme sırasında ara verme zamanından ve ilave olarak cihaz
önyüklemeye başladıktan sonra gelen iç sensörlerden toplanır.
Güvenli bir şekilde kaydedilen anahtarları silmek, onları üreten kadar önemlidir. Bu
özellikle flash depolama üzerinde zorludur, bu yüzden aşınma - düzeltme verilerinin
çoklu kopyalarının silinmesi gerekir anlamına gelebilir. Bu sorunu çözmek için IOS
cihazlar, "silinebilir depolama" adı verilen özel bir güvenli veri silme özelliği içerir.
Bu özellik, çok düşük bir düzeydeki blokların az sayıdakini silmek ve doğrudan
adres için temel depolama teknolojisine erişir.
2.3.2. DOSYA VERİLERİNİ KORUMA
Yerleşik donanım şifreleme özelliklerine ek olarak, ayrıca cihazdaki flash bellekte
saklanan verileri daha fazla korumak için "veri koruma" adlı bir teknoloji kullanılır.
Bu teknoloji mobil cihazların her zaman açık ve internete bağlı oldukları, herhangi
bir zamandaki telefon görüşmeleri, metin, mesaj ve e-mailler alabileceği gerçeği
dikkate alınarak tasarlanmıştır. Veri koruma, bir cihaza kilitliyken yeni bilgi
indirmeksizin ve hassas verilerin şifresini çözmeksizin gelen telefon aramaları gibi
olaylara yanıt vermesini sağlar. Bu bireysel davranışlar, "sınıflar" bölümünde
açıklandığı gibi her bir dosya için bir sınıf için her dosyayı atayarak kontrol edilir.
Veri koruma, her sınıftaki verilerin erişilmesi gerektiğinde verileri korur.
Erişilebilirlik, sınıf anahtarları kilidinin açılmış olup olmadığına göre belirlenir. Veri
koruma, anahtarların bir hiyerarşisi oluşturularak ve yönetilerek uygulanır, daha önce
açıklanan donanım şifreleme teknolojileri üzerine inşa edilir [4].
MİMARİYE BAKIŞ
Her zaman veri bölümü üzerine bir dosya oluşturulduğunda; Veri koruma, dosya
başına yeni bir 256-bit şifre oluşturur ve onu dosyayı şifrelemek için AES CBC
modunu kullanarak flash belleğe yazılır gibi şifre kullanan AES motor donanımına
verir. IV, dosya anahtar başına SHA-1 hash ile şifrelenmiş, kapalı blok dosyasına
ayarlanmış hesaplanan bir geribildirim kaydırma kaydının çıktısıdır.
Dosya başına anahtar, dosya erişilebilir olması gereken şartlar altında çeşitli sınıf
anahtarlarından biri ile örülmüştür. Diğer tüm sargılar gibi, bu RFC 3394 başına
NIST AES anahtar sarması kullanılarak yapılır. Sarılmış dosya başına anahtar
dosyanın metadatasında depolanır.
11
Bir dosya açıldığında, onun metadatası dosya sistemi anahtarı ile şifresi çözülür.
Sarılı dosya başına anahtar açığa çıkar ve üzerinde sınıfı koruyan bir notasyon olur.
Dosya başına anahtar sınıf anahtarı ile sarılmamıştır, daha sonra flash bellekten
okunduğu gibi dosyanın şifresini çözen AES motor donanımına verilir.
Dosya sistemindeki tüm dosyaların metadataları, IOS ilk yüklendiğinde veya cihaz
bir kullanıcı tarafından silindiği zaman rastgele oluşturulan bir anahtar ile şifrelenir.
Dosya sistem anahtarı, "silinebilir depolama" da saklanır.
Bu anahtar cihazda depolandığından beri, verilerin gizliliğini korumak için
kullanılmaz, bunun yerine isteğe bağlı olarak hızlıca silinecek şekilde tasarlanmıştır.
Bu şekilde anahtarın silinmesi, tüm dosyaları şifreli olarak erişilemez hale getirir.
Bir dosyanın içeriği, bir sınıf anahtarı ile sarılmış bir dosya başına anahtar ile
şifrelenmiştir ve sırayla dosya sistemi anahtarı ile şifrelenen bir dosyanın
metadatasında saklanır. Sınıf anahtarı donanım UID ile korunur. Bu hiyerarşi,
esneklik ve performans sağlar.
TÜM İÇERİK VE AYARLARI SİL
Ayarlar'daki "tüm içerik ve ayarları sil" seçeneği silinebilir depolamadaki bütün
anahtarları yok eder ve tüm kullanıcı verilerini cihaz üzerinde şifrelemeye erişemez
hale getirir.
GÜÇLÜ APPLE ID PAROLALARI OLUŞTURMA
Apple ID'ler; iCloud, Facetime ve iMessage gibi hizmetleri bir diziye bağlamak için
kullanılır. Kullanıcıların, güçlü şifreler oluşturmasına yardımcı olmak için tüm yeni
hesaplar aşağıdaki parola nitelikleri içermelidir:
* En az 8 karakter * En az 1 sayı
* En az 1 harf * En fazla 3 ardışık aynı karakter
* En az 1 büyük harf * Hesap adıyla aynı olmayacak
2.3.3. GEÇİŞ KODLARI
Bir cihaz geçiş kodu ayarlayarak kullanıcı otomatik olarak veri koruma sağlar. IOS,
dört haneli ve keyfi uzunluktaki alfanumerik geçiş kodlarını destekler.
12
Cihazın kilidini açmaya ek olarak, bir geçiş kodu cihazda depolanmayan şifreleme
anahtarları için entropi sağlar. Bu, cihaza sahip bir saldırganın geçiş kodu olmaksızın
veri koruma sınıflarındaki verilere erişim sağlayamaması anlamına gelir.
Geçiş kodu, cihazın UID'le karışık olmalıdır. Bu yüzden brute-force girişimleri
saldırı altındaki cihazda yapılmalıdır. Büyük bir yineleme sayısı her girişimi daha
yavaş yapmak için kullanılır. Yineleme sayısı kalibre edilir, böylece bir girişim
yaklaşık seksen milisaniye sürer. Bu, küçük harfler ve sayılar ile altı karakterli
alfanumerik bir parolanın tüm kombinasyonlarını denemek için en fazla 5½ ( 5,5 yıl )
veya yalnızca sayılarla dokuz basamaklı bir parola için 2½ ( 2,5 yıl ) alacağı
anlamına gelir.
Ayrıca brute-force geçiş kodu saldırılarından vazgeçirmek için, IOS arabirimi kilit
ekranında geçersiz bir geçiş kodu girmesinden sonra artan zaman gecikmelerini
zorlar. Kullanıcılar, başarısız on parola girişiminden sonra cihazı otomatik olarak
silmeyi seçebilir. Bu ayar, MDM ve Exchange ActiveSync üzerinden yönetim ilkesi
olarak da kullanılabilir ve aynı zamanda daha düşük bir eşik değeri ile ayarlanabilir.
GEÇİŞ KODU HAKKINDA ÖNEMLİ HUSUSLAR
Yalnızca sayı içeren uzun bir geçiş kodu girilirse, bir sayısal tuş takımı kilit
ekranında tam klavye yerine görüntülenir. Benzer güvenlik sağlarken, uzun bir
sayısal geçiş kodu girmek kısa bir alfanumerik geçiş kodu girmekten daha kolay
olabilir [5].
SINIFLAR
IOS cihaz üzerinde yeni bir dosya oluşturulduğunda, onu oluşturan uygulama
tarafından bir sınıf atanmıştır. Her sınıf, veri erişilebilirliğini belirlemek için farklı
politikalar kullanır.
Temel sınıflar ve politikalar aşağıdaki gibidir:
TAM KORUMA (NSFILEPROTECTIONCOMPLETE)
Sınıf anahtarı, UID cihaz ve kullanıcı geçiş kodundan türetilen bir şifre ile
korunmaktadır. Kullanıcı cihazı kilitledikten kısa süre sonra şifresi çözülmüş sınıf
anahtarı bir kenara ayrılır, kullanıcı geçiş kodunu tekrar girene kadar bu sınıftaki tüm
verilere ulaşılamaz. Mail uygulaması, iletiler ve ekleri için tam koruma sağlar.
13
Uygulama başlatma görüntüleri ve konum bilgileri de tam koruma ile
saklanmaktadır.
AÇIK OLDUKÇA (NSFILEPROTECTIONCOMPLETEUNLESSOPEN)
Bazı dosyaların cihaz kilitliyken yazılması gerekebilir. Arka planda bir mail ekini
indirmek bunun en iyi örneğidir. Bu davranış, asimetrik eliptik eğri şifreleme
kullanılarak elde edilir. Her zamanki dosya başına anahtar ile birlikte veri koruma,
ortak dosya / özel anahtar çifti üretir.
Paylaşılan bir gizli dosya, dosyanın özel anahtarı kullanılarak hesaplanır ve cihazın
UID ve kullanıcının geçiş kodu ile açık olduğu sürece koruma ortak sınıf anahtarına
karşılık gelen özel anahtar korunmaktadır.
Dosya başına anahtar, bu paylaşılan gizliliğin hashi ile sarılır ve dosyanın ortak
anahtarı ile birlikte dosyanın metadatasında saklanır; karşılık gelen özel anahtar
sonra hafızadan silinir. En kısa sürede kapalı dosya, dosya başına anahtar da aynı
zamanda hafızadan silinir.
Dosyayı yeniden açmak için, açık olduğu sürece koruma ortak sınıf anahtarı ve
dosyanın geçici ortak anahtarı kullanılarak paylaşılan gizlilik yeniden oluşturulur;
hash, daha sonra dosyanın şifresini çözmek için kullanılan dosya başına anahtar
paketini açmak için kullanılır [5].
İLK KULLANICI KİMLİK DOĞRULAMASINA KADAR
(NSFILEPROTEC. COMP. UNTILFIRSTUSERAUTHENTICATION)
Bu sınıf, "tam koruma" ile aynı şekilde davranır. Cihaz kilitlendiğinde şifresi
çözülmüş sınıf anahtarı dışında bellekten kaldırılmaz. Bu sınıftaki koruma, masaüstü
tam disk şifrelemeye benzer özelliklere sahiptir ve verileri yeniden başlatılmasını
gerektiren saldırılardan korur.
KORUMASIZ (NSFILEPROTECTIONNONE)
Bu sınıf anahtarı yalnızca UID ile korunur ve silinebilir depolamada ( Effaceable
Storage ) saklanır. Bu varsayılan sınıf, tüm dosyalar için değildir aksi taktirde bir veri
koruma sınıfına atanır. Bu sınıftaki dosyaların şifresini çözmek için gerekli tüm
anahtarlar cihazınızda saklanır, şifreleme yalnızca uzaktan hızlı silmeye yarar. Eğer,
bir dosyaya veri koruma sınıfı atanmamışsa, yine de bu bir IOS cihaz üzerindeki tüm
veriler gibi şifrelenmiş biçimde depolanır.
14
IOS SDK, 3.parti uygulamaları kolay hale getirmek ve ev geliştiricilerine veri
koruma benimsemesi için tam bir API'ler takımı sunar ve kendi uygulamalarında en
üst düzeyde koruma sağlar. Veri koruma; SQLite, NSData, CoreData ve
NSFileManager dahil dosya ve veritabanı API'leri için kullanılabilir.
2.3.4. ANAHTARLIK VERİ KORUMA
Uygulamaların birçoğunun parolaları ve anahtarlar ile giriş belirteçleri gibi diğer
kısa ama hassas veri bitlerini ele alması gerekir.
Anahtarlık, güvenlik dosyalarını korumak için kullanılan anahtar hiyerarşisine
paralel çalışan farklı bir anahtar hiyerarşisi tarafından sağlanan "korumasız" sınıftaki
dosya sisteminde depolanan SQLite veri tabanı olarak uygulanır. Yalnızca tek bir
veritabanı vardır; "securityd" daemon, anahtarlık öğelerinin her bir işlem veya
uygulamaya erişebilmesini belirler.
Anahtarlık erişim API'leri, "securityd" çerçevesinde yapılan uygulamanın
"anahtarlık-erişim-gruplar" ve "uygulama-tanımlayıcı" yetkisini sorgulayan
çağrıların nedenidir. Tek bir işlemi kısıtlamak yerine, erişim grupları Anahtarlık
öğeleri uygulamalar arasında paylaşılmasına olanak sağlar [5].
Anahtarlık öğeleri yalnızca aynı geliştirici uygulamalar arasında paylaşılabilir. Bu,
erişim gruplarını kullanmak için 3.parti uygulamalar gerektiren IOS geliştirici
Programı aracılığıyla kendilerine ayrılan bir önek ile yönetilir. Önek gereksinimi,
kod imzalama ve Provizyon profilleri üzerinden uygulanır.
Anahtarlık verisi, Veri Koruma dosyasında kullanılan benzer bir sınıf yapısı
kullanılarak korunmaktadır. Bu sınıflar, dosya veri koruma sınıfları için eşdeğer
davranışlara sahiptir ama farklı tuşları kullanır ve API'lerin farklı adlandırılan
parçasıdır.
Her Anahtarlık sınıfı, yedekleme sırasında cihazdan kopyalanmaya başladığı zaman
UID ile daima korunan "sadece bu cihaz" muadiline sahiptir. Eğer farklı bir cihaza
geri yüklediyseniz bunu işe yaramaz hale getirir.
Apple, işletim sistemi tarafından ihtiyaç duyulduğunda bilgi güvenliğinin türüne
bağlı olarak Anahtarlık sınıfları tarafından dikkatle dengelenmiş güvenlik ve
kullanılabilirliğe sahiptir.
15
Örneğin; bir VPN sertifikası her zaman kullanılabilir olmalıdır, bu yüzden cihaz
sürekli bir bağlantı tutar ama başka bir cihaza taşınamaz olduğundan non-migratory
olarak sınıflandırılmıştır.
IOS tarafından oluşturulan Anahtarlık öğeleri için aşağıdaki sınıf korumaları
uygulanır:
Eleman Erişilebilir
Wi-Fi passwords After first unlock
Mail accounts After first unlock
Exchange accounts After first unlock
VPN certificates Always, non-migratory
VPN passwords After first unlock
LDAP, CalDAV, CardDAV After first unlock
Social network account tokens After first unlock
Home sharing password When unlocked
Find My iPhone token Always
iTunes backup When unlocked, non-migratory
Voicemail Always
Safari passwords When unlocked
Bluetooth keys Always, non-migratory
Apple Push Notification Service Token Always, non-migratory
iCloud certificates and private key Always, non-migratory
iCloud token After first unlock
iMessage keys Always, non-migratory
SIM PIN Always, non-migratory
Certificates and private keys installed Always, non-migratory
by Configuration Profile
BİR ANAHTARLIK ÖĞESİNİN BİLEŞENLERİ
Erişim grubu ile birlikte her bir anahtarlık öğesi, metadata ( "oluşturulmuş" ve "en
son güncellenmiş" zaman belirteci gibi ) içerir.
16
Aynı zamanda, sorgulamak için kullanılan hesap ve sunucu adı gibi her bir öğenin
şifresini çözmeden arama izni vermek için SHA-1 özniteliklerinin karmalarını içerir.
Son olarak, aşağıdakileri şifreleme verilerini içerir:
* Sürüm numarası
* Değer koruma sınıfını belirten eleman
* Eleman başına koruma sınıfı anahtar ile sarılmış
* Elemanı açıklayan neiteliklerin sözlüğü ( SecItemAdd için geçti gibi ), bir ikili plist
olarak kodlanmış ve şifrelenmiş
Şifreleme, GCM'deki AES 128'dir: erişim grubu nitelikleri içinde ve GMAC
tarafından korunmaktadır.
2.3.5. KEYBAGS
Anahtarlar; hem dosya hem de Anahtarlık Veri Koruma sınıfları için toplanır ve
keybags içinde yönetilir. IOS, aşağıdaki 4 keybags'i kullanır:
SYSTEM KEYBAG
Cihazın normal çalışmasında kullanılan sarılmış sınıf anahtarlarının depolandığı
yerdir. Örneğin; bir geçiş kodu girildiğinde, NSFileProtectionComplete anahtarı
sistem anahtarlığından yüklenir ve paketi açar.
Bu, "Korumasız" sınıfta depolanan bir ikili plisttir ama içerikleri Silinebilir
Depolama'da tutulan bir anahtar ile şifrelenir. Keybags için ileri güvenlik sağlamak
amacıyla, bu anahtar silinir ve bir kullanıcı geçiş kodunu değiştirdiği her zamanda
yenilenir. Sistem Keybag, cihazda depolanan tek keybag'tir. AppleKeyStore çekirdek
uzantısı Sistem Keybag'i yönetir ve bir cihazın kilit durumu ile ilgili sorgulanabilir.
Bu raporlar, paket açılması başarılı bir şekildeyken eğer sistemdeki tüm sınıf
anahtarları erişilebilir ise sadece cihazın kilidinin açık olduğunu bildirir.
BACK-UP KEYBAG
Back-up Keybag, iTunes tarafından şifrelenmiş bir yedekleme yapıldığında
oluşturulur ve cihazın yedeklendiği bilgisayarda depolanır. Yeni bir keybag yeni bir
anahtar dizisiyle oluşturulur ve yedeklenmiş veriler bu yeni anahtarlar için yeniden
şifrelenir.
17
Daha önce açıklandığı gibi, non-migrator Anahtarlık öğeleri UID türetilmiş anahtar
ile sarılı kalır, onlar orijinalinde yedeklenmiş cihaza restore edilmeye izin verir ancak
onları farklı bir cihazda ulaşılamaz hale getirir.
Keybag, iTunes' taki ayarlanan parolayla korunur ve PBKDF2' nin 10.000
yinelemesi aracılığıyla çalışır. Bu büyük yineleme sayısına rağmen, belirli bir aygıt
için herhangi bir bağ yoktur ve bu nedenle back-up keybag üzerindeki birçok
bilgisayar arasında paralel bir brute-force saldırısı denenebilir. Bu tehdit yeterince
güçlü bir parola ile azaltılabilir.
Eğer bir kullanıcı iTunes yedekleme için şifrelemeyi seçmezse, yedekleme dosyaları
onların Veri Koruma sınıfına bakılmaksızın yani sınıfı ne olursa olsun şifrelenmez
ama Anahtarlık, türetilmiş bir anahtar ile korumalı kalır. Bu yüzden, eğer yalnızca bir
yedekleme parolası ayarlanırsa Anahtarlık öğeleri yeni bir cihaza taşınır.
ESCROW KEYBAG
iTunes senkronizasyonu ve MDM için kullanılır. iTunes'u yedeklemeyi ve kullanıcı
geçiş kodu girmesini gerektirmeden senkronize etmeyi sağlar ve uzaktan bir
kullanıcının şifresini temizlemek için bir MDM sunucusu sağlar. Senkronizasyon
için kullanılan bilgisayarda veya cihazı yöneten MDM sunucusunda depolanır.
Escrow keybag, cihaz senkronizasyonu sırasında potansiyel verilerin tüm sınıflarına
erişimi gerektiren kullanıcı deneyimini geliştirir. Bir geçiş kodu ile kilitli cihaz,
iTunes'a bağlandığında kullanıcıdan bir geçiş kodu girmesi istenir. Bundan sonra
cihaz, bir Escrow Keybag oluşturur ve Host'a iletir. Escrow Keybag, tam olarak yeni
oluşturulan anahtar tarafından korunan cihazda kullanılan aynı sınıf anahtarları içerir.
Bu anahtar, Escrow Keybag kilidini açmak için gereklidir ve Protected Until First
User Authentication sınıfındaki cihazda depolanır. Bu yüzden, cihaz yeniden
başlatıldıktan sonra ilk kez iTunes yedeklemeden önce geçiş kodu girilmelidir.
ICLOUD BACK-UP KEYBAG
Back Up Keybag'e benzemektedir. Bu keybag'in tüm sınıf anahtarları asimetriktir,
bu yüzden iCloud yedeklemeleri arka planda gerçekleşebilir. "No Protection" hariç
tüm veri koruma sınıfları için şifrelenmiş veri cihazdan okunur ve iCloud'a
gönderilir. İlgili sınıf anahtarları, iCloud anahtarları tarafından korunur.
18
Anahtarlık sınıfı anahtarları, şifrelenmemiş bir iTunes yedeklemesiyle aynı şekilde
UID türetilmiş bir anahtar ile sarılır.
BİR KEYBAG BİLEŞENLERİ
Başlık İçerikleri:
* Sürüm ( IOS 3 veya daha sonra 5'e ayarlama )
* Tür ( Sistem, Yedekleme, Emanet, iCloud Yedekleme )
* Keybag UID
* Keybag imzalanmış ise bir HMAC
* Sınıf anahtarlarının sarılması için kullanılan yöntem: UID veya PBKDF ile
birbirine dolaşmış, salt ve yineleme sayısı ile birlikte
Sınıf anahtarlarının bir listesi:
* Anahtar UUID
* Sınıf ( Bu, hangi dosya veya Anahtarlık veri koruma sınıfı )
* Sarma Türü
* Sarmalanmış sınıf anahtarı
* Asimetrik sınıflar için ortak anahtar
2.4. CİHAZ ERİŞİMİ
IOS, esnek güvenlik politikaları ve kolayca uygulanan yapılandırmaları destekler ve
yönetir. Bu, şirketlerin kurumsal bilgilerini korumayı ve çalışanların kurumsal
beklentilerini karşılamayı sağlar.
2.4.1. GEÇİŞ KODU KORUMASI
Kriptografik koruma sağlamanın yanı sıra, geçiş kodları cihazın kullanıcı kimliğine
yetkisiz erişimini önler. IOS arabirimi, geçersiz bir geçiş kodu girildikten sonra artan
zaman gecikmelerini zorlar, kilit ekranı üzerinden brute-force saldırıların etkinliğini
önemli ölçüde azaltır.
Kullanıcılar, başarısız on geçiş kodu denemesinden sonra cihaz otomatik olarak
silinebiliri seçebilir. Bu ayar, idari bir yönetim politikası olarak kullanılabilir. Ayrıca
Exchange ActiveSync ve MDM sayesinde daha düşük bir eşik değeri ayarlanabilir
[5].
19
Varsayılan olarak, kullanıcının geçiş kodu 4 haneli PIN olarak tanımlanabilir.
Kullanıcılar, daha uzun alfanumerik ( alfasayısal ) geçiş kodu belirleyebilir: Settings
> General > Passcode > Complex Passcode. Daha uzun ve daha karmaşık geçiş
kodlarını tahmin etmek ya da saldırmak zordur ve kurumsal kullanım için tavsiye
edilmektedir.
Yöneticiler, karmaşık parola gereksinimlerini ve MDM veya Exchange ActiveSync
gibi diğer politikaları kullanarak veyahut kullanıcıların el ile yapılandırma profilleri
zorunlu kılarak zorlayabilir.
Aşağıdaki geçiş kodu politikaları kullanılabilir:
* Basit bir değere izin vermek
* Alfanumerik değer gerektirir
* Minimum geçiş kodu uzunluğu
* Minimum sayıda karmaşık karakter
* Maksimum geçiş kodu yaşı
* Geçiş kodu geçmişi
* Otomatik kilit zaman aşımı
* Cihaz kilidi için mühlet verilen süre
* Maksimum sayıda başarısız girişim
2.4.2. YAPILANDIRMA UYGULAMA
Bir yapılandırma profili, bir yöneticiye IOS cihazlar için yapılandırma bilgisini
dağıtmayı sağlayan bir XML dosyasıdır. Yüklenmiş bir yapılandırma profili
tarafından tanımlanmış ayarlar, kullanıcı tarafından değiştirilemez. Eğer kullanıcı,
yapılandırma profilini silerse profil tarafından tanımlanmış tüm ayarlar da kaldırılır.
Böylelikle, yöneticiler politikaları erişime bağlayarak ayarlarını uygulayabilirler.
Örneğin; bir e-mail yapılandırması sağlayan bir yapılandırma profili, ayrıca cihaz
geçiş kodu politikasını belirler. Kullanıcıların, geçiş kodları yöneticinin
gereksinimlerini karşıladığı sürece maillerine erişmek mümkün olmayacaktır.
20
Bir IOS yapılandırma profili, aşağıda belirtilen bir dizi ayarı içerir:
* Geçiş kodu politikaları
* Cihaz özelliklerini kısıtmala ( kamerayı devre dışı bırakma gibi )
* Wi - Fi ayarları
* VPN ayarları
* E-mail sunucu ayarları
* Exchange ayarları
* LDAP dizin hizmeti ayarları
* CalDAV takvim hizmeti ayarları
* Web klipleri
* Kimlik bilgileri ve anahtarlar
* Gelişmiş hücresel ağ ayarları
Yapılandırma profilleri imzalanmış ve kökeni doğrulamak, onların bütünlüğünü
sağlamak ve içeriğini korumak için şifreli olabilir. Yapılandırma profilleri, 3DES ve
AES-128 destekleyen CMS ( RFC 3852 ) kullanılarak şifrelenir.
Yapılandırma profilleri, onların tamamen kaldırılmasını engellemek için bir cihaza
kilitlenebilir veya bir geçiş kodu ile yalnızca kaldırmak için izin verir.
Birçok kurumsal kullanıcı, kişisel olarak kendi IOS cihazlarını kullandığı için
yapılandırma profilleri kaldırılabilir bir MDM sunucusuna bir cihazı bağlar ancak
bunu yaparken aynı zamanda yönetilen tüm yapılandırma bilgileri, veri ve
uygulamaları kaldırır.
Kullanıcılar, iPhone Configuration Utility kullanarak kendi cihazları üzerinde
doğrudan Yapılandırma Profilleri yükleyebilirler. Yapılandırma Profilleri, bir MDM
sunucusu kullanarak havadan veya e-mail yoluyla indirilebilir.
2.4.3. MOBİL CİHAZ YÖNETİMİ
IOS, işletmelerin güvenli bir şekilde yapılandırmasını sağlamak için MDM'yi
destekler ve onların kendi arasındaki ölçeklendirilmiş iPhone ve iPad dağıtımlarını
yönetir. MDM yetenekleri; OTA Enrollment, APNS ve yapılandırma profilleri gibi
mevcut IOS teknolojileri üzerine inşa edilmiştir.
21
MDM kullanarak, Bilişim Teknolojileri departmanları kurumsal bir ortamda IOS
cihazları kaydedebilir, kablosuz yapılandırma yapabilir ve ayarları güncelleyebilir,
kurumsal politikalar ile uyumu izleyebilir ve hatta uzaktan silme veya cihazları
kilitlemeyi yönetebilir.
2.4.4. APPLE YAPILANDIRICISI
MDM'ye ek olarak, Apple Yapılandırıcısı IOS cihazları herkese dağıtmak için OS
X' i kolaylaştırır. Apple yapılandırıcısı; ayarlar, uygulamalar ve veri ile çok sayıda
cihazı yapılandırmak için hızlı kullanılabilir. Başlangıçta yapılandırılmış cihazlar,
yüklenmesi için gerekli kısıtlamalar ve ek ayarları sağlayan Apple yapılandırıcısı
kullanarak denetlenebilir. Bir cihaz; Apple yapılandırıcısı ile bir kez denetlendikten
sonra, mevcut tüm ayarlar ve kısıtlamalar OTA üzerinden yüklenir, MDM yoluyla da
yüklenebilir.
2.4.5. CİHAZ KISITLAMALARI
Yöneticiler, bir yapılandırma profili yükleyerek cihaz özelliklerini kısıtlayabilir.
Aşağıdaki mevcut kısıtlamalar:
* Uygulama yüklemeye izin ver
* Kamera kullanımına izin ver
* Facetime izin ver
* Ekran yakalama izin ver
* Sesli arama izin ver
* Dolaşımdayken otomatik eşitlemeye izin ver
* Uygulama satınalıma izin ver
* Eklenen mailler senkronizasyonuna izin ver
* Tüm alımlar için kullanıcıyı mağaza şifresini girmeye zorlamak
* Çok oyunculu oyun izin ver
* Oyun merkezi arkadaşları eklemeye izin ver
* Siri kullanımına izin ver
* Cihaz kilitliyken Siri kullanımına izin ver
* Youtube kullanımına izin ver
* Cihaz kilitliyken hesap cüzdanı bildirimlerine izin ver
* iTunes Store kullanımına izin ver
* Safari kullanımına izin ver
22
* Safari otomatik doldurmayı etkinleştirme
* Sahte Web sitesi uyarısını zorlama
* JavaScript etkinleştirmek
* Açılır pencereleri engelle
* Çerezleri ( tanımlama bilgileri ) kabul et
* iCloud yedekleme ve belge senkronizasyonuna izin ver
* Fotoğraf akışına izin ver
* Paylaşılan fotoğraf akışına izin ver
* Apple için tanılama ( teşhis ) gönderilmesine izin ver
* Güvenilmeyen TLS sertifikaları kabul etmek için kullanıcıya izin ver
* Zor şifrelenmiş yedekleme
* İçerik derecelendirme tarafından medya kısıtlaması
Sadece Denetimli Kısıtlamalar
* iMessage izin ver
* Oyun merkezi izin ver
* iBookStore izin ver
* iBookStore'dan erotik izin ver
* Uygulamaların kaldırılmasına izin ver
* Siri küfür filtresini etkinleştir
* Elle yapılandırma profilleri yüklenmesine izin ver
2.4.6. UZAKTAN SİLME
IOS cihazlar, bir yönetici veya kullanıcı tarafından uzaktan silinebilir. Silinebilir
depolama'dan bloke edilmiş depolama şifreleme anahtarı atılarak, anında uzaktan
silme güvenli bir şekilde elde edilir ve tüm veriler okunamaz hale gelir. Uzaktan
silme; iCloud, Exchange veya MDM tarafından başlatılabilir.
Uzaktan silme, MDM veya iCloud tarafından tetiklendiğinde cihaz bir bildirim
gönderir ve silme gerçekleştirilir. Exchange ile uzaktan silme için, cihaz silme
işlemini gerçekleştirmeden önce Exchange sunucu ile denetler.
Ayrıca, kullanıcılar ayarlar uygulamasını kullanarak ellerindeki cihazları silebilir.
Ve belirtildiği gibi, cihazlar bir dizi başarısız geçiş kodu denemesinden sonra
otomatik olarak silmek için ayarlanabilir.
23
3. ANDROID GÜVENLİK
3.1. GİRİŞ
3.1.1. ANDROID GÜVENLİK GENEL BAKIŞ
Android uygulamaları, platform sayesinde yerel ve görev verilerinin yanısıra
gelişmiş donanım ve yazılım kullanımını da sağlar. Bu değeri korumak için
kullanıcıların veri, uygulamalar, cihaz ve ağ güvenliğini sağlayan uygulama ortamı
sunulmalıdır. Açık bir platformu korumak için güvenlik mimarisi ve ciddi güvenlik
programları gereklidir. Android, tüm kullanıcılara gerekli korumayı sağlarken açık
bir platform için gerekli esnekliği sağlayan çok katmanlı güvenlik ile tasarlanmıştır.
Android, güvenlik kontrollerinin geliştiricilerin üzerindeki yükü azaltması
düşünülerek tasarlanmıştır. Güvenlik uzmanı geliştiriciler, esnek güvenlik kontrolleri
üzerinde kolayca çalışabilir ve güvenebilirler.
Android, aynı zamanda kullanıcılar düşünülerek tasarlanmıştır. Kullanıcılar,
uygulamaların nasıl çalıştığını ve bu uygulamaların üzerinde denetimin nasıl
göründüğünü sağlar. Bu tasarım, saldırganların cihaza kötü niyetli yazılım yüklemek
için sosyal mühendislik gibi yaygın saldırıları ve 3.cü taraf uygulamalar üzerinden
saldırı beklentilerini içerir. Android, hem bu saldırıların olasılığını azaltmak hem de
etkisini sınırlandırmak için tasarlanmış ve bunda da başarılı olmuştur.
Android plaftormunun ana yapı taşları:
CİHAZ DONANIMI: Android OS; akıllı telefonlar, tabletler ve set-top-boxes dahil
olmak üzere donanım yapılandırmalarının geniş bir yelpazesinde çalışır. Anroid,
bilinemez işlemcidir ama ARM v6 eXecute-Never gibi donanıma özgü güvenlik
özelliklerinin bazı avantajlarından yararlanır.
ANDROID İŞLETİM SİSTEMİ: Çekirdek işletim sistemi, Linux çekirdeği üzerine
inşa edilmiştir. Kamera işlevleri, GPS verileri, Bluetooth işlevleri, telefon işlevleri,
ağ bağlantıları vb. gibi tüm cihaz kaynaklarına işletim sistemi üzerinden erişilebilir.
ANDROID UYGULAMA ÇALIŞMA ZAMANI: Android uygulamaları en sık
Java programlama dilinde yazılmıştır ve Dalvik sanal makinesinde çalıştırılır ancak
uygulamaların birçoğu, çekirdek Android hizmetlerini kapsar ve yerli uygulamaları
veya yerli kütüphaneleri kapsar. Hem Dalvik hem yerli uygulamalar, Application
Sandbox içinde bulunan aynı güvenlik ortamı içinde çalışır.
24
Uygulamalar için birincil iki kaynak şunlardır:
ÖNCEDEN YÜKLENMİŞ UYGULAMALAR: Android; telefon, e-posta, takvim,
web tarayıcı ve kişiler de dahil olmak üzere önceden yüklenmiş bir dizi uygulama
içerir. Bu fonksiyon hem kullanıcı uygulamaları gibi hem de diğer uygulamalar
tarafından erişilebilen anahtar cihaz yeteneklerini sağlar. Önceden Yüklenmiş
Uygulamalar, açık kaynak kodlu Android platformunun bir parçası olabilir ya da özel
bir cihaz için bir OEM tarafından geliştirilebilir.
KULLANICI TARAFINDAN YÜKLENEN UYGULAMALAR: Android,
herhangi bir 3.parti uygulamayı destekleyen açık bir geliştirme ortamı sağlar.
Birincil hizmetler şunlardır:
GOOGLE PLAY: Kullanıcıya uygulama keşfetmek, denemek, yüklemek ve web
satınalma izni veren bir hizmet topluluğudur. Google Play; geliştiriciler için, Android
kullanıcılarına ve potansiyel müşterilere ulaşmayı kolaylaştırır. Google Play; aynı
zamanda topluluk gözden geçirme, uygulama lisans doğrulama, uygulama güvenliği
tarama ve diğer güvenlik hizmetlerini sağlar.
ANDROID GÜNCELLEMELERİ: Android güncelleme servisi, OTA üzerinden
veya web sayesinde güncelleştirmeler dahil olmak üzere Android cihazlar için
güvenlik güncelleştirmeleri ve yeni özellikler sunar.
UYGULAMA HİZMETLERİ: Çerçeveler, push mesajları için buluttan cihaza
mesajlaşma ve uygulama verisi ve ayarları gibi Android uygulamalarının bulut
yetenekleri kullanmasına izin verir.
Android Güvenlik Programı, anahtar bileşenleri içerir:
Temel Bileşenler;
TASARIM İNCLEMESİ: Android güvenlik süreci, zengin ve yapılandırılabilir
güvenlik modeli ve tasarım oluşturulması ile erken geliştirme yaşam döngüsünde
başlar. Platformun her önemli özelliği mühendislik ve güvenlik kaynakları tarafından
sistem mimarisine entegre edilmiş uygun güvenlik kontrolleri ile gözden geçirilir.
25
PENETRASYON TESTİ VE KOD İNCELEME: Platform geliştirilmesi sırasında,
Android oluşturulan ve açık kaynak bileşenleri güçlü güvenlik değerlendirmelerine
tabidir. Bu inceleme Google Bilgi Güvenliği Mühendislik Ekibi ve bağımsız
güvenlik danışmanları tarafından Android Güvenlik Ekibi ile yapılmaktadır. Bu
incelemenin amacı açık kaynak platformdan önce zayıf ve olası güvenlik açıklarını
tespit etmek ve dış güvenlik uzmanları tarafından gerçekleştirilecek analiz türlerini
taklit etmektir.
AÇIK KAYNAK VE TOPLULUK İNCELEME: Android, Linux çekirdeği gibi
önemli dış güvenliği inceleyen açık kaynak teknolojilerini de kullanır. Google Play;
kullanıcılar ve şirketler için, kullanıcılara belirli uygulamalar hakkında doğrudan
bilgi vermek için forum sağlamaktadır.
OLAYA MÜDAHALE: Tüm bu önlemlere rağmen, güvenlik sorunları Android
Projesi'nin kapsamlı bir güvenlik tepki süreci oluşturmasından sonra meydana
gelebilir. İşte bu yüzden tam zamanlı bir Android güvenlik ekibi, potansiyel güvenlik
açıklarının tartışılması için Android'e özgü güvenlik topluluğunu sürekli izler.
3.1.2. ANDROID PLATFORMU GÜVENLİK MİMARİSİ
* kullanıcı verilerini korumak
* sistem kaynaklarını korumak ( ağ dahil olmak üzere )
* uygulama yalıtımı sağlamak
Bu hedeflere ulaşabilmek için Android'in sunduğu gerekli güvenlik özellikleri:
* Linux çekirdeği sayesinde işletim sistemi düzeyinde güçlü güvenlik
* Tüm uygulamalar için zorunlu Sandbox uygulaması
* Güvenli işlemler arası iletişim
* Uygulama İmzalama
* Uygulama tanımlı ve kullanıcıya verilen izinler
Şekil1'de Android yazılım yığınının çeşitli düzeylerde düşünceleri ve güvenlik
bileşenleri belirtilmiştir.
Her bileşen, aşağıdaki bileşenlerin tamamen güvenli olduğunu varsayar. Kök olarak
çalışan Android İşletim Sistemi kodunun küçük bir miktarı haricinde, Linux
çekirdeği üzerindeki tüm kodlar Sandbox Uygulama tarafından kısıtlanır.
26
A p p l i c a t i o n s
A p p l i c a t i o n F r a m e w o r k
h o m e d i a l e r imS m s /
m m s
c l o c ka l b u m s
c a l c u l a t o ra l a r mc a m e r ab r o w s e r
c o n t a c t s e - m a i l c a l e n d a r …
A c t i v i t y
M a n a g e r
M e d i a
p l a y e r
V o i c e
d i a l
W i n d o w s
M a n a g e r
C o n t e n t
P r o v i d e r s
N o t i f i c a t i o n
M a n a g e rV i e w S y s t e m
P a c k a g e
M a n a g e r
T e l e p h o n e
M a n a g e r
R e s o u r c e
M a n a g e r
l o c a t i o n
M a n a g e r
X m p p
S e r v i c e
S u r f a c e
M a n a g e r
M e d i a
F r a m e w o r k
O p e n G L - E S L i b W e b C o r eF r e e T y p e
S Q L i t e
L i b r a r i e s
L i b cS S LS G L
A n d r o i d R u n t i m e
C o r e L i b r a r i e s
D a l v i k V i r t u a l
M a c h i n e
D i s p l a y
D r i v e r
B lu e t o o t h
D r i v e r
K e y p a d
D r i v e r
A u d i o
D r i v e r s
F l a s h
M e m o r y
D r i v e r
C a m e r a
D r i v e r
U S B D r i v e r W i - F i D r i v e r
B in d e r ( I P C )
D r i v e r
P o w e r
M a n a g e m e n t
L i n u x K e r n e l
Şekil 1: Android yazılım yığını
3.2. SİSTEM VE ÇEKİRDEK GÜVENLİK DÜZEYİ
İşletim sistemi düzeyinde Android platformu, işlemler arası güvenli bir iletişim
kolaylığının yanısıra, farklı süreçlerde çalışan uygulamalar arasında güvenli iletişimi
sağlamak için Linux çekirdeğinin güvenliğini sağlar. Bu güvenlik özellikleri, işletim
sistemi düzeyinde Sandbox Uygulama tarafından yerel kodun bile kısıtlanmasını
sağlar. Kod, uygulama davranışının dahili bir sonucu veya bir uygulamanın güvenlik
açığının sömürüsü olsa da olmasa da Sistem; cihazın kendisi, Android sistemi veya
diğer uygulamalardan gelen zararlı sahte uygulamayı önleyebilecektir [3].
3.2.1. LINUX GUVENLİK
Android platformunun temeli Linux çekirdeğidir. Linux çekirdeğinin kendisi
yıllardır yaygın olarak kullanılmaktadır, aynı zamanda güvenlik duyarlı ortamlarda
milyonlarca kez kullanılmıştır. Tarihi boyunca binlerce geliştirici tarafından sürekli
araştırılmış, saldırılmış ve düzeltilmiştir. Linux, birçok şirket ve güvenlik uzmanı
tarafından istikrarlı ve güvenli bir çekirdek haline gelmiştir [3].
27
Bir mobil bilgi işlem ortamı için temel olarak Linux çekirdeği, Android ile çeşitli
anahtar güvenlik özellikleri sağlar.
Bunlar;
* Kullanıcı tabanlı izinler modeli
* İşlem yalıtımı
* Güvenli IPC için genişletilebilir mekanizma
* Çekirdeğin gereksiz ve potansiyel olarak güvenli olmayan parçalarını kaldırma
yeteneği
Çok kullanıcılı bir işletim sistemi olarak Linux çekirdeğinin temel güvenlik amacı
kullanıcı kaynaklarını birbirinden izole etmektir.
Böylece Linux;
* a kullanıcısının b kullanıcısının dosyalarını okumasını önler.
* a kullanıcısının b kullanıcısının belleğini tüketmemesini sağlar
* a kullanıcısının b kullanıcısının cpu kaynaklarını tüketmemesini sağlar
* a kullanıcısının b kullanıcısının telefon, GPS, Bluetooth cihazlarını tüketmemesini
sağlar.
3.2.2. APPLICATION SANDBOX
Android platformu, uygulama kaynaklarını belirlemek ve izole etmek için bir araç
olarak Linux kullanıcı tabanlı korumadan faydalanır. Android sistemi, her Android
uygulama için UID atar ve ayrı bir işlemde kullanıcı gibi çalışır. Bu yaklaşım,
geleneksel Linux yapılandırma da dahil olmak üzere birden fazla uygulamanın aynı
kullanıcı izinleriyle çalıştığı diğer işletim sistemlerinden farklıdır [7].
Çekirdek, kullanıcı ve uygulamalar için atanmış olan grup kimlikleri gibi standart
Linux imkanları aracılığıyla işlem düzeyinde sistem ve uygulamalar arasındaki
güvenliği zorlar. Varsayılan olarak, uygulamalar birbirleriyle etkileşemez ve işletim
sistemine sınırlı erişim hakkına sahiptirler. Eğer, A uygulaması B uygulamasının izni
olmaksızın telefonu veya verilerini okumak gibi zararlı birşey yapmaya çalışırsa ,
işletim sistemi bunu korur. Çünkü, A uygulaması uygun kullanıcı ayrıcalıklarına
sahip değildir.
28
Sandbox; basit, denetlenebilir ve dosya izinleri ile onlarca yıldır süren UNIX stili
kullanıcı ayırma işlemlerine dayanmaktadır.
Application Sandbox, çekirdekte olduğundan bu güvenlik modeli yerel kod ve
işletim sistemi uygulamalarına genişler. Şekil 1'deki çekirdek üzerinde yazılımın
tümü; işletim sistemi kütüphaneleri, uygulama çerçevesi ve uygulama zamanı dahil
tüm uygulamalar Application Sandox içinde çalışır.
Bazı platformlarda geliştiriciler belirli bir geliştirme çerçevesi, API'lerin dizisi veya
dil güvenliğini sağlamak için sınırlandırılmıştır. Android'te güvenlik sağlamak için
gerekli bir uygulamanın nasıl yazılmış olduğuyla ilgili herhangi bir kısıtlama yoktur;
bu bağlamda yerel kod sadece güvenli olarak yorumlanır.
Bazı işletim sistemlerinde bellek bozulması hataları genellikle tamamen cihazın
güvenliğini tehlikeye sokar. Bu durum, kendi kaynakları işletim sistemi seviyesinde
korumalı alan olan tüm uygulamalar için Android'te böyle değildir. Bir bellek
bozulması hatası, işletim sistemi tarafından kurulan izinler ile sadece belirli bir
uygulama bağlamında rastgele kod yürütülmesine izin verecektir.
3.2.3. SİSTEM BÖLÜMÜ VE GÜVENLİ MOD
Sistem bölümü; uygulamalar, işletim sistemi kütüphaneleri, uygulama çalışma
zamanı ve uygulama çerçevesinin yanı sıra Android çekirdeğini de içerir. Bu bölüm
salt okunur olarak ayarlanır. Bir kullanıcı cihaza güvenli modda önyükleme
yaptığında yalnızca çekirdek Android uygulamaları mevcuttur. Bu 3.parti bir
yazılımın ücretsiz olduğu bir ortamda kullanıcının kendi telefonuna önyükleme
yapabilmesini sağlar.
3.2.4. DOSYA SİSTEMİ İZİNLERİ
UNIX tarzı bir ortamda, dosya sistemi izinleri bir kullanıcının, bir başka kullanıcının
dosyalarını değiştirememesini veya okuyamamasını sağlar. Android'in durumunda
ise her bir uygulama kendi kullanıcı olarak çalışır. Geliştirici, diğer uygulamalar için
dosyaları ortaya çıkarmadıkça bir uygulama tarafından oluşturulan dosyalar, başka
bir uygulama tarafından değiştirilemez veya okunamaz.
29
3.2.5. ŞİFRELEME
Android, uygulamalar tarafından kullanılmak üzere bir kriptografik API dizisi
sağlar. Bu AES, RSA, DSA ve SHA gibi standart ve yaygın olarak kullanılan ilkel
şifreleme uygulamalarını içerir. İlaveten API'ler, SSL ve HTTPS gibi yüksek seviyeli
protokoller sağlar [4].
3.2.6. BELLEK YÖNETİMİ GÜVENLİK GELİŞTİRMELERİ
Android, yaygın bellek sorunlarını önemli ölçüde zorlaştıran birçok özellik içerir.
Android SDK, derleyiciler ve işletim sistemi yaygın bellek sorunlarını önemli ölçüde
zorlaştırmak için aşağıdaki araçları kullanır.
ANDROID 1.5.
* Yığın ( öbek ) arabellek taşmalarını önlemek için ProPolice (f-stack-protector)
* Tamsayı taşmalarını azaltmak için safe_iop
* Serbest çift güvenlik açıklarını ve yığın birleştirme ( sağlamlaştırma ) saldırılarını
önlemek için OpenBSD dlmalloc uzantıları
* Bellek tahsisi sırasında tamsayı taşmalarını önlemek için OpenBSD calloc
ANDROID 2.3.
* Biçim dizesi güvenlik açığı koruması
* Donanım tabanlı yığın ve üzerinde kod yürütülmesini engellemek için No eXecute
* Boş işaretçi etkisini azaltmak ve ayrıcalık yükseltmek için Linux mmap_min_addr
KQUEUE
ANDROID 4.0.
* Hafızada anahtar yerleri rastgele seçmek için ASLR
ANDROID 4.1.
* Konumdan bağımsız yürütülebilir destek ( PIE )
* Salt okunur yer değiştirmeler / anında bağlanma (-Wl,-z,relro -Wl,-z,now )
* Etkin dmesg_restrict ( çekirdek adreslerinin sızmaması )
* Etkin kptr_restrict ( çekirdek adreslerinin sızmaması ) [8].
ANDROID 4.2.
Uygulama Doğrulama: Zararlı olabilecek bir uygulama yüklemeye çalışırsanız
uygulama doğrulama kullanıcıyı uyarabilir. Eğer bir uygulama özellikle kötüyse
yüklemeyi engelleyebilir.
30
FORTIFY_SOURCE: Bellek bozulmasını önlemek için sistem kütüphaneleri ve
uygulamalar tarafından kullanılır.
Daha fazla hediye SMS kontrolü: Android, bir uygulama için ek masrafa neden
olabilecek premium servislerden kısa sms gönderme girişiminde bir bildirim
sağlayacak. Kullanıcı uygulama izni için mesaj göndermeyi / engellemeyi seçebilir.
Her zaman açık VPN: Uygulamalar, VPN bağlantısı kuruluncaya kadar ağa
erişemez. Böylece, VPN yapılandırılabilir. Bu uygulamalar diğer ağlar arasında veri
göndermesini engeller.
Sertifika Sabitleme: Android çekirdek kütüphaneleri sertifika tutturmayı destekler.
Eğer sertifika beklenen sertifika zincir kümesi değilse tutturulmuş sertifika
doğrulama hatası alırsınız. Bu sertifika yetkililerini olası uzlaşmasına karşı korur.
Android İzinlerin Geliştirilmiş Ekranı: İzinler kullanıcı tarafından daha kolay
anlaşılır gruplar halinde organize edilmiştir. İzinlerin incelenmesi sırasında kullanıcı
izni hakkında daha detaylı bilgi izni için tıklayabilirsiniz.
Installd Sabitleme: Installd komutu kök ayrıcalık yükseltmek için potansiyel saldırı
alanını azaltarak kök kullanıcısı olarak çalışmaz.
Init Komut Sabitleme: Semantik saldırıları ile ilgili sembolik koruma için
O_NOFOLLOW Inıt komutunu şimdi uygula
ContentProvider Varsayılan Yapılandırma: API seviyesindeki 17 uygulamanın
her biri için varsayılan olarak her içerik sağlayıcının hedefi hatalıyı dışa çıkararak
uygulamalar için varsayılan saldırı alanın azaltılmasıdır.
Kriptografi: SecureRandom ve Cipher'ın varsayılan uygulamaları modifiye etmek.
RSA,OpenSSL kullanacak. OpenSSL 1.0.1 kullanılarak TLSv1.1 ve TLSv1.2 için
SSL Socket eklendi.
Güvenlik Düzeltmeleri: Güvenlik düzeltmeleri açık kaynak kütüphaneleri ile
Webkit , libpng , OpenSSL ve LibXML'de dahil olmak üzere yükseltilmiştir [6].
ANDROID 4.3.
Selinux ile güçlendirilmiş Android Sandbox: Selinux güçlendirme kullanıcılara ve
geliştiriciye görünmez. Mevcut uygulamalar ile uyumluluğu korurken mevcut
android güvenlik modeline sağlamlık ekler. Uyumluluğun devamını sağlamak için
Selinux'un kullanıma izin verir. Bu mod kurallara aykırı kayıtları tutar ama
uygulamaları kesmez / bölmez ve sistemin davranışını etkilemez.
31
No setuid / setgid programları: Android sistem dosyalarında dosya sistemi
kabiliyeti desteği eklendi. Tüm setuid / setguid programları kaldırıldı. Bu kök saldırı
yüzeysel ve olası güvenlik açıkları olasılığını azaltır.
ADB Kimlik Doğrulama: Android 4.2.2'den beri, ADB bağlantıları bir RSA
keypair ile doğrulanır. Bu, saldırganın bir cihaza fiziksel erişimi olan ADB yetkisiz
kullanımını önler.
Android uygulamalarından gelen setuid sınırlama: zigot proces, android
sisteminin setuid programının çalışmasını önlüyor.
Yetenek sınırlayıcı: Android, zigot ve ADB önceki gereksiz uygulamaları
kaldırmak için artık PR_CAPBSET_DROP'u kullanıyor. Bu, kabuktan gelen
ayrıcalıklı özelliğe sahip Android uygulamaların ve uygulamaların başlamasını
engeller.
Android şifre deposu sağlayıcısı: API'li Android uygulamalarında özel kullanım
tuşları imkanı veren şifre deposu vardır. Bu şifre deposu API'li uygulamalara kendine
özel şifre tanımlamalarına izin verir ve bu şifre başka uygulama tarafından
kullanılamaz.
KeyChain isBoundKeyAlgorithm: Şimdi keychain API şimdi isbound keytype
isimli bir method sunuyor. Bu method uygulamaya sistem genelinde cihaz için
güvenliğin bir donanım köküne bağlı olduğunu doğrulamak için izin veren bir
yöntemdir. Bu da kök uzlaşma durumunda dahi cihaz dışına çıkmaması için özel
anahtarı oluşturmak veya saklamak için bir yer sağlar.
NO_NEW_PRIVS.: Android zigot, ilaveten kullanılan bir önceki kod uygulayıcıyı
engellemek için PR_SET_NO_NEW_PRIVS kullanır.
FORTIFY_SOURCE geliştirmeleri: Potansiyel zayıf noktaları ya da bitirilmemiş
dizilerin kayıt hatalarını tespit eder.
Yer Değiştirme korumaları: Yalnızca statik haldeki yer değişimini okumasına izin
verir ve Android kodundaki yeri değiştirilmiş tüm metinler kaldırıldı.
Geliştirilmiş EntropyMixer: Kapatma yeniden başlatma ve ek olarak karışık
zamanlardaki düzensizlik. Tüm cihazlar açıkken entropy yapmasına izin verir ve
özellikle hemen yeniden başlattan sonra hazır olan cihazlar için yararlıdır [9].
32
ANDROID 4.4.
Selinux ile güçlendirilmiş Android Sandbox: Android, şimdi güçlendirme
modunda Selinux kullanır. Selinux, mevcut isteğe bağlı erişim denetim tabanlı
güvenlik modelini arttırmada kullanılan linux çekirdeğindeki zorunlu bir erişim
kontrol sistemidir. Bu potansiyel güvenlik açıklarına karşı ek koruma sağlar.
Kullanıcı başına VPN: Çok kullanıcılı cihazlarda, VPN şimdi kullanıcı başına
uygulanır. Böylelikle kullanıcı cihaz üzerinde diğer kullanıcıları etkilenmeden VPN
üzerinden tüm ağ trafiğini yönlendirmek için izin verebilir.
AndroidKeyStore'da ECDSA Destek Sağlayıcı: Android'te şimdi ECDSA ve DSA
algoritmalarının kullanımını sağlayan bir şifre deposu sağlayıcısı vardır.
Cihaz İzleme Uyarıları: Herhangi bir sertifika şifreli ağ trafiğini izlemek için cihaz
sertifika deposuna eklenmişse Android bir uyarı ile kullanıcılara bunu bildirir.
FORTIFY_SOURCE: Android, 2.ci seviyeyi destekler. Tüm kod bu uygulamalarla
derlenmiştir. FORTIFY_SOURCE C için bir derleyici olan Clang ile çalışmak için
geliştirilmiştir.
Sertifika Sabitleme: Android, güvenli SSL / TLS iletişimlerinde kullanılan Google
sertifikalarının hileli kullanımını algılar ve önler.
Güvenlik Düzeltmeleri: 4.4 aynı zamanda Android'e özel güvenlik açıkları için
düzeltmeler içerir.
3.2.7. CİHAZLARIN KÖKLEŞMESİ
Varsayılan olarak, Android üzerinde sadece çekirdek ve çekirdek uygulamaların
küçük bir alt kümesi kök izinleri ile çalıştırılır. Android; kök izinleri ile işletim
sistemi, çekirdek ve herhangi diğer bir uygulamayı değiştirerek bir kullanıcı veya
uygulamayı engellemez. Genel olarak, kök tüm uygulamalara ve tüm uygulama
verilerine tam erişime sahiptir. Kullanıcılar, uygulamalara kök erişimi vermek için
Android cihaz üzerinde izinleri değiştirir, kötü niyetli uygulamalar ve potansiyel
uygulama kusurları için güvenlik arttırır.
Sahip oldukları bir Android cihaz değiştirme yeteneği, Android platformu ile çalışan
geliştiriciler için önemlidir. Birçok Android cihaz kullanıcısı, alternatif bir işletim
sisteminin kurulumunu sağlamak için bootloader kilidini açma yeteneğine sahiptir.
Bu alternatif işletim sistemleri, hata ayıklama uygulamaları ve sistem bileşenleri
veya Android API'leri tarafından uygulamalara sunulmamış özelliklere erişmek için
sahibinin kök erişim sağlamasına izin verebilir [7].
33
Bazı cihazlarda, fiziksel bir cihaz kontrolü ve bir USB kablosu ile bir kişinin
kullanıcıya kök ayrıcalıkları sağlayan yeni bir işletim sistemi yüklemek mümkündür.
Varolan herhangi bir kullanıcı verisini korumak için, kilit açma adımın bir parçası
olarak önyükleme yükleyicisi varolan herhangi bir kullanıcı verisini silmeyi
gerektirir. Kök, bir çekirdek hatasından faydalanarak veya güvenlik açığı bu
korumayı atlayarak erişim kazanabilir.
Cihaz üzerinde saklı bir anahtar ile veri şifrelemek, kök kullanıcılardan gelen
uygulama verisine koruma sağlamaz. Uygulamalar, bir kullanıcı parolası veya bir
sunucu üzerindeki gibi kapalı cihazda saklı bir anahtar ile şifreleme kullanarak veri
koruma katmanı ekleyebilir. Bu yaklaşım , anahtar halihazırda değilse geçici koruma
sağlayabilir ancak eninde sonunda uygulama için anahtar sağlanmalıdır, ancak o
zaman kök kullanıcılar erişilebilir olur.
Donanım çözümlerinin kullanımı yoluyla kök kullanıcılardan veri korumak daha
sağlam bir yaklaşımdır. OEM'ler, Google cüzdan için NFC ile ilgili güvenilir
depolama veya video oynatımı için DRM gibi belirli içerik türlerine erişimi
sınırlandıran donanım çözümleri uygulamayı seçebilir.
Bir kayıp yada çalıntı cihaz durumunda, tam dosya sistemi şifreleme Android
cihazlarda şifreleme anahtarını korumak için cihaz parolasını kullanır, bu yüzden
kullanıcının cihaz parolası olmadan önyükleme yükleyicisini veya işletim sistemini
değiştirmek kullanıcı verisine erişmek için yeterli değildir.
3.2.8. KULLANICI GÜVENLİK ÖZELLİKLERİ
3.2.8.1. DOSYA SİSTEMİ ŞİFRELEME
Android 3.0 ve sonraki sürümler tam dosya sistemi şifreleme sağlar, bu yüzden tüm
kullanıcı verileri ESSIV:SHA256 ve CBC ile AES128'in dmcrypt uygulamasını
kullanarak çekirdekte şifreli olabilir. Şifreleme anahtarı, kullanıcı cihaz parolası
olmadan depolanmış verilere yetkisiz erişimi engelleyen ve kullanıcı parolasından
türetilen bir anahtar kullanarak AES128 ile korunur.
Sistematik parola tahmin saldırılarına karşı direnç sağlamak için, parola rastgele bir
"salt" ile birleştirilir ve dosyasistemi anahtarının şifresini çözmek için daha önce
kullanılan standart PBKDF2 algoritmasını kullanarak SHA1 ile defalarca "hash"
edilir.
34
Sözlük parola tahmin saldırılarına karşı direnç sağlamak için, Android tarafından
zorunlu ve cihaz yöneticisi tarafından ayarlanabilir karmaşık parola kuralları sağlar
[4].
Dosyasistemi şifreleme, bir kullanıcı parolasının kullanımını gerektirir. Örnek
tabanlı ekran kilidi desteklenmez.
* hash: bir hashing algoritmasının ( md5, sha1, sha2 ) şifrelenmiş çıktısıdır. Bir
hashing algoritmasında açık metin ve şifrelenmiş metin arasında tek yönlü bir ilişki
vardır. Yani herhangi bir açık metin şifrelenmiş metine dönüştürüldüyse, şifrelenmiş
bir metin açık bir metine dönüştürülemez. Hashing algoritmasında girdinin boyutu
standart dışında büyük olsa bile şifrelenmiş çıktısı sabit değerdedir. Bu sayede
girdinin boyutu veya türü belirlenemez.
* salt: rastgele üretilmiş ve oluşturulmuş değerdir. Şifre ve salt birleştirilerek ortaya
çıkan metin bir hash fonksiyonuna gönderilir. Sonra ortaya çıkan bu hash veri, salt
ile birlikte kaydedilir. Büyük boyutlardaki salt değer, her şifreyi eşsiz hashleyerek
önceden hesaplanmış saldırıları engeller.
Örneğin; X ve Y' ye ait aynı veritabanında saklanan aynı şifreler, salt değerleri
farklı hash değerlerine sahip olacakları için bir saldırgan veritabanına erişse bile bu
ikisinin şifresinin aynı olduğu bilemeyecektir. Saldırganın başarılı olabilmesi için her
salt değerinin ayrı ayrı hesaba katılması gerekir. Salt kullanılmasının amacı
şifrelerdeki entropi seviyesini arttırarak daha iyi bir koruma sağlamaktır.
3.2.8.2. PAROLA KORUMASI
Android, bir cihaza erişim sağlamadan önce kullanıcı tarafından sağlanan parolayı
doğrulamak için yapılandırabilir. Cihazın yetkisiz kullanımını önlemeye ek olarak,
bu parola tam dosyasistemi şifrelemesi için şifreleme anahtarını korur. Bir parola
veya karmaşık parola kurallarının kullanımı bir cihaz yöneticisi tarafından gerekli
olabilir.
3.2.8.3. CİHAZ YÖNETİMİ
Android 2.2 ve sonraki sürümler sistem düzeyinde Android cihaz yönetim özellikleri
sağlayan API sağlar. Örneğin; Yerleşik Android E-posta uygulaması, Exchange
desteği arttırmak için API'leri kullanır.
35
E-posta uygulaması sayesinde, Exchange yöneticileri cihazlar arasında sayısal
PIN'ler ve alfasayısal parolalar dahil parola politikalarını uygulayabilir. Yöneticiler,
ayrıca kayıp veya çalıntı telefonları uzaktan silebilir. Android sistemiyle birlikte
dahili uygulamalarda kullanmaya ek olarak, bu API'ler Aygıt yönetimi çözümlerinin
3.taraf sağlayıcıları için kullanışlıdır.
3.3. ANDROID UYGULAMA GÜVENLİĞİ
3.3.1. UYGULAMANIN UNSURLARI
Android, mobil cihazlar için açık kaynak platformu ve uygulama ortamı sağlar.
Çekirdek işletim sistemi, Linux çekirdeğe dayalıdır. Android uygulamaları en çok
Java programlama dilinde yazılmıştır ve Dalvik sanal makinesinde çalıştırılır. Ancak,
uygulamalar yerel kodda da yazılmış olabilir. Uygulamalar, .APK dosya uzantısına
sahip tek bir dosyadan yüklenir.
Ana Android uygulama yapı taşları:
AndroidManifest.xml: AndroidManifest.xml dosyası, bir uygulama içindeki tüm
üst düzey bileşenler ile sisteme ne yapacağını söyleyen denetim dosyasıdır. Bu aynı
zamanda hangi izinlerin gerekli olduğunu belirtir.
Etkinlikler: Genellikle tek bir kullanıcı odaklı görev için koddur ve kullanıcı için bir
UI görüntülenmesini içerir ancak zorunda değildir ( bazı etkinlikler kullanıcı
arabirimlerini asla görüntüleyemez ).
Tipik olarak, uygulamanın etkinliklerinin biri uygulama için bir giriş noktasıdır.
Hizmetler: Bir hizmet, arka planda çalışan bir kod parçasıdır. Bu kendi işleminde
veya başka bir uygulama süreci bağlamında çalıştırılabilir. Diğer bileşenler bir
hizmete engel olur ve uzaktan prosedür çağrıları ile üzerindeki yöntemleri çağırır.
Bir medya oynatıcı bir hizmet örneğidir: kullanıcı, medya seçimi kullanıcı
arabirimini sonlandırdığında bile kullanıcı muhtemelen hala müzik çalmaya devam
etme niyetindedir.
Yayın Alıcısı: Başka bir uygulama veya işletim sistemi tarafından verilen, amacı
bilinen IPC mekanizmasında örnek bir nesnedir. Bir uygulama, düşük pil mesajı için
veya bu bilgilere dayanarak onun davranışını değiştirmek için bir alıcıya
kaydolabilir.
36
3.3.2. ANDROID İZİN MODELİ: ERİŞİM KORUMALI API'LER
Android üzerindeki tüm uygulamalar, bir Application Sandbox içinde çalışır.
Varsayılan olarak bir Android uygulaması sadece sistem kaynaklarının sınırlı bir
alanına erişebilir. Sistem, kaynakların yanlış veya kötü niyetle kullanılması halinde
olumsuz kullanıcı deneyimi, ağ veya cihazdaki verileri etkileyebilecek Android
uygulamaya erişimi yönetir [7].
Bu kısıtlamalar birçok farklı biçimde uygulanır. Bazı yetenekler, hassas işlevselliği
için API'lerin kasıtlı bir eksikliği tarafından kısıtlıdır ( Sim kartı doğrudan
değiştirmek için bir Android API yoktur ). Bazı durumlarda, uygulama başına
depolama yalıtımı gibi rollerin ayrılması bir güvenlik önlemi sağlar. Diğer
durumlarda hassas API'ler, izinler olarak bilinen bir güvenlik mekanizması sayesinde
korunmak ve güvenilir uygulamalar tarafından kullanılmak için amaçlanmıştır.
Bu korumalı API'lerin içerdikleri:
* Kamera İşlevleri
* Konum İşlevleri
* Bluetooth İşlevleri
* Telefon İşlevleri
* SMS / MMS İşlevleri
* Ağ / Veri Bağlantıları
Bu kaynaklar, yalnızca işletim sistemi üzerinden erişilebilirdir. Cihaz üzerinde
korumalı API'lerin kullanımını sağlamak için, bir uygulama onun bildiriminde
ihtiyacı olan yetenekleri tanımlamalıdır. Bir uygulama yüklemeye hazırlanırken,
sistem kullanıcıya istenen izinleri gösteren bir iletişim kutusu görüntüler ve
yüklemeye devam etmek isteyip istemediğinizi sorar. Kullanıcı yüklemeye devam
ederse, sistem kullanıcıya istenen tüm izinlerin verilmiş olduğunu kabul eder.
Kullanıcı, izinleri tek tek red veya kabul edemez. Hepsini bir bütün olarak red veya
kabul edebilir. Bir kez verilen izinler, uygulamaya yüklü olduğu müddetçe uygulanır.
Kullanıcı karışıklığını önlemek için; sistem, uygulamaya verilen izinlerin tekrarı için
kullanıcıya bildirimde bulunmaz. Çekirdek işletim sisteminde bulunan veya bir OEM
ile paketlenmiş uygulamalar, kullanıcıdan izin istemez.
37
Eğer bir uygulama kaldırılırsa izinleri de kaldırılır bu yüzden bir sonraki yeniden
yükleme için yeni izin ekranlarına ihtiyaç olacaktır.
Cihaz ayarları içinde, kullanıcılar daha önceden yüklü uygulamaları için izinleri
görüntüleyebilecek, GPS, radyo veya Wi-Fi gibi bazı küresel işlevleri seçerek devre
dışı bırakabilecektir. Bir uygulama; uygulamanın beyanında bildirilmemiş korumalı
özelliği kullanmak için çalıştığında, izin hatası uygulamaya geri atılan bir güvenlik
istisnasına tipik sonuç olacaktır.
Korumalı API izin denetimi, tuzakları önlemek için mümkün olan en düşük seviyede
uygulanır. Bir uygulama yüklendiğinde kullanıcı mesajlaşma örneği korumalı
API'lere erişim talep ederken Şekil 2 'de gösterilmiştir.
Uygulama Yükleme İzinleri & G. Maps Yüklenmiş Uygulama İzinleri & Gmail
Şekil 2: Uygulama için izinlerin gösterimi
38
OEM tarafından önceden yüklenmiş uygulamalar ile kullanılıyor olabilen, 3.parti
uygulamalar için geçerli olmayan ama SMS yayın amaçları gönderme yeteneği gibi
bazı cihaz yetenekleri vardır.
3.3.3. KULLANICILAR 3. PARTİ UYGULAMALARI NASIL ANLAR?
Android, 3.parti uygulamalar ile etkileşime girdiğinde kullanıcılara açık hale
getirmek için çaba harcar ve bu uygulamalar kullanıcıyı bilgilendirme yeteneklerine
sahiptir. Herhangi bir uygulama yüklemeden önce, uygulamanın istediği farklı izinler
hakkında kullanıcıya net bir mesaj gösterilir. Yüklendikten sonra, herhangi bir izin
için kullanıcıya onay sorulmaz [7].
Yükleme zamanından önce, izinleri göstermek için pek çok sebep vardır. Bu
olduğunda kullanıcı etkin olarak uygulama hakkındaki bilgileri, onların ihtiyaç ve
beklentilerinin uyumlu olup olmadığını belirlemek için işlevsellik ve geliştiriciyi
gözden geçirir.
Diğer bazı platformlar, kullanıcı bildirimi için uygulamalar kullanımdayken veya
her oturumun başında izin isteyen farklı bir yaklaşım kullanır. Android'in vizyonu,
kullanıcılar için uygulamalar arasında sorunsuz geçiştir. Her defasında teyit
sağlanması, kullanıcıyı yavaşlatacak ve harika bir kullanıcı deneyimi sunan Androd'i
engelleyecektir. Kullanıcı, yükleme zamanında eğer onlar rahatsız ediyorsa
kullanıcıya uygulamayı yüklememe seçeneği sunan inceleme izinlerine sahiptir.
Ayrıca, birçok kullanıcı arabirimi üzerindeki çalışmalar kullanıcının gösterilen
herhangi bir iletişimi "tamam" diyerek başlatması için bazı sebeplere sahip olduğunu
göstermiştir. Android'in güvenlik hedeflerinden birisi, kullanıcıya kendisinin
görmezden gelindiği yok sayıldığı iletişimleri kullanarak yapılamayan önemli
güvenlik bilgilerini etkin bir şekilde iletmektir. Bir kez ve yalnızca önemli olduğunda
önemli bilgileri sunarak, onların kabul ettiğinin hakkında kullanıcının ne düşündüğü
daha olasıdır.
Bazı platformlar, tüm uygulama işlevselliği hakkında herhangi bir bilgi göstermeyi
tercih etmez. Bu yaklaşım, kullanıcıları uygulama yeteneklerini tartışmaktan ve
kolayca anlamaktan engeller. Tüm kullanıcıların her zaman tam bilinçli kararlar
alması mümkün değilken, Android kullanıcının geniş bir yelpazesindeki kolayca
erişilebilir uygulamalar hakkında izinleri model bilgi haline getirir.
39
Örneğin; beklenmedik izin istekleri, uygulama işlevselliği hakkında kritik sorular
sormak için daha sofistike yani çok yönlü gelişmiş kullanıcıları isteyebilir ve onlar
tüm kullanıcılar tarafından görülebilen Google Play gibi yerlerde kaygılarını
paylaşabilir.
3.3.4. İŞLEMLERARASI İLETİŞİM
İşlemler, geleneksel UNIX tipi mekanizmalardan birini kullanarak iletişim kurabilir.
Dosya sistemi, yerel yuva ve sinyaller gibi örnekleri içerir. Ancak, yine de Linux
izinleri geçerliliğini korur.
Android, ayrıca yeni IPC mekanizmaları sağlamaktadır:
Binder ( bağ ): Hafif bir yetenek tabanlı yordam çağrı mekanizması, süreç ve süreç
dışı çapraz aramalar gerçekleştirilirken yüksek performans için tasarlanmıştır.
Binder, özel bir Linux sürücüsü kullanılarak uygulanır.
Services: Hizmetler, Binder kullanarak doğrudan erişilebilir arabirimleri sağlar.
Niyetler ( Girişimler ): Bir niyet, birşey yapmak için bir "niyeti" temsil eden basit
bir mesaj nesnesidir. Örneğin; uygulama bir web sayfasını görüntülemek istiyorsa,
bir "niyet örneği" oluşturarak URL'yi görüntülemek için bir "niyet" ifade edilerek
kapalı sisteme teslim edilir. Sistem, kodun bazı diğer parçalarının "niyeti" nasıl
koruduğunu bulur ve onu çalıştırır. Niyetler, ayrıca sistem genelinde ilginç olayların
yayını için kullanılabilir.
Content Providers ( İçerik Sağlayıcılar ): Bir İçerik Sağlayıcı, cihazdaki verilere
erişimi sağlayan bir veri deposudur ve kullanıcının kişiler listesine erişmek için
kullanılan klasik bir örnektir. Bir uygulama, İçerik Sağlayıcı yoluyla diğer
uygulamaların ortaya çıkardığı verilere erişebilir ve ayrıca bir uygulama kendi
verilerini ortaya çıkarmak için kendi İçerik Sağlayıcılarını tanımlayabilir.
Ağ yuvaları veya herkes tarafından yazılabilir dosyalar gibi diğer mekanizmaları
kullanarak IPC uygulamak mümkün olsa da, bunlar önerilen Android IPC
çerçeveleridir.
40
3.3.5. MALİYET DUYARLI API'LER
Maliyet duyarlı bir API'nin herhangi bir işlevi, kullanıcı veya ağ için bir maliyet
oluşturabilir. Android platformu, işletim sistemi tarafından kontrol edilen korumalı
API'lerin listesindeki maliyet duyarlı API'leri yerleştirmiştir. Kullanıcı, maliyet
duyarlı API'leri kullanmak isteyen 3. parti uygulamalara açık izin vermelidir.
Android 4.2. SMS kullanımı üzerinde daha fazla denetim sağlar. Eğer, bir uygulama
ek ücrete neden olacak kaliteli hizmeti kullanarak kısa koda SMS göndermeye
çalışırsa Android bir bildirim sağlar. Kullanıcı, mesaj göndermek ve engellemek için
uygulamaya izin vermeyi seçebilir.
Bu API'ler şunları içerir:
* Telefon * Ağ / Veri * In-App Billing
* SMS/MMS * NFC Access
3.3.6. SIM KART ERİŞİM
Sim karta düşük seviye erişim, 3.parti uygulamalar için geçerli değildir. İşletim
sistemi, tüm iletişimi Sim kart hafızasındaki kişisel bilgilere erişim de dahil olmak
üzere Sim kart ile yönetir. Uygulamalar, RIL tarafından özel olarak yönetildiği için
ayrıca AT komutlarına erişemeyebilir. RIL, bu komutlar için yüksek seviyeli API 'ler
sağlar.
3.3.7. KİŞİSEL BİLGİLER
Android, korumalı API'lerin dizisinin içindeki kullanıcı verilerine erişim sağlayan
API yerleştirmiştir. Normal kullanımlar ile Android cihazlar aynı zamanda
kullanıcılar tarafından yüklenen 3.parti uygulamalar içindeki verileri de
biriktirecektir. 3.parti uygulamalardan gelen verileri korumak için Android izin
kontrollerini kullanabilir, bu bilgileri paylaşmak için uygulamalar seçilebilir.
Sistem içerik sağlayıcıların, açıkça tanımlanmış izinler ile oluşturulmuş rehber ve
takvim gibi kişisel olarak tanımlanabilir kişisel bilgileri içermesi muhtemeldir. Bu
parçalı yapı, uygulamaya sağlanabilir bilgi türlerinin açık göstergesi ile kullanım
sağlar. Yükleme sırasında bir 3.cü taraf uygulama bu kaynaklara erişim için izin
isteyebilir. Eğer izin verilirse, uygulama yüklenebilir ve yüklü olduğu herhangi bir
zamanda istenen verilere erişebilecektir.
41
Şekil 3: Hassas kullanıcı verilerine erişim yalnızca korumalı API'ler aracılığıyla
kullanılabilir.
Herhangi bir uygulama kişisel bilgileri toplayacak, varsayılan olarak bu bilgiler
sadece özel uygulama için sınırlı olacak. Eğer bir uygulama, IPC'ye rağmen diğer
uygulamalar için verileri kullanılabilir duruma getirmeyi seçerse IPC mekanizması
için uygulama erişim verme izinleri uygulayabilirsiniz.
3.3.8. HASSAS VERİ GİRİŞ CİHAZLARI
Android cihazlar sıklıkla, uygulamaların çevre ile etkileşimine izin vermek için
kamera, mikrofon veya GPS gibi hassas veri giriş cihazları sağlamaktadır. Bir 3.parti
uygulamanın bu cihazlara erişmesi için, Android İşletim Sistemi izinleri aracılığıyla
kullanıcı tarafından ilk olarak açıkça erişim sağlanmalıdır. Yükleme sonrasında
yükleyici, algılayıcı ( sensör ) için kullanıcı adı isteyen izni isteyecektir.
Bir uygulama kullanıcının konumunu bilmek isterse, uygulama kullanıcının
konumuna erişmek için bir izin gerekir. Yükleme sonrasında yükleyici, uygulama
kullanıcının konumuna erişirse kullanıcıya soracaktır. Herhangi bir zamanda,
kullanıcı herhangi bir uygulamanın kendi konumuna erişmesini istemiyorsa, o zaman
"ayarlar" uygulamasını çalıştırabilir, "konum ve güvenlik"'e gider, "kablosuz ağları
kullan" seçeneğinin işaretini kaldırır ve "GPS uydularını etkinleştir"'ir. Bu,
kullanıcının cihaz üzerindeki tüm uygulamalar için konum bazlı servisleri devre dışı
bırakacaktır.
42
3.3.9. UYGULAMA İMZALAMA
Kod imzalama, geliştiricilere izinler ve karmaşık arabirimler oluşturmaksızın kendi
uygulamasını güncellemek ve uygulamanın yazarını tanımlamak için izin verir.
Android platformu üzerinde çalıştırılan her uygulama geliştirici tarafından
imzalanmış olmalıdır. Uygulamalar, imzalanmış olmadan yüklenmeye çalışıldığında
Android cihaz üzerindeki paket yükleyicisi veya Google Play tarafından
reddedilecektir [7].
Android'te; Uygulama İmzalama, Application Sandbox' a bir uygulama
yerleştirmek için ilk adımdır. İmzalanmış uygulama sertifikası, hangi uygulamanın
hangi kullanıcı kimliği ile ilişkili olduğunu tanımlar; farklı uygulamalar farklı
kullanıcı kimlikleri altında çalışır. Uygulama İmzalama, iyi tanımlanmış IPC
üzerinden herhangi bir başka uygulama dışında bir uygulamaya erişememeyi sağlar.
Bir uygulama ( APK dosyası ) bir Android cihaza yüklendiğinde, Paket Yöneticisi
APK'nın içerdiği sertifika ile doğru şekilde imzalandığını doğrular. Eğer sertifikadaki
ortak anahtar cihazdaki bir diğer APK'yı imzalamak için kullanılan anahtar ile
eşleşirse, yeni APK'nın diğer benzer şekilde imzalanan APK'lar ile bir UID ile
paylaşacağını bildirimde belirtme seçeneği vardır.
Uygulamalar, kendi tarafından veya OEM, operatör veya alternatif pazar gibi 3.parti
bir taraftan imzalanmış olmalıdır. Android, geliştiricilerin izin veya dış yardım
olmaksızın kendinden imzalı sertifikalar kullanarak kod imzalamayı üretebilmelerini
sağlar. Uygulamaların merkezi bir otorite tarafından imzalanmış olması gerekmez.
Anroid halihazırda, uygulama sertifikaları için CA doğrulaması gerçekleştirmez.
Uygulamalar; ayrıca imza koruma düzeyinde güvenlik izinlerini beyan edebilir,
Application Sandbox'ları ve farklı UID'leri korurken benzer anahtar ile imzalanmış
uygulamalar için sadece erişimi kısıtlar. Aynı geliştirici anahtarı ile imzalanan iki
veya daha fazla uygulama, kendi bildiriminde bildirilebilir paylaşılan UID özelliği
yoluyla izin verilen paylaşılan Application Sandbox ile daha yakın bir ilişkidir.
3.3.10. UYGULAMA DOĞRULAMASI
Android 4.2. ve sonraki sürümleri uygulama doğrulamasını destekler. Kullanıcılar,
kurulumdan önce bir uygulama doğrulayıcı tarafından değerlendirilir ve uygulama
doğrulamayı etkinleştirmeyi seçebilir. Zararlı olabilecek bir uygulama yüklemeye
43
çalışıldığında uygulama doğrulama kullanıcıyı uyarabilir; eğer bir uygulama kötü
özellikliyse yüklemeyi engelleyebilir.
3.3.11. DİJİTAL HAKLAR YÖNETİMİ
Android platformu, içerik ile ilişkili lisans kısıtlamaları için hakları korunan içeriğe
uygun olarak uygulamaları yönetmeyi sağlayan genişletilebilir bir DRM çerçeve
sağlar. Android DRM çerçeve, 2 mimari katman halinde uygulanır. ( Şekil: 4 )
* Bir DRM çerçeve API'si, Android uygulama çerçevesi aracılığıyla uygulamalara
maruz kalır ve standart uygulamalar için Dalvik Sanal Makinesi aracılığıyla çalışır.
* DRM çerçevesi uygulayan bir yerli kod DRM yöneticisi, DRM eklentileri dijital
haklar yönetimine işlemek için bir arayüz sunar ve çeşitli DRM düzenleri için şifre
çözer.
Şekil 4: Android Platformu Üzerinde Dijital Haklar Yönetiminin Mimarisi
3.4. ANDROID GÜNCELLEMELERİ
Android cihazların çoğunda kodu güncelleştirmek için 2 yol vardır: OTA
güncellemeleri veya yan yüklü güncelleştirmeler OTA güncellemeleri tanımlanmış
bir zaman üzerinden dışarı yuvarlanabilir veya bir kerede tüm cihazlar için zorlanır,
OEM veya taşıyıcıya bağlı olarak güncelleştirmeler zorlanmak istenir.
Yan yüklü güncelleştirmeler, kullanıcıların yerel masaüstü bir makineye veya
doğrudan telefona bir zip dosyası indirmek için yerel bir merkezden temin edilebilir.
44
Güncelleme bir kez kopyalanır ve cihazdaki SD karta indirilir, Android güncellemeyi
tanıyacak, doğruluğunu ve gerçekliğini onaylayarak cihazı otomatik olarak
güncelleyecektir.
Eğer, sorumlu veya dahili bir tehlikeli güvenlik açığı tespit edilirse Google veya
Android Açık Kaynak Projesi'ne bildirilirse Android güvenlik ekibi aşağıdaki
işlemlere başlar.
* Android ekibi, imzalanmış NDA'larla ilgili sorunları şirketlere bildirir ve çözümü
tartışmaya başlar.
* Sahipleri kodu düzeltmeye başlayacak.
* Android ekibi, Android'le ilgili güvenlik sorunlarını çözecektir.
* Bir yama hazır olduğunda, NDA şirketlere düzeltme verilir.
* Android ekibi, Android Açık Kaynak Projesi'nde yama yayınlayacak.
* OEM / taşıyıcı, müşterileri için bir güncelleştirme sağlayacaktır.
NDA, bir düzeltmenin kullanılabilirliğinden önce güvenlik sorununun yaygın hale
dönüşmemesini ve kullanıcıları riske atmamayı sağlamak için gereklidir. Birçok
OHA üyesi Android cihazlarda önyükleme yükleyicisi, wi-fi sürücüleri ve radyo gibi
kendi kodunu çalıştırır. Android Güvenlik Ekibi, bu ortak koddaki güvenlik
sorununu bildirir bildirmez NDA'lar eldeki sorun ve benzeri sorunlar için hızlı bir
düzeltme bulmak için OHA ortakları ile istişare edecektir. Ancak, hatalı kod yazan
OHA üyesi sorunu düzeltmek için nihai sorumludur.
Eğer tehlikeli bir güvenlik açığı sorumlulukla ifşa edilmediyse, daha sonra Google
veya Android Açık Kaynak Projesi bir yama oluşturmak için mümkün olduğunca
hızlı çalışacaktır. Yama test edilmiş ve kullanıma hazır olduğunda kamuya veya
ortaklara açıklanmış olacaktır [2].
3.5. GÜVENLİK İPUÇLARI
Android, işletim sistemi içinde güvenlik sorunlarının sıklık ve etkisini azaltan
yerleşik güvenlik özelliklerine sahip olduğu için güvenlik hakkındaki zor kararları
önlemek, dosya izinleri ve varsayılan sistem ile uygulamaları oluşturmak üzere
tasarlanmıştır [1].
45
Güvenli uygulamalar oluşturmaya yardımcı bazı temel ve yerleşik güvenlik
özellikleri şunlardır:
* Android Sandbox Uygulama, uygulama verilerini ve diğer uygulamalardan kod
yürütülmesini izole eder.
* Güvenli IPC, izinler ve şifreleme gibi ortak güvenlik işlevselliğinin sağlam
uygulamaları ile bir uygulama çerçevesi
* Ortak hafıza yönetim hataları ile ilgili riskleri azaltmak için ASLR, NX, ProPolice,
safe_iop, OpenBSD dlmalloc, OpenBSD calloc ve Linux mmap_min_addr gibi
teknolojiler
* Kayıp veya çalıntı cihazlarda verileri korumak için etkin bir şifrelenmiş bir dosya
sistemi
* Sistem özellikleri ve kullanıcı verilerine erişimi engellemek için kullanıcıya verilen
izinler
* Her bir uygulama bazında, uygulamaya özgü olarak uygulama verilerini kontrol
etmek için uygulama tanımlı izinler
3.5.1. VERİ DEPOLAMA
3.5.1.1. DAHİLİ DEPOLAMAYI KULLANMAK
Oluşturulan dahili depolama dosyaları sadece uygulamalarınız için erişilebilirdir.
Bu koruma Android tarafından uygulanır ve çoğu uygulama için yeterlidir. IPC
dosyalar için genellikle "MODE_WORLD_READABLE" veya
"MODE_WOLRD_WRITEABLE" kullanmaktan kaçınılmalıdır. Çünkü, bu modlar
ne özel uygulamalara veri erişimini sınırlamak için yeterlidir ne de veri biçimi
üzerinde herhangi bir kontrol sağlarlar. Diğer uygulama süreçleriyle verinizi
paylaşmak istiyorsanız, bunun yerine diğer uygulamalar için okuma ve yazma
izinleri sunan bir içerik sağlayıcı kullanmayı düşünebilir ve bir harf ile ayrı ayrı
dinamik izin yardımı yapabilirsiniz.
Hassas veriler için ek koruma sağlamak istiyorsanız uygulamaya doğrudan
erişilemeyen bir anahtar kullanarak yerel dosyaları şifreleyebilirsiniz. Örneğin,
anahtar deposuna bir anahtar yerleştirilebilir ve cihaz üzerinde depolanmayan bir
kullanıcı parolası ile korunur. Bir kök uzlaşma, verileri korumuyorken kullanıcının
parola girişini izleyebilirsiniz. Bu dosya sistemi şifrelemesi olmaksızın kayıp bir
cihaz için koruma sağlayabilir.
46
3.5.1.2. HARİCİ DEPOLAMAYI KULLANMAK
SD kartlar gibi harici depolamada oluşturulan dosyalar küresel çapta okunabilir ve
yazılabilir. Çünkü, harici depolama kullanıcı tarafından kaldırılabilir veya herhangi
bir uygulama tarafından değiştirilmiş olabilir. Hassas bilgiler, harici depolama
kullanılarak saklanılmamalıdır.
Harici depolama veri işlerken, güvenilir olmayan herhangi bir kaynaktan gelen
veriler gibi giriş doğrulaması yapılmalıdır. Dinamik yükleme öncesinde harici
depolama üzerindeki sınıf dosyalarının ve yürütülebilir dosyaların depolanmaması
tavsiye edilir. Eğer uygulama, harici depolamadan yürütülebilir dosyaları geri
alamıyorsa dosyalar dinamik yükleme öncesinde şifrelenmiş olarak doğrulanmış ve
imzalanmış olmalıdır.
3.5.1.3. İÇERİK SAĞLAYICILARI KULLANMAK
İçerik sağlayıcılar, kullanıcının kendi uygulaması için sınırlı bir yapılandırılmış
depolama mekanizması sunabilir veya diğer uygulamalar tarafından erişime izin
vermek için dışa aktarılır.
İçerik sağlayıcınızın diğer uygulamalara erişim sağlamasını istemiyorsanız
uygulama bildiriminde "android:exported=false" olarak işaretlenmelidir aksi taktirde
diğer uygulamaların depolanmış veriye erişimine izin vermek için
"android:exported=true" olarak ayarlanmalıdır.
Diğer uygulamalar tarafından kullanılmak için bir içerik sağlayıcı oluştururken,
okuma ve yazma için tek bir izin veya bildirim kapsamında okuma ve yazma için
ayrı izinler belirleyebilirsiniz. Eldeki görevi gerçekleştirmek için gerekli olan izinler
için kendi izinlerinizi sınırlamanız tavsiye edilir. Unutulmasın ki; yeni bir işlev
ortaya çıkarmak için daha sonra izinleri eklemek, onları almak ve mevcut
kullanıcıları bozmaktan genellikle daha kolaydır.
Sadece kendi uygulamalarınız arasında veri paylaşımı için içerik sağlayıcı
kullanıyorsanız "android:protectionlevel" özniteliğini "signature" koruması için
ayarlanarak kullanmak tercih edilir. İmza izinleri kullanıcı onayı gerektirmez, bu
yüzden daha iyi bir kullanıcı deneyimi sağlar ve aynı anahtar ile imzalanmış
uygulamalar verilere eriştiğinde içerik sağlayıcı verilere daha kontrollü erişim sağlar.
47
İçerik sağlayıcılar aynı zamanda "android:grantUriPermissions" özniteliğini
bildirerek daha ayrıntılı erişim sağlayabilir ve
FLAG_GRANT_READ_URI_PERMISSION ile FLAG_GRANT_WRITE_URI_PE
RMISSION bayraklarını kullanarak "Intent" nesnesindeki bileşeni aktifleştirir. Bu
izinlerin kapsamı <grant-uri-permission element> tarafından daha da sınırlı olabilir.
Bir içerik sağlayıcı erişirken query ( ), update ( ) gibi parametrelendirilmiş sorgu
yöntemleri kullanır ve güvenilir olmayan kaynaklardan gelen potansiyel SQL
sokulmasını önlemek için delete ( ) kullanır. Eğer "selection" bağımsız değişken,
yönteme göndermeden önce kullanıcı verileri birleştirilerek oluşturulursa parametreli
yöntemleri kullanmak yeterli olmaz.
Yazma izni hakkında yanlış bir güvenlik algılaması yoktur. Yazma izninin,
oluşturucu WHERE hükümlerini kullanarak bazı verilerin onaylanabilmesi için
mümkün olan SQL deyimlerine izin verdiğini ve ve sonuçları ayrıştırdığını düşünün.
Bir saldırgan, sadece bir sıra değiştirerek bir arama günlüğünde belirli bir telefon
numarasının varlığını derinlemesine araştırabilir.
Eğer içerik sağlayıcı veri öngörülebilir bir yapıya sahipse, yazma izni hem yazma
hem okuma için eşdeğer olabilir.
3.5.2. İZİNLERİ KULLANMA
3.5.2.1. İZİNLERİ İSTEMEK
Uygulama isteklerinin izin sayısının minimize edilmesi tavsiye edilir. Hassas
izinlere erişim olmaması bu izinlerin istemeden kötüye kullanma riskini azaltır,
kullanıcı benimsemesini arttırabilir ve uygulamayı saldırganlar için daha az
savunmasız yapar. Uygulamanın işlevi için, eğer bir izin gerekli değilse o
istenilmemelidir. Herhangi bir izin gerektirmeyen bir şekilde uygulama tasarımı
mümkünse bu tercih edilir.
Örneğin; cihaz bilgilerine erişim isteyen oldukça benzersiz bir tanımlayıcı
oluşturmak yerine uygulama için bir GUID oluşturmak , harici depolama kullanmak
veya dahili depolama da veri depolamak daha doğrudur.
İstenen izinlere ek olarak, uygulama güvenlik duyarlı IPC korumak için
"<permissions>" kullanabilir ve bir içerik sağlayıcı gibi diğer uygulamalara maruz
kalacak.
48
Kullanıcının onayladığı mümkün olan izinler dışındaki diğer erişim kontrollerinin
kullanılması tavsiye edilir. Çünkü, izinler kullanıcılar için kafa karıştırıcı olabilir.
Örneğin; tek bir geliştirici tarafından sağlanan uygulamalar arasında IPC iletişim için
"imza koruma düzeyi" izinlerini kullanmayı düşünün.
İzin korumalı veri sızıntısı yok. Bu durum, uygulama verileri yalnızca kullanışlı IPC
üzerinden ortaya çıktığında oluşur. Çünkü, belirli bir izin vardır ancak IPC
arabiriminin herhangi bir istemcisinin iznini gerektirmez.
3.5.2.2. İZİNLERİ OLUŞTURMAK
Güvenlik gereksinimlerinin karşılanması sırasında mümkün olduğu kadar az izin
tanımlamalıdır. Çoğu uygulama için yeni bir izin oluşturmak nispeten nadirdir.
Çünkü, "sistem tanımlı izinler" birçok durumu kapsamaktadır. Uygun olan
durumlarda mevcut izinleri kullanarak erişim kontrollerini gerçekleştirin.
Eğer yeni bir izin oluşturmalıysanız, bir "imza koruma düzeyi" ile görevinizi
başarıp başaramayacağınızı düşünün. İmza izinleri kullanıcı için şeffaftır ve sadece
uygulama olarak izin kontrolü yapmadan aynı geliştirici tarafından imzalanmış
uygulamalar ile erişime izin verir.
Eğer, "tehlikeli" koruma seviyesi ile bir izin oluşturursanız dikkate almanız
gereken karmaşık bir dizi vardır:
* İzin, kısaca bir kullanıcıya güvenlik kararını ifade etmek için gerekli olacak bir dizi
olmalıdır.
* İzin dizisi, pek çok farklı dil için yerelleştirilmiş olmalıdır.
* Kullanıcılar, bir uygulama yüklemeyi seçmeyebilir. Çünkü, bir izin kafa karıştırıcı
veya riskli olarak algılanabilir.
* Uygulamalar, izin yaratıcısı yüklü değilken izin isteyebilir.
Kullanıcıların "tehlikeli" izin düzeyinin kullanımından vazgeçirmenin neden olduğu
kafa karışıklığı varken bunların her biri sizin için geliştirici olarak teknik olmayan
önemli bir meydan okuma teşkil eder.
49
3.5.3. AĞ KULLANMA
3.5.3.1. IP AĞI KULLANMA
Android ağı, diğer Linux ortamlarından önemli ölçüde farklı değildir. Anahtar,
güvenli web trafiği için HttpsURLConnection gibi hassas veriler için uygun
protokoller kullanıldığına emin olur. Android, her yerde HTTP üzerinden sunucu
üzerinde desteklenen HTTPS kullanımını tavsiye etmektedir. Çünkü, mobil cihazlar
ortak Wi-Fi noktaları gibi sık sık güvenli olmayan ağlara bağlanıyor.
Kimliği doğrulanmış, şifreli soket düzeyinde iletişim SSLSocket sınıfı kullanılarak
kolayca uygulanabilir. Android cihazların verilen frekans ile Wi-Fi kullanarak
güvenli olmayan kablosuz ağlara sıklıkla bağlandığı dikkate alınırsa ağ üzerindeki
tüm uygulamaların iletişimi için güvenli ağ kullanımı kuvvetle teşvik ve tavsiye
edilmektedir.
Hassas IPC kullanımı için, bazı uygulamaların "localhost" ağ bağlantı noktalarını
kullandığı tesbit edilmiştir. Bu arabirimler cihazın diğer uygulamaları tarafından
erişilebilir olduğundan bu yaklaşımdan vazgeçilmiş ve bunun yerine kimlik
doğrulama gibi bir "hizmet" ile mümkün Android IPC mekanizması kullanılmıştır.
Ayrıca, ortak ve yaygın bir sorun olan diğer güvensiz protokoller veya http'den
indirilen verilere güvenilmemelidir. Bu, "WebView" giriş doğrulaması ve HTTP'ye
karşı verilen herhangi bir yanıtı içerir.
3.5.3.2. TELEFON AĞI KULLANMA
Sms protokolü öncelikle kullanıcıdan kullanıcıya iletişim için tasarlanmıştır ve veri
aktarmak istediğiniz uygulamalar için uygun değildir. SMS sınırlamaları nedeniyle
kullanıcının cihaz üzerinde bir web sunucusundan uygulamaya veri mesajı
göndermesi için Google Cloud Messaging ve IP ağ kullanımı kuvvetle teşvik ve
tavsiye edilmektedir.
SMS, cihaz veya ağ üzerinde ne şifrelenir ne de şiddetle kimlik doğrulaması yapılır.
Özellikle, herhangi bir SMS alıcısı kötü niyetli bir kullanıcının uygulamaya sms
göndermesini beklemelidir. Hassas komutları gerçekleştirmek için kimliği
doğrulanmamış sms verilere güvenilmemelidir. Ayrıca, SMS'in bilgi sızdırma veya
ağda durdurmaya maruz kalabileceğinin farkında olunmalıdır. Android destekli cihaz
50
kendisi üzerinde SMS mesajları yayın niyetleri gibi iletilir , bu yüzden onlar
okunabilir veya READ_SMS iznine diğer uygulamalar tarafından ele geçirilebilir.
3.5.4. GİRİŞ DOĞRULAMASI GERÇEKLEŞTİRME
Yetersiz giriş doğrulama, hangi platformda çalışırsa çalışsın uygulamaları etkileyen
en yaygın güvenlik sorunlarından biridir. Android, platform düzeyinde giriş
doğrulama sorunları için uygulamaların maruziyetini azaltan karşı önlemlere sahiptir
ve mümkünse bu özellikler kullanılmalıdır. Ayrıca unutulmamalıdır ki, güvenli dil
türünün seçimi giriş doğrulama sorunlarının olasılığını azaltma eğilimindedir.
Eğer yerel kod kullanıyorsanız, o zaman bir güvenlik sorununu tanıtma
potansiyeline sahip bir IPC'den alınan veya ağ üzerinden alınan dosyalardan herhangi
bir veri okunur. En yaygın sorunlar; buffer overflows, use after free ve off-by-one
errors. Android, bu hatalardan yararlanılmasını daha doğrusu sömürülmesini
azaltmak için DEP ve ASLR gibi bir dizi teknolojiler sağlar ancak bu altta yatan
sorunu çözmez. Arabellek yönetimi ve işaretçiler tarafından dikkatli işleme ile bu
güvenlik açıklarını önleyebilirsiniz [1].
SQL ve JavaScript gibi dinamik string tabanlı diller aynı zamanda komut dosyası
ekleme ve giriş doğrulama sorunları nedeniyle kaçış karakterlerine konudurlar.
Eğer, bir SQL veritabanı veya içerik sağlayıcısına gönderilen sorguların içindeki
verileri kullanıyorsanız SQL enjeksiyon bir sorun olabilir. Yukarıdaki bölümde
tartışıldığı gibi içerik sağlayıcılar hakkında en iyi savunma parametreli sorgular
kullanmaktır. İzinleri sınırlandırma, salt okuma veya salt yazma içindir ve aynı
zamanda SQL enjeksiyon ile ilgili zarar görme ihtimalini azaltabilir.
Yukarıdaki güvenlik özelliklerini kullanamıyorsanız, iyi yapılandırılmış veri
biçimleri ve beklenen biçime uygun veri doğrulama kullanılması tavsiye
edilmektedir. Karakterlerin veya karakter değiştirmelerinin kara listeye alınması
etkili bir strateji olabilirken, bu teknikler pratikte hataya eğilimlidir ve mümkün
olduğunca kaçınılmalıdır.
3.5.5. KULLANICI VERİLERİNİ İŞLEME
Kullanıcı veri güvenliği için en iyi yaklaşım, hassas veya kişisel kullanıcı verilerine
erişen API kullanımının minimize edilmesidir. Eğer kullanıcı verilerine erişiminiz
varsa depolama ve bilgi aktarımını önleyebilirsiniz. Depolama ve bilgi aktarımı
51
yapılmamalıdır. Son olarak uygulama mantığını bir hash veya geri dönüşü olmayan
form verileri kullanarak uygulanabilir bir şekilde olup olmadığını düşünülmelidir [1].
Örneğin; Uygulamanız, e-mail adresini depolamak veya iletimini engellemek için
birincil anahtar olarak bir e-mail adresinin hash'ini kullanabilir. Bu, verilerin
yanlışlıkla ifşa edilme ihtimalini azaltır ve ayrıca uygulamadan yararlanmaya çalışan
saldırganın şansını azaltır.
Uygulamanız kullanıcı adları veya şifreler gibi kişisel bilgilere erişirse, bazı yargı
kararlarının verilerin saklanması ve kullanımını açıklayan bir gizlilik politikası
sağlamasını gerektirdiğini unutmayın. Kullanıcı verilerine erişimi en aza indirmek
en iyi güvenlik yöntemi aşağıda verilmiştir, bu aynı zamanda kullanıcı verilerinin
uyumunu basitleştirebilir.
Ayrıca, uygulamanızın kendisi tarafından kullanılan 3.cü parti hizmetler ve reklam
için 3.cü parti bileşenler gibi diğer taraflara kişisel bilgileri yanlışlıkla ifşa edip
etmediğini düşünmelisiniz. Bir bileşen veya hizmetin neden kişisel bilgi
gerektirdiğini bilmiyorsanız, bunu vermeyin. Uygulamanız tarafından kişisel
bilgilere erişimin azaltılması, bu alandaki problemler için potansiyeli azaltacaktır.
Eğer hassas verilere erişim gerekliyse, bu bilgilerin sunucuya iletilir olup olmadığını
değerlendirmek veya istemci üzerinde gerçekleştirilebilecek olup olmadığı
gereklidir. Kullanıcı veri iletimini engellemek için istemci üzerindeki hassas verileri
kullanarak herhangi bir kod çalıştırmayı düşünün.
Ayrıca, cihaz üzerinde başka bir uygulama için kullanıcı verilerini cihazdaki aşırı
müsamahakar IPC, herkes tarafından yazılabilir dosyalar ve ağ yuvaları aracılığıyla
yanlışlıkla açığa çıkarmadığınızdan emin olun. Bu, "izinler istemek" bölümünde
tartışılan izin korumalı veri sızıntısının özel bir durumudur.
Eğer bir GUID gerekliyse, büyük ve benzersiz bir sayı oluşturun ve onu saklayın.
Telefon numarası ve kişisel bilgiler ile ilişkisi olabilen IMEI gibi telefon
tanımlayıcıları kullanmayın. Cihazdaki günlükleri yazarken dikkatli olun.
Android'te, günlükler paylaşılan bir kaynaktır ve READ_LOGS izni ile bir
uygulama için kullanılabilir. Telefon günlük verileri geçici ve yeniden başlatma da
52
silinir olsa da kullanıcı bilgilerinin uygunsuz günlük kayıtları, diğer uygulamalara
yanlışlıkla veri sızıntısına neden olabilir.
3.5.5.1. WEBVIEW KULLANARAK
Çünkü; WebView, HTML ve JavaScript dahil web içerik tüketir. Yanlış kullanım
sitelerarası komut dosyası gibi ortak web güvenlik sorunlarına neden olur. Android,
uygulamanın gerektirdiği minimum işlevselliği WebView'in kapasitesini sınırlayarak
bu potansiyel sorunların kapsamını azaltmak için bir dizi mekanizma içerir.
Eğer uygulamanız doğrudan WebView içinde JavaScript kullanmıyorsa
JavaScriptEnabled () çağırmayın. Bazı örnek kodlar, üretim uygulamalarında
işlevselliğin olabileceği bu yöntemi kullanır. Eğer gerekli değilse bu yöntem
çağrısını kaldırın. Varsayılan olarak WebView, siteler arası komut dosyası mümkün
olmadığından JavaScript yürütmüyor.
JavaScript, özel bir dikkatle addJavaScriptInterface() kullanarak normalde Android
uygulamaları için ayrılmış olan işlemleri çağırmaya izin verir. Eğer onu
kullanıyorsanız, addJavaScriptInterface () sadece web sayfaları için tüm girişlerin
güvenilir olduğunu ortaya çıkarır. Güvenilmeyen giriş izni verilirse, güvenilmeyen
JavaScript'in uygulama içindeki Android yöntemlerini çağırması mümkün olabilir.
Android, sadece APK uygulaması içinde yer alan JavaScript için
addJavaScriptInterface() ortaya çıkarmayı tavsiye etmektedir. Eğer uygulamanız
WebView ile hassas verilere erişirse, yerel olarak depolanan tüm dosyaları silmek
için clearCache () yöntemini kullanmayı isteyebilirsiniz. Sunucu tarafı başlıkları no-
cache gibi aynı zamanda belirli bir önbellek içeriği olmayan bir uygulamayı
belirtmek içinde kullanılabilir.
3.5.5.1.1. KİMLİK BİLGİLERİNİ KULLANARAK
Kullanıcı kimlik bilgilerinin sorulma sıklığını, kimlik avı ve pishing saldırılarına
daha dikkat çekici hale getirmek ve bu saldırıların başarı ihtimalini düşürmek için en
aza indirerek kullanmak tavsiye edilmektedir. Bunun yerine bir yetkilendirme
kullanılmalı veya yenilenmelidir.
Mümkün olduğunca kullanıcı adı ve şifre cihazlarda depolanmamalıdır. Bunun
yerine kullanıcı tarafından sağlanan kullanıcı adı ve parola kullanarak ilk kimlik
53
doğrulaması yapmak lazımdır, sonra kısa ömürlü kullanım ve hizmete özel yetki
belirteci kullanılabilir.
Servisler, "AccountManager" kullanarak birden fazla uygulama için erişilebilir
olmalıdır. Mümkünse, bulut tabanlı bir hizmeti çağırmak için "AccountManager"
hesap sınıfını kullanın. Cihaz üzerindeki şifreleri saklamayın.
Bir hesap almak için "AccountManager" kullandıktan sonra, "CREATOR" herhangi
bir kimlik bilgisinden geçirmez, böylece siz farkında olmasanızda kimlik bilgileriniz
yanlış uygulamaya geçemiyor.
Eğer kimlik bilgileri sadece oluşturduğumuz uygulamalar tarafından kullanılacağı
zaman "AccountManager", "checkSignature ()" kullanarak erişimi
doğrulayabilirsiniz. Alternatif olarak, eğer sadece bir uygulama kimlik bilgilerini
kullanacaksa depolama için bir "KeyStore" kullanabilirsiniz.
3.5.5.2. ŞİFRELEME KULLANARAK
Veri yalıtımı sağlayan, tam dosya sistemi şifreleme destekleyen ve güvenli iletişim
kanalları sağlamanın yanısıra, Android veri korumak için şifreleme kullanarak bir
dizi kapsamlı algoritma sağlar.
Genel olarak kullanım durumunu destekleyebilir çerçeve uygulamanın önceden
varolanın en üst düzeyini kullanmayı deneyin. Bilinen bir konumdan güvenli bir
şekilde dosya almak gerekiyorsa, basit bir HTTP URL bilgisi yeterli olabilir ve
şifreleme bilgisi gerektirmez. Eğer güvenli bir yol gerekiyorsa, HttpsURLConnection
veya SSLSocket kullanmak yerine kendi protokolünüzü yazmanız düşünülmelidir.
Kendi protokolünüzü uygulamaya ihtiyaç duyuyorsanız kendi şifreleme
algoritmalarınızı uygulamamanızı önemle tavsiye edilmektedir. "cipher" sınıfında
sağlanan RSA veya AES uygulaması içindeki gibi olan mevcut şifreleme
algoritmaları kullanılmalıdır.
Güvenli bir rastgele sayı üreteci için " SecureRandom", herhangi bir şifreleme
anahtarını başlatmak için "KeyGenerator" kullanın. Güvenli bir rastgele sayı üreteci
ile oluşturulmayan bir anahtarın kullanımı, algoritmanın gücünü önemli ölçüde
azaltır ve çevrimdışı saldırılarına izin verebilir.
54
Tekrar eden kullanımlar için bir anahtar saklamaya ihtiyacınız varsa, şifreleme
anahtarlarının alımı ve uzun vadeli depolama için "KeyStore" gibi mekanizma
kullanın.
3.5.5.3. İŞLEMLERARASI İLETİŞİM KULLANARAK
Bazı uygulamalar, paylaşılan dosyalar ve ağ yuvaları gibi geleneksel Linux
teknikleri kullanarak IPC uygulamaya teşebbüs eder. Bunun yerine IPC için Intent,
Binder veya bir Service ile Messenger ve BroadcastReceiver gibi Android sistemi
fonksiyonlarını kullanmanızı öneririz. Android IPC mekanizmaları, her IPC
mekanizması için ayarlanmış güvenlik ilkesini ve uygulamanın kimliğini doğrulamak
için kullanıcı IPC'sine bağlanmaya izin verir.
Güvenlik öğelerinin çoğu IPC mekanizmaları tarafından paylaşılır. Eğer sizin IPC
mekanizmanız diğer uygulamalar tarafından kullanılmak üzere tasarlanmadıysa,
android:exported niteliğini bileşenin bildirim elemanında "false" için "service" öğesi
gibi ayarlayın.
Bu aynı UID içinde çok sayıda işlemden oluşan uygulamalar için yararlıdır veya
eğer, aslında işlevselliğini ortaya çıkarmak istemediğiniz geliştirmede geç karar
verilirse, IPC olarak yeniden kod yazmak istemezsiniz.
Eğer sizin IPC' nizin diğer uygulamalara erişilebilir olması amaçlandıysa,
<permission> öğesini kullanarak bir güvenlik ilkesi uygulayabilirsiniz. Eğer IPC,
aynı anahtar ile imzalanmış kendi ayrı uygulamaları arasındaysa
android:protectionLevel izin düzeyinde "signature" tercih edilir.
3.5.5.3.1. NİYETLERİ KULLANARAK
Niyetler, Anroid'teki asenkron IPC için tercih edilen mekanizmadır. Uygulama
gereksinimlerinize bağlı olarak, belirli bir uygulama bileşeni için açık bir niyet veya
"sendBroadcast()", "sendOrderedBroadcast()" kullanabilirsiniz.
Unutulmamalıdır ki, sipariş edilmiş yayınlar bir alıcı tarafından "tüketilen" olabilir.
Bu yüzden onlar tüm uygulamalar için teslim edilebilir değildir. Belirli bir alıcıya
teslim edilmesi gereken bir niyet gönderiyorsanız, adı niyet tarafından beyan edilen
bir niyet kullanmalısınız.
55
Bir niyet gönderenler, alıcının çağrı yöntemi ile Null ( geçersiz ) olmayan bir izni
belirten izine sahip olduğunu doğrulayabilir. Sadece uygulamalar, bu izin ile niyet
alacak. Kötü niyetli uygulamaların, uygun izinler olmadan bu mesajları almak için
kayıt olamayacağından emin olmak için bir izin uygulamayı düşünmelisiniz.
Bu şartlar altında, yayın yükseltmek yerine aynı zamanda doğrudan alıcı çağırarak
düşünebilirsiniz.
Not: Niyet filtreleri, bir güvenlik özelliği olarak kabul edilmemelidir. Bileşenler,
açık niyetler ile çağrılabilir ve niyet filtrelerine uyumlaşabilecek verilere sahip
olamayabilir. Kullanıcı; hizmet, etkinlik veya çağrılan alıcı için düzgün
biçimlendirilmiş niyet alıcısı içinde giriş doğrulamasını onaylamayı yapmalıdır.
3.5.5.3.2. SERVİSLERİ KULLANARAK
Bir "service", diğer uygulamaların işlevselliğini sağlamak için sık sık kullanılır. Her
hizmet sınıfı, kendi bildirim dosyasında karşılık gelen bir bildirime sahip olmalıdır.
Varsayılan olarak, hizmetler başka bir uygulama tarafından çağrılamaz ve ihrac
edilemez. Ancak, eğer hizmet bildirim amaçlı herhangi bir filtre eklerseniz o zaman
varsayılan olarak ihrac edilir. İstediğiniz gibi davranmasından emin olmak için, eğer
açıkça beyan etmek isterseniz android:exported özniteliklisi en iyisidir. Hizmetler;
ayrıca android:permission özniteliği kullanılarak korunabilir.
Bu şekilde, diğer uygulamalar kendi manifestosunu başlatmak, durdurmak veya
servise bağlamak için karşılık gelen bir "uses-permission" öğesine ihtiyaç
duyacaktır.
Bir hizmet, içindeki izinler ile çağrı uygulamasını çalıştırmadan önce
"checkCallingPermission ()" arayarak bireysel IPC çağrıları koruyabilir. Bu gözetim
için daha az eğilimli olduğundan bildirim izinlerini kullanılması tavsiye edilir.
3.5.5.3.3. BINDER VE MESSENGER ARABİRİMLERİ KULLANARAK
Binder ve Messenger kullanmak, Android' teki RPC tarzı IPC için tercih edilen
mekanizmadır. Gerekiyorsa, onlar uç noktaları karşılıklı kimlik doğrulama sağlayan
iyi tanımlanmış bir arabirim sağlar. Android, özel izin kontrolü gerektirmeyen bir
şekilde arabirim tasarımı teşvik etmektedir. Binder ve messenger nesneleri uygulama
56
bildirimi içinde bildirilmez ve bu nedenle onlara doğrudan bildirim izinleri
uygulayamazsınız.
Onlar genellikle uygulanmış "service" veya "activity" için uygulama bildiriminde
bildirilmiş izinleri devralır. Kimlik doğrulama ve/veya erişim kontrolleri gerektiren
bir arabirim oluşturuyorsanız bu kontrollere "Binder" ve "Messenger" arabiriminde
açıkça kod eklenmiş olmalıdır.
Eğer bir arabirim erişim kontrolleri sağlarsa arayanın gerekli izne sahip olup
olmadığını doğrulamak için "checkCallingPermission ()" kullanın. Bu, uygulamanın
diğer arabirimlere geçtiğinin belirlenmesi gibi arayanın adına bir hizmete erişmeden
önce özellikle önemlidir. Bir "service" tarafından sağlanan arabirim çağırırsa, eğer
verilen hizmete erişim için izniniz yoksa "bindService" çağrısı başarısız olabilir.
Kendi uygulaması tarafından yerel olarak sağlanan bir arabirim çağırırsa, iç güvenlik
kontrollerini sağlamak için "clearCallingIdentiy" kullanmak yararlı olabilir.
3.5.5.3.4. YAYIN ALICILARI KULLANARAK
Bir yayın alıcı, bir "Intent" tarafından başlatılan asenkron istekleri işler. Varsayılan
olarak, alıcılar dışa aktarılır ve başka bir uygulama tarafından çağrılabilir. Eğer sizin
BroadcastReceiver diğer uygulamalar tarafından kullanılmak üzere tasarlandıysa,
uygulama bildirimi içindeki "receiver" öğesini kullanarak alıcılara güvenlik izinleri
uygulamayı isteyebilirsiniz. Bu, uygulamaların BroadcastReceiver için uygun izinler
olmadan niyet göndermesini önleyecektir.
3.5.6. DİNAMİK YÜKLEME KODU
APK uygulamanız dışından yükleme kodu kuvvetle önerilmemektedir. Böylece, kod
tahrifatı veya kod enjeksiyonu nedeniyle uygulama uzlaşma olasılığı önemli ölçüde
artar. Ayrıca, uygulama testleri ve sürüm yönetimi etrafında karmaşıklık ekler. Son
olarak bazı ortamlarda yasaklanmış olabilen bir uygulamanın davranışını doğrulamak
için imkansız yapılabilir.
Eğer uygulamanız dinamik kod yüklerse, yüklenen dinamik kod hakkında akılda
tutulması gereken en önemli şey APK uygulamasının aynı güvenlik izinleri ile
çalışmasıdır. Kullanıcı kimliğinize dayalı uygulama yüklemek için yüklü dinamik
kod dahil olmak üzere uygulama içinde herhangi bir kod çalıştırmayı sağlanmalıdır.
Kullanıcı, kimliğinize dayalı uygulama yüklemek için bir karar verir ve dinamik
57
olarak yüklenen kod dahil olmak üzere uygulama içinde herhangi bir kodun
çalışmasını sağlamayı bekler.
En büyük güvenlik riski, doğrulanabilir bir kaynaktan gelmesi gereken dinamik
yükleme kodu ile ilişkilidir. Eğer modüller doğrudan APK içindeyse, o zaman onlar
diğer uygulamalar tarafından değiştirilemez. Bu, kodun yerel bir kütüphane veya
DexClassLoader kullanarak yüklenen bir sınıf olup olmadığını doğrular [1].
Uygulamaların, harici depolama gibi herkes tarafından yazılabilir lokasyonlardan
veya şifrelenmemiş protokoller üzerindeki ağdan indirilen gibi güvenilmez
lokasyonlardan kod yüklemeye çalışması sıklıkla görülen bir tehdittir. Bu
lokasyonlar, ağdaki birisine sırasıyla transit içeriği değiştirmek veya bir kullanıcının
cihazındaki başka bir uygulamayı değiştirmek için izin verebilir.
3.5.7. SANAL MAKİNEDE GÜVENLİK
Dalvik, Android'in çalışma zamanı sanal makinedir. Dalvik, Android için özel inşa
edildi ama diğer birçok sanal makinelerin güvenlik kodu ile ilgili endişeleri Android
içinde geçerlidir. Sanal makineye ilişkin güvenlik sorunları ile endişeniz
olmamalıdır. Uygulamanız güvenli bir Sandbox ortamında çalışır. Bu nedenle
sistemdeki diğer işlemler özel veri veya kodunuza erişemez [1].
Bu proje, Android'e özgü ve diğer sanal makine ortamlarından farklı alanlar üzerine
odaklanmıştır. Diğer ortamlarda sanal makine programlama ile deneyimli
geliştiriciler için Android uygulamalar yazma hakkında farklı olabilecek 2 yaygın
konu vardır:
* JVM veya .Net çalışma zamanı gibi bazı sanal makineler, temel işletim sistemleri
özelliklerinden kod izole ederek bir güvenlik sınırı gibi hareket ederler. Dalvik Sanal
Makinesi, Android'te bir güvenlik sınırı değildir. Application Sandbox, işletim
sistemi düzeyinde uygulanır. Dalvik, herhangi bir güvenlik kısıtlaması olmadan aynı
uygulamada yerel kod ile çalışabilir.
* Mobil cihazlarda sınırlı depolama göz önüne alındığında, geliştiriciler için modüler
uygulamalar oluşturmak ve dinamik sınıf yüklemeyi kullanmak yaygındır. Bunu
yaparken, hem uygulama mantığını almayı hem de onu yerel olarak nerede saklamak
gerektiği düşünülmelidir. Harici depolama veya güvenli olmayan ağ kaynakları gibi
58
doğrulanmamış kaynaklardan gelen dinamik yükleme sınıfı kullanılmamalıdır.
Çünkü, bu kod kötü niyetli davranışları içerecek şekilde değiştirilmiş olabilir.
3.5.8. YEREL KOD GÜVENLİĞİ
Android, genel olarak uygulama geliştirme için yerel kod ile Android NDK
kullanmak yerine Android SDK kullanmayı teşvik etmektedir. Yerel kod ile
oluşturulmuş uygulamalar, arabellek taşmaları gibi yaygın bellek bozulması hataları
dahil daha karmaşık, daha az taşınabilir ve daha fazla hata içerir.
Android ve Linux ortamlarının çoğu arasındaki en önemli fark Application
Sandbox'tır. Android'te, tüm uygulamalar yerel kod ile yazılmış olanlar dahil olmak
üzere Application Sandbox'ta çalışır.
4. SÖZLÜK
Adres Alanı Düzeni Rastgele Seçimi (ASLR)
Bir yazılım hatasının sömürüsünün başarısını çok daha zor hale getirmek için IOS
tarafından kullanılan bir tekniktir. Öngörülemeyen uzaklıkları ve bellek adreslerini
sağlayan yararlanma kodu, bu değerleri istismar eden sert kod değildir. IOS 5 ve
sonrası, tüm sistem uygulamalarının pozisyonları ve kütüphaneler konumdan
bağımsız yürütülebilir olarak derlenmiş 3. parti uygulamalar ile birlikte rastgele
seçilmiştir.
Önyükleme ROM
Bir cihazın işlemcisi tarafından ilk önyükleme başladığı zaman yürütülen ilk koddur.
İşlemcinin ayrılmaz bir parçası olarak, Apple veya bir saldırgan tarafından
değiştirilemez.
DFU
Bu mod, bir cihazın önyükleme ROM kodunun USB üzerinden elde edilebilir
olmasını bekler. DFU modundayken, ekran kararır ama iTunes çalıştıran bir
bilgisayara bağlanırken aşağıdaki istem sunulmuştur: "iTunes, kurtarma modunda bir
iPad algıladı. iTunes ile kullanılmadan önce iPad'i geri yüklemelisiniz"
ECID
Her IOS cihazdaki işlemci için eşsiz bir 64-bit tanımlayıcıdır. Kişiselleştirme
işleminin bir parçası olarak kullanılması bir sır değildir.
59
Silinebilir Depolama
Şifreleme anahtarlarını saklamak için kullanılan, doğrudan ele alabilinen ve güvenli
silebilen NAND depolamanın özel bir alanıdır. Koruma sağlamıyorken, eğer bir
saldırgan bir cihaza fiziksel olarak saldırırsa, Silinebilir depolama'da düzenlenen
anahtarlar hızlı silmeyi kolaylaştırmak ve ileri güvenlik için anahtar hiyerarşisinin bir
parçası olarak kullanılabilir.
GID
UID gibidir ama bir sınıftaki her işlemci için ortaktır.
iBoot
LLB tarafından yüklenmiş koddur ve buna karşılık güvenli önyükleme zincirinin bir
parçası olarak yükler.
Anahtarlık
Diğer hassas kimlik bilgileri, anahtarları, parolaları geri getirme ve saklamak için
3.parti uygulamalar ve IOS tarafından kullanılan altyapı ve API'ler dizisidir.
API
Herhangi bir uygulamanın kodlarını görmeden ve platform farketmeksizin o
uygulamayı veya fonksiyonları başka uygulamalarda kullanmaya olanak sağlayan
teknolojidir.
Key Wrapping
Başka bir anahtar ile şifrelemedir.
Düşük Düzeyli Önyükleyici
Boot Rom tarafından çağrılan koddur ve buna karşılık güvenli önyükleme zincirinin
bir parçası olarak yükler.
Profil Hazırlama
Uygulamaları sağlayan yetkileri yükleyen ve IOS cihaz üzerinde test eden Apple
tarafından imzalanmış bir dizi varlıkları içeren bir plisttir.
Karışıklık
Bir kullanıcının geçiş kodunun şifreli bir anahtar haline getirilmiş ve cihazın UID ile
güçlendirildiği süreçtir. Bu, bir brute force saldırısının belirli bir cihaz üzerinde
yapılmasını sağlar, böylece oranı sınırlanır ve paralel olarak gerçekleştirilemez.
60
Karışıklık algoritması UID türetilen bir anahtar ile sözde rastgele fonksiyonu olarak
AES kullanan PBKDF2'dir.
UID
A 256-bit AES anahtarı üretim sırasında her işlemcinin içine yanar. Bu, firmware
veya yazılım tarafından okunamaz ve yalnızca işlemcinin AES donanım motoru
tarafından kullanılır. Gerçek anahtarı elde etmek için, bir saldırganın işlemcinin
silikonuna karşı son derece karmaşık ve pahalı bir fiziksel saldırı monte etmesi
gerekir. Kullanıcı kimliği üzerinde cihaz da dahil olmak üzere başka bir tanımlayıcı
ilişkili değildir. Ancak, UID bunlarla sınırlı değildir.
XNU
Çekirdek, IOS'un ve OS X işletim sistemlerinin kalbindedir. Güvenilir olduğu kabul
edilir ve ASLR, hak denetimi, sandboxing ve kod imzalama gibi güvenlik
önlemlerini zorlar.
Yarrow
Bir şifreli olarak sözde güvenli rastgele sayı üreteci algoritmasıdır. IOS'taki
Civanperçemi uygulaması çeşitli sistem olayları tarafından oluşturulan entropi alır ve
kullanılabilir öngörülemeyen rastgele sayılar üretir. Örneğin; şifreleme anahtarları
gibi.
61
SONUÇ VE ÖNERİLER
Mobil İşletim Sistemleri, her ne kadar kullanıcılar için gerekli güvenlik önlemlerini
sağlıyorsa da bu tek başına yeterli değildir. Önemli olan kullanıcının bu bilince sahip
olmasıdır. Bu sebeple alınması gereken bazı tedbirler şöyledir:
* Lisanslı mobil antivirüs kullanmak
* Konum belirlememek
* Jailbreak yapmamak
* Güvenilirliği kesin olmayan linklere tıklamamak
* Güvenilirliği kesin olmayan kaynaklardan gelen maillerde yer alan fotoğraf,metin
vs. şeyleri açmamak
* Parmak izi tarayıcı programları kullanmak
* Bluetooth'u anlık kullanımlar dışında kapalı tutmak
* Güvenilirliği kesin olmayan program ve / veya uygulamaları yüklememek
* Otel , restaurant , cafeterya gibi ortak kullanıma ve istismara açık yerlerde Wi-Fi
kullanmamak
* Güvenli şifreleme sistemi olmayan sitelerden alışveriş yapmamak
* Cihazın yabancı ve güvenilir olmayan kişilerin eline geçmesini önlemek
* Internet tarayıcı güvenliği
* Dos saldırıları, Spam, Keylogger, Mobil hack, Mobispy ve Smishing gibi zararlı
yöntemlere karşı güvenlik oluşturmak
* Telefona Jailbreak yapmamak
62
KAYNAKLAR
[ 1 ] SECURITY TIPS, ANDROID WEB SITE,
http://developer.android.com/training/articles/security-tips.html ( 13.12.2013 )
[ 2 ] ANDROID SECURITY FREQUENTLY ASKED QUESTIONS, ANDROID
WEB SITE, http://developer.android.com/resources/faq/security.html ( 07.07.2012 )
[ 3 ] SECURITY ENHANCED LINUX IN ANDROID, ANDROID WEB SITE,
http://source.android.com/devices/tech/security/se-linux.html ( 31.5.2014 )
[ 4 ] INFORMATION ASSURANCE DIRECTORATE, THE NATIONAL
INFORMATION ASSURANCE PARTNERSHIP ( NIAP ), WEB SITE,
http://www.niap-ccevs.org/pp/pp_mobility_os_v0.6.pdf ( 16.04.2013 )
[ 5 ] IOS SECURITY, APPLE INCORPORATED, WEB SITE,
https://www.apple.com/br/ipad/business/docs/iOS_Security_Oct12.pdf ( 10.09.2012
)
[ 6 ] SECURITY ENHANCEMENTS IN ANDROID 4.2., ANDROID WEB SITE,
http://source.android.com/devices/tech/security/enhancements42.html ( 27.03.2013 )
[ 7 ] ANDROID SECURITY OVERVİEW, ANDROID WEB SITE,
http://source.android.com/devices/tech/security ( 01.10.2013 )
[ 8 ] SECURITY ENHANCEMENTS IN ANDROID 4.1., ANDROID WEB SITE,
http://source.android.com/devices/tech/security/enhancements41.html ( 11.02.2012 )
[ 9 ] SECURITY ENHANCEMENTS IN ANDROID 4.3., ANDROID WEB SITE,
http://source.android.com/devices/tech/security/enhancements43.html ( 11.08.2014 )
ÖZGEÇMİŞ
01.11.1981 Erzincan doğumluyum. İlkokul öğrenimimi Avcılar İstanbul, Ortaokul ve
Lise öğrenimimi Bakırköy İstanbul’da tamamladıktan sonra Anadolu Üniversitesi
İktisat Fakültesi Kamu Yönetimi Bölümü ve yine aynı üniversitenin Dış Ticaret
bölümünü bitirdim.
Çalışma hayatımda farklı sektör ve birimlerde görev aldım.
Özel ilgi alanlarımı ise şöyle sıralayabilirim; kitap okumak, belgesel izlemek,
kültürel faaliyetlerde bulunmak, futbol ve bilgi güvenliği konusunda araştırmalar
yapmak.
Fuat SAVAŞ
Recommended