Beruflich Dokumente
Kultur Dokumente
ndice (I)
Parte TERICA.
Un poco de historia. Conceptos bsicos: registros, memoria, ASM, etc. Tipos de exploits. Modo de actuacin de cada tipo de exploit. Sistemas de proteccin anti-exploits. Mtodos de evasin anti protectores de pila/heap. Programacin de shellcodes para exploits. Mtodos de evasin en shellcodes anti IDS.
ndice (II)
Parte PRCTICA.
Funcionamiento bsico de exploits: Stack. Heap (pointer/function pointer/VPTR overwrite). Format String. Casos de reales: Remote root con un b0f. Remote root con un exploit de formato (Posadis DNS, Washington University (wu-ftp) FTP).
El primer Exploit
2 de noviembre de 1988, un gusano, el "Internet Worm", causa los mayores daos de la historia, hasta entonces... b0f en fingerd y replicacin con sendmail. Desde entonces, se han explotado buffer overflows en todo tipo de aplicaciones y en todo tipo de sistemas operativos.
La Memora de un Proceso
func2(argy1..argyn) var v1, v2
func1(argx1..argxn) var u1, u2 ret ./programa call func1 call func2 v1, v2 ret u1, u2
Instruccin
mov inc dec add sub xor lea int push pop
Funcin
mover datos entre/de/a un registro/memoria incrementar un registro decrementar un registro sumar algo a/desde un registro restar algo a/desde un registro 0 xor 0=0;0 xor 1=1;1 xor 0=1;1 xor 1 = 0; pasar un dato en mem a un registro (load effective address) ejecuta una interrupcin: syscall(0x80) aade un elemento en la pila extrae un elemento de la pila
La Pila
Parmetros en llamadas a funciones. Variables locales. Valores de retorno. Permitir controlar el flujo de ejecucin tras una llamada a funcin.
1 ][
top of memory 2 ][ ]
bottom of stack
Explotando la pila(I):
Si podemos modificar la direccin de retorno (ret) guardada de forma implicita por call podremos variar el flujo norma de ejecucin. x = 1 = 0 !
Heap
Espacio para variables que emplean memoria de forma dinmica. El espacio es reservado por la aplicacin.
Es difcil que se produzca esta condicin. Requiere localizar la direccin de argv[1]. Es independiente del SO.
ptr buf /tmp/tmpfile.tmp ptr buf /root/.rhosts
Sobreescritura de punteros a funciones Requiere un orden estricto en la declaracin ... de variables: static char buf[BUFSIZE];
static int (*funcptr)(const char *str); ...
Es difcil que se produzca esta condicin. Permite ejecutar otra funcin o shellcode.
ptr buf ptr buf
system(/bin/sh)
B son los bytes Buffer Object[0]: BBBBBB....BBBBBBBVVVV V el byte de la VPTR a VTABLE_MyClass1 =+== I es informacin de la clase que +--------------------+ hereda de BaseClass (MyClass1) +--> IIIIIIIIIIIIIIIPPPP P es el apuntador a la fun. PrintBuffer VTABLE_MyClass1 +----(1)---<------------------+ | ==+= SSSS..SSSS..NNN..CCCCC..CCCCVVVV0 | + +----(2)--->-----+ S N C V 0 es la dir. de inicio del shcode bytes de alineamiento (NOPs) codigo del shellcode Puntero a la funcin virtual 0x00h que finaliza el buffer
Shellcodes (I)
Es un conjunto de instrucciones compiladas de ensamblador que realizan una funcin normalmente simple y con unas restricciones precisas debido a su uso. Toma el nombre a su primer objetivo: ejecutar una shell.
Shellcodes (II):
Herramientas gdb: debug/trace. nasm: compilacin de cdido ensamblador. disasm: desemblado/anlisis de scodes. Un ejecutor de shellcodes. Un convertidor de scodes a binarios para anlisis de shellcodes.
Shellcodes (II):
Limitaciones NULL byte: No pueden contener \00 (eos). Addressing problem: No se pueden emplear direccin de memoria hardcoded. Tamao: No se suele disponer de buffers muy grandes. El shellcode ha de ser reducido.
Shellcodes (IV):
Mtodos de evasin anti IDS Ofuscacin de cadenas sensibles a la deteccin (p.e. /bin/sh). Shellcodes alfanmericos (Raise (netsearch), rix (Phrack)). Shellcodes comprimidos.
La mayora de exploits son posibles gracias a funciones C no fiables (e.j strcpy, sprintf, ..). Dos mecanismos de proteccin: Libsafe, Grsecurity, StackGuard y StackShield.
strcpy de Libsafe:
max_size: distancia (#bytes) entre dest y el frame pointer de dest => tamao mximo posible que puede tener dest.
char *strcpy (char *dest, const char *src) { ... if ((len = strlen(src, max_size)) == max_size) /*overflow?*/ _libsafe_die(Overflow caused by strcpy()); memcpy(dest,src,len+1); /* libreria estandard de C */ return dest; }
Inconvenientes
Embedded Frame Pointer => gcc con -fomit-frame-pointer Podemos ejecutar exploits basados en sobreescritura de punteros a ficheros o funciones (sin sobrepasar el max_size)
Conjunto de parches para el kernel. Ofrecen la posibilidad de hacer las areas de memoria stack y heap no ejecutable. Open Wall -> Stack PaX -> Head y Stack www.grsecurity.net
Bibliografa (I):
Stack Overflows
prym: finding and exploiting programs with buffer overflows. http://destroy.net/machines/security/buffer.txt lefty: Buffer overruns, whats the real story". http://reality.sgi.com/nate/machines/security/stack.nfo.txt kekabron: Buffer Overflows (b0fs). Netsearch Ezine #4 (0x11). http://www.netsearch-ezine.com klog: The Frame Pointer Overwrite". Phrack #55 (0x08). http://www.phrack.org/show.php?p=55&a=8 Aleph1: Smashing the Stack for Fun and Profit. Phrack #49 (0x05). http://www.phrack.org/show.php?p=56&a=5
Bibliografa (II):
Heap Overflows
Fayolle, Pierre-Alain; Glaume, Fayolle: A Buffer Overflow Study. Attacks & Defenses". http://www.enseirb.fr/~glaume/bof/report.html Matt Conover & w00w00 Security Team: w00w00 on Heap Overflow". http://www.w00w00.org/articles.html cafo: Heaps Overflows (1/2). Netsearch Ezine #4 (0x14). http://www.netsearch-ezine.com rix: Smashing C++ VPTRS". Phrack 56 (0x08). http://www.phrack.org/show.php?p=56&a=8 twitch: Taking advantage of non-terminated adjacent Memory Spaces. Phrack 56 (0x0e). http://www.phrack.org/show.php?p=56&a=14
Bibliografa (III):
gera & riq: "Advances in format string exploiting". Phrack 59 (0x07). http://www.phrack.org/show.php?p=59&a=7 scut/team teso: "Exploiting Format String Vulnerabilities". http://teso.scene.at/releases/formatstring-1.2.tar.gz Umesh Shankar: Detecting Format String Vulnerabilities with Type Qualifiers. http://qb0x.net/papers/FormatString/usenix01/usenix01.pdf RaiSe: Bugs de Formato (1/2). NetSearch Ezine. http://www.netsearch-ezine.com The Itch: Exploiting local format string holes on x86/ linux. http://qb0x.net/papers/FormatString/fmtpaper.txt Frdric Raynal: Howto remotely and automatically exploit a format bug. http://www.security-labs.org/cvRaynal.pdf
Bibliografa (IV):
Writing Shellcodes (I)
Fayolle, Pierre-Alain; Glaume, Fayolle: A Buffer Overflow Study. Attacks & Defenses". http://www.enseirb.fr/~glaume/bof/report.html Matt Conover & w00w00 Security Team: w00w00 on Heap Overflow". http://www.w00w00.org/articles.html Umesh Shankar: Detecting Format String Vulnerabilities with Type Qualifiers. http://qb0x.net/papers/FormatString/usenix01/usenix01.pdf RaiSe: Shellcodes en Linux/i386. Netsearch Ezine #4 (0x04). http://www.netsearch-ezine.com RaiSe: Shellcodes en Linux/i386 (2). Netsearch Ezine #5 (0x04). http://www.netsearch-ezine.com The Last Stage of Delirium Research Group: UNIX Assembly Codes Development for Vulnerabilities Illustration Purposes. Version 1.0.2. http://lsd-pl.net/papers.html#assembly
Bibliografa (IV):
Writing Shellcodes (II)
Zillion: Writing Shellcode. https://uhf.ath.cx/papers/Writing_shellcode.htm Miyagi, Robin: Linux Assembler Tutorial. http://www.geocities.com/SiliconValley/Ridge/2544 Linux System Call Table. http://quaff.port5.com/syscall_list.html UNF && pr1: Writing Linux/x86 shellcodes for dum dums. http://www.u-n-f.com/papers/shellcode-pr10n.txt
Bibliografa (V):
Sistemas de proteccin/evasin.
Bulba and Kil3r: Bypassing StackGuard and StackShield. Phrack 56 (0x05). http://www.phrack.org/show.php?p=56&a=5 Bypassing PaX ASLR Protection. Phrack 59 (0x09). http://www.phrack.org/show.php?p=59&a=9 Nergal: The advanced return-into-lib(c) exploits (PaX case study). Phrack 58 (0x04). http://www.phrack.org/show.php?p=58&a=4 Cowan, Crispin; Wagle, Perry; Pu, Calton; Beattie, Steve; Walpole, Jonathan: Buffer Overflows: Attacks and Defenses for the Vulnerability of the Decade http://www.cse.ogi.edu/DISC/projects/immunix Fayolle, Pierre-Alain; Glaume, Fayolle: A Buffer Overflow Study. Attacks & Defenses". http://www.enseirb.fr/~glaume/bof/report.html