Ir a Idioma (29): Pruebas Fuzz (2)
El siguiente es un ejemplo de un archivo corpus:
La primera línea se utiliza para informar al motor difuso sobre la versión codificada del archivo. Si bien actualmente no hay formatos de codificación previstos para futuras versiones, el diseño debe admitir esta posibilidad.
Cada línea a continuación es un valor que constituye una entrada del corpus y se puede copiar directamente al código Go si es necesario.
En el ejemplo anterior, utilizamos int64 seguido de un byte []. Estos tipos deben coincidir exactamente con los parámetros fuzz de la secuencia. Estos tipos de objetivos difusos son los siguientes:
La forma más sencilla de especificar sus propios valores de corpus semilla es usar esto (*testing.f). Agregar método. En el ejemplo anterior, se vería así:
Sin embargo, es posible que tenga un binario grande y no desee copiarlo en su prueba como código, sino tenerlo como un corpus de semilla única. La entrada se guarda en el directorio testdata/fuzz/{FuzzTestName}. La herramienta file2fuzz en golang.org/x/tools/cmd/file2fuzz se puede utilizar para convertir estos archivos binarios en [] bytes.
Para utilizar esta herramienta:
Entrada del corpus: una entrada del corpus que se puede utilizar para pruebas difusas. Puede ser un archivo con formato especial o una adición (*testing.f).
Guía de cobertura: un enfoque difuso que utiliza una extensión de la cobertura del código para determinar qué entradas del corpus vale la pena conservar para uso futuro.
Entrada fallida: una entrada fallida es una entrada del corpus que provoca un error o se congela cuando se ejecuta contra un objetivo oscuro.
Destino fuzz: la función de destino de las pruebas fuzz, que se ejecuta en las entradas del corpus y los valores generados durante las pruebas fuzz. Para ello, pasa una función a (*testing.F).Fuzz.
Prueba fuzz: se puede utilizar una función denominada func FuzzXxx(*testing. f) para realizar pruebas fuzz en el archivo de prueba.
Fuzzing: un tipo de prueba automatizada que manipula continuamente la entrada de un programa para encontrar problemas, como errores o vulnerabilidades a las que el código puede ser vulnerable.
Parámetros de fuzz: parámetros que se pasarán al objetivo de prueba de fuzz y que el mutador mutará.
Motor Fuzzing: Una herramienta para gestionar Fuzzing, incluyendo mantener el corpus, llamar a mutadores, identificar nuevas coberturas y reportar fallas.
Corpus generado: un corpus mantenido por el motor fuzz a lo largo del tiempo y fuzzizado para realizar un seguimiento del progreso. Se almacena en $GOCACHE/fuzz. Estas entradas son únicamente para pruebas de fuzz.
Mutador: herramienta utilizada en pruebas de fuzz que manipula aleatoriamente elementos del corpus antes de pasarlos al objetivo de fuzz.
Paquete: Colección de archivos fuente compilados juntos en el mismo directorio.
Corpus semilla: corpus proporcionado por los usuarios para pruebas de fuzz, que se puede utilizar para guiar el motor de fuzz. Consta de las entradas del corpus proporcionadas por f.Add en la prueba difusa y los archivos en el directorio testdata/fuzz/{FuzzTestName} del paquete. De forma predeterminada, estas entradas se ejecutan mediante go test independientemente de si se realizan pruebas fuzz.
Archivo de prueba: un archivo en el formato xxx_test.go, que puede contener pruebas, benchmarks, ejemplos y pruebas fuzz.
Vulnerabilidades: vulnerabilidades sensibles a la seguridad en el código que pueden ser aprovechadas por los atacantes.