He oído hablar de estas herramientas y, según entiendo, solo envían toneladas de datos aleatorios a diferentes servicios y observan su reacción.
¿Cuál es el propósito de un fuzzer? ¿Cómo se puede aplicar durante un pentest?
He oído hablar de estas herramientas y, según entiendo, solo envían toneladas de datos aleatorios a diferentes servicios y observan su reacción.
¿Cuál es el propósito de un fuzzer? ¿Cómo se puede aplicar durante un pentest?
¿Cuál es el propósito de un fuzzer?
Un fuzzer intenta provocar una reacción inesperada del software de destino al proporcionar información que no se planificó adecuadamente. Lo hace lanzando datos "creativamente construidos" como entrada al software. ¿Esperando un número de teléfono? ¡Decir ah! Te voy a dar 1.024 caracteres de 0x00! Hex aleatorio! Unicode! Un campo de ancho cero! Solo la puntuación: "() -"
El objetivo es obtener una respuesta de error que no esté limpia ... acceso adicional, desbordamiento del búfer, etc. La entrada manejada de manera incorrecta es esencialmente el quid de casi todos los problemas de seguridad, ya sea extendiéndose a rangos de memoria no deseados o cualquier número de otras reacciones. Un error de SQL regresó del campo de número de teléfono? Tiempo de inyección SQL!
Por lo tanto, para todo eso, los fuzzers son útiles para encontrar fallas, y particularmente durante un pentest para usar esas fallas como un punto para intentar lanzar exploits desde.
Un fuzzer es una herramienta (semi-) automatizada que se utiliza para encontrar vulnerabilidades en software que pueden ser explotados por un atacante. Los beneficios incluyen, pero no se limitan a:
Las desventajas posicionales incluyen, pero no se limitan a:
por lo que entiendo, solo envían toneladas de datos aleatorios a Diferentes servicios y observamos su reacción.
Esto es parcialmente cierto, dependiendo de lo que quieres decir con "aleatorio". Los fuzzers se pueden usar de esa manera con el fin de identificar pérdidas de memoria en un programa, pero también pueden ser útiles para realizar pruebas de lápiz (haciendo que el programa se bloquee). Si puedes bloquear el programa con un fuzzer, probablemente puedas secuestrarlo.
Desde la perspectiva de los probadores de lápiz, los fuzzers son más útiles para identificar los errores de validación de entrada .
Tal vez se explica mejor con un simple FTP fuzzer , asumiendo que Puede leer el código fuente.
Un fuzzer FTP típico podría intentar ejecutar varios comandos FTP como cd
, put
, etc., con argumentos "aleatorios". A menudo, los fuzzers enviarán cadenas de fuerza bruta de longitud cada vez mayor, que podrían usarse para identificar errores de desbordamiento del búfer, que pueden ser explotables (ASLR y otras tecnologías mitigan esto de alguna manera).
A este respecto, un fuzzer sería más útil al ejecutar la aplicación del servidor en un depurador, de modo que pueda ver exactamente cómo / dónde se bloquea. Luego, Shellcode podría construirse para secuestrar la aplicación.
Los fuzzers que no envían datos aleatorios son probablemente más útiles aquí, por ejemplo. enviar patrones como "ABBCCCDDDD ..." podría ser más útil para señalar con precisión el tamaño exacto del búfer necesario para el desbordamiento, ya que podrían emplear algo parecido a una búsqueda binaria para obtener resultados más rápidos.
Las respuestas de un servicio de red deben caer en una de las pocas categorías bien definidas y amplias. Si envía datos aleatorios a, por ejemplo, un servicio HTTP, espera recuperar una gran cantidad de resultados HTTP 400 y quizás algunos otros resultados HTTP 4XX. Si ocurre algo ELSE, como un tiempo de espera o una respuesta diferente, vale la pena señalar e investigar más a fondo ese resultado anómalo.
Lea otras preguntas en las etiquetas fuzzing