Macam - Macam Fuzzing Tools Untuk Menemukan Bug Pada Aplikasi
Saat membuat aplikasi, pemrogram menghabiskan banyak waktu untuk mengantisipasi apa yang dibutuhkan pengguna dan bagaimana reaksi aplikasi mereka. Pemrogram terbaik tetap mengontrol menggunakan kode ketat sambil juga merencanakan kemungkinan apa pun, tetapi tidak ada yang dapat mengantisipasi setiap tindakan yang mungkin diambil pengguna. Di situlah alat fuzzing bisa sangat berguna.
Apa itu pengujian fuzz?
Pengujian fuzz adalah proses otomatis di mana mesin fuzzing mencoba mengirim sejumlah besar input yang tidak terduga, salah, atau hanya acak ke dalam aplikasi sehingga programmer dapat melihat bagaimana reaksinya. Mereka kemudian dapat mengkodekan respons yang sesuai yang akan melindungi integritas dan keamanan aplikasi sebelum disebarkan ke publik.
Alat fuzzing sangat berharga karena dapat menjawab ribuan pertanyaan jenis "bagaimana jika" tentang perilaku aplikasi dalam waktu yang relatif singkat. Misalnya, apa yang terjadi jika pengguna situs e-commerce memesan 20 miliar jaket bomber? Apakah situs mogok? Apakah itu menawarkan mereka diskon? Atau apakah itu hanya mencoba dan memproses pesanan yang tidak mungkin secara normal? Lalu apa yang terjadi jika pengguna memasukkan sesuatu seperti kode kupon yang valid tetapi di bidang input yang salah? Terakhir, bagaimana aplikasi akan bereaksi jika pengguna jahat memasukkan fungsi baris perintah, konten terenkripsi, perintah sistem operasi, atau kode mentah dalam bahasa yang sama dengan aplikasi? Mesin fuzzing yang baik dapat menjawab semua pertanyaan itu dan banyak lagi.
Bagaimana cara kerja alat fuzzing?
Fungsionalitas mesin fuzzing membantu menjelaskan mengapa begitu banyak yang ada. Ada beberapa mesin fuzzing komersial dan ratusan lainnya yang ditulis oleh programmer berbakat, yang telah dibagikan secara gratis di platform seperti GitHub. Beberapa mesin fuzzing mengirimkan sekumpulan informasi acak, sementara yang lain dengan hati-hati memeriksa aplikasi yang sedang mereka kerjakan dan mencoba memberikan masukan kontekstual tetapi tidak terduga. Akhirnya, fuzzing bukan hanya tentang input pengguna; itu berharga untuk menguji antarmuka yang dapat diprogram, seperti REST API.
Dalam kebanyakan kasus, tujuan alat fuzzing adalah untuk menghasilkan setidaknya beberapa data tak terduga yang diterima oleh parser perangkat lunak yang diuji sebagai valid. Kemudian dapat melaporkan bagaimana aplikasi bereaksi terhadap input yang tidak terduga namun berpotensi valid. Atau, input yang kabur mungkin (jackpot!) membuat crash program.
Fuzzer beroperasi menggunakan berbagai bahasa pemrograman. Beberapa dapat menangani sebagian besar bahasa komputer, dengan C, C++, Go, Rust, Python, Java, Kotlin, Scala dan Swift menjadi pilihan populer. Lainnya hanya beroperasi dengan aplikasi menggunakan satu bahasa, menjadi, misalnya, alat khusus untuk membantu programmer Python. Jadi, meskipun ada banyak pilihan, Anda harus berhati-hati agar mendapatkan fuzzer yang bekerja dengan bahasa aplikasi, program, atau perangkat keras yang ingin Anda uji.
Alat fuzzing teratas
Berikut ini adalah beberapa mesin fuzzing komersial dan gratis teratas saat ini. Kami mencoba menemukan alat fuzzing paling populer atau paling tinggi untuk diunggulkan. Namun, ada ratusan pilihan, jadi kami pasti melewatkan beberapa yang bagus. Tetapi daftar ini akan membantu siapa pun memulai ketika mencoba memilih mesin atau alat fuzzing yang bagus untuk membantu menguji aplikasi dan program mereka.
Metode pemilihan kami agak sewenang-wenang, tetapi tidak ada jalan lain. Alat komersial berasal dari daftar alat tersebut di situs OWASP.
Kemudian kami mencari "fuzz" di GitHub, diurutkan berdasarkan jumlah bintang (suka) untuk diukur berdasarkan popularitas, dan memilih lima teratas. Ukuran popularitas lain di GitHub dan rasa hormat dari komunitas adalah berapa kali proyek telah bercabang. Dua dari sistem dalam daftar kami (OSS-fuzz dan FuzzDB) juga masuk dalam lima besar fuzzer bercabang.
Pengujian Fuzz bukan hanya opsi lanjutan yang kooky lagi. Banyak standar penting dari ISO dan badan terkemuka lainnya sekarang merekomendasikannya dan jangan heran jika akhirnya menjadi persyaratan. Sekaranglah waktunya untuk menjadikannya sebagai bagian standar dari proses pengujian Anda.
4 alat fuzzing komersial
1. Beyond Security beSTORM
Solusi fuzzing beSTORM dari Beyond Security adalah salah satu fuzzer paling serbaguna di pasar. Dirancang untuk menguji perangkat keras dan perangkat lunak, tidak memerlukan akses ke kode sumber untuk beroperasi. Oleh karena itu, ia dapat bekerja dengan hampir semua aplikasi, protokol, bahasa, atau bahkan perangkat keras, setidaknya sejauh aplikasi yang diuji dapat diprogram. Ia bahkan dapat bekerja dengan perangkat dan program yang dirancang untuk industri dan aplikasi tertentu seperti yang berasal dari Internet of Things, aplikasi kontrol proses, aplikasi otomotif yang kompatibel dengan CANbus, alat kedirgantaraan, dan perangkat Bluetooth LE berenergi rendah.
Fleksibilitas beSTORM adalah salah satu aset terpentingnya karena pemrogram hanya perlu mempelajari cara memanipulasi satu antarmuka untuk meluncurkan pengujian fuzz terhadap jumlah perangkat atau aplikasi yang hampir tidak terbatas. Platform ini mencakup 250 modul pengujian bawaan, dan pengguna dapat dengan mudah menambahkan modul baru untuk mencakup aplikasi yang tidak biasa atau eksklusif. Tes fuzzing tersebut juga dapat dikelola menggunakan antarmuka yang sama.
Keuntungan lain untuk organisasi yang lebih besar adalah pengguna dapat mengakses platform beSTORM sebagai layanan cloud. Dengan begitu, organisasi dapat membeli platform dan kemudian menyediakan akses ke alat fuzzing ke banyak pengguna, bahkan mereka yang bekerja di lokasi yang berbeda.
2. Kode Intelijen Fuzz
Mesin Code Intelligence Fuzz (CI Fuzz) hadir sebagai VM Ubuntu yang telah dikonfigurasi sebelumnya sehingga Anda dapat menerapkannya secara lokal atau di cloud. Setelah diintegrasikan ke dalam pipeline continuous integration dan continuous delivery (CI/CD) Anda, CI Fuzz dapat berjalan secara otomatis dengan setiap pull request. Dengan cara itu, CI Fuzz dapat memastikan bahwa perubahan baru pada aplikasi tidak menambah kerentanan secara tidak sengaja atau merusak program. Dan karena ini adalah bagian dari proses CI/CD, masalah tersebut akan segera ditandai, sehingga memudahkan untuk menentukan kapan kesalahan program terjadi.
Setiap kali CI Fuzz mendeteksi kesalahan, ia segera mulai mengirimkan permutasi yang berbeda dari input tersebut untuk mencoba dan memetakan ruang lingkup masalah. Ini kemudian menghasilkan laporan terperinci untuk menghilangkan kesalahan positif dan memungkinkan pemrogram untuk mereproduksi kesalahan tersebut dengan tangan saat mereka bekerja untuk memperbaiki kode.
Mesin CI Fuzz langsung mengakses kode sumber program atau aplikasi yang sedang diuji, sehingga hanya mendukung bahasa dan kerangka kerja tertentu. Saat ini, CI Fuzz bekerja dengan C, C++, Java, dan Go. Perusahaan sedang bekerja untuk mengintegrasikan kerangka kerja lain seperti .Net Core dan Python.
3. Synopsys Fuzzing Test Suite
Penawaran Synopsys di arena fuzzing mengambil pendekatan yang unik dibandingkan dengan kebanyakan lainnya. Alih-alih mencoba membuat alat fuzzing yang dapat bekerja dengan banyak aplikasi, Synopsys malah menawarkan seluruh rangkaian alat, dengan masing-masing dirancang untuk bekerja dengan bahasa, protokol, atau kasus penggunaan tertentu. Dengan pendekatan la carte ini, pengguna akhir dapat membeli alat fuzzing yang tepat yang mereka butuhkan tanpa mengeluarkan uang untuk kapasitas atau kemampuan ekstra yang mungkin tidak akan pernah mereka butuhkan.
Setiap alat memiliki serangkaian fitur standar seperti kumpulan kasus uji siap pakai yang sangat relevan, komponen analisis hasil dan pelaporan, antarmuka grafis untuk mengonfigurasi alat, dan dokumentasi yang menjelaskan cara menggunakannya. Setiap pembelian alat juga dapat disertai dengan tingkat dukungan yang dapat digunakan jika diperlukan.
Synopsys menawarkan alat untuk bekerja dengan segala sesuatu mulai dari komponen umum seperti server DNS hingga aplikasi yang lebih tidak jelas dan khusus seperti CAN Bus atau IKEv2.
4. ForAllSecure Mayhem untuk Kode
Alat fuzzing ForAllSecure Mayhem for Code memberikan semua keuntungan dari sebagian besar mesin fuzzing dengan kemampuan tambahan untuk belajar dan menjadi lebih efisien dari waktu ke waktu. Platform ini beroperasi secara independen dengan intervensi manusia minimal yang diperlukan.
Mesin Mayhem for Code beroperasi terus-menerus, mempelajari lingkungannya dan menemukan cara memanfaatkan informasi sistem yang mendalam sambil mempercepat aktivitas fuzzing dari waktu ke waktu. Ia bahkan dapat menghasilkan kasus uji dengan cepat berdasarkan apa yang telah dipelajarinya. Semakin sering Anda menggunakan Mayhem for Code, semakin efisien dan independen jadinya.
Platform saat ini bekerja dengan berbagai bahasa seperti Java, Python, Ada, OCaml, Fortran, Jovial, C, C++, Go dan Rust. Itu tidak memerlukan akses ke kode sumber untuk menjalankan tesnya.
6 alat fuzzing gratis atau open-source
1. PeachTech Peach Fuzzer
Fuzzer protokol PeachTech diajukan di bawah bagian penawaran berbayar terakhir kali kami menulis artikel tentang fuzzing. Itu adalah mesin fuzzing komersial yang populer selama bertahun-tahun. Namun, keberhasilannya menyebabkan perusahaan induknya (PeachTech) diakuisisi oleh GitLab pada tahun 2020. Meskipun versi gratis mesin fuzzing PeachTech masih tersedia melalui GitLab, namun tidak lagi didukung atau diperbarui.
Gagasan di balik program PeachTech adalah bahwa pemrogram di perusahaan berusaha keras untuk membuat mesin fuzzing sangat dapat dikonfigurasi sehingga dapat bekerja dengan hampir semua bahasa atau sistem operasi. Pengguna hanya perlu mengonfigurasi alat secara manual sebelum mengarahkannya ke aplikasi, program, atau perangkat yang akan di-fuzz.
Semua fungsi yang sama itu masih ada dalam penawaran GitLab gratis. Namun, dokumentasinya cukup rumit, dan dukungan untuk alat tersebut tidak ada lagi. Sisi positifnya, gratis. Tetapi pengguna perlu tahu banyak tentang pengujian fuzz serta bahasa atau kerangka kerja yang mereka gunakan untuk mendapatkan manfaat nyata dari fuzzer ini lagi. Non-ahli mungkin harus mencari di tempat lain.
Untuk penguji dengan anggaran terbatas, GitLab memasukkan teknologi itu ke dalam platform DevSecOps mereka, yang tidak gratis. Ada lebih banyak hal di platform ini daripada sekadar fuzzing, jadi kami tidak akan melihatnya secara mendetail, tetapi ini didukung dan sedang dikembangkan.
2. Google OSS-Fuzz
Google menggunakan fuzzing untuk semua pengembangan komponen baru untuk Chrome OS atau browser mereka. Setelah mencapai sukses besar dengan cara ini, fuzzer mereka menjadi proyek open source, OSS-Fuzz.
OSS-Fuzz memanfaatkan beberapa mesin fuzzing lainnya termasuk AFL++, libFuzzer dan Honggfuzz. Ini mendukung beberapa bahasa termasuk kode C, C++, Rust, Go, Python dan Java/JVM, meskipun mencatat bahwa bahasa lain juga dapat berfungsi. Ini bekerja dengan build x86-64 dan i386.
Program OSS Fuzz adalah salah satu yang paling berperingkat tinggi di GitHub saat ini. Ini memiliki komunitas besar dan banyak dukungan di komunitas open-source.
3. FuzzDB
FuzzDB bukanlah mesin fuzzing itu sendiri, tetapi perpustakaan yang kompleks dari muatan serangan dan teknik injeksi yang dikenal yang digunakan untuk merusak atau melanggar program dan aplikasi yang tidak dilindungi darinya. Ini mungkin salah satu perpustakaan terbesar di dunia. Serangan dikategorikan dalam berbagai cara, seperti berdasarkan jenis platform, masalah yang diketahui penyebabnya, potensi paparan sumber, dan banyak faktor lainnya.
Mungkin cara terbaik untuk menggunakan pustaka FuzzDB adalah bersama dengan mesin fuzzing yang dapat diprogram di mana pola serangan tersebut dapat dimuat dan dikirim setelah aplikasi. Menggunakannya bersama dengan mesin fuzzing yang menghasilkan input acak akan membantu mencakup banyak hal, menjalankan keseluruhan dari serangan dan kerentanan yang diketahui hingga yang tidak diketahui khusus untuk aplikasi yang sedang diuji.
Artikel Terkait Lainnya :
4. Ffuf (Fuzz Lebih Cepat U Fool)
Ffuf adalah mesin fuzzing yang ditulis dalam bahasa Go. Ini adalah program yang sangat canggih untuk alat gratis dan dapat melakukan fungsi fuzzing yang paling umum seperti memeriksa bagaimana aplikasi bereaksi terhadap permintaan GET dan POST yang tidak diketahui. Tidak banyak antarmuka pengguna, karena menggunakan fungsi baris perintah, yang bagaimanapun sangat kuat setelah Anda mempelajarinya.
Halaman ffuf GitHub memiliki banyak contoh bagaimana menerapkannya dan pengembang merilis fungsionalitas dan fitur baru secara teratur. Meskipun ffuf gratis, ia menggunakan model sponsorship. Fitur baru segera dirilis kepada mereka yang telah membayar untuk membantu mensponsori pengembangan alat lebih lanjut. Semua orang mendapatkan akses ke fungsi baru 30 hari kemudian.
5. Google ClusterFuzz
Google ClusterFuzz adalah mesin fuzzing yang digunakan oleh Google untuk memeriksa bug di Chrome. Ini juga merupakan bagian dari backend untuk proyek OSS-Fuzz yang disebutkan di atas. Namun, ClusterFuzz bekerja dengan program atau aplikasi apa pun, tidak hanya yang ada di ranah sumber terbuka.
Menurut halaman GitHub, ClusterFuzz telah berhasil menemukan lebih dari 29.000 bug di produk Google dan 26.000 di proyek sumber terbuka melalui integrasinya dengan OSS-Fuzz. Program ClusterFuzz dirancang agar sangat skalabel untuk dijalankan di lingkungan apa pun. Halaman GitHub proyek mencantumkan satu proyek di mana ClusterFuzz bekerja bersama dengan 100.000 mesin virtual, jadi skalabilitas seharusnya tidak menjadi masalah bagi siapa pun.
6. go-fuzz
Platform go-fuzz adalah fuzzer berperingkat tinggi yang dirancang untuk menguji paket dalam bahasa Go. Ini terutama digunakan dengan paket yang mengurai teks kompleks dan input biner. Menurut penulis, ini sangat berguna untuk memperkuat sistem yang mengurai input yang berasal dari pengguna yang berpotensi jahat, seperti hampir semua hal yang disebarkan ke publik melalui halaman web.
Dokumentasi melakukan pekerjaan yang baik untuk menunjukkan cara menggunakan fuzzer. Sementara itu, repositori yang menyertainya berisi banyak contoh fungsi pengujian dan pengaturan input awal untuk berbagai aplikasi.