Descargar la presentación
La descarga está en progreso. Por favor, espere
Publicada porConcepción Cabrera Navarrete Modificado hace 9 años
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).
Presentaciones similares
© 2025 SlidePlayer.es Inc.
All rights reserved.