0% encontró este documento útil (0 votos)
29 vistas18 páginas

Introducción a Ataques ROP

Este documento presenta una introducción a los ataques ROP (Return-Oriented Programming), incluyendo variantes de ROP, exploits ROP alfanuméricos, y cómo buscar vectores ROP. Explica conceptos como la protección DEP, ret-2-lib, y cómo los ataques ROP aprovechan la pila y la instrucción RET de x86 para ganar control de flujo. También cubre técnicas como manejar bytes nulos y crear shellcodes ROP alfanuméricos usando direcciones de código imprimibles.
Derechos de autor
© Attribution Non-Commercial (BY-NC)
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PPT, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
29 vistas18 páginas

Introducción a Ataques ROP

Este documento presenta una introducción a los ataques ROP (Return-Oriented Programming), incluyendo variantes de ROP, exploits ROP alfanuméricos, y cómo buscar vectores ROP. Explica conceptos como la protección DEP, ret-2-lib, y cómo los ataques ROP aprovechan la pila y la instrucción RET de x86 para ganar control de flujo. También cubre técnicas como manejar bytes nulos y crear shellcodes ROP alfanuméricos usando direcciones de código imprimibles.
Derechos de autor
© Attribution Non-Commercial (BY-NC)
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PPT, PDF, TXT o lee en línea desde Scribd

Advanced ROP Attacks

Juan Sacco ( runlvl )


@exploitpack [Link]

Resumen
Introduccion a los ataques ROP ROP variantes

Exploits ROP Alphanumericos


Buscando vectores Preguntas?

Ataques ROP
Introduccion de Juan Sacco Proteccion DEP (data execution prevention) Exploits basados en memoria Tecnicas ret-2-lib ( Todos sus tipos) Aplicable a varias arquitecturas

ROP Attacks
Los vectores son construidos Los vectores finalizan con un RET Ejemplo de vectores
Mov eax, ebx Ret Pop eax Ret

ROP attacks
x86 stack layout . Registro de ebp y esp apunta a la base y top respectivamente . EBP se usa para acceder local y se pasan parametros por ejemplo:. [ebp + 8] primer parametro (EBP + 4) para la direccion ret . ESP se usa como puntero para popear valores del stack

ROP attacks
RET x86 instruction
Pops un valor del stack hacia el EIP
Usado para retornar el control a una function RET puede tener argumentos ejemplo RET 8

RET 8 == EIP = stack[top], add ESP , 8

X86 stack layout


Ejemplo de una llamada ( CALL )
Int __stdcall function(int a, int b) // < paramerts { int b,c; // local c variables return 0; } function(10, 20); // function call __stdcall
X86 disassembly push 20 // arguments pushed from right to left push 10 call function function: push ebp mov ebp, esp sub esp, 8 . . add esp, 8 pop ebp ret 8 callie // Stack epilouge //8 bytes for two variabeles
__stdcall ( varadic arguments)

// ret 8 stack clearance by

Basico de un stack overflow


Una variable local en el stack es overflodeada La instruccin CALL empuja el EIP al stack Buscamos una funcion trampolin ejemplo jmp esp para cambiar el valor de eip a un buffer controlado

Que pasa con el NX bit?


DEP restringe la ejecucion de segmentos marcados como r/w Podemos reutilizar codigo desde el address space del ejecutable Utilizamos los chunks que nos sirven como vectores ROP Se pueden encadenar multiples vectores y hasta llamar a una API

ROP Basico ( Carga y Store de vectores)


Leyendo y cargando valores desde y hacia la memoria Ejemplo primitivo: pop eax; ret / pop ebx ret/ pop r32, ret Hacia el stop de memoria: pop eax, pop edx, ret / mov [eax],
edx; ret

Manejando NULLs!
Handling NULL bytes

Algunos parametros contienen NULL Algunas direcciones contienen zero ( valores ) No podemos injectar NULL o Zeros Funciones bugeadas como strcpy terminan de copiar cuando encuentran NULL byte (00 hex)

Handling NULL bytes


x = value contiene uno o muchos NULL bytes y = mask = 0xffffffff Axioma matematico A xor B = z (Por ejemplo) Ahora z xor B = A Podemos usar 0x00000000 xor 0xffffffff = z Xor para volver al valor principal Podemos usar xor esi, ebx ; ret!

ROP basico (Libs maths)


[Link] 0x77c4d6f add ebx, esi; stc; ret [Link] 0x7c902af5 sub eax,ecx; ret

Y asi tenemos mul y div!


Intenten immunity search o en olly: add r32, r32;any;ret;

ROP Shell-codes Alphaumericas

ROP Shellcodes
Shellcodes tradicionales pueden ser alphanumericas seleccionando ciertas instrucciones: Ejemplo. pop ecx has an opcode 0x59 que es el ASCII code del caracter Y)

Tecnica similar utilizada en ROP

. Seleccionando una direccion que sea printable envez de un opcode ( caso de sllecodes tradicionales )

ROP Shellcodes
Tecnicas basicas agregando dos direciones imprimibles, el tango de ASCII en los caracteres entre 0x21 y 0x7e Ejemplo, un vector en [Link] en 0x77D4B8C { pop ebx;ret} puede ser representada por dos direcciones:

0X225D414B(printable) + 0x55777777(printable) = 0x77D4B8C2(no-printable)

Comibadas pueden ser utilizadas para transformar codigo printable en uno que no lo es.
Tecnica similar se utiliza en ROP shellcodes

Alphanumeric ROP Shellcodes


Los vectores son utilizados para las direcciones que hacen decoding, los bytes deben ir en el rango 0x21 y 0x7e
Tambien necesitamos regiones de memoria que sean printables para poder guardar los vectores marcados como r/w

Para las regiones de memoria tenemos por ejemplo: [Link] 0x772C2E5E . MOV DWORD PTR DS:[ECX],EAX POP EAX . ESP relacionado a [Link] 0x775513E30 XCHG EAX,ESP [Link] 0x74722973

. [Link]

0x7D504962

ADD EAX,ECX

. [Link] MEM hacia reg 0x74714263 MOV EAX,DWORD PTR DS:[ECX] . Todas estas librerias son cargadas en memoria por internet explorer

Gracias!
Juan Sacco jsacco@[Link]

También podría gustarte