desbordamiento de buffer remoto
DESCRIPTION
Conceptos básicos (CPU Intel x86). Desbordamiento de buffer remoto. 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. - PowerPoint PPT PresentationTRANSCRIPT
Desbordamiento de buffer remoto
Conceptos básicos(CPU Intel x86)
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 ...
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).
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:
...
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 meteen buffer buff_pet_usuario;...función(buff_pet_usuario,...);...}
buff_pet_usuario
...
MAIN
FUNCION
...
Saved Frame Pointer
Buffer local, es desbordadoy en la posición de la direcciónde retorno de la función, metemosuna 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 retornomachacada!
buff_aux_local
...
Info...
Dirección dentro de buff_pet_usuario
Parámetro 1
...
Info...
Shellcode
buff_pet_usuario
La función copia partede la petición a buff_aux_local
Info a copiar en buff_aux_local
1)
2)
3)
STACK OVERFLOW
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!
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.
buff_pet_usuario:
NOP NOP 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 STARTCALLZ
START
Direcciónde salto: algún lugar entre los NOPs
“/bin/sh” Dirección en pila,comodirección de retorno deCALL START
No sabemos enqué sitio de la memoria va a estarel string “/bin/sh”
Info de la petición
Info a copiar a buff_aux_local
SHELLCODE
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.
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.
Referencias:
● 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
– How to write buffer overflows.
● http://www.securiteam.com/securityreviews/5OP0B006UQ.html
– Writing buffer overflows exploits – a tutorial for beginners.
● http://www.shmoo.com/securecode
– How to write secure code.
● http://www.thc.org
● http://rootkit.com
FIN de la primera parte
¡Que no nos pase nada!
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).