Chromium Chronicle #9: ClusterFuzz

Episode 9: oleh Adrian Taylor di Mountain View (Desember 2019)
Episode sebelumnya

Anda mungkin diminta untuk memperbaiki bug keamanan berprioritas tinggi yang ditemukan oleh ClusterFuzz. Fitur apa ini? Haruskah Anda menanggapi bug itu dengan serius? Bagaimana Anda dapat membantunya?

Diagram alur fuzzing

ClusterFuzz memasukkan feed ke Chrome dan memantau error. Beberapa build Chrome tersebut mengaktifkan pemeriksaan tambahan, misalnya AddressSanitizer, yang mencari error keamanan memori.

ClusterFuzz menetapkan komponen berdasarkan lokasi error, dan menetapkan tingkat keparahan berdasarkan jenis error dan apakah error tersebut terjadi dalam proses sandbox. Misalnya, heap use-after-free akan memiliki tingkat keparahan yang tinggi, kecuali jika terjadi dalam proses browser, yang dalam hal ini sangat penting (tidak ada sandbox untuk membatasi dampak!):

class Foo {
  Widget* widget;
};

void Foo::Bar() {
  delete widget;
  ...
  widget->Activate();  // Bad in the renderer process, worse in the
                       // browser process. Obviously, real bugs are
                       // more subtle. Usually.

ClusterFuzz menghasilkan input dari fuzzer atau dari bug yang dikirimkan secara eksternal. Beberapa fuzzer didukung oleh libFuzzer, yang mengembangkan input untuk meningkatkan cakupan kode. Beberapa orang memahami tata bahasa bahasa input yang dikonversi menjadi protobufs. Setelah menemukan error, ClusterFuzz akan mencoba meminimalkan kasus pengujian input dan bahkan membagi lagi untuk menemukan commit yang melanggar. Menemukan banyak hal...

Anda dapat membantu:

  • Bersikaplah paranoid terhadap masa aktif objek & overflow integer.
  • Tambahkan fuzzer baru, terutama saat Anda memproses data atau IPC yang tidak dapat dipercaya (lihat link di bawah, biasanya kurang dari 20 baris kode).
  • Memperbaiki bug yang dilaporkan ClusterFuzz: heuristik tingkat keparahannya dapat dipercaya karena didasarkan pada eksploitasi dunia nyata: Bahkan overflow byte tunggal telah menyebabkan eksekusi kode arbitrer oleh penyerang.

Referensi

  • Fuzz testing di Chromium: Cara menambahkan fuzzer baru ke ClusterFuzz untuk format data baru, atau hanya karena Anda ingin mendapatkan pujian karena menemukan vuln yang luar biasa.
  • Update dan Petunjuk Program Chrome Fuzzer: Fuzzer juga ditulis oleh kontributor eksternal. Dengarkan pengalaman mereka dan betapa mudahnya untuk memulai.