Ada yang bertanya ke saya: bagaimana sih caranya mencari bug di aplikasi? Karena jawabannya tidak bisa ditulis singkat di chat, di tulisan kali ini saya akan berusaha menjawab pertanyaan itu.
Contents
Apa itu bug?
Kalau Anda disuruh mencari sebuah benda tapi tidak tahu benda itu seperti apa bentuknya maka Anda tidak akan bisa menemukannya (Contoh: tolong ambil logic analyzer di laci saya). Sama halnya dengan bug: pertama pahami dulu berbagai jenis bug yang ada, baru Anda bisa menemukannya.
Contoh-contoh bug web misalnya: SQL Injection, IDOR, XSS, dan command injection. Contoh bug aplikasi misalnya: buffer overflow. Selain tahu apa itu sebuah bug, kita juga perlu tahu bagaimana cara mengeksploitasinya.
Black box testing
Ini testing yang paling umum. Kita coba-coba berbagai input dengan harapan keluar suatu pesan error yang bisa menunjukkan kesalahan di sebuah program. Contoh kecil: jika ada input petik tunggal (‘) dan programnya menampilkan SQL error, maka kemungkinan ada bug SQL injection.
Tentunya coba-coba ini harus yang masuk akal. Ini biasanya tergantung pada: aplikasinya seperti apa, servernya memakai OS apa. Contoh: berusaha melakukan command injection dengan berbagai command Windows di server Linux maka tidak akan berhasil. Berusaha melakukan angular template injection di aplikasi yang tidak memakai Javascript juga tidak akan berhasil.
Intinya: meskipun ini adalah black box testing, yang sepertinya sekeda menebak-nebak, ada hal-hal masuk akal yang bisa kita coba. Jika kita ingin membeli suatu barang, kita bisa mencoba mengganti nilai pembelian, berusaha membypass proses pembayaran, dsb.
White box testing
Jika kita memiliki akses ke source code, maka kita bisa mencari bug dengan membaca source code aplikasinya. Source ini bisa didapat dari beberapa cara:
- Aplikasinya memang open source (contoh: berbagai aplikasi web seperti WordPress ada source codenya)
- Dari hasil dekompilasi (contohnya: berbagai game bisa didekompilasi)
- Dari bug lain (contoh: jika menemukan bug web untuk membaca sebuah file, maka bisa kita manfaatkan untuk membaca source code aplikasi)
Nah di sini kemampuan membaca source code diperlukan. Dengan adanya source code, kita bisa melihat alur program dan menentukan apakah sebuah input dicek atau tidak, dan apakah inputnya bisa dipakai untuk membypass sesuatu atau mengeksekusi apa yang seharusnya tidak boleh dieksekusi.
Memahami Tool
Untuk melakukan testing, kita perlu paham berbagai tool yang sesuai. Contohnya untuk testing aplikasi web, kita sebaiknya memakai intercepting proxy (seperti Burp atau Zaproxy). Dengan memakai tool tersebut, kita bisa mengganti request dari browser atau dari aplikasi baik desktop maupun mobile yang akan berkomunikasi dengan server di internet.
Untuk testing aplikasi mobile, keahlian mengekstrak package, melakuan dekompilasi diperlukan. Berbagai tools yang spesifik juga bisa dipakai (misalnya XPosed Framework di Android, atau Frida di berbagai OS lain).
Fuzzing
Untuk bug jenis tertentu, kita bisa memakai tools untuk melakukan fuzzing. Intinya adalah mencoba-coba berbagai input secara otomatis. Ini bisa diaplikasikan ke aplikasi web, atau bahkan aplikasi desktop (contohnya ada yang namanya AFL). Penggunaan fuzzer ini relatif mudah, tapi hasilnya tetap harus dipahami oleh orang yang memiliki skill.
Otomasi
Sebagian bug bisa ditemukan dengan menggunakan tool otomatis. Saya tidak akan membahas ini secara dalam. Intinya ada beberapa scanner aplikasi web yang bisa menemukan berbagai bug yang umum. Ada juga source code analyzer yang bisa menemukan berbagai masalah di source code.
Penutup
Mencari bug kadang mudah kadang sulit, tergantung program yang kita cari bugnya. Sebagian orang yang meretas web tidak mencari bug khusus, tapi biasanya yang terjadi seperti ini:
- ada yang menemukan bug di aplikasi tertentu (contoh: Drupal)
- ada yang membuat exploit untuk bug tersebut
- script kiddies menggunakan Google untuk mencari website yang memakai Drupal (dengan dorking, misalnya mencari “Powered By …”
- script kiddies mencoba exploit drupal pada website yang ditemukan
Selamat mencari bug.