Apakah Ujian Fuzz?

Ujian Fuzz, juga dikenali sebagai ujian fuzzing atau monyet, merupakan teknik yang digunakan untuk menguji perisian untuk kelemahan yang tidak diketahui. Proses ujian fuzz diautomatikasikan oleh program yang dikenali sebagai fuzzer, yang menghasilkan sejumlah besar data untuk dihantar ke program sasaran sebagai input. Sekiranya sasaran program crash atau berkelakuan dengan cara yang tidak diingini, fuzzer membuat log input yang menyebabkan ralat.

Peretas sering menggunakan fuzzer untuk mencari kelemahan dalam perisian, meneliti untuk kelemahan yang mereka dapat mengeksploitasi. Pemaju perisian boleh menggunakan fuzzer untuk menjangka dan mempertahankan terhadap jenis serangan tersebut.

Asal

Fuzzer pertama ditulis pada awal tahun 1980an oleh pemaju Steve Capps untuk menguji kelemahan dalam program untuk komputer Macintosh. Dia memanggil programnya "The Monkey, " merujuk kepada pepatah klasik monyet menekan kekunci rawak pada mesin taip untuk jumlah masa yang tidak terhingga. Teori ini diberikan masa yang cukup, monyet akhirnya akan menulis karya lengkap Shakespeare. Walaupun pendekatan ini untuk ujian perisian biasanya disebut "fuzzing, " ia juga dipanggil "ujian monyet" kerana program Capps.

Senarai Fuzzers

Teknik fuzzing boleh digunakan untuk menguji perisian, dan banyak fuzzers ada untuk tujuan tertentu.

Berikut adalah senarai fuzzers, kebanyakannya menjadi sumber terbuka dan ramai yang masih dalam pembangunan aktif.

Nama Fuzzer / URLPenerangan
Google SanitizersSekumpulan empat pembasuh data yang dibangunkan di Google, yang menggunakan fuzzing untuk mengesan ralat program:
  • AddressSanitizer, yang mengesan ralat alamat memori dalam program C dan C ++.
  • LeakSanitizer, yang mengesan kebocoran memori.
  • ThreadSanitizer, yang mengesan keadaan kaum di C ++ dan Go.
  • Memory Sanitizer, yang mengesan memori tidak diingini.
afl-fuzzAmerican Fuzzy Lop, alat yang menggunakan algoritma genetik untuk menguji keselamatan program-program yang disusun.
BackfuzzA toolkit fuzzing fuzzing.
BrundleFuzzFuzzer yang diedarkan untuk Windows dan Linux.
CERT FOEEnjin Pengamatan Kegagalan, alat yang dibangunkan oleh CERT yang menggunakan fuzzing mutasi untuk mengesan kelemahan dalam program Windows.
CERTfuzzKod sumber CERT FOE.
ChoronzonFuzzer berasaskan pengetahuan evolusi.
DiffyAlat yang dibangunkan oleh Twitter untuk menemui kelemahan dalam perkhidmatan web.
DizzyPerpustakaan fuzzing untuk Python
dfuzzerAlat fuzzing untuk proses ujian yang berkomunikasi melalui mekanisme DC IPC dan RPC.
dotdotpwnAlat untuk menguji aplikasi web untuk kelemahan jalan traversal.
DranzerPenguji fuzz untuk kawalan ActiveX.
EMFFuzzerUjian fuzz Metafile yang dipertingkatkan.
EksploitasiPelanjutan untuk GDB (debugger GNU) yang menganalisis executable Linux dan mengelompokkan pepijat mereka dengan keterukan mengikut eksploitasi yang diketahui. Dulu dibangunkan di CERT.
Go-fuzzPenguji fuzz untuk program Go yang memaparkan objek mereka dengan nilai rawak.
grrMenterjemah 32-bit binari kepada 64-bit, membingungkan mereka sebagai sebahagian daripada proses.
honggfuzzFuzzer yang didorong oleh evolusi, berasaskan maklum balas untuk perkakasan dan perisian.
HTTP / 2 FuzzerFuzzer untuk aplikasi HTTP / 2, masih tersedia untuk muat turun tetapi tidak lagi aktif dibangunkan.
HodorA "sedikit lebih daripada bodoh" (kekerasan) fuzzer.
iFuzzerFuzzer yang ditulis dalam Python yang menggunakan Mercurial dan Valgrind.
KEMUfuzzerFuzzer untuk mesin maya yang berjalan pada platform emulasi QEMU, VMware, VirtualBox, atau BHOCS.
KernelFuzzerFuzzer untuk panggilan sistem kernel
LibFuzzerPerpustakaan untuk ujian fuzz dalam proses, evolusi, dan liputan.
NetzobFuzzer untuk protokol komunikasi kejuruteraan terbalik.
Fuzzer NeuralFuzzer yang menggunakan pembelajaran mesin (rangkaian saraf) untuk melaksanakan ujiannya.
Mimpi burukFuzzer yang diedarkan dengan alat pentadbiran berasaskan web.
PathgrindAnalisis dinamik berasaskan laluan untuk aplikasi 32-bit.
Perf-fuzzerFuzzer yang direka khas untuk menguji panggilan sistem perf_event_open () pada kernel Linux.
PulsarFuzzer yang "belajar" protokol.
PyJFuzzFuzzer JSON Python.
QuickFuzzFuzzer tatabahasa eksperimen yang ditulis dalam Haskell.
RadamsaFuzzer kegunaan umum.
RandyFuzzer Python mudah yang menghasilkan input rawak untuk program yang diuji.
sfuzzFuzz mudah. "Apa yang betul-betul seperti - fuzzer yang mudah." Termasuk sebagai sebahagian daripada toolset Kali Linux.
skipfishPengimbas keselamatan aplikasi web yang dibangunkan di Google.
sintaksisPenguji fuzz automatik untuk API web, ditulis dalam Python dan diselenggarakan oleh OpenStack Security Group.
TriforceAFLFuzzer sistem penuh yang menggunakan QEMU.
WapitiPengimbas kelemahan aplikasi web.
WfuzzFuzzer kekerasan untuk aplikasi web.
zzufSatu fuzzer input aplikasi yang jelas dan telus yang secara rawak mengubah bit dalam operasi input fail.

Berikut ini adalah pelengkapan, atau kerangka, yang dapat membantu anda menguruskan ujian fuzz anda.

Kerangka FuzzingPenerangan
CERT BFFThe BFF (Basic Fuzzing Framework), dibangunkan oleh CERT, direka untuk mencari kelemahan dalam aplikasi Windows, macOS, dan Linux.
FuzzFlowRangka kerja fuzzing dalam AngularJS.
FuzzinatorRangka kerja untuk ujian fuzz rawak.
FuzzLabsRangka kerja ujian fuzz kegunaan umum.
PengisarA penguji / kerangka ujian fuzz untuk menguji pelayar web.
KittyRangka kerja ujian fuzz yang ditulis dalam Python.
ofuzzRangka kerja fuzzing yang ditulis dalam OCaml.
NodefuzzRangka kerja ujian fuzz untuk pelayar web, ditulis dalam nodej.
PassiveFuzzFrameworkOSXFuzzer untuk menguji kelemahan dalam kernel macOS.
Peach FuzzerPlatform untuk ujian fuzz yang boleh "menguji hampir mana-mana sistem untuk kelemahan yang tidak diketahui."
RamFuzzFuzzer untuk menguji parameter individu kaedah objek.
SulleyRangka kerja fuzzing "sepenuhnya automatik dan tanpa pengawasan, Python tulen".
FunFuzzerA Python memanfaatkan abah untuk enjin JavaScript dan penghantar DOM, oleh Mozilla.

Bug, istilah Pengaturcaraan, Terma keselamatan, Pengujian perisian