Chromium Chronicle 9: ClusterFuzz

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

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

Fluxograma de fuzzing

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

O ClusterFuzz atribui componentes com base no local da falha e atribui gravidade com base no tipo de falha e se ela ocorreu em um ambiente de análise de dados. Por exemplo, uma heap use-after-free será de alta gravidade, a menos que está no processo do navegador e, nesse caso, é essencial (não há sandbox para limitar 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 com base em fuzzers ou bugs enviados externamente. Alguns fuzzers usam a tecnologia do libFuzzer, que evolui a entrada para aumentar a cobertura de código. Alguns entendem a gramática do idioma de entrada convertido em protobufs. Quando o ClusterFuzz encontrar uma falha, ele tentará minimizar o caso de teste de entrada e até dividir para encontrar o commit ofensivo. Ele encontra várias coisas...

Você pode ajudar a:

  • Seja paranóico com a vida útil de objetos e estouro de números inteiros.
  • Adicione novos fuzzers, especialmente ao processar dados ou IPC não confiáveis (consulte links abaixo, muitas vezes < 20 linhas de código).
  • Corrigir bugs relatados pelo ClusterFuzz: sua heurística de gravidade pode ser confiável porque e se baseiam na capacidade de exploração do mundo real: mesmo um O overflow de byte único leva à execução arbitrária de códigos por uma atacante.

Recursos