Frida Dasar: Alat Sakti Untuk Pentester
Daftar Isi
Apa Itu Frida?#
Frida adalah toolkit instrumentasi dinamis yang memungkinkan pengembang, reverse engineer, dan peneliti keamanan untuk menyuntikkan script mereka sendiri ke dalam proses aplikasi yang sedang berjalan. Dengan Frida, Anda dapat mengamati dan memodifikasi perilaku aplikasi secara real-time tanpa perlu mengubah kode sumbernya. Toolkit ini mendukung berbagai platform, termasuk Windows, macOS, Linux, iOS, Android, FreeBSD, dan QNX, sehingga memberikan fleksibilitas tinggi dalam analisis dan pengujian aplikasi.
Salah satu fitur utama Frida adalah kemampuannya untuk melakukan hooking pada fungsi-fungsi tertentu dalam aplikasi, memungkinkan Anda untuk memantau panggilan fungsi, memeriksa dan mengubah parameter yang diteruskan, serta memodifikasi nilai pengembalian. Hal ini sangat berguna dalam reverse engineering untuk memahami bagaimana suatu aplikasi beroperasi, mengidentifikasi potensi kerentanan keamanan, atau bahkan mem-bypass mekanisme perlindungan tertentu. Selain itu, Frida menyediakan API yang kaya untuk scripting, yang memungkinkan pembuatan alat khusus untuk kebutuhan analisis tertentu.
Frida juga menawarkan alat command-line seperti frida-trace, yang memudahkan proses tracing fungsi secara interaktif. Dengan frida-trace, Anda dapat dengan cepat mengidentifikasi dan memantau fungsi-fungsi yang relevan dalam suatu aplikasi tanpa perlu menulis script dari awal. Kemampuan ini mempercepat proses analisis dan memungkinkan peneliti untuk dengan mudah mengamati perilaku aplikasi dalam berbagai skenario.1
Kapan Kita menggunakan Frida?#
Frida adalah alat yang sangat berguna dalam berbagai skenario, terutama dalam analisis keamanan dan rekayasa balik aplikasi. Baik itu aplikasi iOS, Android, maupun Desktop. Berikut beberapa contoh kasus di mana Frida dapat diterapkan:
1. Bypass Proteksi Aplikasi
Banyak aplikasi menerapkan mekanisme proteksi seperti certificate pinning untuk mencegah serangan man-in-the-middle. Dengan Frida, Anda dapat melakukan hooking pada fungsi yang memeriksa sertifikat dan memodifikasinya agar selalu menerima sertifikat yang tidak tepercaya. Hal ini memungkinkan pengujian keamanan lebih lanjut tanpa harus memodifikasi aplikasi secara langsung.
2. Analisis Malware
Dalam analisis malware, Frida memungkinkan peneliti untuk memantau dan memodifikasi perilaku kode berbahaya secara real-time. Dengan menyuntikkan script ke dalam proses malware, peneliti dapat mengamati aktivitas mencurigakan, seperti akses file atau jaringan, dan memahami cara kerja malware tersebut tanpa menjalankannya dalam lingkungan yang sepenuhnya tidak terkendali.
3. Pengujian Aplikasi Mobile
Frida sangat berguna dalam pengujian aplikasi mobile, terutama untuk mem-bypass mekanisme keamanan seperti deteksi jailbreak atau root. Dengan memodifikasi fungsi yang memeriksa status perangkat, penguji dapat mengakses fitur aplikasi yang biasanya dibatasi, sehingga memungkinkan pengujian yang lebih menyeluruh terhadap potensi kerentanan.
4. Debugging Aplikasi Tanpa Source Code
Ketika source code tidak tersedia, debugging menjadi tantangan. Frida memungkinkan developer untuk menyuntikkan script debugging ke dalam aplikasi yang sedang berjalan, memantau panggilan fungsi, dan memodifikasi parameter atau nilai pengembalian. Ini memfasilitasi pemahaman alur kerja aplikasi dan identifikasi bug tanpa akses ke kode sumber.
5. Evaluasi Keamanan Perangkat IoT
Perangkat Internet of Things (IoT) sering kali memiliki keterbatasan dalam debugging dan analisis. Dengan Frida, peneliti dapat menyuntikkan script ke dalam proses yang berjalan pada perangkat IoT, memungkinkan analisis perilaku perangkat, identifikasi kerentanan, dan pengembangan patch keamanan yang sesuai.
Dalam semua kasus ini, Frida memberikan fleksibilitas dan kontrol yang diperlukan untuk menganalisis dan memodifikasi perilaku aplikasi secara efektif, menjadikannya alat yang tak ternilai dalam bidang keamanan dan rekayasa balik.
Frida Hooking#
hooking adalah teknik yang memungkinkan Anda untuk mencegat dan memodifikasi eksekusi fungsi atau metode dalam aplikasi yang sedang berjalan. Dengan hooking, Anda dapat memantau panggilan fungsi, mengubah parameter yang diteruskan, atau bahkan mengubah nilai yang dikembalikan oleh fungsi tersebut. Frida menyediakan API yang memudahkan proses ini, memungkinkan Anda untuk menyuntikkan script JavaScript ke dalam proses target dan mengimplementasikan logika hooking sesuai kebutuhan.
Misalnya, jika Anda ingin memantau penggunaan fungsi enkripsi dalam sebuah aplikasi, Anda dapat menggunakan Frida untuk hook fungsi enkripsi tersebut. Dengan demikian, setiap kali fungsi tersebut dipanggil, script Anda dapat mencatat data yang dienkripsi atau didekripsi, serta kunci yang digunakan. Hal ini sangat berguna dalam analisis keamanan untuk memahami bagaimana data diproses dan memastikan bahwa praktik enkripsi yang digunakan sudah sesuai standar.
Frida menggunakan modul bernama Interceptor
untuk melakukan hooking pada fungsi native. Dengan Interceptor
, Anda dapat menentukan alamat fungsi yang ingin di-hook dan menyediakan implementasi baru atau modifikasi yang akan dijalankan saat fungsi tersebut dipanggil. Selain itu, Frida juga menyediakan API untuk hooking metode dalam lingkungan Java atau .NET, sehingga Anda dapat melakukan hooking pada berbagai jenis aplikasi dan platform.
Frida Agent#
Frida Agent merujuk pada script JavaScript yang disuntikkan ke dalam proses target untuk melakukan instrumentasi dinamis. script ini memungkinkan Anda untuk mengintersep dan memodifikasi perilaku aplikasi secara real-time, seperti melakukan hooking pada fungsi tertentu, memantau aktivitas jaringan, atau menganalisis penggunaan enkripsi dalam aplikasi. Dengan Frida Agent, Anda dapat menulis logika khusus yang dijalankan di dalam konteks proses target, memberikan fleksibilitas tinggi dalam pengujian dan analisis aplikasi.
Untuk mempermudah pengembangan Frida Agent, komunitas telah menyediakan contoh dan template yang dapat digunakan sebagai dasar. Misalnya, repositori frida-agent-example di GitHub menyediakan contoh Frida Agent yang ditulis dalam TypeScript. Dengan memanfaatkan contoh ini, Anda dapat mempelajari struktur dan praktik terbaik dalam penulisan Frida Agent, serta menyesuaikannya dengan kebutuhan spesifik Anda.
Setelah menulis Frida Agent, Anda dapat menggunakan alat seperti frida-compile
untuk mengompilasi script tersebut menjadi format yang siap disuntikkan ke dalam proses target. Alat ini membantu mengelola dependensi dan memastikan bahwa script Anda dikompilasi dengan benar sebelum digunakan. Informasi lebih lanjut tentang frida-compile
dapat ditemukan di repositori resminya.
Analisis Aplikasi Android#
Sekarang kita akan mencoba menerapkan penggunaan frida untuk sebuah aplikasi Android. Bayangkan, Anda ingin melakukan intercept network request pada sebuah aplikasi Android menggunakan BurpSuite. Namun ternyata data yang dikirim dienkripsi menggunakan AES. Untuk menganalisis enkripsi AES dalam aplikasi Android menggunakan Frida di Windows, ikuti langkah-langkah berikut:
1. Persiapan
Instalasi Python dan Frida Tools: Pastikan Python 3.x terinstal di sistem Anda. Kemudian, instal Frida Tools dengan perintah:
pip install frida-tools
cek apakah
frida-tools
telah berhasil diinstall dengan menjalankan perintahfrida --help
pada terminal Anda. Jika berhasil terinstall, maka akan muncul output seperti ini:usage: frida [options] target positional arguments: args extra arguments and/or target options: -h, --help show this help message and exit -D ID, --device ID connect to device with the given ID -U, --usb connect to USB device -R, --remote connect to remote frida-server -H HOST, --host HOST connect to remote frida-server on HOST --certificate CERTIFICATE speak TLS with HOST, expecting CERTIFICATE --origin ORIGIN connect to remote server with “Origin” header set to ORIGIN --token TOKEN authenticate with HOST using TOKEN --keepalive-interval INTERVAL set keepalive interval in seconds, or 0 to disable (defaults to -1 to auto-select based on transport) --p2p establish a peer-to-peer connection with target --stun-server ADDRESS set STUN server ADDRESS to use with --p2p --relay address,username,password,turn-{udp,tcp,tls} add relay to use with --p2p -f TARGET, --file TARGET spawn FILE -F, --attach-frontmost attach to frontmost application -n NAME, --attach-name NAME attach to NAME -N IDENTIFIER, --attach-identifier IDENTIFIER attach to IDENTIFIER -p PID, --attach-pid PID attach to PID -W PATTERN, --await PATTERN await spawn matching PATTERN --stdio {inherit,pipe} stdio behavior when spawning (defaults to “inherit”) --aux option set aux option when spawning, such as “uid=(int)42” (supported types are: string, bool, int) --realm {native,emulated} realm to attach in --runtime {qjs,v8} script runtime to use --debug enable the Node.js compatible script debugger --squelch-crash if enabled, will not dump crash report to console -O FILE, --options-file FILE text file containing additional command line options --version show program's version number and exit -l SCRIPT, --load SCRIPT load SCRIPT -P PARAMETERS_JSON, --parameters PARAMETERS_JSON parameters as JSON, same as Gadget -C USER_CMODULE, --cmodule USER_CMODULE load CMODULE --toolchain {any,internal,external} CModule toolchain to use when compiling from source code -c CODESHARE_URI, --codeshare CODESHARE_URI load CODESHARE_URI -e CODE, --eval CODE evaluate CODE -q quiet mode (no prompt) and quit after -l and -e -t TIMEOUT, --timeout TIMEOUT seconds to wait before terminating in quiet mode --pause leave main thread paused after spawning program -o LOGFILE, --output LOGFILE output to log file --eternalize eternalize the script before exit --exit-on-error exit with code 1 after encountering any exception in the SCRIPT --kill-on-exit kill the spawned program when Frida exits --auto-perform wrap entered code with Java.perform --auto-reload Enable auto reload of provided scripts and c module (on by default, will be required in the future) --no-auto-reload Disable auto reload of provided scripts and c module
Instalasi Android Debug Bridge (ADB): Unduh dan instal ADB dari situs resmi Android. Tambahkan direktori ADB ke variabel PATH sistem Anda untuk akses mudah melalui command prompt.
2. Menyiapkan Frida Server di Perangkat Android
Identifikasi Arsitektur Perangkat: Hubungkan perangkat Android Anda dan jalankan:
adb shell getprop ro.product.cpu.abi
Ini akan menampilkan arsitektur CPU perangkat (misal, arm64-v8a).
Unduh Frida Server: Kunjungi halaman rilis Frida dan unduh versi Frida Server yang sesuai dengan arsitektur perangkat Anda.
Transfer dan Jalankan Frida Server:
adb push frida-server /data/local/tmp/ adb shell cd /data/local/tmp/ chmod +x frida-server ./frida-server &
Perintah di atas akan menyalin Frida Server ke perangkat, mengubah izin agar dapat dieksekusi, dan menjalankannya di latar belakang.
3. Mengidentifikasi Fungsi Enkripsi AES dalam Aplikasi
Analisis Statis: Gunakan alat seperti APKTool untuk mendekompilasi APK dan mencari penggunaan kelas
javax.crypto.Cipher
yang mengindikasikan enkripsi AES.Analisis Dinamis dengan Frida: Gunakan script Frida untuk memonitor inisialisasi objek
Cipher
dan mode operasinya.
4. Membuat dan Menjalankan script Frida untuk Hooking
script JavaScript untuk Hooking:
Java.perform(function () { var Cipher = Java.use('javax.crypto.Cipher'); Cipher.init.overload('int', 'java.security.Key').implementation = function (mode, key) { var operation = mode === 1 ? 'Encryption' : 'Decryption'; console.log('[*] Cipher init for ' + operation); console.log(' Key: ' + key); return this.init(mode, key); }; Cipher.doFinal.overload('[B').implementation = function (data) { var result = this.doFinal(data); console.log('[*] Cipher.doFinal called'); console.log(' Input data: ' + data); console.log(' Result: ' + result); return result; }; });
script ini akan meng-hook metode
init
dandoFinal
dari kelasCipher
untuk mencatat informasi kunci dan data yang dienkripsi atau didekripsi.Menjalankan script dengan Frida:
frida -U -l your_script.js -f com.example.targetapp --no-pause
Gantilah
your_script.js
dengan nama file script Anda dancom.example.targetapp
dengan package name aplikasi target.
5. Menganalisis Output
Setelah menjalankan script, perhatikan output di terminal yang akan menampilkan informasi tentang kunci enkripsi dan data yang diproses. Analisis ini membantu memahami bagaimana enkripsi AES diterapkan dalam aplikasi dan memungkinkan identifikasi potensi kelemahan atau area untuk perbaikan.2
Karena saya bingung mau menulis apalagi untuk artikel kali ini, jadi saya cukupkan sampai sini aja. Saya akan mencontohkan langsung implementasinya untuk analisis aplikasi Android di lain artikel. Silahkan cek di tag #Frida atau Reverse Engineering. Silahkan tinggalkan komentar jika Anda ingin saya membahas mengenai artikel lainnya.