Framework de reverse-exploit para metasploit


Luring

Este post es puramente hipotético pero si algún día tengo tiempo me pondré a hacer un PoC (Proof Of Concept):

En la manera más sencilla de explicar qué y cómo se hace un exploit a una vulnerabilidad la cosa es así:

  1. Un programa para funcionar puede recibir parámetros de fuera de sí mismo (le pueden llegar vía usuario o vía sistema).
  2. Esos parámetros pueden ser órdenes y/o datos que usa el programa para hacer lo que sea que haga.
  3. Si una persona tiene control de como y que hacerle llegar al programa en esos parámetros ese programa se puede intentar “explotar” , es decir se puede buscar si el programa es vulnerable.
  4. Si el programa no revisa bien, o no filtra los parámetros éstos pueden generar errores en la ejecución del programa.
  5. Si esos errores tienen algún tipo de respuesta donde se incluya algún tipo de información generada o relacionada a los parámetros o simplemente se logra que el programa se detenga (pero no detenga su ejecución en memoria) entonces se ha “explotado” el programa y se ha encontrado una vulnerabilidad en tal o cual parámetro.

Sin entrar a detallar los millones de tipos de ataques y sus infinitas variantes dados los diferentes tipos de parámetros que se pueden enviar (desde código en sí, hasta sub códigos, y la más fina y difícil – a mi parecer – de usar código en lenguaje de máquina para hacer un buffer overflow) la cosa se puede resumir así (y obvio sin entrar en el detalle de programas que le envían parámetros a otros programas porque ahí la cosa se vuelve Kafkiana).

Existen plataformas (frameworks) de programas que se usan para hacer pruebas de penetración. Una de las más potentes es Metasploit cuyo core está basado en explotar windows desde MUCHOS ángulos y de maneras super específicas hasta completamente universales. Además, llevan un registro de todos los errores que encuentran y la manera de usarlos para no tener que repetir el proceso de encontrar las vulnerabilidades sino ya nada más “explotarlas”.

¿Qué hace metasploit – bueno, no en sí metasploit, sino los programas dentro de este framework?

Envían parámetros a ciertos programas en windows para aprovechar vulnerabilidades conocidas y así controlar las computadoras que son atrapadas (de la manera explicada arriba).

¿Cómo se enteran los programas en metasploit si han logrado su cometido?

Reciben una respuesta de parte de la computadora/programa que quisieron atacar/hacer prueba de penetración.

Si se pudiera saber cuando se está llevando a cabo un ataque y en lugar de simplemente detenerlo se pudiera controlar la respuesta que van a recibir los programas atacantes… ¿no se podría buscar errores en la manera que reciben las respuestas y con eso tratar de encontrar vulnerabilidades en los mismos programas atacantes?

En teoría:

En la práctica? Aún no llego ahí, hahaha. Pero esto es obviamente simplificando todo lo que se lleva a cabo a la hora de “explotar” una vulnerabilidad, seguramente ya al momento de intentarlo las cosas son mucho más complicadas.

Lo divertido es pensar que si existe un framework que ataca a Windows se podría crear un anti-framework con el cual no sólo te defiendes sino que atacas a los atacantes y los puedes llegar a dominar. Ojo que para evitar que entonces se haga un anti-anti-framework (y así infinitamente) lo que hay que hacer es desde un principio revisar bien los parámetros que reciben los programas y si eso ya lo sabemos pues se lo ponemos al anti-framework para que no nos la puedan aplicar, hahaha.

Saludos,
Gorka