¿Qué es un Exploit?

A continuación explicaremos resumidamente qué es un exploit y las partes que lo componen, aunque parezca básico muchos tienen una idea errónea o no saben cómo está formada la arquitectura de un exploit.

exploit

¿Qué significa exploit?

Etimologicamente “exploit” proviene del ingles explotar, y se refiere a un fragmento de software o comandos que se utilizan para aprovechar  una falla/debilidad en una aplicación o sistema con el fin de obtener un comportamiento no deseado en el mismo (acceso de forma no autorizada, toma de control de un sistema de cómputo, consecución privilegios no concedidos lícitamente, consecución de ataques de denegación de servicio).
Técnicamente un exploit es generalmente una aplicación compuesta de una o varias partes programada en un lenguaje adecuado para  aprovechar un agujero de seguridad (vulnerabilidad). Pueden tomar forma en distintos tipos de software, como scripts, virus o gusanos informáticos.


¿De qué se compone un exploit?

Los fallos de seguridad que tienen los programas necesitan de una técnica para llegar a ellos, y es por eso que nuestro exploit necesita primero hacer una inicialización para preparar todo, por ejemplo, para explotar un overflow en un comando FTP, primero debemos  conectarnos, autenticarnos y después de eso podemos esperar que el FTP acepte un comando.
La otra parte es la payload.


¿Qué es un payload?

Una payload es un conjunto de datos que son los que finalmente se usaran para explotar la falla; los payloads constan de varias partes, principalmente de una shellcode, un NOP sled y otros datos que si seguimos con el ejemplo del FTP sería el comando con el argumento.


¿Qué es un NOP sled?

Cuando explotamos un proceso manipulamos el puntero de instrucciones (el que dice cual es la siguiente instrucción a ejecutar, EIP en x86), pero muchas veces existe un margen de error que podría hacer fallar nuestra shellcode debido a que tal vez el EIP apunta a la mitad de la shellcode y no al principio.
Entonces lo que se hace es agregar una cadena de instrucciones  de un byte (para que no fallen si caen en la mitad de la instrucción) que no afecten mucho el entorno. Es por eso que se le dice NOP sled, es una serie de instrucciones NOP (opcode: 0x90) de un determinado tamaño que se agrega antes de la shellcode y se calcula que el EIP apunte a alguna parte del sled.
Actualmente el NOP sled clásico es detectado por firewalls y debemos usar otras instrucciones similares que ocupen un byte (por ejemplo la instruccion push para registros).


Clasificación de los exploits:

Según la forma en la que el exploit contacta con el software vulnerable:

  • – Exploit remoto: si utiliza una red de comunicaciones para entrar en contacto con el sistema víctima.
  • – Exploit local: si para ejecutar el exploit se necesita tener antes acceso a el sistema vulnerable.
  • – Exploit ClientSide: aprovechan vulnerabilidades de aplicaciones que típicamente están instaladas en gran parte de las estaciones de trabajo de las organizaciones.

Según el conocimiento de su existencia:

  • – Conocidos: son aquellos de los que se tiene constancia y podemos tomar medidas para evitar ver nuestros sistemas afectados.
  • – 0-Day: se utilizan sobre vulnerabilidades que aún no han sido reportadas al público general y, por tanto, suponen una grave amenaza, especialmente si se utilizan en ataques dirigidos a empresas o gobiernos.

Basta de teoría…

Veamos un típico exploit hecho en Python para explotar la recepción de comandos en un server FTP; presten atencion a los comentarios explicando cada parte

Esto es para comprender cómo es un exploit “por dentro” y empezar a entender que son esas cadenas de caracteres que aparecen y cómo es que llegan a tomar el control de un proceso.