En números anteriores, presentamos herramientas comunes de prueba fuzz, ventajas de las pruebas fuzz y descubrimiento de excepciones. En este número, hablaremos sobre cómo las pruebas fuzz localizan problemas con precisión . Sabemos que las pruebas difusas son un método para encontrar vulnerabilidades de software proporcionando una entrada inesperada de "datos incorrectos" al sistema de destino y monitoreando resultados anormales. Si el problema se puede localizar con precisión es un indicador de evaluación importante de las herramientas de pruebas difusas. Los probadores deben poder Para saber ¿Cuáles son los datos de prueba correspondientes al cambio de estado del programa de destino? Si no está disponible la capacidad de reproducir los resultados de la prueba, todo el proceso perderá su significado.
Localizar problemas con precisión es una tarea desafiante en la fuzzing, ya que la fuzzing generalmente se basa en un enfoque de prueba de caja negra que no puede ver directamente el código fuente interno. Sin embargo, con algunos trucos y estrategias, es posible localizar con mayor precisión los problemas de fuzzing.
encontrar problemas, recopilar información
En primer lugar, cuando se encuentra un problema después de ejecutar la prueba fuzz, la clave es recopilar información relacionada con el problema. Esta información incluye:
muestra de datos de entrada
Recopilar una muestra de los datos de entrada que causaron el problema es la clave para reproducirlo. Guarde tantas muestras como sea posible que desencadenen el problema, ya que diferentes entradas pueden causar diferentes problemas.
Condiciones desencadenantes
Documente el entorno y las condiciones en las que ocurrió el problema. Esto podría incluir pasos de acción, estado de la solicitud, roles de usuario, etc. Las condiciones de activación ayudan a reproducir los problemas en análisis posteriores.
Mensajes de error y seguimientos de pila
Si su aplicación falla o informa un error, debe registrar el mensaje de error y el seguimiento de la pila. Esta información proporciona pistas sobre dónde radica el problema.
Inicio sesión
Si la aplicación genera archivos de registro, examine y guarde los registros relacionados con el problema. El registro puede proporcionar más contexto cuando ocurre un problema.
Localice con precisión el problema
Una vez que se recopila la información del problema, se pueden utilizar las siguientes estrategias para identificar el problema.
muestra mínima recurrente
Intente generar una muestra mínima reproducible del problema a partir de la confusión, es decir, una muestra de la entrada más simple que desencadena el problema. Ayuda a reproducir problemas más rápido sin tener que depender de la gran cantidad de información generada por la fuzzing.
análisis estático
Si tiene acceso al código fuente, puede utilizar herramientas de análisis de código estático para analizar los problemas encontrados mediante la fuzzing. Estas herramientas pueden ayudarle a localizar la ubicación del código fuente del problema, así como la posible causa del problema.
Análisis dinámico
Utilice depuradores, herramientas de análisis de rendimiento y herramientas de análisis de memoria para observar el comportamiento del programa. Esto puede revelar el estado del programa, el flujo de datos y las condiciones de la memoria en el momento en que ocurrió el problema.
Análisis de datos de entrada
Analice los datos de entrada que desencadenan el problema, especialmente las partes de los datos que son relevantes para el problema. Esto puede ayudar a determinar la causa raíz del problema.
Pruebas de regresión
Después de modificar un programa para solucionar un problema, se realizan pruebas de regresión para garantizar que la solución no introduzca nuevos problemas. Si el fuzzer genera muestras de entrada para el problema, estas entradas se pueden utilizar para pruebas de regresión.
Colabora y comparte
Si el problema no se puede localizar con precisión, la información y los datos del problema se pueden compartir con el equipo de desarrollo para buscar ayuda de otros. A veces, otros desarrolladores pueden tener diferentes perspectivas y experiencias que pueden ayudar a localizar el problema.
Es importante enfatizar que la fuzzing puede encontrar muchos problemas, algunos de los cuales pueden ser falsos positivos o problemas de baja prioridad, y localizar problemas requiere paciencia, habilidad y práctica. Aunque la localización precisa de los problemas de las pruebas difusas es un desafío, la combinación de análisis estático, análisis dinámico, análisis de datos de entrada y colaboración puede mejorar la precisión y eficiencia de la localización de problemas, abordando así mejor los problemas de seguridad en el software.