Siber Güvenlik
Android SSL Pinning Bypass
SSL Pinning, mobil uygulamalarda güvenliği sağlamak için sıkça tercih edilen bir yöntemdir. Bazı yöntemlerle Android SSL Pinning Bypass uygulanarak mobil uygulamaların güvenlik kontrolleri atlatılmaya çalışılır. Bunun sonucunda uygulamaların güvenlik mekanizmaları etkisiz hale getirilir, kullanıcıların güvenliği riske atılabilir ve uygulamanın bütünlüğü bozulabilir. Bu yazıda Android SSL Pinning’in nasıl bypass edilebileceğine dair adımlara ulaşabilirsiniz.
SSL Pinning Nedir?
SSL pinning, bir cihazı X509 sertifikası veya genel anahtarıyla ilişkilendiren bir güvenlik işlemidir. Bu cihaz için bir sertifika ya da ortak anahtar tespit edildiğinde bunlar cihaz ile ilişkilendirilir veya sabitlenir. Birden fazla sertifika veya ortak anahtar kabul edilebilirse, tanıtılan kimlik, sertifika zincirindeki öğelerden biriyle eşleşmelidir. Bu işlemle birlikte uygulama sadece tanımlı ya da geçerli bir sertifikaya güvenmeye başlar. Mobil uygulama sızma testlerinde istekleri daha iyi incelemek adına kullanılan “proxy araçları” ile mobil cihazdan uygulama sunucusuna gönderilecek istekler “sertifika sabitleme” işlemi ile önlenebilir. Bu yazımda, belirtilen kontrol mekanizmasının atlatılabilmesi için gerçekleştirilebilecek işlemlerden birine değineceğim.
Android SSL Pinning Nasıl Bypass Edilir?
Ortam Cihazları/Araçları
Parrot (Saldırı cihazı) Genymotion (Android Emulator) Uber-signer/Jarsigner
Adb
Apktool
Adımlar
Hedef mobil uygulama Android cihaza yüklendikten sonra ( install test.apk ) sertifika kontrolünün gerçekleştiği giriş (login) ekranında terminal uzerinden ‘adb logcat’ komutunu çalıştırıp uygulamaya giden ve uygulamadan dönen cevaplar incelenir. Sertifikanın uygulama tarafından kabul edilecek sertifikalar arasında olmadığı ve bu nedenle login işleminin gerçekleşmediği görülür.
adb
PortSwigger
Peer certificate
Pinned certificates for
chain
apk
grep
sha256/
Peer
Bu aşamada “Peer certificate chain”olarak bahsedilen kısım uygulama sunucusuna Android tarafından gönderilen sertifika iken “Pinned certificates for” kısmında bulunan 5 adet sertifika ise uygulamanın mobil cihazdan beklediği ve kabul edeceği sertifikalar olacaktır.
Android Uygulamaya Decompile İşlemi
Uygulama sunucusunun kabul edeceği sertifikaların değiştirilebilmesi adına öncelikle dosyasının decompile (kaynak koda dönüştürme) işleminin gerçekleştirilmesi gerekmektedir. Bu işlem için ‘apktool’ kullanılabilir.
Uygulama kaynak kodu elde edildikten sonra hedefte bulunan 5 adet sertifikadan biri seçilip komutu ile dosya dizini içerisinde yazı dizisinin aranması gerekmektedir. Hedef sertifika değerini içeren dosya tespit edildikten sonra hedeflenen hash bilgisi Proxy aracına ait olan sertifika değeriyle değiştirilir. Logcat çıktısında certificate kısmında proxy aracına ait olan sertifikanın SHA256 hash bilgisi görülmektedir. Bu bilginin bulunmadığı durumlarda ise aşağıda yazılan komutlar ile aynı değer elde edilebilir.
Burpsuite Sertifikasinin Public Key'inin Elde Edilmesi
openssl x509 -inform der -in <Proxy Sertifikasi> -out
burp.pem
# Elde edilen Public Key'in SHA256 degerinin alinmasi
openssl x509 -in burp.pem -pubkey -noout | openssl rsa
-pubin -outform der | openssl dgst -sha256 -binary |
openssl enc -base64
Değiştirilmiş versiyonda bulunan kaynak kodu derlendiğinde Android cihaza yüklenmeden önce tekrar imzalanması gerekmektedir. Aksi takdirde derlenen uygulama Android cihaza kurulamayacaktır. Bu işlem icin ‘uber-signer’ aracı veya ‘jarsigner’ kullanılabilir.
Hedef uygulamanın imzalanıp kurulumu gerçekleştirildikten sonra aynı login fonksiyonuna istek gönderildiğinde logcat ve uygulama üzerinde gözlemlenen hata mesajlarının bulunmadığı gözlemlenmektedir.
Yukarıda anlatılan yöntem SSL Pinning kontrol mekanizmasının atlatılabilmesi için geçerli olan yöntemlerden sadece biridir. Bu şekilde, SSL Pinning kontrol mekanizmasını atlatarak sızma testi sürecine devam edebilirsiniz.
Referanslar
https://mailapurvpandey.medium.com/ssl-pinning-in-android- 90dddfa3e051
https://www.netspi.com/blog/technical/mobile-application- penetration-testing/four-ways-bypass-android-ssl-verification- certificate-pinning/
https://hojat-sajadinia.medium.com/bypass-okhttp- certificatepinner-on-android-9a45ad80a58b