Frida

Öncelikli olarak Frida nedir? Frida dinamik kod araçlarından biridir, JavaScript betik dosyalarınızı veya kendi kitaplığınızı Windows, macOS, GNU / Linux, iOS, Android ve QNX üzerindeki yerel uygulamalara enjekte etmenize olanak tanır. Frida ayrıca Frida API'sı temeli üzerine inşa edilmiş bazı basit araçları bünyesinde barındırır. Bu araçları olduğu gibi kullanabilir, ihtiyaçlarınıza göre ayarlayabilirsiniz.

Kısaca bu örnekte Frida uygulamasını Android uygulamalarının davranış adımlarını değiştirmek için, SSL pinning ile, MiTM gerçekleştireceğiz ve bunu gerçek zamanlı çalışan bir uygulama üzerinde gerçekleştireceğiz.

Bilgi Notu:  Bu method HSTS(HTTP Strict Transport Güvenlik) mekanizması kullanan uygulamalarda başarılı olma imkanı yoktur. Twitter,Facebook, Paypal ve buna benzer uygulamalar üzerinde denerseniz büyük ihtimal başarısız olacaksınızdır. :) Fakat diğer Android uygulamalar üzerinde bu methodu deneyebilirsiniz.

Gereksinimler

  • pip
  • python 2.7
  • adb tools veya Android Studio
  • Burp Suite veya benzeri lokal proxy uygulaması
  • Rootlu Android Cihaz(gündelik kullandığınız telefonu root yapmayın!) veya Android emülatör. Unutulmaması gereken nokta emülatörü rootlu çalıştırabilmeniz için 'Google Play Sistem İmajı' yerine 'Google API Sistem imajı' seçmeniz gerekmektedir.

İlk olarak Frida uygulamasını bilgisayarımıza kuralım:

pip install frida-tools

Daha sonrasında frida-server uygulamasının çalışacağı Android donanım yapısını tespit etmeniz gerekmektedir.Kullanacağınız telefonda veya emülatörde usb debugger özelliğini aktif hale getirin. Bundan sonra frida-server'ın çalışacağı sistem mimarisini çözmemiz gerekmektedir. Bunu bulmak için sırasıyla şu komutları çalıştırmamız gerekmektedir(emulatör için):

adb -e  shell

ADB shell açıldıktan sonra aşağıdaki komutu çalıştırabiliriz. Bu komut çalıştığımız cihaz mimarisi hakkında bilgi verecektir (biz emülatörde x86_64 mimarisini seçtiğimiz için ekrana dönecek olan yazı x86_64 şeklindedir):

getprop ro.product.cpu.abi

Bu adımdan sonrasında frida-server uygulamasını destekleyen formatta indirmeniz gerekmektedir. Bu link üzerinden indirebilirsiniz.

Uygun mimaride olan frida-server dosyasını .xz dosyası içerisinden çıkartalım.

Linux tabanlı işletim sisteleri için bu komut:

tar -xJf frida-server-*.xz

daha sonrasında frida-server binary dosyamızı adb ile cihazımıza gönderelim

Öncelikli olarak cihazda root olalım:

adb root

Daha sonrasinda lokalimizden cihaza bağlanalım.

adb shell

Cihaza frida-server uygulamasını gönderelim.

adb push ./frida-server-12.6.13-android-x86_64  /data/local/tmp/

Bilgisayarımıza frida'yı pip komutuyla kurduktan sonra ve frida-server'ı cihazımıza yükledikten sonra aşağıdaki komutları sırasıyla çalıştırabiliriz. Burada unutulmaması gereken nokta frida-server uygulamasını çalıştırmadan önce SELinux'ı devre dışı şu komutla bırakalım:

setenforce 0

Dosyamıza çalıştırma yetkisi verelim:

chmod +x /data/local/tmpfrida-server-12.6.13-android-x86_64

Ve arkaplanda çalıştıralım

./data/local/tmp/frida-server-12.6.13-android-x86_64 &

Daha sonrasında kendi lokal terminal ekranından frida-ps -U komutunu çalıştırarak emülatör üzerinde çalışan uygulamaları görelim.

Örnek bir çalışan uygulamalar listesi

Burp Suite Lokal Proxy Ayarlanması

Şimdi lokalimizde çalışan Burp Suite uygulamasını açalım, emülatör kullanıyorsanız emülatör ayarlarından lokal proxy ayarlarınızı girebilirsiniz fakat gerçek bir telefonla çalışıyorsanız aynı kablosuz ağın üzerinden bağlanıp Android işletim sistemi ayarlar, kablosuz ağ ayarları üzerinden Proxy ayarlarını gerçekleştirebilirsiniz.

Burp Suite çalıştırdıktan sonra Burp Suite'in bize sağlamış olduğu sertifikayı indirmemiz ve cihaz veya emülatörde bu sertifikayı yüklememiz gerekmektedir.

Sağ üst köşede CA Certificate yazan yere tıklayarak sertifikamızı indirelim

Chrome tarayıcımızı açıp Burp'ün çalıştığı lokal IP adresimizi yazalım, örneğin 192.168.1.100:8080 giderek dosyayı indirip daha sonrasında açalım. Chrome üzerinden indirdiğimiz sertifika uzantısını değiştirmemiz gerekmektedir. cacert.der dosyasının ismini cacert.cer olarak değiştirelim.

Görselde olduğu gibi dosya uzantısını .cer yapalım

Şu ana kadar frida'yı,frida-server ve burp suite sertifikamızı başarıyla yükledik ve bundan sonra Mattia Vinci ve Maurizio Agazzini yaptığı SSL pinleme scriptimizi indirelim. Ve 30.satırda verilen SSL sertifikasinin telefondaki yerini tanımlamamız gerekmektedir. Github üzerinden dosyayı bilgisayarımıza js formatında kaydedelim ve aşağıdaki komutu çalıştıralım.

frida -U -l frida-ssl-skip.js --no-pause -f com.example.application

-l komutu kendi lokalimizde bulunan SSL'i devre dışı bırakan scriptin lokasyonunu belirtiyor

-f komutu cihaz üzerinde çalışan APK paket ismini belirtiyor(SSL atlatmak istediğimiz uygulama)

--no-pause uygulamanın çalışmasını durdurmadan başlatıyor bu komutu eklemediğimiz zamanlarda hata almanız uygulamanın kendini kapatması çok yüksek ihtimal.

Frida sayesinde MiTM yapabileceğimiz uygulamayı başarılı bir şekilde çalıştırdık

Başarılı bir şekilde SSL Pinning'imizi gerçekleştirdik. Bir sonraki yazımızda görüşmek üzere..

Kaynaklar:

https://www.notsosecure.com/pentesting-android-apps-using-frida/

https://android.jlelse.eu/hacking-android-app-with-frida-a85516f4f8b7

http://asvid.github.io/android-frida-hackinghttps://koz.io/using-frida-on-android-without-root/

https://www.codemetrix.net/hacking-android-apps-with-frida-1/