La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Shellcodes Eduardo Ruiz Duarte Rommel Sanchez Verdejo

Presentaciones similares


Presentación del tema: "Shellcodes Eduardo Ruiz Duarte Rommel Sanchez Verdejo"— Transcripción de la presentación:

1 Shellcodes Eduardo Ruiz Duarte rduarte@ciencias.unam.mx Rommel Sanchez Verdejo rommel@lidsol.org

2 Agenda ● Definiciones – Shellcode – Exploit – Syscalls ● Creando Shellcodes – Ejemplo ● Polimorfismo ● Deteccion

3 Definiciones: Shellcode ● Shellcodes: Son pequenos programas escritos en ensamblador que, en la mayoria de los casos, ejecutan una linea de comandos propia del sistema operativo para el cual han sido escritos. ● Generalmente los Shellcodes son parte del codigo de un exploit.

4 Definiciones: Exploit ● Un exploit es un programa, escrito en cualquier lenguaje de programacion, que pretende tomar ventaja sobre algun error o descuido en la programacion de cualquier otro software. ● Generalmente escritos para obtener privilegio sin autorizcion o inhabilitar cualquier equipo de computo.

5 Exploits ● Dos tipos de exploits – Locales : Se tiene acceso previo al equipo de computo afectado. – Remotos : Nunca se ha tenido accesso al equipo de computo. ● Vulberabilidades frecuentes: – Buffer Overflow – Format String – Heap Overflow – Cross Site Scripting.

6 Apariencia de un Shellcode static char shellcode[] = "\x31\xc0\x89\xc3\x89\xd9\x89\xca\xb0\x04\xb3\x01\x68\x68\x6f\x6c \x61\x89\xe1\xb2\x04\xcd\x80\xb0\x01\xcd\x80";

7 Syscalls © Una vez que un Sistema Operativo toma el control, existen dos modos en los que cualquier programa se puede ejecutar, el modo de kernel y el modo de usuario (kernel mode, user mode, respectivamente); la mayor parte del tiempo el código que ejecutamos esta en modo de usuario. Pero se ahcen referencias exahustivas al modo kernel. Código como lo son controladores de dispositivos están siempre en modo kernel. © Las llamadas a sistema son las que proveen una interfaz entre el modo de usuario y el modo de kernel. © La definición de syscalls para Linux (LSB) se encuentra en : © {$INCLUDEDIR}/asm/unistd.h

8 Creando shellcode write():... Synopsis: ssize_t write(int fd, const void *buf, size_t count);... Codigo en C: int main ( void ) { write (1, “hola”, 4); return 1; } $gcc -S write.c.file "write.c".section.rodata.LC0:.string "hola".text.globl main.type main, @function main: pushl %ebp movl %esp, %ebp subl $24, %esp andl $-16, %esp movl $0, %eax subl %eax, %esp movl $4, 8(%esp) movl $.LC0, 4(%esp) movl $1, (%esp) call write leave ret.size main,.-main.section.note.GNU-stack,"",@progbits.ident "GCC: (GNU) 3.3.5 (Gentoo Linux 3.3.5-r1, ssp-3.3.2-3, pie- 8.7.7.1)"

9 Creando Shellcode : int $0x80.globl main main: xor %eax, %eax mov %eax, %ebx mov %ebx, %ecx mov %ecx, %edx mov $4,%al mov $1,%bl push $0x616c6f68 mov %esp, %ecx mov $4, %dl int $0x80 mov $1, %eax int $0x80 en Linux,... Cuando una aplicación del espacio de usuario realiza una llamada del sistema, los argumentos son pasados a través de los registros y la aplicación ejecuta la instrucción 'int 0x80'. Esto causa un reajuste en el modo núcleo y el procesador salta al punto de entrada system_call en entry.S....

10 Shellcode: Apariencia ● char shellcode[] = "\x31\xc0\x89\xc3\x89\xd9\x89\xca\xb0\x04\xb3\x01\x68\x68\x6f\x6c\x61 \x89\xe1\xb2\x04\xcd\x80"; NOPShellcode Padding ret Exploit

11 Polimorfismo Existen formas para sobrepasar IDS’s ya que estos a veces detectan datos en la red por ejemplo si vemos pasar un \xcd\x80 y despues un /bin/sh, esto puede aletar a nuestro IDS por lo tanto se pueden emplear tecnicas de ofuscacion y/u otros tipos de nops (Un nop es una operación nula) Por ejemplo:

12 Polimorfismo Independientes: 1. mov %eax,%eax 2. xchgl %ebx,%ebx Nops dependientes de otros pueden ser 1. addw $-0xdead,%di subw $-0xdead,%di 2. xor %eax,%eax daa

13 ADMmutate ● Creada en 2001 con la finalidad de eludir intervenciones por IDS ● ADMmutate es un API para escribir “shellcode” polimorfico. bastan solo 12 lineas para poder crear un “engine” de la forma: NOP Engine Shellcode Padding ret encoded shellcode [24] = "\x8c\xbf\xa1\x64\xdf\x07\xb8\x64\xd6\x3e\x65\x5e\x1d\xe6\x09\x82" "\x70\xef\xe8\x0c\xae\x8a\xac\x6d" ENGINE[94] = "\xeb\x57\xc1\xc8\x0e\x83\xf8\x03\x8b\x34\x24\x83\xec\x04\xf7\xd0" "\x31\xc9\x99\x8c\xe0\x92\x87\xd2\xbb\x1c\x8e\x61\xed\x98\xc1\xc8" "\x5f\x99\x87\xdb\xb1\x09\xf5\x87\xc9\x8b\x06\x09\xd8\x21\x1e\xf7" "\x16\x21\x06\xb0\x07\x83\xc6\x01\x8c\xc0\xf8\x83\xc8\x1f\x8c\xc0" "\x83\xc6\x01\x97\x83\xe0\x9e\x96\x40\x96\xc1\xc0\x93\x3f\xb0\x5b" "\x96\x40\x96\xe2\xd4\xeb\x08\x8c\xc0\xe8\xaa\xff\xff\xff"

14 Deteccion ● Identificacion del Campo de NOPS * – Encontrar equivalencias NOP – Falsos positivos – No es posible manejar la posibilidad por paquete en tiempo real. ● Tecnicas de Emulacion de codigo en la maquina sensor. * ● Analisis de Espectro * ● “Data mining”

15 Deteccion IDS: NOPS ● Reglas dflt: ● alert ip $EXTERNAL_NET $SHELLCODE_PORTS -> $HOME_NET any (msg:"SHELLCODE x86 NOOP"; content:"|90 90 90 90 90 90 90 90 90 90 90 90 90 90|"; depth:128; reference:arachnids,181; classtype:shellcode-detect; sid:648; rev: 7;) ● Existen mas de 50 equivalentes NOP. ● Segun R.L. Grossman, define al “data mining” como: "preocuparse de patrones, asociaciones, cambios, anomalias y estrcuturas con significado estadistico en la inforamcion de eventos” : En este caso, el “campo nop”

16 Referencias ● Tecnicas Polimorfismo: http://www.phrack.org/phrack/61/p61- 0x09_Polymorphic_Shellcode_Engine.txt ● IA32 opcode :http://www.sandpile.org/ia32/opc_enc.htm ● Linux int 0x80: http://es.tldp.org/Manuales-LuCAS/DENTRO-NUCLEO- LINUX/dentro-nucleo-linux-html/dentro-nucleo-linux-2.html ● G-con Secutiry Tips & Tricks: Buffer Overflows ● http://www.sans.org/resources/idfaq/data_mining.php http://www.sans.org/resources/idfaq/data_mining.php ● Real Time Polymorphic Shellcode Detection: radware ● Pollymorphic Buffer Overflow: Pallavi Garg ● ADMmutate: http://www. ktwo.ca/security.html: ● Shellforge: http://www.cartel-securite.fr/pbiondi/projects/shellforge/

17 Gracias! Rommel Sanchez: rommel@lidsol.org rommel@lidsol.org Eduardo Ruiz: rduarte@ciencias.unam.mx rduarte@ciencias.unam.mx Esta presentacion fue elaborada con Software Libre


Descargar ppt "Shellcodes Eduardo Ruiz Duarte Rommel Sanchez Verdejo"

Presentaciones similares


Anuncios Google