desbordamiento de buffer remoto

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

Upload: kelli

Post on 13-Jan-2016

29 views

Category:

Documents


0 download

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 Presentation

TRANSCRIPT

Page 1: Desbordamiento de buffer remoto

Desbordamiento de buffer remoto

Conceptos básicos(CPU Intel x86)

Page 2: 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 ...

Page 3: Desbordamiento de buffer remoto

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).

Page 4: Desbordamiento de buffer remoto

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:

Page 5: Desbordamiento de buffer remoto

...

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

Page 6: Desbordamiento de buffer remoto

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

Page 7: Desbordamiento de buffer remoto

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!

Page 8: Desbordamiento de buffer remoto

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.

Page 9: Desbordamiento de buffer remoto

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

Page 10: Desbordamiento de buffer remoto

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.

Page 11: Desbordamiento de buffer remoto

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.

Page 12: Desbordamiento de buffer remoto

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

Page 13: Desbordamiento de buffer remoto

FIN de la primera parte

¡Que no nos pase nada!

Page 14: Desbordamiento de buffer remoto

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).