Encontrar Plantillas para Fuzzing

  • Posted on: 11 January 2019
  • By: ReYDeS

El éxito de los Fuzzers de mutación depende de dos factores:

  • Los datos a utilizar como plantillas y mutados
  • Los algoritmos utilizados para realizar la mutación

Cuando se habla sobre datos utilizados como plantillas de mutación, la noción de calidad debe ser discutida. La calidad puede ser medida por la cantidad o porcentaje de la funcionalidad del programa la cual es afectada o utilizada. Mientras los datos son procesados, diferentes partes del código serán afectados. El código afectado puede ser medido con dos métricas: código abarcado e importancia del código.

El código abarcado es una manera fácil de asignar una métrica hacia la calidad de la plantilla, mediante la medición de la cantidad de código la cual se ejecuta mientras se procesan los datos de la plantilla. Esta medida es usualmente un número de bloques base ejecutados o funciones en un programa.

Otra manera para determinar la métrica de la plantilla es medir la importancia del código en lugar de concentrarse únicamente en información cuantitativa, como el número de funciones ejecutadas en lo referente al código abarcado. Una plantilla se dice tiene un alto nivel de importancia, si abarca un conjunto de funciones o bloques básicos, los cuales no son abarcados por cualquier otra plantilla.

Por lo tanto se pueden utilizar dos métricas importantes para puntuar las plantillas, y determinar cual debe ser priorizada cuando se realicen mutaciones:

Medición de cobertura cuantitativa. Basado en el número de funciones o bloques base ejecutados en el software objetivo, mientras los datos de entrada son procesados. En este caso, cuanto mayor sea el número de funciones abarcados, más adecuados son los datos como plantillas de mutación.

Medición de cobertura de unicidad Basado en maximizar el área total de código abarcado para el conjunto mínimo de plantillas. En este escenario el valor de una plantilla específica es medida por cuanto mejora la cobertura del código, relativo a otras muestras. Esto resultará en una plantilla de datos de alta puntuación, la cual abarca un pequeño número de funciones, pero cuyas funciones no son abarcadas por otras plantillas.

Antes de clasificar y seleccionar la importancia de una plantilla, es necesario recolectar tantas muestras como sea posible.

Fuentes:

https://github.com/secfigo/Awesome-Fuzzing
https://www.usenix.org/conference/woot17/workshop-program/presentation/s...

Sobre el Autor


Alonso Eduardo Caballero Quezada - ReYDeS
Instructor y Consultor en Hacking Ético, Forense Digital & GNU/Linux
Correo Electrónico: ReYDeS@gmail.com
Twitter: @Alonso_ReYDeS
LinkedIn: pe.linkedin.com/in/alonsocaballeroquezada
Facebook: https://www.facebook.com/alonsoreydes
Youtube: http://www.youtube.com/c/AlonsoCaballero
Resumen de mi CV: http://www.reydes.com/d/?q=node/1