Fuzzilli - Library Fuzzing JavaScript Engine - Anontekno

Fuzzilli – Library Fuzzing JavaScript Engine

Fuzzilli - Library Fuzzing JavaScript Engine

Fuzzilii adalah library fuzzing mesin JavaScript, fuzzer dengan panduan cakupan untuk penerjemah bahasa dinamis berdasarkan bahasa perantara kustom (“FuzzIL”) yang dapat dimutasi dan diterjemahkan ke JavaScript. Saat melakukan fuzzing untuk bug interpreter inti, misalnya dalam kompiler JIT, ketepatan semantik dari program yang dihasilkan menjadi perhatian. Hal ini berbeda dengan kebanyakan skenario lainnya, misalnya fuzzing API runtime, di mana kebenaran semantik dapat dengan mudah diatasi dengan menggabungkan kode yang dihasilkan dalam konstruksi coba-tangkap. Ada beberapa kemungkinan berbeda untuk mencapai tingkat yang dapat diterima dari sampel yang benar secara semantik, salah satunya adalah pendekatan mutasional di mana semua sampel dalam korpus juga valid secara semantik. Dalam hal ini, setiap mutasi hanya memiliki peluang kecil untuk mengubah sampel yang valid menjadi sampel yang tidak valid.

Menggunakan Perpustakaan Fuzzing Mesin JavaScript Fuzzilli

Langkah-langkah dasar untuk menggunakan fuzzer ini adalah:

  • Unduh kode sumber untuk salah satu mesin JavaScript yang didukung. Lihat direktori Target / untuk daftar mesin JavaScript yang didukung.
  • Terapkan patch yang sesuai dari direktori target. Juga lihat README.md di direktori itu.
  • Kompilasi mesin dengan instrumentasi cakupan (membutuhkan clang> = 4.0) seperti yang dijelaskan dalam README.
  • Kompilasi fuzzer: swift build [-c release].
  • Jalankan fuzzer: . Lihat juga lari cepat .swift run [-c release] FuzzilliCli --profile= [other cli options] /path/to/jsshellFuzzilliCli --help

Bagaimana FuzzIl bekerja

FuzzIL memiliki sejumlah properti:

  • Program FuzzIL hanyalah daftar instruksi.
  • Instruksi FuzzIL adalah operasi bersama dengan variabel input dan output dan kemungkinan satu atau lebih parameter (diapit tKamu kutip tunggal pada notasi di atas).
  • Masukan ke instruksi selalu berupa variabel, tidak ada nilai langsung.
  • Setiap keluaran dari sebuah instruksi adalah variabel baru, dan variabel yang sudah ada hanya dapat dialihkan melalui operasi khusus seperti instruksi Penugasan Ulang.
  • Setiap variabel ditentukan sebelum digunakan.

Sejumlah mutasi kemudian dapat dilakukan pada program-program ini:

  • InputMutator: mengganti variabel input instruksi dengan yang berbeda untuk memutasi aliran data program.
  • CodeGenMutator: menghasilkan kode dan menyisipkannya di suatu tempat di program yang dimutasi. Kode dihasilkan baik dengan menjalankan generator kode atau dengan menyalin beberapa instruksi dari program lain di korpus (penyambungan).
  • CombineMutator: menyisipkan program dari korpus ke posisi acak dalam program yang bermutasi.
  • OperationMutator: mengubah parameter operasi, misalnya mengganti konstanta integer dengan yang berbeda.
  • dan banyak lagi…

Kamu dapat mengunduh Fuzzilli di sini: fuzzilli-v0.9.1.zip Atau baca lebih lanjut di sini .