You are on page 1of 4

Qu es una vulnerabilidad? Es una falla o debilidad en el software que puede ser aprovechada por una amenaza. Qu es un exploit?

Es una pieza de cdigo usada para tomar ventaja de una vulnerabilidad. Qu es un payload? Es una pieza de cdigo a ser ejecutada mediante dicho cdigo exploit. Arquitectura del procesador. Registros Unidad de Control Unidad de Ejecucin Banderas

Unidad de Control: Obtiene/Decodifica Instrucciones, obtiene/almacena datos en memoria. Unidad de Ejecucin: La ejecucin de las instrucciones ocurre en este mdulo. Registros: Localidades internas de memoria comnmente usadas como variables. Banderas: Comnmente usadas para identificar eventos que ocurren durante la ejecucin. Registros. Registros de Propsito General. - EAX Registro acumulador usado para almacenar operando y los datos resultantes. - EBX Registro Base Pointer to Data - ECX Registro Contador Loop Operations - EDX Registro de Datos I/O Pointer Registros de Propsito Especfico. - ESI Indice origen - EDI ndice destino - EBP Puntero base - ESP Punto al Stack (tope de la pila) - EIP Puntero que controla el flujo de la ejecucin del programa Diagrama Bsico de la Memoria.

Instrucciones bsicas y el stack.

Explotacin. Un cdigo exploit se compone bsicamente de 2 partes: La tcnica de explotacin Y el payload (carga activa) *Ejemplos de payload: RAT, keylogger, reverse Shell. El objetivo de la explotacin es desviar la ruta de ejecucin normal de un programa vulnerable, mediante una de las siguientes tcnicas: Stack based buffer overflow Heap based buffer overflow Format string Integer overflow Memory leak, etc.

Esqueleto de un shellcode. Obteniendo el IEP: obtener el IEP es clave debido a que debemos evitar el uso de las direcciones especificas (hardcoded) y hacer uso de direccionamiento relativo y para ello debemos saber en que parte de la memoria nos encontramos. Decodificador: cuando usamos un shellcode en un exploit debemos evitar el uso de NULL y algunos caracteres especiales. Un ejemplo simple de codificacin es XOR. En la ejecucin un decodificador traducir el resto del cdigo a instrucciones reales. Obteniendo las direcciones de las funciones requeridas: despus del proceso de decodificacin brincaremos a un rea de memoria donde el shellcode continuar su ejecucin necesitamos encontrar la direccin de las APIs que usaremos y para ello podemos hacer uso de la instruccin GetProcAddress() La conexin al servidor objetivo de un shellcode. Un shellcode necesita un Shell y una conexin para permitirle la ejecucin de comandos. Bsicamente existen tres tcnicas comnmente usadas Bind to Port, Reverse Connect y One Way Shellcode.

Bind to port shellcode Es popularmente usada en las pruebas de concepto de los cdigos exploit. El cdigo shellcode implemente un socket lo asocia a un puerto especifico y escucha por una conexin. Una vez que acepta la conexin obtienes un shell y quedas en posicin de ejecutar cdigo remoto. Las siguientes APIs son necesarias para este tipo de conexin: WSASocket() bind() listen() accept()

La contramedida: el problema con este tipo de shellcode es debido a que cuando intentamos usar este desde el exterior intentando comprometer un servidor usualmente este no funcionar si este est protegido por un firewall pues aunque la vulnerabilidad sea explotada de manera exitosa y nuestro shellcode sea ejecutado, tendremos dificultades para conectarnos al puerto de tipo bind pues aunque el firewall permite a conexiones a servicios populares como son 25, 53, 80, etc. estos puertos usualmente ya estn siendo usados por otras aplicaciones. Reverse Shel Shellcode Debido a las limitantes del shellcode de tipo bind, los desarrolladores de exploits prefieren usar una conexin reversa en lugar de ligarse a un puerto y esperar por una conexin el shellcode simplemente se conectar hacia una IP y puerto predefinido. Es por ello que a diferencia del bind shellcode debemos incluir nuestra IP y puerto al cual nuestro objetivo se conectar. Tambin debemos ejecutar netcat o algo similar para aceptar conexiones. Las siguientes APIs son necesarias para implementar este tipo de conexin: WSASocket() connect() La contramedida: el problema con el shellcode de tipo de conexin reversa es que usualmente nos encontramos con servicios que han sido implementados detrs de un firewall en una zona de DMZ y estas por lo regular bloquean todas las conexiones salientes. One way shellcode Entonces existe una manera de controlar un servidor remotamente? Otra alternativa puede ser usar recursos disponibles del servicio vulnerable y/o hacer una evasin del mecanismo de autenticacin. Esto es muy til con servicios como una base de datos, telnet y ftp. Por ejemplo en el caso de un servicio web es posible crear pginas PHP, ASP y CGI que permitirn la ejecucin de cdigo remota mediante funciones en las pginas web. El gusano code red 2 hacia uso de un tcnica muy interesante para crear un backdoor en el servidor IIS. Mediante la creacin de un path al drive C: y D: del servidor hacia la raz web. Utilizando estos paths virtuales el atacante poda ejecutar cmd.exe, permitiendo as la ejecucin de cdigo remota. Mitigacin de exploits.

/GS Qu hace GS? - Es parte de los run-time checks que forman parte del compilador Visual C++.

El switch GS provee una cookie entre el buffer y la direccin de retorno. Si un overflow escribe sobre la direccin de retorno, este tendra que sobrescribir la cookie puesta entre esta y el buffer resultando en un nuevo stack layout.

En este punto podemos ver que tanto el stack como la direccin de retorno ha sido sobre escrito como 0xdeadbeef. Una vez que la funcin regresa debera ser una shell.

Sin embargo Cuando la funcin comienza a ejecutarse crea un valor de tipo cookie stack en frente de la direccin de retorno. Al final de la funcin este corrobora si el valor est intacto. En caso contrario, inmediatamente se detendr la ejecucin del programa sin hacer uso de la direccin de retorno que se corrompi.

Hardware DEP. Data Execution Prevention Hardware DEP toma ventaja de NX (No execute page protection, especificacin de AMD) o XD (Execute Disable, Especificacion de Intel) bit con CPUs compatibles conDEP y marcara ciertas reas de memoria que solamente debera contener datos como el heap y el stack como no ejecutables. Las formas en las que se puede implementar DEP en Windows son las siguientes: Optin: solamente un nmero limitado

You might also like