Chromium Chronicle 9: ClusterFuzz

Episódio 9:de Adrian Taylor em Mountain View (dezembro de 2019)
Episódios anteriores

Talvez você precise corrigir bugs de segurança de alta prioridade descobertos pelo ClusterFuzz. O que é? Você deve levar esses bugs a sério? Como você pode ajudar?

Fluxograma de fuzzing

O ClusterFuzz envia entradas para o Chrome e detecta falhas. Alguns desses builds do Chrome têm verificações extras ativadas, como o AddressSanitizer, que procura erros de segurança de memória.

O ClusterFuzz atribui componentes com base no local da falha e atribui a gravidade com base no tipo de falha e se ela aconteceu em um processo em sandbox. Por exemplo, um heap use-after-free será de alta gravidade, a menos que esteja no processo do navegador. Nesse caso, ela é essencial (não há sandbox para limitar o impacto):

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.

O ClusterFuzz gera entradas usando fuzzers ou bugs enviados externamente. Alguns fuzzers usam a tecnologia do libFuzzer, que evolui a entrada para aumentar a cobertura do código. Alguns entendem a gramática do idioma de entrada convertido em protobufs. Depois que o ClusterFuzz encontra uma falha, ele tenta minimizar o caso de teste de entrada e até dividir a divisão para encontrar a confirmação ofensiva. Ela encontra muito...

Você pode ajudar a:

  • Não tenha pressa sobre a vida útil do objeto e o estouro de números inteiros.
  • Adicione novos fuzzers, especialmente quando você processar dados ou IPC não confiáveis. Consulte os links abaixo, geralmente com menos de 20 linhas de código.
  • Correção de bugs informados pelo ClusterFuzz: as heurísticas de gravidade são confiáveis porque são baseadas na capacidade de exploração real: até mesmo um overflow de byte único levou à execução arbitrária de código por um invasor.

Recursos