BTRisk Android Mobil Uygulama Denetimi Eğitimi sunumumuz aşağıdaki ana konu başlıklarından oluşmaktadır:
Mobil Uygulama Mimarisi
-Android İşletim Sistemi
-Android Rooting
-Android Güvenlik Mimarisi
-Uygulama Dili Dönüşümleri
-Dalvik Virtual Machine
ARM (Advanced Risk Machines) Mimamrisi
Mobil Uygulama Fonksiyonalitesi
Androdi Uygulama Bileşenleri
Uygulama Erişim İzinleri
Android Hacking Metodları
-Root Kontrolünü Aşma Yöntemleri
-SSL Pinning Atlatma Yöntemleri
-Android Debug Altyapısı
-Kritolu Verilerin Okunması
-IPC (Inter Process Communication) Saldırıları
-Cihaz Üzerinde Saklanan Bilgiler
-Cihaz Loglarından Sızan Bilgiler
Obfuscation (Karmaşıklaştırma) Yöntemleri
Ekran Resmi Çekme ve Recent Apps Ekran Görüntüleri
Kontrolsüz Gönderilen Broadcast Mesajları
4. Web Sunucusu
Tarayıcı (Browser)
Web Sunucusu
Uygulama Sunucusu
Veritabanı
Sunucusu
XML Veri Deposu / Konfigürasyon Dosyaları
Web Servisi
Soket Servisi
Diğer Sunucular
WEB UYGULAMA MİMARİSİ
5. Web Sunucusu
Tarayıcı (Browser)
Web Sunucusu
Uygulama Sunucusu
Veritabanı
Sunucusu
XML Veri Deposu / Konfigürasyon Dosyaları
Web Servisi
Soket Servisi
Diğer Sunucular
WEB UYGULAMA AÇIKLIKLARI
XSS
SQL Injection
Insecure Direct Object
Reference (IDOR)
CSRF
Sunucu Açıklıkları
İstemci Bilgisayarında
Güvensiz Veri Saklama
LDAP, SMTP, Command
v.d. Injection
Kontrolsüz Yönlendirme
Oturum Yönetim
Açıklıkları
Erişim Kontrol
Açıklıkları
Güvenlik Fonksiyonalite
Yetersizliği
Mantık
Hataları
Güvensiz İletişim
Üçüncü Taraflara
Bilgi Sızdırma
Local File
Inclusion (LFI)
6. Web Sunucusu
Web Sunucusu
Uygulama Sunucusu
Veritabanı
Sunucusu
XML Veri Deposu / Konfigürasyon Dosyaları
Web Servisi
Soket Servisi
Diğer Sunucular
MOBİL UYGULAMA MİMARİSİ
Mobil Cihaz (OS)
Native Uygulama
Lokal dosyalar, veritabanları, saklama alanları
7. Web Sunucusu
Web Sunucusu
Uygulama Sunucusu
Veritabanı
Sunucusu
XML Veri Deposu / Konfigürasyon Dosyaları
Web Servisi
Soket Servisi
Diğer Sunucular
MOBİL UYGULAMA MİMARİSİ
Mobil Cihaz (OS)
Native Uygulama
Lokal dosyalar, veritabanları, saklama alanları
AndroidiOS
JavaObjective
C
HTTP/S
EĞİTİM
KAPSAMI
EĞİTİM
KAPSAMI
12. ANDROID GÜVENLİK MİMARİSİ
• Root'lanmamış bir cihaz için root erişimi mümkün
değildir, çünkü "su" uygulaması sistem üzerinde
bulunmaz.
• Her Android uygulaması kurulduğunda kendine ait
bir Android ID'ye sahip olur ve bu kullanıcı hakları ile
çalışır. Her uygulama kendine ait dizindeki verilere
erişebilir. Ancak SDCard'a veri yazılması halinde
diğer uygulamalar da erişebilir.
• Bizim sistem imajı üzerinde değişiklik yapabilmek ve
uygulama dizinlerine erişebilmek için "root"
erişimine ihtiyacımız var.
13. UYGULAMA DİLİ DÖNÜŞÜMLERİ
JAVA SMALI
ARM
Assembly
Android Studio
Eclipse Dalvik VM
JAVA
Bytecode
ARM
(Makine)
CİHAZ
GELİŞTİRME ORTAMI
14. DALVIK VIRTUAL MACHINE
SINIF TARTIŞMASI
• Android Linux türevi bir işletim sistemi ise ve
Android uygulamaları Java dilinde geliştiriliyorsa
neden JVM değilde Dalvik VM gibi bir teknoloji
kullanılıyor?
15. DALVIK VIRTUAL MACHINE
Neden DVM?
• JVM hakkında Google ve Oracle arasındaki lisans
problemi
• Hafıza kullanımı ve performans verimlilik ihtiyacının
mobil cihazlarda daha yüksek olması
16. ARM (Advanced Risk Machines)
SINIF TARTIŞMASI
• Mobil cihazlarda ARM işlemcilerin tercih edilmesinin
özel bir nedeni olabilir mi?
17. ARM (Advanced Risk Machines)
Neden ARM?
• ARM mimarisi Reduced Instruction Set Computing
(RISC) mimarisine uygun olduğu için instruction sayıları
daha az ve instruction uzunlukları standarttır.
• Bu ve diğer dizayn özellikleri nedeniyle ARM işlemciler
x86 işlemcilere göre daha az güç tüketirler.
• ARM işlemcilerin kısıtlı güç imkanlarına sahip gömülü
sistemlerde tercih edilmesinin nedeni düşük enerji
tüketimidir.
19. ANDROID UYGULAMA BİLEŞENLERİ
İhtiyaç ANDROID Bileşeni
Menü görüntüleme ve girdi işleme ACTIVITY
Cihaz üzerinde olan diğer olaylardan
haberdar olma ve otomatik olarak
aktif hale gelme
BROADCAST RECEIVER
Activity arka plana atılmış olsa bile
aktif kalabilme
SERVICE
Diğer uygulamalara bir sorgulama
veya URL formatında bir istek
arayüzü sağlama
CONTENT PROVIDER
20. UYGULAMA ERİŞİM İZİNLERİ
• AndroidManifest.XML
• http://developer.android.com/reference/android/Man
ifest.permission.html
21. ANDROID UYGULAMAMIZ (BTR MOBILE)
• BTR Mobile Web, Android
ve iOS Mobil
Uygulamalarımız güvenlik
eğitimlerimizde test ortamı
amacıyla BTRisk tarafından
geliştirilmiştir.
• Bu uygulamalar bir mobil
operatörün Online İşlem
Merkezi (OIM) hizmetini
simüle etmektedir.
22. UYGULAMA KURULUMU VE AYARLAR
• API Level 19 AVD (Uygulamanın ARM bağımlılığı yok)
• adb install BTRMobile.apk
• Cihaz üzerindeki /system partition'ının RW olarak
remount edilmesi (# mount –o rw,remount /system)
• Cihaz üzerindeki /etc/hosts dosyasına btrmobile (web
servisleri) sunucu IP adresinin girilmesi
• Web servis sunucusu üzerindeki Apache SSL
ayarlarının yapılması ve sunucu özel anahtarı ile
sertifikasının ilgili dizinlere eklenmesi (ref. btriskblog
Android SSL Pinning Hakkında Herşey makalesi)
59. SSL PINNING'İ ATLATMA
SEÇENEKLERİMİZ
1 3
Keystore dosyasının içine Burp'ün
sertifikasını imzalayan CA sertifikasını
yerleştir
Uygulamayı SMALI seviyesinde yamala
2
SSL Pinning'i aşan bir hacker
aracı kullan
60. SSL PINNING'İ ATLATMA 1
Keystore dosyasını değiştirme (Bu örneğe özel
olmak kaydıyla aşağıdaki yöntem izlenir)
Adım-1:
Aşağıdaki adresten ilgili JAR paketi indirilir:
"http://repo2.maven.org/maven2/org/bouncycastle/bcprov-ext-
jdk15on/1.46/bcprov-ext-jdk15on-1.46.jar"
61. SSL PINNING'İ ATLATMA 1
Keystore dosyasını değiştirme (Bu örneğe özel
olmak kaydıyla aşağıdaki yöntem izlenir)
Adım-2:
Aşağıdaki işlem gerçekleştirilerek yeni keystore dosyası üretilir:
C:> keytool -importcert -v -trustcacerts -file "burpcert.pem"
-alias ca -keystore "btrkeystore.bks" -provider
org.bouncycastle.jce.provider.BouncyCastleProvider -
providerpath "bcprov-ext-jdk15on-1.46.jar" -storetype BKS -
storepass btrisk Uygulamanın kullandığı
keystore dosya adı
JAVA SDK ile
gelen keytool aracı Uygulamanın kullandığı
storepass değeri
Yeni keystore dosyasına
yerleştirmek istediğimiz
Burp sertifika dosyası
62. SSL PINNING'İ ATLATMA 1
Keystore dosyasını değiştirme (Bu örneğe özel
olmak kaydıyla aşağıdaki yöntem izlenir)
Adım-3:
APKTOOL ile açtığımız paket dizinlerinden keystore dosyasının saklandığı
aşağıdaki dizine yeni oluşturduğumuz dosya kopyalanır:
63. SSL PINNING'İ ATLATMA 1
Keystore dosyasını değiştirme (Bu örneğe özel
olmak kaydıyla aşağıdaki yöntem izlenir)
Adım-4:
Son olarak APKTOOL ile açılan paket tekrar derlenir ve yeni oluşturulan APK
paketi imzalanarak cihaza / emülatöre tekrar yüklenir.
65. SSL PINNING'İ ATLATMA 2
Android SSL Killer aracını kullanma
• Android SSL Killer, Cydia Substrate for Android aracının
servislerinden faydalanır.
• Cydia Substrate kapalı kaynak kodlu bir yazılım olup içinde
native kütüphaneler barındırır ve (root'lu olması kaydıyla)
işletim seviyesi katmanında uyguladığı Rootkit yöntemleri
ile diğer Android uygulamaları tarafından kullanılabilecek bir
API sağlar.
66. SSL PINNING'İ ATLATMA 2
Android SSL Killer aracını kullanma
• Bu şekilde sistem kütüphanelerinde bulunan metodlar kendi
geliştireceğimiz kodlarla çalışma anında değiştirilebilir.
• Android SSL Killer, Cydia Substrate for Android aracının bu
özelliğinden faydalanarak sertifika ve sunucu kontrolü yapan
metodları bu kontrolü geçersiz kılacak metodlarla değiştirir.
67. SSL PINNING'İ ATLATMA 2
Android SSL Killer aracını kullanma
• ANCAK;
• Cydia Substrate for Android aracının desteği Android
versiyonu 4.3'e kadardır ve Emülatör'ü desteklemez.
68. SSL PINNING'İ ATLATMA 2
Android SSL Killer aracını kullanma
• EK OLARAK;
• SSL Pinning için farklı bir yöntem kullanılması halinde
yine tersine mühendislik yaparak bir çözüm bulmak
zorunda kalabilirsiniz.
69. SSL PINNING'İ ATLATMA 3
Uygulamayı yamalama getSocketFactory'nin
kullanıldığı 1. metod
"httpPostLogin"
70. SSL PINNING'İ ATLATMA 3
Uygulamayı yamalama getSocketFactory'nin
kullanıldığı 2. metod
"httpPost"
73. SSL PINNING'İ ATLATMA 3
YAMALANAN
BÖLÜM
Yaptığımız değişiklikten
etkilenen v19 ve v1 register'ları
tekrar sıfırlanıyor.
Bu nedenle kod mantığı
Etkilenmeyecek.
86. KRİPTOLU VERİLER STATİK
ANALİZ
Statik analiz sonrasında yapılacaklar
• Örnek veri alınır
• Statik analiz sırasında tespit edilen algoritma tersine
işletilecek şekilde bir uygulama olarak kodlanır
• Açık hale getirilen veri üzerinde gerekli değişiklikler
yapılarak tekrar kriptolama işlemi gerçekleştirilir ve veri
hedefe yollanır
• Eğer attack proxy üzerinde bu iş yapılmak isteniyorsa Burp
Extension'ı olarak bu kod geliştirilebilir, ancak yukarıdaki iş
yükünden daha az bir iş yükü olmayacaktır (Burp Extension'ı
geliştirme için btriskblog'daki makalemize bakınız)
93. KRİPTOLU VERİLER DİNAMİK
ANALİZ
JDB ile debug işlemi (bağlantı hazırlığı)
• 1. Yöntem (manuel yöntem)
• Uygulamayı başlatmadan önce "adb jdwp" komutu ile
process id'lerini listeleriz.
• Aynı işlemi bir de uygulamayı başlattıktan sonra
gerçekleştirerek aradaki farkı görürüz. Yeni gelen
process id'si bizim bağlanmak istediğimiz id'dir.
• Daha sonra "adb forward tcp:9999 jdwp:8765"
gibi bir komutla uzaktaki debug agent üzerinden
proses'e bağlantı kanalını açarız.
94. KRİPTOLU VERİLER DİNAMİK
ANALİZ
JDB ile debug işlemi (bağlantı hazırlığı)
• 2. Yöntem (DDMS aracılığı ile)
• Uygulamayı başlatırız ve DDMS üzerinde yanında kırmızı
böcek işareti ile görürüz.
• Bu satır seçildiğinde DDMS bizim için otomatik olarak
"8700" TCP portunu proses'e bağlanmak üzere ayarlar.
96. KRİPTOLU VERİLER DİNAMİK
ANALİZ
JDB ile debug işlemi (bağlantı kurma)
• JAVA SDK ile gelen JDB aracı ile bağlantı kurma
jdb -connect com.sun.jdi.SocketAttach:hostname=localhost,port=8700
97. KRİPTOLU VERİLER DİNAMİK
ANALİZ
JDB ile debug işlemi (breakpoint koyma)
• Statik analizimizden gördük ki kriptolu verinin oluşturulduğu
metod adı "MCrypt" sınıfının "encrypt" metoduydu. Bu
metoda aşağıdaki gibi breakpoint koyabiliriz.
stop in com.btrisk.btrmobile.drawableslidermenu.MCrypt.encrypt
100. KRİPTOLU VERİLER DİNAMİK
ANALİZ
SMALI ile Log yazma
• SMALI kodunun kurallarına uygun olmak kaydıyla statik
analizden elde edindiğimiz bilgiyi kullanarak veri
kriptolanmadan hemen önce veriyi log'a yazabiliriz.
• Bu en temel debug yöntemi verinin kriptolanmadan önceki
halini görmemize imkan tanıyabilir.
103. IPC (InterProcess Communication) Saldırıları
Bu alandaki ilk örneğimiz Login View'ını kullanıcı tanımlama
adımını atlayarak bir sonraki View'ı görüntülemek (daha doğrusu
aktiviteyi çalıştırmak) olacak.
Mobil uygulamalarda kullanım ihtiyaçları dolayısıyla (notification
mekanizması, SMS geldiğinde haberdar olma, bir resmi bir
mesajlaşma uygulamasıyla gönderme gibi) Mobil platformların
IPC iletişim fonksiyonalitesi bulunuyor.
Eğer bu erişimler belli izinlerle kontrol edilmezse cihaz
üzerindeki herhangi bir uygulama diğer bir uygulamanın
bileşenlerini hayata geçirebilir.
115. IPC (InterProcess Communication) Saldırıları
IPC testleri için bu alanda
özelleşmiş olan DROZER aracını
kullanabilirsiniz.
Sorgulanabilir bileşenleri analiz
ettikten sonra Content Provider
bileşenlerine yönelik SQL
Injection testlerini de bu araçla
yapabilirsiniz.
117. CİHAZ ÜZERİNDE SAKLANAN BİLGİLER
SD CARD'a yazma ve okuma
• Uygulamalar SD Card'a gerekli permission'ları içermek kaydıyla
yazabilir ve SD Card'dan veri okuyabilir.
• Bu yüzden hassas uygulamaların SD Card'a yazmaları önerilmez.
120. CİHAZ LOGLARINDA SIZAN BİLGİLER
READ_LOGS Permission'ı
• READ_LOGS permission'ının kullanımı Android 4.1 itibarıyla
kaldırılmıştır.
• Android cihazlar belli bir miktardaki log verisini barındırırlar ve
bu veriler yenileri geldikçe ezilir.
• Cihaza fiziksel erişimi bulunan kişiler USB Debugging Enabled
olmak koşuluyla loglara erişebilirler.