Chromium Chronicle n.o 9: ClusterFuzz

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

Es posible que te pidan que corrijas los errores de seguridad de prioridad alta que descubren ClusterFuzz. ¿Qué es? ¿Deberías tomarte esos errores en serio? ¿Cómo puedes ayuda?

Diagrama de flujo de fuzzing

ClusterFuzz envía entradas a Chrome y detecta fallas. Algunos de esos Las compilaciones de Chrome tienen verificaciones adicionales activadas, como AddressSanitizer, que busca errores de seguridad de la memoria.

ClusterFuzz asigna componentes según la ubicación de la falla y asigna según el tipo de falla y si ocurrió en una zona de pruebas . Por ejemplo, el uso después de la liberación de un montón tendrá una gravedad alta, a menos que sino en el proceso del navegador, en cuyo caso es fundamental (no hay una zona de pruebas que 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 a partir de fuzzers o de errores enviados de forma externa. Algunos fuzzers usan la tecnología de libFuzzer, que transforma los datos de entrada en 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 hacer una división para encontrar la confirmación infractora Encuentra muchos...

Puedes ayudar a hacer lo siguiente:

  • Ten paranoía sobre la vida útil de los objetos y desbordamiento de enteros.
  • Agrega nuevos fuzzers, en especial cuando procesas datos o IPC poco fiables (consulta vínculos abajo, a menudo < 20 líneas de código).
  • Se corrigieron errores informados por ClusterFuzz: su heurística de gravedad es confiable, ya que se basan en la capacidad de explotación del mundo real: Incluso un desbordamiento de un solo byte llevó a la ejecución de un código arbitrario atacante.

Recursos