Title: Desbordamiento de buffer remoto
1Desbordamiento de buffer remoto
- Conceptos básicos
- (CPU Intel x86)
2Ventajas 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 ...
3Tipos de Desbordamiento
- Tres tipos
- Desbordamiento de buffer en stack (machacar
dirección de retorno en el stack). lt------- - 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).
4Regiones de un proceso en memoria
Pila (stack) Memoria dinámica (heap)
Parte alta de memoria
Variables estáticas (espacio reservado y valores
de inicialización)
Código y datos de sólo lectura
Parte baja de memoria
5Parte alta de memoria
función(char parametro1,...) char
buff_aux_localN ... procesa la petición del
usuario del servicio parte de la info se mete en
buff_aux_local main() ... char
buff_pet_usuarioSIZE ... 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,...) ...
M A I N
buff_pet_usuario
Parte baja de la pila
...
Parámetro 1
...
F U N C I O N
Dirección de Retorno
Saved Frame Pointer
buff_aux_local
...
Parte alta de la pila
Stack pointer
Parte baja de memoria
6La función copia parte de la petición a
buff_aux_local
STACK OVERFLOW
Info a copiar en buff_aux_local
Shellcode
buff_pet_usuario
Parámetro 1
3)
1)
...
Dirección de retorno machacada!
Dirección dentro de buff_pet_usuario
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.
Info...
2)
Info...
buff_aux_local
...
7Shellcode
- 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!
8Requisitos 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 -gt 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.
9Info de la petición
buff_pet_usuario
Info a copiar a buff_aux_local
Dirección de salto algún lugar entre los NOPs
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
START
S H E L L C O D E
CALL START
CALLZ
No sabemos en qué sitio de la memoria va a
estar el string /bin/sh
/bin/sh
Dirección en pila,como dirección de retorno
de CALL START
10En 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.
11En 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.
12Referencias
- http//compsecassoc.org/downloads/Smashing_The_Sta
ck.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/5OP0B006
UQ.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
13FIN de la primera parte
14Demo 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).