Está en la página 1de 35

Tumbando a Tux Creando exploits para GNU/Linux

Mauricio Velazco Certified Ethical Hacker mvelazco@open-sec.com http://ehopen-sec.blogspot.com/ http://twitter.com/mvelazco

Dont Learn To HACK, HACK To Learn


www.Open-Sec.com

Quin soy?
Geek Arequipeo Consultor Ethical Hacker Trainer
www.Open-Sec.com

Linux vs Windows ?

www.Open-Sec.com

Linux Vulnerabilities
Buffer Overflow Heap Overflow Integer Overflow Format String Race Condition Use after free Invalid Pointer or reference

www.Open-Sec.com

Linux Vulnerabilities
http://cwe.mitre.org/data/definitions/633.html

www.Open-Sec.com

Linux Vulnerabilities
Vulnerabilidades en el Kernel (ring 0)

www.Open-Sec.com

Buffer Overflow
Un desbordamiento de buffer es un error de software que se produce cuando se copia una cantidad de datos sobre un rea que no es lo suficientemente grande para contenerlos, sobrescribiendo de esta manera otras zonas de memoria.

www.Open-Sec.com

Buffer
Bloque de memoria contiguo que guarda mltiples instancias de un mismo tipo de dato. Arrays int [], char [],

www.Open-Sec.com

Buffer Overflow
1996, Aleph One, Smashing the Stack for Fun and Profit Morris Worm (1988) Conficker (2008)

www.Open-Sec.com

www.Open-Sec.com

Buffer.c
int main(int argc, char** argv) { char buff[5]; char str[20] = 12345678901234567890; strcpy(buff, str); return 0; }
www.Open-Sec.com

Pila (Stack)

www.Open-Sec.com

Pila (Stack)
Almacenar la direccin de retorno. Variables locales Paso de parmetros Contexto de subrutinas Retorno de valores
www.Open-Sec.com

Pila (Stack)
int main(int argc, char** argv) { int a=1; int b=2; sumar2(a,b); return 0; } int sumar2 (int x, int y) { x++; y++; return x+y; }

push 2 push 1 call sumar push ret


www.Open-Sec.com

ret

Pila (Stack)

www.Open-Sec.com

Registros del CPU


Un registro es como una variable (nmero fijo ) Cada registro es un lugar del CPU donde se guarda un valor Un registro normalmente guarda punteros de direcciones de memoria. Intel (x86) tiene 8 registros de 32 bits eax, ebx, ecx, edx, esi, edi, ebp, esp.

www.Open-Sec.com

Registros del CPU


Propsito General EAX EBX ECX EDX Direcciones de Memoria EIP ESP EBP

www.Open-Sec.com

Stack Overflow

www.Open-Sec.com

www.Open-Sec.com

Cmo se descubren fallos?


Para algunos un crash del sistema es slo eso, para otros es un potencial fallo de seguridad aprovechable. En la actualidad se ha hecho muy extendido el uso de fuzzers para descubrir vulnerabilidades. Se pueden descubrir fallos de seguridad mediante la revisin de cdigo fuente.
www.Open-Sec.com

Cmo se descubren fallos?


Sometiendo a las aplicaciones a pruebas de intrusin. Muchas veces se descubren fallos de seguridad simplemente utilizando el sistema.

www.Open-Sec.com

Fuzzing (1989 Universidad de Wisconsin Madison)

Se llama fuzzing a las diferentes tcnicas de testeo de software capaces de generar y enviar datos secuenciales o aleatorios hacia los puntos de entrada de una aplicacin, con el objeto de detectar defectos o vulnerabilidades o existentes en el software auditado
Los fuzzers pueden estar enfocados a tanto a protocolos de red, como a formatos de archivos, sistemas de ficheros, etc

www.Open-Sec.com

Fuzzing : Forzando un error

www.Open-Sec.com

Fuzzing : Demo

www.Open-Sec.com

Cmo se explota ?
Controlar el registro EIP . Ingresar cdigo malicioso (shellcode). Sobreescribir EIP con la direccin de memoria que haga referencia al cdigo malicioso.

www.Open-Sec.com

Shellcode (payload)
Es un conjunto de rdenes programadas generalmente en lenguaje ensamblador y trasladadas a opcodes que suelen ser inyectadas en la pila para luego ser ejecutadas. El trmino shellcode deriva de su propsito general, esto era una porcin de un exploit utilizada para obtener una shell.

www.Open-Sec.com

Para poder jugar...

# echo 0 > /proc/sys/kernel/randomize_va_space >= 2.6.12 $ gcc -fno-stack-protector -z execstack -o bug bug.c

www.Open-Sec.com

Vulnerabilidad Local

SMASHME
www.Open-Sec.com

[133] [EIP] Shellcode (\x6a\x0b\x58\x99\x52\x68\x2f\x2f\x73\x68\x68\x2 f\x62\x69\x6e\x89\xe3\x31\xc9\xcd\x80) 133-21 = 112 NOP = 0x90 [112 NOPs] [Shellcode] [EIP]
www.Open-Sec.com

www.Open-Sec.com

Vulnerabilidad Remota

VULN
www.Open-Sec.com

[268] [EIP] [Shellcode] Shellcode >> msfpayload Shell reversa EIP = JMP ESP

www.Open-Sec.com

www.Open-Sec.com

Links de inters
www.google.com www.shell-storm.org Smashing The Stack for Fun & Profit www.google.com
www.Open-Sec.com

Happy Hacking
Mauricio Velazco Certified Ethical Hacker mvelazco@open-sec.com http://ehopen-sec.blogspot.com/ http://twitter.com/mvelazco

Dont Learn To HACK, HACK To Learn


www.Open-Sec.com

También podría gustarte