1 / 14

Desbordamiento de buffer remoto

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.

kelli
Download Presentation

Desbordamiento de buffer remoto

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

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

  5. Parte alta de memoria 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,...); ... } 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

  6. La 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 Info... 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. 2) Info... buff_aux_local ...

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

  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 : • 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

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

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

More Related