skip to content
Yupy Syntax

Bypass SSL Pinning

/ 7 min read

Last Updated:

Bypass SSL Pinning

Haii!! How are you?!!

Kali ini saya akan membagikan artikel tentang bagaimana cara Bypass SSL Pinning di Android Emulator Genymotion dengan Burp Suite. oke langsung saja.

Frida

Frida adalah sebuah tool dynamic instrumentation yang sangat berguna untuk melakukan debugging, tracing, dan memodifikasi aplikasi pada platform mobile dan desktop. Frida bekerja pada berbagai platform, termasuk Android, iOS, Windows, macOS, dan Linux. Pada artikel ini, saya akan memberikan panduan cara install Frida pada sistem operasi Kali Linux.

Sebelum kita memulai, pastikan sistem operasi Kali Linux yang kamu gunakan sudah di-update terlebih dahulu. Kita juga perlu menginstal Python dan pip. Untuk meng-update sistem operasi Kali Linux, jalankan perintah berikut di terminal:

Terminal window
sudo apt-get update
sudo apt-get upgrade

Untuk menginstal Python dan pip, jalankan perintah berikut:

Terminal window
sudo apt-get install python3
sudo apt-get install python3-pip

Setelah itu, kita bisa mulai menginstal Frida pada Kali Linux dengan mengikuti langkah-langkah di bawah ini:

  1. Install dependensi yang dibutuhkan

Pertama-tama, kita perlu menginstal beberapa dependensi yang dibutuhkan oleh Frida. Jalankan perintah berikut di terminal untuk menginstal dependensi tersebut:

Terminal window
sudo apt-get install build-essential git python3-dev libffi-dev libssl-dev
  1. Instal Frida

Setelah dependensi terinstal, kita bisa menginstal Frida. Terdapat dua cara untuk menginstal Frida, yaitu menggunakan pip atau mengunduh Frida secara langsung dari situs web resminya.

2.1 Instal Frida menggunakan pip

Untuk menginstal Frida menggunakan pip, jalankan perintah berikut di terminal:

Terminal window
sudo pip3 install frida

2.2. Instal Frida dengan mengunduh dari situs web resmi

Jika kamu ingin mengunduh Frida secara langsung dari situs web resminya, kamu bisa melakukan langkah-langkah berikut:

  1. Kunjungi situs web frida dan unduh Frida sesuai dengan sistem operasi dan arsitektur yang kamu gunakan. Misalnya, jika kamu menggunakan Kali Linux 64-bit, unduh file frida-server-x.x.x-linux-x86_64.tar.xz.
  2. Ekstrak file yang telah diunduh ke direktori yang kamu inginkan.
  3. Jalankan Frida dengan menggunakan perintah berikut:
Terminal window
./frida-server

Jika kamu menginstal Frida menggunakan metode kedua, pastikan bahwa file frida-server yang telah diunduh berada di direktori yang sama dengan direktori saat kamu menjalankan perintah di atas.

Setelah selesai menginstal, kamu bisa memeriksa apakah Frida sudah terinstal dengan baik atau tidak dengan menjalankan perintah berikut:

Terminal window
frida --version
alt text

Jika Frida sudah terinstal dengan baik, maka versi Frida akan ditampilkan di terminal.

Selanjutnya, download script yang akan digunakan di Codeshare Frida.

js
/*
Android SSL Re-pinning frida script v0.2 030417-pier
$ adb push burpca-cert-der.crt /data/local/tmp/cert-der.crt
$ frida -U -f it.app.mobile -l frida-android-repinning.js --no-pause
https://techblog.mediaservice.net/2017/07/universal-android-ssl-pinning-bypass-with-frida/
UPDATE 20191605: Fixed undeclared var. Thanks to @oleavr and @ehsanpc9999 !
*/
setTimeout(function(){
Java.perform(function (){
console.log("");
console.log("[.] Cert Pinning Bypass/Re-Pinning");
var CertificateFactory = Java.use("java.security.cert.CertificateFactory");
var FileInputStream = Java.use("java.io.FileInputStream");
var BufferedInputStream = Java.use("java.io.BufferedInputStream");
var X509Certificate = Java.use("java.security.cert.X509Certificate");
var KeyStore = Java.use("java.security.KeyStore");
var TrustManagerFactory = Java.use("javax.net.ssl.TrustManagerFactory");
var SSLContext = Java.use("javax.net.ssl.SSLContext");
// Load CAs from an InputStream
console.log("[+] Loading our CA...")
var cf = CertificateFactory.getInstance("X.509");
try {
var fileInputStream = FileInputStream.$new("/data/local/tmp/cert-der.crt");
}
catch(err) {
console.log("[o] " + err);
}
var bufferedInputStream = BufferedInputStream.$new(fileInputStream);
var ca = cf.generateCertificate(bufferedInputStream);
bufferedInputStream.close();
var certInfo = Java.cast(ca, X509Certificate);
console.log("[o] Our CA Info: " + certInfo.getSubjectDN());
// Create a KeyStore containing our trusted CAs
console.log("[+] Creating a KeyStore for our CA...");
var keyStoreType = KeyStore.getDefaultType();
var keyStore = KeyStore.getInstance(keyStoreType);
keyStore.load(null, null);
keyStore.setCertificateEntry("ca", ca);
// Create a TrustManager that trusts the CAs in our KeyStore
console.log("[+] Creating a TrustManager that trusts the CA in our KeyStore...");
var tmfAlgorithm = TrustManagerFactory.getDefaultAlgorithm();
var tmf = TrustManagerFactory.getInstance(tmfAlgorithm);
tmf.init(keyStore);
console.log("[+] Our TrustManager is ready...");
console.log("[+] Hijacking SSLContext methods now...")
console.log("[-] Waiting for the app to invoke SSLContext.init()...")
SSLContext.init.overload("[Ljavax.net.ssl.KeyManager;", "[Ljavax.net.ssl.TrustManager;", "java.security.SecureRandom").implementation = function(a,b,c) {
console.log("[o] App invoked javax.net.ssl.SSLContext.init...");
SSLContext.init.overload("[Ljavax.net.ssl.KeyManager;", "[Ljavax.net.ssl.TrustManager;", "java.security.SecureRandom").call(this, a, tmf.getTrustManagers(), c);
console.log("[+] SSLContext initialized with our custom TrustManager!");
}
});
},0);

Setelah itu, salin script yang terdapat pada link tersebut ke dalam notepad atau text editor lainnya dan simpan dengan nama SSLPinningBypass.js. alt text

Install ADB di Kali Linux

Pertama-tama, pastikan bahwa sistem Kali Linux Anda sudah diperbarui dengan repositori terbaru. Anda dapat melakukan ini dengan menjalankan perintah berikut di terminal:

Terminal window
sudo apt update

Setelah repositori diperbarui, Anda dapat menginstal ADB dengan menjalankan perintah berikut di terminal:

Terminal window
sudo apt install adb

Setelah instalasi selesai, Anda dapat memverifikasi apakah ADB telah berhasil diinstal dengan menjalankan perintah berikut di terminal:

Terminal window
adb version
alt text alt text

Untuk memungkinkan frida-client berkomunikasi dengan frida-server di perangkat Android. saya akan memberikan panduan tentang cara menginstal frida server pada perangkat android.

Langkah-langkah untuk menginstal frida server pada perangkat android:

Download dan Install Frida Server dari halaman Frida release. Pastikan kamu memilih versi Frida server yang cocok dengan arsitektur CPU dari virtual device Genymotion yang telah kamu buat.

alt text

Gunakan frida-server yang sesuai dengan tipe kernelnya. Untuk mengetahui tipe kernel nya masukan perintah:

Terminal window
adb shell getprop ro.product.cpu.abi
alt text

Setelah berhasil terunduh, taruh Frida server di direktori /data/local/tmp/ di virtual device kamu. Kamu bisa menggunakan command adb push untuk memindahkan Frida server ke direktori tersebut.

alt text
Terminal window
adb push frida-server /data/local/tmp/
alt text

Setelah berhasil diinstall, jalankan Frida server Buka shell adb dan jalankan command berikut untuk menjalankan Frida server:

Terminal window
adb shell "chmod 755 /data/local/tmp/frida-server"
alt text

Selanjutnya, langkah-langkah konfigurasi sertifikat Burp Suite pada perangkat Genymotion:

Export sertifikat Burp Suite melalui GUI Burp Suite. Buka Burp Suite dan buat sertifikat dengan mengklik tab Proxy dan memilih opsi Options. Pilih tab Import / Export CA Certificate.

alt text

Pada bagian Export, pilih opsi Certificate in DER Format. Kemudian klik tombol Next. Selanjutnya, pilih lokasi di mana sertifikat akan disimpan dan simpan dengan nama cert-der.crt.

alt text alt text

Pertama, kita perlu mengubah sertifikat Burp menjadi format PEM. Gunakan openssl untuk mengonversi DER ke PEM, lalu tampilkan subject_hash_old:

Terminal window
openssl x509 -inform DER -in Burp_cert.cer -out Burp_cert.pem
openssl x509 -inform PEM -subject_hash_old -in Burp_cert.pem |head -1
alt text

Kemudian, ganti nama file dengan hash keluaran dari perintah terakhir. Misalnya, jika hash adalah 9a5ba575, ganti nama file menjadi 9a5ba575.0:

Terminal window
mv Burp_cert.pem 9a5ba575.0
alt text

Selanjutnya kita kirim sertifikat Burp Suite ke dalam perangkat Android dengan ADB. Buka Command Prompt atau Terminal pada komputer Anda dan navigasikan ke direktori kerja Anda. Ketik perintah berikut untuk mengirim sertifikat ke perangkat Android Anda melalui adb. Upload dan pasang sertifikat .0:

Terminal window
# remount the system partition
adb remount
# Upload the certificate
adb push <cert>.0 /system/etc/security/cacerts/
# Change the certificate permissions
adb shell chmod 664 /system/etc/security/cacerts/<cert>.0
alt text alt text

Selanjutnya restart device, Setelah perangkat melakukan boot ulang, cari Pengaturan -> Keamanan -> Kredensial Tepercaya akan menampilkan Portswigger CA baru sebagai CA tepercaya sistem:

alt text

Selanjutnya modif proxy Burp suite, Agar Burp Suite dapat mengintersep traffic dari perangkat Android, maka perlu menambahkan alamat IP perangkat Android ke daftar Proxy Listeners pada Burp Suite. Untuk melakukannya, silakan pergi ke Tab Proxy -> Intercept -> Add.

alt text alt text

Untuk mengubah proxy pada jaringan perangkat Android menggunakan IP Localhost, ikuti langkah berikut:

  1. Buka menu Pengaturan pada perangkat Android
  2. Pilih opsi Wi-Fi
  3. Cari dan pilih SSID yang ingin diubah
  4. Tekan tombol Modifikasi Jaringan
  5. Pada opsi Proxy, pilih Manual
  6. Masukkan IP Localhost dan nomor port yang sesuai
  7. Simpan pengaturan yang telah diubah
alt text

Bypass SSL Pinning dengan Frida

Setelah melakukan proses instalasi, terkadang masih ada beberapa langkah tambahan yang perlu dilakukan agar aplikasi atau perangkat dapat berfungsi dengan baik. Namun demikian, setelah proses instalasi selesai dilakukan, masih terdapat kendala yang harus diatasi. Salah satu kendala tersebut adalah ketika traffic belum dapat diintersep karena Frida Server dan Script belum dijalankan pada perangkat atau emulator Android. Oleh karena itu, perlu dilakukan beberapa langkah tambahan untuk menjalankan Frida Server dan Script pada perangkat atau emulator Android agar dapat melakukan intercept pada traffic.

Traffic intercept dapat dilakukan dengan menjalankan Frida server dan menyuntikan script pada target aplikasi (contoh twitter). Untuk mengidentifikasi target aplikasi jalankan aplikasi target (contoh twitter) pada perangkat lalu masukan perintah Frida-ps –U –ai pada terminal atau command prompt. alt text

Berdasarkan instruksi tersebut, diperoleh PID dan nama proses, dalam contoh ini adalah Mifx dengan PID 4124 dan identifier com.mifxid.app Setelah mengetahui PID dan nama proses, langkah selanjutnya adalah menjalankan server Frida pada perangkat aplikasi dengan memasukkan perintah yang sesuai.

Terminal window
adb shell /data/local/tmp/frida-server-16.0.11-android-x86
alt text

Langkah selanjutnya adalah menyuntikkan script SSLpinningBypass.js ke dalam identifier target aplikasi agar sertifikat Burp Suite dapat dipercayai oleh target aplikasi. Hal ini dapat dilakukan dengan menjalankan perintah frida -U -f <identifier> -l <file_script> --no-auto-reload. Jika berhasil, target aplikasi akan secara otomatis dimuat ulang.

Terminal window
frida -U -f com.mifxid.app -l SSLpinningBypass.js --no-auto-reload
alt text