Chromium Chronicle n.o 9: ClusterFuzz

Episodio 9: de Adrian Taylor en Mountain View (diciembre de 2019)
Episodios anteriores

Es posible que se te solicite corregir errores de seguridad de alta prioridad que detectó ClusterFuzz. ¿Qué es? ¿Deberías tomarte esos errores en serio? ¿Cómo puedes ayudar?

Diagrama de flujo de fuzzing

ClusterFuzz envía entradas a Chrome y detecta fallas. Algunas de esas compilaciones de Chrome tienen activadas verificaciones adicionales, por ejemplo AddressSanitizer, que busca errores de seguridad de memoria.

ClusterFuzz asigna componentes según la ubicación de la falla y la gravedad según el tipo de falla y si ocurrió en un proceso de zona de pruebas. Por ejemplo, el uso de montón después de liberarlo tendrá una gravedad alta, a menos que se encuentre en el proceso del navegador, en cuyo caso es fundamental (no hay una zona de pruebas para limitar el 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.

ClusterFuzz genera entradas desde fuzzers o errores enviados de forma externa. Algunos fuzzers cuentan con tecnología de libFuzzer, que evoluciona la entrada para aumentar la cobertura de código. Algunos entienden la gramática del idioma de entrada convertido en protobufs. Una vez que ClusterFuzz encuentre una falla, intentará minimizar el caso de prueba de entrada y hasta dividirlo en dos para encontrar la confirmación ofensiva. Encuentra muchas cosas...

Puedes ayudar a:

  • Ten en cuenta la vida útil de los objetos y los desbordamientos de números enteros.
  • Agrega nuevos fuzzers, especialmente cuando proceses datos no confiables o IPC (consulta los vínculos que aparecen a continuación, que suelen tener menos de 20 líneas de código).
  • Corrige errores informados por ClusterFuzz: su heurística de gravedad es confiable porque se basa en la capacidad de explotación en el mundo real: incluso un desbordamiento de un solo byte llevó a que un atacante ejecutara código arbitrario.

Recursos