Herkese merhaba,
Mobil uygulamaların güvenliği günümüzde büyük bir endişe kaynağı haline geldi. Bu alandaki güvenlik zafiyetlerinin tespit edilmesi ve çözülmesi gün geçtikçe daha fazla önem kazanıyor. Özellikle Android mobil uygulamalar, milyonlarca kullanıcıya hizmet verirken aynı zamanda siber tehditlere karşı da savunmasız hale gelebiliyor. Bu yazıda, Android uygulamalarda güvenlik açıklarını bulma ve değerlendirme sürecinde kullanılan temel pentest araçlarına odaklanacağız. Pentest araçları, hem geliştiricilerin hem de güvenlik uzmanlarının, potansiyel riskleri belirlemesinde ve uygulama güvenliğini sağlamasında büyük bir rol oynuyor. Şimdi, Android uygulamalarda pentest için kullanılan bu araçları ve ortamı giriş seviyesinde inceleyelim.
Pentest Ortamı ve Araçlar
Temel Kavramlar
Apk
Android uygulamaları yüklemek ve dağıtmak için kullanılan bir dosya formatıdır. apk dosyalarını rar/zip dosyası gibi açabiliriz. Örnek bir apk dosyasının uzantısını zip olarak değiştirdikten sonra içeriği aşağıdaki gibi gözükecektir.
Dex
Uygulama kodları derlendikten sonra .class dosyaları haline getiriliyor. .class dosyalarının ART (Android Run Time) tarafından kullanılabilmesi için .dex formatına dönüştürülmeleri gerekmektedir. dex dosyaları içerisinde dalvik byte kodları bulunuyor.
.smali
dex dosyalarında bulunan byte kodların daha okunabilir bir hale getirilmesini sağlar.
int x = 42 // java kodu
13 00 2A 00 // hex kod
const/16 v0, 42 // smali
jks
Android uygulamalarını tekrar imzalamak için kullanılacak dosyadır.
cer/crt
Android cihazlarda kurulacak sertifika dosyalarıdır.
Pentest Araçları
cmd
Windows işletim sistemlerinde kullanılan bir komut satırı arayüzüdür.
adb
Android cihaz veya emulator ile iletişim kurmamızı sağlayan çok yönlü bir komut satırı aracıdır.
…\sdk\platform-tools altında adb.exe olarak bulunur.
apktool
Apktool, Android apk dosyalarını recompile, decompile etmek için kullanılan bir araç.
https://bitbucket.org/iBotPeaches/apktool/downloads/
apksigner
Değişiklik yaptığımız apk dosyasını imzalamak için kullanılır.
JADX
Dex dosyalarının java dosyalarına dönüştürülmesinde kullanılan bir araç. apk dosyasını doğrudan bu araçta açarak kodları inceleyebiliriz.
https://github.com/skylot/jadx
CyberChef
Şifreleme işlemleri, sıkıştırma, decimal/ascii/hex dönüştürücü gibi birçok özelliği bulunan ve bu işlemleri bir arada yapmaya olanak sağlayan bir web uygulaması. Aşağıdaki adresten indirebilirsiniz.
Frida
Bypass/Hook işlemleri için kullanılan bir araç. Yazdığımız script’ler ile çalışma anında kodları manipüle etmemize imkan sağlıyor. Dinamik analiz sırasında sıkça kullanılır. Aşağıdaki linkten detaylara bakabilirsiniz.
Frida’yı kullanabilmek için hem bilgisayarımızda hem de hedef cihazda bazı kurulumlar ve ayarlamalar yapmamız gerekecek. Öncelikle bilgisayara frida’yı kuralım.
Aşağıdaki komutu cmd ekranında çalıştıralım. pip kullanımı için bilgisayarınızda python kurulu olduğuna emin olun.
pip install frida-tools frida
Bilgisayar için kurulum işlemi bu kadar. Şimdi cihaz/emulator için kurulumları tamamlayalım. Öncelikle cihaz/emulator işlemcisine uygun frida-server dosyasını aşağıdaki linkten indirelim.
https://github.com/frida/frida/releases
Cihaz ayarları telefon hakkında bölümünden cihazınızın işlemci türünü öğrenebilirsiniz. Ayrıca aşağıdaki komutu da kullanabilirsiniz.
adb shell getprop ro.product.cpu.abi
İndirilen dosyayı cihazda/emulatorde /tmp dizinine atacağız ve çalıştıracağız.
adb push ..\frida\frida-server-16.1.5-android-x86_64 /data/local/tmp
adb shell
su
chmod +x /data/local/tmp/frida-server-16.1.5-android-x86_64
/data/local/tmp/frida-server-16.1.5-android-x86_64
Artık frida’yı kullanabiliriz.
Frida, hooking için Java Script API sunuyor. Yazılan JS kodları frida-server tarafından runtime anında ilgili process’e enjekte ediliyor. Böylelikle ilgili metodu hem analiz hem manipüle edebiliyoruz. Hook gerçekleştireceğimiz uygulamayı açtıktan sonra aşağıdaki komutu düzenleyerek çalıştırabiliriz.
frida -U -l ’hook_script_dosyası.js’ ‘process_adı’
Android Cihaz
Çalışmaları gerçekleştirebileceğimiz bir Android cihazımızın olması gerekiyor. Emulator veya gerçek cihaz kullanabiliriz. Bu cihazların root’lu olması gerekiyor.
Burp Suite
Web proxy sunucusu işlevi gören bir pentest aracı. OSI referans modelinde uygulama katmanında çalışır. Network trafiğini incelemek için kullanılan bir araç. Aşağıdaki linkten indirebilirsiniz.
Bilgisayarda burp kurulumunu ve ayarları tamamlayalım. Trafiği dinleyebilmek için proxy ayarlarının yapılması gerekiyor. Burp açıldıktan sonra Proxy -> Proxy Settings adımlarıyla ilerleyelim ve IP – port ayarlarını yapalım. Burada port alanına dinlemek istediğimiz port numarasını yazalım. Örn. 8081. Bu port numarasını Android cihazımızda proxy ayarlarında kulllanacağız. Bind to address -> All interface seçelim. Şekil 2’de ip ve port ayarlarının nasıl yapıldığını görebilirsiniz.
Şekil 2. Burp Suite IP/Port ayarları
Android cihazın proxy ayarlarında kullanacağımız için bilgisayarın Ip adresine bakalım. cmd ekranında ipconfig yazarak ip bilgisini öğrenebilirsiniz. Bilgisayar tarafında ayarlarımız bu kadar. Bilgisayar ve android cihazın aynı ağda olduğundan emin olun.Şimdi Android cihazdaki ayarlamaları yapalım.
Arayüzler cihaz ve versionlara göre farklılık gösterebilir ama yapılan işlemler hepsinde aynı olacaktır.
Wifi ayarları ekranında düzenlemeyi açalım ve aşağıdaki bilgileri dolduralım.
- Proxy -> Manual
- Proxy Hostname ->192.168.1.39 (bilgisayarın ip adresi)
- Proxy Port -> 8081 (Burp Suite proxy ayarlarında yazdığımız port numarası)
Proxy ayarlarını yaptıktan sonra wifi kapat/aç yapalım. Daha sonra tarayıcıda http://burp adresine gidelim.
‘CA Certificate’ butonuna basarak sertifikayı indirelim. Şekil 3’te sertifika kurulum adımlarını görebilirsiniz.
Şekil 3. Sertifika kurulum adımları
İndirilen sertifikanın uzantısını .cer veya .crt olarak değiştirelim ve sertifikayı kuralım.
Sertifikayı kurduktan sonra tarayıcıda “android” anahtar kelimesini aratalım. Bilgisayarımızda Burp Suite arayüzünde cihazın network tarfiğini artık görebiliyorsak kurulumları başarıyla tamamlamış demektir. Şekil 4’te ağ trafiğinin içeriğini görebilirsiniz.
Ghidra
NSA tarafında geliştirilen ücretsiz, açık kaynak tersine mühendislik disassembler aracı. Binary kodları analiz etmek için kullanılır. Biz android uygulamalarda yüklenen native kütüphaneleri analiz etmek için kullanacağız. Herhangi bir kurulum yok. Doğrudan dosyayı çalıştırmak yeterli olacaktır. Aşağıdaki linkten indirebilirsiniz.
Şekil 5’te Ghidra arayüzünü görebilirsiniz.
Şekil 5. Ghidra arayüzü
Ghidra ile benzer amaçlar için kullanılan bir başka araç ise ücretli IDA Pro (https://hex-rays.com/ida-pro/). Göz atmak isteyebilirsiniz.
Tablo 1’de pentest araçlarını ve özelliklerini özet olarak görebilirsiniz.
Araç | Özellik |
cmd | Komut arayüzü |
adb | Cihaz üzerinde işlem yapılması için gerekli komut satırı aracı |
apktool | Decompile/Recompile aracı |
apksigner | Apk imzalama aracı |
JADX | Kaynak kodu java formatında gösteren araç |
CyberChef | Hex/ascii dönüştürücü, şifreleme vb. işlemler için kullanılan araç |
Frida | Dinamik analiz için kullanılan bypass/hook aracı |
Burp Suite | Ağ trafiğini dinlemek için kullanılan araç |
Ghidra | Disassembler aracı |
Sonuç
Android uygulamaların pentest ortamı hakkında temel seviyede bilgi sahibi olduk. Temel seviyede ele aldığımız pentest araçları, uygulama güvenliğini sağlama yolculuğunda ilk adımları atmak için önemli bir başlangıç noktası sunuyor. Uygulama güvenliğini artırmak için, bu araçlar sayesinde geliştiriciler, erken aşamalardan itibaren potansiyel riskleri tespit edebilir ve bu zayıf noktaları güçlendirecek önlemler alabilirler. Bu araçların örnek uygulama üzerinde kullanımını daha detaylı incelemek isterseniz aşağıdaki linki ziyaret edebilirsiniz.