Buffer-Overflow-y-Exploits-Bernardo

Download Report

Transcript Buffer-Overflow-y-Exploits-Bernardo

BUFFER OVERFLOW Y EXPLOITS
Bernardo Coutinho
@bernardocout
TEMARIO


Introducción
Buffer Overflow




Stack Overflow



Un poco de historia
Definición
Tipos
Funcionamiento de la pila
Exploits y Shellcodes
EOF
INTRODUCCION
Vulnerabilidad: es un punto débil del sistema,
un error o una deficiencia. Ej: un fallo de
programación. Es conocido en jerga informática
como «bug».
Ataque: es comprometer la seguridad del sistema
aprovechándose de alguna vulnerabilidad del
mismo.
Contramedida: acciones a llevar a cabo para
evitar tener vulnerabilidades en el sistema.
INTRODUCCION
Las vulnerabilidades más comunes se dan por el
uso de software con fallas de programación.
Algunos ejemplos comunes:
– Falla en la validación de la entrada de
datos.
– Falla en el sistema de validación de
acceso.
– Error de configuración.
BUFFER OVERFLOW: ALGO DE HISTORIA
Robert T. Morris
desarrolló en 1988 el
primer gusano que se
autopropagó por Internet
utilizando un fallo de
Buffer Overflow en los
UNIX de esa época. Miles
de ordenadores fueron
infectados.
BUFFER OVERFLOW: ALGO DE HISTORIA (2)
En el 2001, el gusano Code Red se aprovecho de
un Buffer Overflow en el servidor web IIS de
Microsoft que permitía obtener un acceso como
administrador del sistema.
En 2003 apareció SQLSlammer que permitía la
ejecución de código arbitrario en servidores
SQL Server 2000.
BUFFER OVERFLOW: DEFINICION
El Buffer Overflow o Desbordamiento de Buffer
es una falla de software que se da por una
incorrecta validación de los datos de entrada,
permitiendo así copiar en una porción de
memoria más datos de los que puede almacenar.
BUFFER OVERFLOW: TIPOS

Stack Overflow

Heap Overflow

Format String Overflow

Integer Overflow

Return into libc o pilas no ejecutables
STACK OVERFLOW
En Español Desbordamiento de la Pila, es el
tipo de Buffer Overflow más común.
La pila es una estructura de datos en la
cual el último elemento que entró es el
primero que sale.
La pila se usa generalmente para almacenar:
 Direcciones de retorno de funciones
 Variables locales
 Parámetros de funciones
FUNCIONAMIENTO DE LA PILA
Hay dos registros del procesador que permiten
el manejo de la pila:
 EBP: contiene la dirección de la base de la
pila.
 ESP: contiene la dirección de la cima de la
pila.
FUNCIONAMIENTO DE LA PILA
FUNCIONAMIENTO DE LA PILA
Si para una variable local se le reservan 10
bytes, y luego se copian más de 10 bytes, puede
suceder que pisemos la dirección de retorno.
Modificando esa dirección de retorno de manera
inteligente podemos ir a cualquier punto
determinado del programa o incluso ejecutar un
programa puesto por nosotros en memoria.
EXPLOIT
Un
exploit
es
un
programa
que
permite
automatizar la tarea de explotar una falla.
Podemos desarrollar un exploit para aprovechar
un
buffer
overflow
y
ejecutar
código
arbitrario, escalar privilegios, realizar una
denegación de servicio, etc.
SHELLCODES
Una shellcode es un conjunto de instrucciones
especialmente diseñadas para ser inyectadas por
un exploit.
Lo más común es construir shellcodes para:
- Obtener una consola
- Abrir una puerta trasera.
- Generar una conexión reversa.
- Obtener una cuenta de administrador.
SHELLCODES
No pueden contener instrucciones cuyo OP CODE
sea cero, ya que ese valor se interpreta como
fin de cadena y no se podrá inyectar con el
exploit.
Lo más común es que se desarrollen en ASM, ya
que
tenemos
un
mayor
control
de
las
instrucciones.
Es difícil obtener shellcodes genéricas, que
son aquellas que funcionan en varios sistemas.
¡GRACIAS POR SU ATENCION!
Bernardo Coutinho
@bernardocout
[email protected]