Chromium Chronicle n. 9: ClusterFuzz

Episodio 9: di Adrian Taylor a Mountain View (dicembre 2019)
Puntate precedenti

Potresti scoprire che ti viene chiesto di risolvere i bug di sicurezza ad alta priorità rilevati da ClusterFuzz. Di cosa si tratta? Dovresti prendere questi bug sul serio? Come puoi aiutarci?

Diagramma di flusso per fuzzing

Input di feed ClusterFuzz per Chrome e rileva arresti anomali. Per alcune di queste build di Chrome sono attivati controlli aggiuntivi, ad esempio AddressSanitizer, che cerca errori di sicurezza della memoria.

ClusterFuzz assegna componenti in base alla posizione dell'arresto anomalo e assegna la gravità in base al tipo di arresto anomalo e al fatto che si sia verificato o meno in un processo con sandbox. Ad esempio, un heap use-after-free avrà gravità elevata, a meno che non sia nel processo del browser, nel qual caso è fondamentale (nessuna sandbox per limitare l'impatto):

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 genera input dai fuzzer o da bug inviati esternamente. Alcuni fuzzer sono basati su libFuzzer, che evolve l'input per aumentare la copertura del codice. Alcuni comprendono la grammatica della lingua di input convertita in protobufs. Una volta che ClusterFuzz rileva un arresto anomalo, prova a ridurre al minimo lo scenario di test di input e persino a dividersi in due per trovare il commit in questione. Ne trova tante...

Puoi contribuire a:

  • Non preoccuparti della durata degli oggetti e degli overflow di numeri interi.
  • Aggiungi nuovi fuzzer, soprattutto quando elabori dati non attendibili o IPC (vedi i link di seguito, spesso meno di 20 righe di codice).
  • Risolvi i bug segnalati da ClusterFuzz: le sue euristiche di gravità sono affidabili perché si basano sulla sfruttabilità del mondo reale: anche un overflow di un singolo byte ha portato all'esecuzione di codice arbitraria da parte di un utente malintenzionato.

Risorse