Hellawww now you see me again, Langsung lah ya pada kesempatan kali ini saya akan memberikan sebuah tutorial bagaimana caranya kalian melakukan SSL Pinning pada aplikasi, Yups mungkin juga udah banyak yang tau, tapi disini saya memberikan cara yang biasa saya pakai untuk melakukan SSL Pinning, Simak aja yups gimana step-by-stepnya dari yang paling simple sampai yang paling mager, Oh iya untuk part 1 ini saya menggunakan Injection Script dari frida hal-hal yang kalian butuh disini adalah:
Emulator ataupun Device
Android Debug Brige (ADB)
Frida Script & Server
Certificate & Burpsuite
Step pertama jika disini kalian sudah memiliki emulator dan devices, Untuk catatan disini emulator ataupun device kalian harus root, kalian bisa langsung menggunakan ADB untuk melakukan connection kedalam emulator ataupun devices
Lalu step kedua yang kalian perlu kalian tahu adalah kalian mencari tahu arm versi berapa yang device kalian gunakan, dan yang saya gunakan disini adalah armv8 atau x86_64. Karena ini untuk menyesuaikan frida yang kalian install dan kalian cukup menggunakan command :
adb shell getprop ro.product.cpu.abi
Setelah kalian mendownload kalian tinggal extract dan pindahkan saja menggunakan adb, kalian bisa command :
adb push namefile-server /data/local/tmp
adb shell chmod 777 /data/local/tmp/namefile-server
Nb: Change namefile with ur namefile
python -m pip install frida
python -m pip install objection
python -m pip install frida-tools
== OR ==
pip install frida
pip install objection
pip install frida-tools
Setelah kalian bisa melakukan hal diatas kalian bisa menginstall certificate Burpsuite terlebih dahulu di emulator, Caranya kalian buka burpsuite kalian lalu kalian pilih tab Proxy > Options > Import / Export CA Certificate dan kalian simpan dengan format *.der
openssl x509 -inform DER -in cacert.der -out cacert.pem
openssl x509 -inform PEM -subject_hash_old -in cacert.pem |head -1
mv cacert.pem 9a5ba575.0
adb remount
adb push 9a5ba575.0 /sdcard/
adb shell mv /sdcard/9a5ba575.0 /system/etc/security/cacerts/
adb shell chmod 644 /system/etc/security/cacerts/9a5ba575.0
adb reboot
Nb: change name cacert.der with ur filename save before whatever
Lalu kalian running frida-server kalian, kalian bisa menggunakan command:
adb shell /data/local/tmp/namefile-server &
frida-ps -Ua
Lalu kalian bisa download Injection Script Frida yang digunakan untuk melakukan injection script pada aplikasi, kalian bisa copy disini ataupun download disini dan simpan dengan format *.js :
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/cacert.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);
Mari kita coba test untuk aplikasi contoh yang saya gunakan disini adalah aplikasi twitter. Oh iya kalian harus membuka aplikasinya terlebih dahulu ya seperti yang dijelaskan diatas, Kalian bisa lihat bahwa dibagian Message bahwa "The client failed to negotiate a TLS connection" yang artinya kita tidak bisa melakukan intercept trafficnya pada proxy burpsuite, dan kita perlu melakukan Bypass dengan SSL Pinning
Setelah kalian tahu process package name yang sedang berjalan langkah selanjutnya adalah kalian harus command untuk menjalankan fridanya, Gimana kak cara commandnya? Gampang aja kalian cukup menggunakan command:
frida -U -f "IdentifierName" -l "filescript.js" --no-pause
Nb: Change IndentifierName and Filescript.js
Jika sudah dijalankan maka akan terlihat info di cmd ataupun terminal kalian bahwa frida sudah success melakukan Bypass SSL Pinning dan jika kalian lihat juga traffic pada aplikasi twitter success mengarah ke Burpsuite.
Gimana cukup mudah bukan? Oh iya untuk frida-server yang tadi sudah kalian jalankan kalian cukup minimaze karena jika itu diclose oleh kalian maka frida-server kalian akan mati dan kalian melakukan ini seperti awal lagi. Oke mungkin cukup sekian dan tunggu part 2 nya, Jika ada yang belum mengerti bisa komentar ya kak. Semoga bermanfaat and dont forget to share and see you next time byee~
Post a Comment
Post a Comment