Desbordamiento de búfer
“buffer overflow”
Oscar Martínez Prats
Desbordamiento de búfer
01 Sobre mí
Oscar Martínez Prats 2
Desbordamiento de búfer
• Licenciado en Administración y Dirección Empresas.
• Certificaciones y cursos:
• Certificado en Etical Hacker y test de penetración.cker y
• Certificado de Hacking web.
• Correlación, detección y bloqueo de amenazas de red.
• Seguridad Perimetral.
• Hardening de sistemas operativos Windows.
• Hardening de sistemas operativos GNU/Linux.
• Hardening de servicios GNU/Linux. Hardening Mac OS.
• Hardening de aplicaciones Microsoft.
• Criptografía aplicada a la empresa.
• Curso de Inteligencia Artificial.
• Sistemas de seguridad de la información ISO 27001 y LOPD.
• Programación segura.
• Certificado de Oficial de seguridad de la información.
• Trabajando actualmente:
• Consultor/Analista en Wise Security.
Oscar Martínez Prats 3
Desbordamiento de búfer
02 Objetivo ponencia
Oscar Martínez Prats 4
Desbordamiento de búfer
Objetivo de la ponencia:
El objetivo de la ponencia es el aprendizaje del funcionamiento del desbordamiento de buffer. Durante el desarrollo
de la conferencia se podrá ir viendo el análisis de un programa en la victima con un debbugeador y analizar con
detalle el comportamiento de la aplicación, y nos permitirá modificar la manera de proceder de dicha aplicación
para que se ejecute código malicioso y obtener una sesión de la víctima. El código generado para la explotación
estará realizado con el lenguaje de programación de Python.
Una única aplicación vulnerable permitirá realizar distintas formas de realizar los ataques, desde una metodología
normal donde se incluirá la shell fuera del vaso y de la instrucción EIP, otra metodología al revés donde se incluirá
la shell dentro del vaso, y finalmente a través del módulo kernel32.dll, todo ello tendrá una explicación teórica
para una mejor comprensión en todo momento, en dicha conferencia se introducirá la creación de la Shell a través
de la existencia caracteres malos.
Finalmente se realizarán diferentes conexiones a la victima a través de metasploit con el modulo reverse_tcp y el
modulo Shell_bind.
Esta conferencia se llevará a cabo con un sistema operativo Windows7 de la víctima y un Linux por parte del
atacante más concretamente la Kali Linux y el lenguaje de programación utilizado será Python.
Oscar Martínez Prats 5
Desbordamiento de búfer
Esta metodología consiste en generar exploits para
Windows, del tipo stack buffer overflow. Para ello se
03
generaran ataques con exploits locales que permitan
la ejecución de una Shell en la victima.
Para su desarrollo se analiza el programa victima con
un debuggeador y se genera un script en Python que
realizara la explotación. Se realizaran pruebas en un
único programa.
Oscar Martínez Prats 6
Desbordamiento de búfer
Como saber si es vulnerable a bufferoverflow?
Primero se debería llenar el vaso. Se enviarán muchas
letras por ejemplo letras “AAA…”, hasta que se llene el
vaso, se rebase y caiga en el plato y se esperará que
también sea llenado con la letra “AAA…” es llamada esta
instrucción EIP. Si se genera este error e inundando el
plato y llegando al espacio exterior, entonces es
vulnerable a bufferoverflow.
Nuestro objetivo es introducir un Shell que nos permita una conexión a la victima.
Donde va la Shell?
Puede ir dentro del vaso o en el en el espacio exterior.
Oscar Martínez Prats 7
Desbordamiento de búfer
Resolución por la metodología normal:
Payload= basura+EIP+NOPS+Shell.
La basura es la que llenará el vaso.
La EIP llenará el plato.
NOPS: Entre el plato y el espacio exterior hay un espacio
y hay que llenarlo para que se ejecute la Shell (que está
situada en el espacio exterior).
La Shell nos permite la conexión con la victima.
Oscar Martínez Prats 8
Desbordamiento de búfer
Resolución por la metodología al revés:
Payload= NOPS+Shell+basura+EIP.
Esta metodología cambiará toda la estructura.
Dentro del vaso se incluirán:
NOPS+Shell+basura: Iran dentro del vaso y serán igual
al tamaño del vaso.
EIP estará dentro del plato.
La Shell debe ser más pequeña que le tamaño del vaso..
Oscar Martínez Prats 9
Desbordamiento de búfer
04 Estructura de la ponencia
Oscar Martínez Prats 10
Desbordamiento de búfer
Instrucciones Explicación Explotación,
dubuggeador explotación normal y reversa
mediante gráficos
-Uso del debuggeador. -Explicación grafica -Metodologías de explotación,
-Instrucciones lenguaje ensamblador. de las diferentes normal y reversa (varias formas).
-Cambia el comportamiento normal, explotaciones. -Shell bind y reverse meterpreter.
ejecutando función que no debería
ejecutarse.
Explicación y Explotación Caracteres
utilización mediante malos
NOPS modulo
-Utilizar los NOPS en la -EIP kernel32.dll (JMP ESP) -Badchar:
posición correcta para que -Se genera un script Python
se ejecute correctamente el que genera todos los
payload. caracteres
del 00 al FF.
-Se simula un carácter malo.
Oscar Martínez Prats 11
Desbordamiento de búfer
05 Orden del ataque
Oscar Martínez Prats 12
Desbordamiento de búfer
Orden de ataque
• Enviar muchas letras A (basura) para ver si se sobrescribe el EIP.
• Enviar patrón del mismo largo y ver con cuantos caracteres se llena el vaso, así como
cuantos NOPS se necesitan.
• Enviar la basura en la cantidad necesaria para llenar el vaso, BBBB y C*100, podrían ser
mas C (depende del numero total enviado).
• Extraer el EIP que va a ser utilizado, considerando todas las variables y metodologías de
explotación, aquí es donde determinaras si es al revés o normal.
• Determinar caracteres malos.
• Generar Shell sin caracteres malos y ejecuta.
• En el caso de crashear cambiar el EIP, es la principal razón para que no funcione o
también una Shell mala.
Oscar Martínez Prats 13
Desbordamiento de búfer
06 Metodología normal
Oscar Martínez Prats 14
Desbordamiento de búfer
Se abrirá con el Immunitysdebugger el
ejecutable, en este caso se conseguirá una
conexión remota en este ejemplo el puerto
9000 estará a la escucha.
Oscar Martínez Prats 15
Desbordamiento de búfer
Se debe saber la IP local, en nuestro
ejemplo es la “maquina” de nuestra
victima, para en posteriores
diapositivas explicar la obtención de la
Shell.
Oscar Martínez Prats 16
Desbordamiento de búfer
-Se generará el ataque con la maquina de Kali, también su correspondiente Shell,
en conclusión el atacante utilizará la maquina de Kali Linux.
-Se utilizará el lenguaje de programación de Python.
-Instrucciones:
- Se utilizará al interprete de python
- Se importara la librería de socket y SYS.
- Con socket.socket estableceremos el tipo de conexión que vamos atener,
- El mensaje se enviara a través de sock.send, en este caso son 2000 letras A.
El objetivo es enviar una cadena de 10.000 letras para haber si sobrescribe la
EIP, y en conclusión saber si el ejecutables es vulnerable.
Oscar Martínez Prats 17
Desbordamiento de búfer
Se sobrescribió el EIP con 41414141(AAAA),
como resultado se lleno el vaso, y cayeron en
Se inicia el exploit, con la correspondiente IP de la el plato, se puede verificar que este
victima. ejecutables es vulnerable al desbordamiento de
bufer.
Oscar Martínez Prats 18
Desbordamiento de búfer
A continuación con el resultado favorable a la
vulnerabilidad de overflow, se creara un patrón
para saber el punto exacto en que se llena el
vaso, en definitiva donde se encuentra el EIP.
Oscar Martínez Prats 19
Desbordamiento de búfer
El patrón creado es una combinación de números y letras consecutivos. Una vez
generado el patrón, en lugar de mandar todas las AAA como se hizo
anteriormente, se enviará el patrón para saber con exactitud el momento donde se
llena el vaso.
Oscar Martínez Prats 20