La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Desbordamiento de buffer remoto Conceptos básicos (CPU Intel x86)

Presentaciones similares


Presentación del tema: "Desbordamiento de buffer remoto Conceptos básicos (CPU Intel x86)"— Transcripción de la presentación:

1 Desbordamiento de buffer remoto Conceptos básicos (CPU Intel x86)

2 Ventajas del método: ● No necesita cuenta de usuario en la máquina a asaltar como la necesitaría una escalada de privilegios. ● Los exploits suelen ser bastante compactos y no muy extensos. ● El código de Windows...

3 Tipos de Desbordamiento ● Tres tipos : – Desbordamiento de buffer en stack (machacar dirección de retorno en el stack). <------- – Desbordamiento de “heap memory” (machacar “header” de espacio libre, la función de asignación machaca dirección de retorno de función). – Desbordamiento en segmento de datos (machacar puntero a función).

4 Código y datos de sólo lectura Variables estáticas (espacio reservado y valores de inicialización) Pila (stack) Memoria dinámica (heap) Parte alta de memoria Parte baja de memoria Regiones de un proceso en memoria:

5 ... buff_aux_local Dirección de Retorno Parámetro 1 Parte alta de la pila Stack pointer Parte alta de memoria Parte baja de memoria Parte baja de la pila función(char *parametro1,...) { char buff_aux_local[N];... procesa la petición del usuario del servicio: parte de la info se mete en buff_aux_local; } main() {... char buff_pet_usuario[SIZE];... apertura de un socket, asociado a un puerto donde se presta el servicio; escucha en el socket y lo que reciba lo mete en buffer buff_pet_usuario;... función(buff_pet_usuario,...);... } buff_pet_usuario... MAINMAIN FUNCIONFUNCION Saved Frame Pointer

6 Buffer local, es desbordado y en la posición de la dirección de retorno de la función, metemos una dirección que apunta a una posición dentro de buff_pet_usuario, a un lugar que nos interese en el shellcode. ¡ Dirección de retorno machacada! buff_aux_local... Info... Dirección dentro de buff_pet_usuario Parámetro 1... Info... Shellcode buff_pet_usuario La función copia parte de la petición a buff_aux_local Info a copiar en buff_aux_local 1) 2) 3) STACK OVERFLOW

7 Shellcode ● Escucha en otro puerto diferente al del servicio o aplicación. ● Asocia una “shell” de commandos interactiva a ese puerto. ● Con un poco de suerte... ¡ se ejecutará con privilegios de administrador!

8 Requisitos del shellcode: ● El paso a ensamblador de la shellcode debe cumplir con el requisito de no tener caracteres nulos intermedios, pues podrían ser entendidos como final del string que se mete en el buffer (p.ej: MOVL %EBX,0x0 -> XOR %EBX,%EBX). ● La estructura de la información en el buffer a desbordar, dependerá de la aplicación o servicio a ser atacado. Normalmente el código de la shellcode, y la información necesaria para desbordar el buffer local de la función vulnerable, se integrarán en una petición “válida” para esa aplicación o servicio. ● No sabemos donde está el buffer en el que colocamos el shellcode: todos los direccionamientos deben ser relativos.

9 buff_pet_usuario: NOP NOP... JMP CALLZ (salto relativo) - sacar de la pila dirección del string “/bin/sh” y meterlo en un registro. - apertura de un socket en un puerto predefinido, - espera conexiones en ese puerto. - ejecutar la shell CALL START CALLZ START Dirección de salto: algún lugar entre los NOPs “/bin/sh” Dirección en pila,como dirección de retorno de CALL START No sabemos en qué sitio de la memoria va a estar el string “/bin/sh” Info de la petición Info a copiar a buff_aux_local SHELLCODESHELLCODE

10 En un caso real (I): ● Para una aplicación/versión/S.O. determinados que queremos atacar, podemos averiguar donde comienza la pila. A partir de ahí intentar caer en los NOPs de relleno que hemos colocado con el shellcode en el buffer. ● El fin de los NOPs es aumentar la probabilidad de acertar en el sitio adecuado con el salto.

11 En un caso real (II): ● Connect back shells: – Abren conexiones a puertos predefinidos de la máquina atacante. – El objetivo es burlar posibles firewalls intermedios. ● En desbordamientos de buffer locales, usar variables de entorno si no cabe el shellcode en el buffer donde se realiza la petición del usuario: – Las variables de entorno se cargan a principio de la pila del programa.

12 Referencias: ● http://compsecassoc.org/downloads/Smashing_The_Stack.txt : http://compsecassoc.org/downloads/Smashing_The_Stack.txt – Smashing the stack for fun and profit. ● http://www.insecure.org/stf/mudge_buffer_overflow_tutorial.html http://www.insecure.org/stf/mudge_buffer_overflow_tutorial.html – How to write buffer overflows. ● http://www.securiteam.com/securityreviews/5OP0B006UQ.html http://www.securiteam.com/securityreviews/5OP0B006UQ.html – Writing buffer overflows exploits – a tutorial for beginners. ● http://www.shmoo.com/securecode http://www.shmoo.com/securecode – How to write secure code. ● http://www.thc.org http://www.thc.org ● http://rootkit.com http://rootkit.com

13 FIN de la primera parte ¡Que no nos pase nada!

14 Demo de Exploits: ● Microsoft IIS 5.x SSL PCT1.0 Remote Windows 2K/XP Exploit (MS04-011). ● KAHT II Massive DCOM RPC Exploit (MS03-026). ● Microsoft Internet Explorer.ANI Files Handling Exploit (MS05- 002). ● LSASS.EXE Win2K Pro Remote Denial-of-Service (MS04-007). ● Metasploit (version 2.4 : 77 exploits).


Descargar ppt "Desbordamiento de buffer remoto Conceptos básicos (CPU Intel x86)"

Presentaciones similares


Anuncios Google