De Chromiumkroniek #9: ClusterFuzz

Aflevering 9: door Adrian Taylor in Mountain View (december 2019)
Vorige afleveringen

Mogelijk wordt u gevraagd beveiligingsbugs met hoge prioriteit op te lossen die door ClusterFuzz zijn ontdekt. Wat is het? Moet je deze bugs serieus nemen? Hoe kan ik je helpen?

Vaag stroomschema

ClusterFuzz stuurt invoer naar Chrome en let op crashes. Bij sommige van deze Chrome-builds zijn extra controles ingeschakeld, bijvoorbeeld AddressSanitizer , dat zoekt naar geheugenveiligheidsfouten.

ClusterFuzz wijst componenten toe op basis van de crashlocatie en wijst de ernst toe op basis van het type crash en of deze in een sandbox-proces heeft plaatsgevonden . Een heap use-after-free zal bijvoorbeeld zeer ernstig zijn, tenzij deze zich in het browserproces bevindt, in welk geval het van cruciaal belang is (geen sandbox om de impact te beperken!):

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 genereert input van fuzzers of van extern ingediende bugs. Sommige fuzzers worden mogelijk gemaakt door libFuzzer , dat invoer ontwikkelt om de codedekking te vergroten. Sommigen begrijpen de grammatica van de invoertaal, omgezet in protobufs . Zodra ClusterFuzz een crash vindt, zal het proberen de invoertestcase te minimaliseren en zelfs in tweeën te delen om de overtredende commit te vinden . Er wordt veel gevonden...

Je kan helpen:

  • Wees paranoïde over de levensduur van objecten en overflows van gehele getallen.
  • Voeg nieuwe fuzzers toe, vooral als je onbetrouwbare data of IPC verwerkt (zie onderstaande links, vaak < 20 regels code).
  • Door ClusterFuzz gerapporteerde bugs repareren: de ernstheuristieken ervan kunnen worden vertrouwd omdat ze gebaseerd zijn op exploiteerbaarheid in de echte wereld : zelfs een overflow van één byte heeft geleid tot het uitvoeren van willekeurige code door een aanvaller.

Bronnen

  • Fuzz-testen in Chromium : hoe u nieuwe fuzzers aan ClusterFuzz kunt toevoegen voor nieuwe gegevensformaten, of gewoon omdat u de eer wilt hebben om geweldige kwetsbaarheden te vinden.
  • Chrome Fuzzer-programma-update en how-to : Fuzzers zijn ook geschreven door externe bijdragers. Luister naar hun ervaringen en hoe gemakkelijk het kan zijn om aan de slag te gaan.