Frida ile Mobil Uygulama Güvenliği

Frida ile Mobil Uygulama Güvenliği: SSL Pinning Atlatma Senaryosu

Mobil uygulama güvenliği testleri (pentest), günümüzün birbirine bağlı dijital dünyasında kritik bir öneme sahiptir. Güvenlik uzmanları olarak, uygulamaların veri sızıntılarına, yetkisiz erişimlere ve diğer zafiyetlere karşı ne kadar dayanıklı olduğunu test etmekle yükümlüyüz. Bu süreçte karşılaştığımız en yaygın engellerden biri SSL Pinning (Sertifika Sabitleme) mekanizmasıdır.

Bu makalede, bir mobil uygulama güvenlik uzmanının, hedef uygulamadaki SSL Pinning mekanizmasını atlatmak ve ağ trafiğini analiz etmek için Frida aracını nasıl kullandığını adım adım inceleyeceğiz. Bu senaryo, Frida’nın dinamik enstrümantasyon (dynamic instrumentation) yeteneklerinin gücünü ve esnekliğini ortaya koyacaktır.

Senaryonun Temeli: Problem ve Hedef

Hedef Uygulama: “SecureBank” (com.securebank.app) adında varsayımsal bir finans uygulaması. Problem: SecureBank uygulaması, Man-in-the-Middle (MITM) saldırılarını önlemek için SSL Pinning kullanmaktadır. Bu nedenle, Burp Suite veya Charles Proxy gibi standart proxy araçları, uygulamanın ağ trafiğini yakalayamamaktadır. Uygulama, proxy’nin sahte sertifikasını (CA) tanımamakta ve tüm ağ isteklerini “Güvenlik Hatası” veya “Bağlantı Başarısız” diyerek sonlandırmaktadır. Uzmanın Görevi: SSL Pinning mekanizmasını Frida kullanarak çalışma zamanında devre dışı bırakmak, Burp Suite üzerinden tüm API trafiğini (giriş bilgileri, hesap hareketleri, API anahtarları) şifresiz olarak incelemek ve potansiyel zafiyetleri raporlamak.

SSL Pinning Nedir ve Neden Aşılması Gerekir?

SSL/TLS, istemci (mobil uygulama) ve sunucu (backend) arasındaki iletişimi şifreleyen standart protokoldür. Normalde, bir uygulama sunucunun sertifikasının güvenilir bir Sertifika Otoritesi (CA) tarafından imzalanıp imzalanmadığını kontrol eder. Ancak bir güvenlik uzmanı, kendi sahte CA’sını (örn. Burp CA) cihaza yükleyerek bu güven zincirini kırabilir ve trafiği deşifre edebilir.

SSL Pinning ise bu duruma karşı geliştirilmiş bir güvenlik önlemidir. Uygulama, “Sadece güvenilir bir CA tarafından imzalanman yeterli değil, aynı zamanda sunucunun sertifikasının tam olarak benim koduma gömülü olan şu sertifikayla (veya public key ile) eşleşmesi gerekiyor” der.

Bizim görevimiz, uygulamanın bu “eşleşme” kontrolünü yaptığı kodu bulmak ve onu manipüle etmektir.

Hazırlık Aşaması: Araçlar ve Ortam

Bu senaryo için aşağıdaki ortamın kurulu olduğunu varsayıyoruz:

  1. Test Cihazı: Root erişimine sahip bir Android cihaz (veya Android Emulator).
  2. Frida: Hem test cihazına kurulan frida-server hem de ana bilgisayara kurulan frida-tools (pip ile kurulur).
  3. Proxy Aracı: Burp Suite. Burp’ün proxy’si, cihazın Wi-Fi ayarlarında yapılandırılmış ve Burp CA sertifikası cihaza yüklenmiştir.
  4. Analiz Araçları: jadx-gui (APK’yı decompile edip Java kodunu incelemek için).

Adım 1: İlk Deneme ve Başarısızlık

Güvenlik uzmanı, Burp Suite’i ve proxy ayarlarını yapar. SecureBank uygulamasını açar. Giriş yapmaya çalıştığında, uygulama anında “Ağ bağlantısı kurulamadı” hatası verir. Burp Suite’in “Alerts” sekmesinde, uygulamadan gelen bağlantıların TLS el sıkışması (handshake) aşamasında başarısız olduğunu görür.

Bu, SSL Pinning’in aktif olduğunun açık bir kanıtıdır.

Adım 2: Statik Analiz (Ne Aradığımızı Bilmek)

Uzman, jadx-gui ile SecureBank.apk dosyasını açar. Amacı, hangi kütüphanenin veya yöntemin pinning için kullanıldığını tespit etmektir.

  • AndroidManifest.xml dosyasını inceler, özel izinlere veya kütüphane tanımlarına bakar.
  • Java kodları içinde CertificatePinner, OkHttp, TrustManager, checkServerTrusted, SSLSocketFactory gibi anahtar kelimeleri aratır.

Analiz sonucunda, uygulamanın popüler bir ağ kütüphanesi olan OkHttp kullandığını ve CertificatePinner sınıfı aracılığıyla bir pinning konfigürasyonu yaptığını keşfeder.

Adım 3: Frida ile İlk Müdahale (Evrensel Scriptler)

Frida, bu tür yaygın senaryolar için frida-codeshare adı verilen devasa bir script deposuna sahiptir. Uzman, ilk olarak bilinen evrensel bir SSL Pinning bypass script’ini dener.

universal-ssl-bypass.js dosyası, TrustManager gibi yaygın Android sınıflarını veya OkHttp‘nin CertificatePinner sınıfının check metodunu hooklamak üzere tasarlanmıştır.

Senaryo (A) – Başarı: Eğer uygulama standart bir kütüphane kullanıyorsa, bu script çalışır. Uzman, Burp Suite’e bakar ve SecureBank uygulamasının tüm API trafiğinin (JSON, tokenlar vb.) artık göründüğünü fark eder.

Ancak, daha ilginç olan senaryoya geçelim.

Senaryo (B) – Başarısızlık: Evrensel script çalışmasına rağmen uygulama hala ağ hatası verir. Bu, SecureBank geliştiricilerinin özel (custom) bir pinning implementasyonu yaptığını veya standart kütüphaneyi farklı bir şekilde kullandığını gösterir.

Adım 4: Derinlemesine Analiz ve Özel Frida Script’i

Uzman, statik analize (Jadx) geri döner. OkHttp‘nin standart CertificatePinner‘ını değil, kendi yazdıkları com.securebank.app.security.CustomTrustManager adında özel bir sınıfı SSLSocketFactory‘ye atadıklarını fark eder.

Bu özel sınıfın içinde checkServerTrusted adında kritik bir metod bulunur. Bu metod, Android’in javax.net.ssl.X509TrustManager arayüzünden (interface) gelir ve sertifika zincirini doğrulamakla yükümlüdür. Geliştiriciler bu metodu override ederek (ezerek) kendi pinning mantığını eklemiştir.

Hedef Bellidir: com.securebank.app.security.CustomTrustManager sınıfının checkServerTrusted metodunu bulup, içini boşaltmak veya her zaman “başarılı” döndürmesini sağlamak.

Uzman, bypass_securebank.js adında kendi Frida script’ini yazar:

Adım 5: Zafer ve Veri Analizi

Uzman, bu özel script ile Frida’yı tekrar çalıştırır:

frida -U -f com.securebank.app -l bypass_securebank.js –no-pause

Terminalde şu çıktıları görür:

[*] SecureBank SSL Pinning Bypass Script’i Başlatıldı…
[*] Hedef Sınıf: com.securebank.app.security.CustomTrustManager
[*] Hook’lar başarıyla yerleştirildi. Uygulama trafiğini dinleyebilirsiniz.

Uzman, SecureBank uygulamasında tekrar giriş yapmayı dener. Bu sefer:

  1. Uygulama hata vermez.
  2. Frida konsoluna anında şu mesaj düşer: [+] CustomTrustManager.checkServerTrusted(chain, authType) Hooklandı -> Bypass!
  3. Burp Suite’in “HTTP History” sekmesi, api.securebank.com adresine giden tüm isteklerle dolmaya başlar.

Artık uzman, uygulamanın tüm API trafiğini (kullanıcı adı/şifre içeren POST istekleri, hesap bakiyesini çeken GET istekleri, para transferi yapan PUT istekleri) şifresiz metin olarak görebilir.

Sonuç ve Raporlama

Frida sayesinde, uygulamanın özel SSL Pinning mekanizması çalışma zamanında başarıyla devre dışı bırakılmıştır. Uzman, Burp Suite ile yakaladığı trafik üzerinden yaptığı analizde, aşağıdaki gibi potansiyel zafiyetleri arayabilir:

  • Giriş bilgilerinin (şifre, token) yetersiz korunması.
  • API isteklerinde IDOR (Insecure Direct Object Reference) zafiyetleri (örn. /api/hesap/123 yerine /api/hesap/124 yazarak başkasının hesabını görebilme).
  • Gereksiz yere fazla veri dönen (Sensitive Data Exposure) API endpoint’leri.

Bu senaryo, Frida’nın neden mobil uygulama güvenlik testlerinde bu kadar güçlü olduğunu göstermektedir. Statik analizin (Jadx) yetersiz kaldığı, karmaşık ve özelleştirilmiş güvenlik önlemlerinin olduğu durumlarda, Frida bize çalışan uygulamanın hafızasına ve kod akışına doğrudan müdahale etme imkanı tanır. Bu, bir güvenlik uzmanı için “imkansız” denilen kapıları açan bir anahtardır.

Frida hakkında daha fazla bili istiyorsanız : Android | Frida • Birinci sınıf bir dinamik enstrümantasyon araç seti

Frida ile ilgili temel istiyorsanız : Frida ile Mobil Uygulama Güvenliği

About The Author

Reply