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.

Berkay Vural |

21.12.2023

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.

 

Sertifika Kod Hatası

 

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.

 

apktool kaynak koda dönüştürme

 

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

 

 

SHA256 hash algoritma

 

Public Key’in SHA256 değeri

 

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.

 

mobil apktool kaynak kodu

 

uber-signer kaynak kodu imzalama

 

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.

 

mobil yükleme başarılı

 

logcat bilgiler hatalı uyarısı

 

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 
 

Berkay Vural |

21.12.2023

Yorumlar