Android SSL Pinning Bypass Nedir ve Nasıl Yapılır

Android güvenliği konusunda okları sıkça üzerine çeviren ve siber güvenlik uzmanları tarafından devamlı olarak üzerine düşülen bir konulan SSL Pinning ile ilgili bu yazımda ne olduğunu ve nasıl yapıldığını kısaca anlatmak istiyorum.

SSL Pinning Nedir?

Certificate Pinning olarakda adlandırabileceğimiz SSL Pinning, esasında bir güvenlik önlemi sistemidir. SSL tokalaşması ardından olası güvenlik tehtidlerine, örneğin ortadaki adam saldırısı gibi bir çok risk faktörüne karşı sunucu sertifikalarını tekrar tekrar doğrulayan bir siber güvenlik tekniğidir.

SSL Pinning için uygulanabilir olan iki ayrı yol vardır. Bunlar Sertifika sabitleme ve Public Key sabitleme
Sertifika Sabitleme : “Sertifika sabitlemede, geliştirici SSL sertifikasının bazı bayt kodlarını uygulama koduna kodlar. Uygulama sunucuyla iletişim kurduğunda, bir sertifikada aynı bayt kodunun bulunup bulunmadığını kontrol eder. Varsa, uygulama sunucuya bir istek gönderir. Bayt kodu eşleşmezse bir SSL sertifikası hatası atar. Bu teknik, bir saldırganın kendi imzasını taşıyan sertifikasını kullanmasını engeller.”
Public Key Sabitleme : “Bir müşteri bir web sitesini ziyaret ettiğinde Public Key sabitlemede, sunucu public key değerini istemci (müşterinin) tarayıcısına sabitler (enjekte ederek). İstemci aynı web sitesini yeniden ziyaret ettiğinde, sunucu bağlantının bütünlüğünü kontrol etmek için public keyi tanımlar. Bu teknik ayrıca bir saldırganın kendinden imzalı sertifikasını kullanmasını da önler.

SSL Pinnig Bypass

Android uygulamalarının web servisi çağrılarını izlemek veya fuzzing türü işlemler yapabilmek için Burpsuite yada benzeri bir proxy tool ile işlem çağrılarını yakalamak gereklidir. Buraya kadar herşey istediğimiz gibi ancak bu hacking method işlevsilliğini SSL Pinning karşısında yitiriyor. Bu durumda ise SSL Pinning Bypass dediğimiz ikincil yönteme başvurmamız gerekiyor. Yapacağımız Sertifika Sabitleme Bypass işlemi için toplam dört ayrı yol var. Bunlar;

  • Custom Sertifika Ekleme
  • Gömülü Sertifikanın üzerine yazmak
  • Frida ile müdahale
  • Custom Sertifika Doğrulama Kodunun Reverse Edilmesi

Sözünü ettiğimiz bu dört yöntem, güvenlik açıklarına karşın geliştirilen önlemlerin güvenlik açığının bulunması şeklinde oluşmaktadır. Şimdi ise uygulama adımlarını görelim.

Frida ile SSL Pinning Bypass

Bu yönyem için bazı hack tool yazılımlarıına ihtiyacımız olacak, Linux cihazları için ilgili komutları bırakıyorum :

adb -  $ sudo apt-get install android-tools-adb
Frida - $ pip3 install frida-tools
Frida Server - https://github.com/frida/frida/releases adresinden mobil cihazın mimarisine uygun  sürüm
Rootlu bir android cihaz ya da genymotion. Bu uygulamada Android 8.0 sürümü API 26 kullanılmıştır.

Sıradaki adımda yapmanız gereken şey, proxy ayarlarını yapmak olacak. Bunun için Burpsuite üzerinde proxy sekmesini açın ardından options kısmına gelin ve add diyin. Bu bölümden proxy listenerinizi ayarlayın. Girdiğiniz port üzerinden istediğiniz istediğiniz bir interface dinlenebilir. Aşağıda vereceğim örnekde All interface olarak seçili gözükmektedir.

Sıradaki adıma geçtiğimizde yapmanız gereken işlem; android cihazınızın wifi ayarlarına girin ve bağlı olduğunuz wierless ağa basılı tutarak gelişmiş ayarlara geçin ardından proxy ekleme bölümüne gelin. Bu kısımda girmeniz gereken bilgiler Brupsuite programının açık olduğu bilgisayarın IP adresi ve listener girdiğiniz kısımdaki port numarası.

Proxy ayarlarını hallettiğinizi varsayarak sıradaki adıma geçiyorum. Android cihazınızdan herhangi bir tarayıcıyı uygulamasını açın ve adres çubuğuna burp yazarak ilerleyin. CA Certificate butonuna basın ve burp sertifikasını indirin ancak bunu yaparken .cer uzantısında olup olmadığına dikkat edin.

Buraya kadar herşeyi eksiksiz yaptıysanız eğer android cihazınız üzerinden gerçekleşen istekler Burpsuite üzerinden yönlendirilecektir. Ancak burada Twitter uygulaması örneği ile yaptığımız denemede SSL Pinning kaynaklı bir hata alacağız bunu bıraktığım örnekte de göreceksiniz.

Bu sorunu aşmak için Bypass dediğimiz işlemi yapmamız gerekiyor ve yazımızın can alıcı kısmı burada başlıyor. Frida hack aracının Android’e frida-server sürümünü adb ile cihazın içine atıyoruz.
Bunun için “ $ adb connect 192.168.101.101:5555 “ komutu ile mobil cihaza Android Debug Bridge ile bağlanıyoruz. Daha sonrasında ise “ adb push frida-server-12.9.2-android-x86 /data/local/tmp “ komutu ile kopyalama işlemi yapıyoruz.

Şimdi ise shell ekranına geçmek için “ $ adb shell “ komutunu giriyoruz ardından ilgili izinleri sağlamak için “ $ chmod 755 frida-server-12.9.2-android-x86 “ komutunu çalıştırıyoruz ve Frida çalışmaya hazır olacaktır. Frida’yı çalıştırarak sıradaki adıma geçebilirsiniz.

Frida serverin sorunsuz çalışıp çalışmadığını kontrol etmek için “frida-ps –U” komutu ile Android cihazınızdaki işlemleri listeleyin.

Eğer buraya kadar sorunsuz gelebildiyseniz Burpsuite programını açın ve SSL Pinning için kullanılacak olan özel sertifikayı indirin. Burpsuite üzerinde Proxy menüsü altında bulunan Options menüsünde “ Import / export CA Certificate “ seçeneği ile sertifikayı export edebiliriz.

Şimdi ise dikkat etmeniz gereken birşeyden bahsedeceğim. sertifika isminin “ cert-der.crt “ olarak ya da kullanılacak ssl pinning bypass scriptinde belirlenmiş sertifika ismi ile aynı olmasına dikkat edin aksi taktirde sorun yaşayacaksınız.

Sertifikayı export ettikten sonra “ $ adb push cert-dert.crt /data/local/tmp “ komutu ile frida server’ın bulunduğu dizine sertifikayı kopyalıyoruz.

Kullanılacak olan ssl pinning scripti Frida’nın resmi sitesi üzerinde verilmiş olan komut ile uzaktan çalıştırılabilir ya da scripti “.js” formatında kaydedip kullanabilirsiniz. Buradan(https://codeshare.frida.re/@pcipolloni/universal-android-ssl-pinning-bypass-with-frida/) ulaşabilirsiniz.
Bypass işlemini gerçekleştirmek için aşağıdaki örnek komutu kullanarak hedef uygulamayı bypass ediyoruz.

/// $ frida -U -f <your_application_package_name> -l <path_to_fridascript.js_on_your_computer> --no-paus

Bypass edilmiş Twitter direk açılacaktır. İlk olarak bir deneyin derim bunun için Login ekranında gerekli girdileri yaparak, burpsuite üzerinde “Intercept On”  durumundayken “Log In”  butonuna basalım ve isteğin yakalanıp yakalanmadığını kontrol edelim.

Böylelikle ssl pinning bypass işlemini başarıyla gerçekleştirmiş olduk. Bundan sonra uygulama içerisinde yapılan isteklerin herbiri proxy üzerinden geçecek ve “ HTTP History “ sekmesinden görüntülenebilecektir.

Frida yöntemi bazı platformlarda çalışmaya bilir örnek vermek gerekir ise Facebook. Bu gibi platformlarda diğer SSL Pinning Bypass yöntemleri kullanılır eğer bu yazımıza yeterli ilgi olduğu taktirde farklı yöntemleride ele akmak isterim.