Kronika Chromium nr 9: ClusterFuzz

Odcinek 9: Adrian Taylor w Mountain View (grudzień 2019 r.)
Poprzednie odcinki

Możemy poprosić Cię o usunięcie błędów o wysokim priorytecie w zabezpieczeniach, które zostały wykryte przez Usługa ClusterFuzz Co to jest? Czy należy potraktować te robaki poważnie? Jak możesz może pomóc?

Rozmyty wykres blokowy

ClusterFuzz przekazuje dane wejściowe do Chrome i obserwuje awarie. Niektóre z tych Kompilacje Chrome mają włączone dodatkowe kontrole, na przykład AddressSanitizer, który sprawdza błędy bezpieczeństwa pamięci.

ClusterFuzz przypisuje komponenty na podstawie lokalizacji awarii i przypisuje wagi na podstawie typu awarii i tego, czy wystąpiła w trybie piaskownicy . Na przykład użycie stosu „po zwolnieniu” będzie bardzo ważne, chyba że jest w procesie przeglądarki. W takim przypadku jest to niezwykle istotne (brak piaskownicy do ograniczania wpływ!):

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 generuje dane wejściowe z narzędzi do rozmycia lub z błędów przesłanych na zewnątrz. Niektóre usprawnienia wykorzystują technologię libFuzzer, która ewoluuje, zwiększyć zasięg kodu. Niektórzy rozumieją gramatykę w języku wprowadzania danych przekonwertowano na protobufs. Gdy ClusterFuzz znajdzie awarię, podejmie próbę Skróć przypadek testowy, a nawet podziel go na 2 części, aby znaleźć niewłaściwe zatwierdzenie. Znajduje sporo informacji...

Możesz w tym pomóc:

  • Zachowaj paranoję, jeśli chodzi o czasy przechowywania obiektów – przekracza pewne wartości.
  • Dodaj nowe mechanizmy rozmycia, zwłaszcza w przypadku przetwarzania niezaufanych danych lub IPC (zobacz linków poniżej, często < 20 wierszy kodu).
  • Napraw błędy zgłoszone przez usługę ClusterFuzz: jej heurystyka poziomu ważności może być godna zaufania, są oparte na rzeczywistej możliwości wykorzystania. Nawet przepełnienie pojedynczego bajta doprowadziło do dowolnego wykonania kodu przez atakującego.

Zasoby