Snapchange, la herramienta de fuzzing open source de AWS
Se dio a conocer la noticia de que Amazon ha lanzado una nueva herramienta de fuzzing llamada Snapchange, que permite verificar archivos ejecutables sin modificarlos y sin la presencia del código fuente de la aplicación. Este es un movimiento diseñado en parte para abordar las preocupaciones sobre la seguridad de la cadena de suministro de software.
En la publicación de Amazon se menciona que, Snapchange comenzó como un experimento del equipo de investigación de seguridad de código abierto de AWS Find and Fix (F2) para explorar el potencial del uso de KVM para habilitar la fuzzing de instantáneas.
Hoy nos complace anunciar Snapchange, un nuevo proyecto de código abierto para hacer que el fuzzing basado en instantáneas sea mucho más fácil. Snapchange permite fuzzear un binario de destino con modificaciones mínimas, proporcionando una introspección útil que ayuda en la fuzzing.
Snapchange es un marco de Rust para crear fuzzers que reproducen instantáneas de la memoria física para aumentar la eficiencia y reducir la complejidad en la fuzzing de muchos tipos de objetivos. Snapchange utiliza las características del administrador de máquinas virtuales integrado del kernel de Linux conocido como máquina virtual del kernel o KVM.
Sobre Snapchange
Se menciona que, Snapchange permite cargar un volcado de memoria física con código ejecutable derivado y organizar, utilizando el hipervisor KVM, una ejecución cíclica del código presente en el volcado, iterando sobre varias combinaciones de datos de entrada, rastreando fallas o anomalías emergentes y reiniciando la verificación después de la siguiente iteración, cada vez que se restablece el segmento de memoria y los registros de la CPU al estado original.
Una iteración se restablece y se reinicia después de una finalización anormal, un tiempo de espera o la ocurrencia de un determinado evento. Los datos de entrada se sustituyen directamente en la memoria y para ahorrar recursos durante la inicialización al estado inicial de la memoria, después de realizar la siguiente iteración, se determina qué datos hay en la memoria y han cambiado.
El volcado de memoria inicial se crea guardando una instantánea de la máquina virtual en la que se ejecuta el entorno con la aplicación bajo prueba, ejecutándose bajo VirtualBox o QEMU La lógica de la sustitución de datos de entrada se determina mediante la creación de scripts especiales, y la posición de inicio de la ejecución cíclica se establece mediante el establecimiento de un punto de interrupción en el depurador.
Por ejemplo, si es necesario verificar el procesamiento de varios estados de una solicitud de red, el investigador inicia la aplicación en el sistema invitado en VirtualBox o QEMU, en el depurador encuentra el comienzo de la ejecución del procedimiento de procesamiento de la solicitud (por ejemplo , después de llamar a la función recv), le pone un punto de interrupción y determina el área de memoria en la que se carga el paquete de red recibido. Después de eso, se crea una instantánea del sistema invitado y se carga en Snapchange.
Para la verificación, se escribe un script que escribe datos durante la enumeración directamente en el búfer del paquete de red, lo que permite simular el procesamiento de paquetes de red reales. Snapchange vuelve desde donde lo dejó, cambiando cada vez el contenido de los datos en el búfer y restableciendo el estado de la memoria a su estado original.
Se admiten varias estrategias para generar datos de entrada. Es posible enumerar con ejecución paralela varios entornos vinculados a diferentes núcleos de CPU. Además de detectar fallas durante la ejecución del código, también admite la recopilación de métricas de rendimiento, la acumulación de estadísticas de cobertura para evaluar la cobertura del código ejecutable y el seguimiento paso a paso del código ejecutable.
Para los interesados en el proyecto, deben saber que el código del proyecto está escrito en Rust y se distribuye bajo la licencia Apache 2.0 a través de GitHub.
Snapchange funciona dentro Linux, pero requiere acceso directo a las primitivas KVM subyacentes. Por lo tanto, es compatible con los tipos de instancias bare metal de EC2, que se ejecutan sin hipervisor, pero no con las instancias virtualizadas de EC2.
Finalmente si estás interesado en poder conocer más al respecto, puedes consultar el anuncio original en el siguiente enlace.