In-Security for fun and pr0fit!

35
In-Security for fun and profit Expo 2009 Mendoza, Argentina

description

Disertación que realize en la Expo de Software Libre 2009, en la Universidad Técnologica Nacional. El evento estuvo organizado por LuGMEN.

Transcript of In-Security for fun and pr0fit!

Page 1: In-Security for fun and pr0fit!

In-Securityfor fun and profit

Expo 2009 Mendoza, Argentina–

Page 2: In-Security for fun and pr0fit!

IMPORTANTE IMPORTANTE Todo lo aquí expuesto se realiza con fines Todo lo aquí expuesto se realiza con fines educativos. El autor no se responsabiliza por el educativos. El autor no se responsabiliza por el uso que se le de a la información y material que uso que se le de a la información y material que aquí es expuesto.aquí es expuesto.

Tenga presente que mucho de los actos aquí Tenga presente que mucho de los actos aquí presentados se encuentran penados por la ley.presentados se encuentran penados por la ley.

Page 3: In-Security for fun and pr0fit!

$: WHOAMI$: WHOAMI */** My.Name  : Facundo M. de la Cruz   → _tty0_tty0 * My.E­Mail: fmdlc <at> debian­ar.org / tty0 <at> codigounix.com.ar* My.Blog  : http://www.codigounix.com.ar/** 0x41) Consultor en IT  * 0x42) Coordinador de SanLuiX* 0x43) Estudie gastronómia y fui ayudante de cocina* 0x44) Amigo de OpenBSDeros* 0x45) Fucking Fuzzero (by dererk)* 0x46) Todos saben que ZZ es:* Zerial Zorra.**/

Page 4: In-Security for fun and pr0fit!

Pasen y dejen sus sombreros Pasen y dejen sus sombreros en la puerta, no impora el en la puerta, no impora el

color que sean...color que sean...

Page 5: In-Security for fun and pr0fit!

Disassemble main

Page 6: In-Security for fun and pr0fit!

Seguridad La seguridad informática es el conjunto de medidas La seguridad informática es el conjunto de medidas utilizados para proteger a los sistemas y aquello que utilizados para proteger a los sistemas y aquello que lo soporta.lo soporta.

GNU/LinuxGNU/Linux y *BSD*BSD proporciona un variado arsenal de utilidades y mecanismos para asegurar la integridad y la seguridad de su sistema y red. Para así lograr: 

0x410x41> Integridad

0x420x42> Confidencialidad

0x430x43> Disponibilidad

0x440x44> No repudio (irrefutabilidad) 

AirCrack, AirDump, Clamav, Fuzz, Ettercap, AirCrack, AirDump, Clamav, Fuzz, Ettercap, Etherape, Metasploit, MTR, Nemesis, Nessus, Etherape, Metasploit, MTR, Nemesis, Nessus, Nmap, Nikto, SQLMap, Tripwire, TCPDump, Nmap, Nikto, SQLMap, Tripwire, TCPDump, Wireshark...Wireshark...

Page 7: In-Security for fun and pr0fit!

¿De que nos protegemos? Los problemas de seguridad pueden dividirse en diferentes categoríascategorías:

0x410x41> Ataques de denegación de servicio (DoS/DDoS)

0x420x42> Comprometer cuentas de usuarios

0x430x43> Comprometer root a través de servidores accesibles

0x440x44> Comprometer root desde cuentas de usuario

0x450x45> Creación de puertas traseras (“Backdoors”)

0x460x46> Obtener información sensible

Page 8: In-Security for fun and pr0fit!

 Exploración

Descubrimiento

 Intrusión

Etapas de un ataque

Page 9: In-Security for fun and pr0fit!
Page 10: In-Security for fun and pr0fit!
Page 11: In-Security for fun and pr0fit!
Page 12: In-Security for fun and pr0fit!
Page 13: In-Security for fun and pr0fit!

Smashing the stack

Page 14: In-Security for fun and pr0fit!

Un BOFBOF se produce cuando los datos que se escriben en el buffer corrompen a los datos en direcciones de memoria adyacentes debido a la falta de validación de los datos de entrada.

Buffer A - Char (6 Bytes)Buffer A - Char (6 Bytes) Buffer B - Char (3 Bytes)Buffer B - Char (3 Bytes)

0 00 0 0 0 6 6 6

BUFFER OVERFLOW

*/Example 1.c */*/Example 1.c */#include <stdio.h>#include <stdio.h>

int main() { int main() {

char A[6] = '';char A[6] = '';char B[3] = '';char B[3] = '';

........

........

Page 15: In-Security for fun and pr0fit!

Buffer A - Char (6 Bytes)Buffer A - Char (6 Bytes) Buffer B – Char (3 Bytes)Buffer B – Char (3 Bytes)

A AA A A A A A 6

#:#: ./buffer AAAAAAAA ./buffer AAAAAAAA#:#: ./buffer `python ­c 'print “\x41”*8'` ./buffer `python ­c 'print “\x41”*8'`#:#: ./buffer `perl ­e '{print “\x41”x8}'` ./buffer `perl ­e '{print “\x41”x8}'`

buffer – Segmentation Faultbuffer – Segmentation Fault

BUFFER OVERFLOW

Pero que sucede?¿Pero que sucede?¿

0x410x41> gets() > gets() 0x420x42> strcpy()> strcpy()0x430x43> strcat() > strcat() 0x440x44> vsprintf()> vsprintf()0x450x45> scanf() > scanf() 0x460x46> getc()> getc()0x470x47> fgetc()> fgetc()0x480x48> getchar()> getchar()

Page 16: In-Security for fun and pr0fit!

La MemoriaA grandes rasgos podemos dividir la memoria en tres A grandes rasgos podemos dividir la memoria en tres grandes regiones:grandes regiones:

0x40) 0x40) TextText  (Rutinas del programa)→ (Rutinas del programa)→0x41) 0x41) Data / BBSData / BBS  (Variables no inicialiazas / Constantes)→ (Variables no inicialiazas / Constantes)→0x42) 0x42) StackStack  (Variables dinámicas)→ (Variables dinámicas)→

Text

Data / BBS

Stack

- Direcciones altas- Direcciones altas

- Direcciones bajas- Direcciones bajas

Page 17: In-Security for fun and pr0fit!

Bloque contiguo de memoria que contiene datosBloque contiguo de memoria que contiene datosÁrea de la memoria donde se agrega información y se Área de la memoria donde se agrega información y se libera: libera: funcionalidad dinámicafuncionalidad dinámica.. ACCESO SOLO A TOSACCESO SOLO A TOS (Top of the Stack)

LIFOLIFO   → Last in, first out

Las dimensiones de la pila son ajustadas por el kernel Las dimensiones de la pila son ajustadas por el kernel dinámicamente en tiempo de ejecución.dinámicamente en tiempo de ejecución.

PUSH ++PUSH ++ POP ­­POP ­­

El stack

0xFFF ←← dirección fija

0x000 ← ← lamada al puntero SPSP

Page 18: In-Security for fun and pr0fit!

RegistrosSon Son estructuras internas del CPUestructuras internas del CPU utilizadas para  utilizadas para comunicar de forma directa la UAL con la memoria. comunicar de forma directa la UAL con la memoria. Pueden contener de a una palabra por vez (Pueden contener de a una palabra por vez (1 WORD1 WORD).).

0x410x41>> Registros Generales  Registros Generales  ((EAX, EBX, ECX, EDXEAX, EBX, ECX, EDX))  → → 32 Bits 32 Bits 0x420x42>>  Registros de Segmento Registros de Segmento  ((CS, SS, DSCS, SS, DS) )   → → 16 Bits16 Bits0x430x43>>  Registros de Offset Registros de Offset  ((ESP, EIP, EDI, EBPESP, EIP, EDI, EBP))  → → 32 Bits 32 Bits     0x440x44>> Otros Registros  Otros Registros  ((MMX, 3DNOW, SSE, etc..MMX, 3DNOW, SSE, etc..))

31 16 0

EBX

BX

BH BL

Ejemplo registro EBXEjemplo registro EBX

Page 19: In-Security for fun and pr0fit!

RegistrosREGISTROS GENERALES:REGISTROS GENERALES: → → EAX:EAX: Acumulador (MUL/DIV)  Acumulador (MUL/DIV)  → → EBX: EBX: Registro de proposito generalRegistro de proposito general → → ECX:ECX: Contador de búcles y operaciones en cadena Contador de búcles y operaciones en cadena → → EDX:EDX: Puntero de E/S – Guarda datos op. Aritméticas Puntero de E/S – Guarda datos op. Aritméticas

Cuando el código se bifurca (JMP) aquí se guarda Cuando el código se bifurca (JMP) aquí se guarda antiguo EIPantiguo EIP..

REGISTROS DE OFFSET:REGISTROS DE OFFSET: → → EIP:EIP: Proxima intrucción a ser ejecutada  Proxima intrucción a ser ejecutada   (Program Counter)→ (Program Counter)→ → → EBP:EBP: Inició local para una función Inició local para una función  (trabaja con → (trabaja con → FPFP)) → → ESP:ESP: La cima de la pila  La cima de la pila  → → ESI:ESI: Contiene el offset de los datos de origen Contiene el offset de los datos de origen → → EDI:EDI: Contiene el offset de los datos de destino Contiene el offset de los datos de destino

REGISTROS DE SEGMENTOS:REGISTROS DE SEGMENTOS:  →  → CS:CS: Segmento en ejecución  Segmento en ejecución   Completa en CS:EIP→ Completa en CS:EIP→ → →  SS: SS: Registro de stack  Registro de stack   Completo en SS:ESP→ Completo en SS:ESP→ → →  DS: DS: Registro de datos Registro de datos

Page 20: In-Security for fun and pr0fit!

Epilog y PrologExiste un puntero llamado Existe un puntero llamado FPFP ( (Frame PointerFrame Pointer), este apunta a ), este apunta a la localización dentro del stack de las variables locales y la localización dentro del stack de las variables locales y parametros de una función (parametros de una función (con EBPcon EBP). Las variables locales ). Las variables locales podrían ser situadas dando sus offsets desde SP. podrían ser situadas dando sus offsets desde SP. 

Los Los parámetros actualesparámetros actuales tinen offsets  tinen offsets positivospositivos, y las , y las variables localesvariables locales offsets  offsets negativosnegativos de SP. de SP.

Al llamar a una función:Al llamar a una función:1.Guardar valor FP, para ser restaurado al fin.1.Guardar valor FP, para ser restaurado al fin.2.Copiar SP dentro de FP, creando nuevo FP.2.Copiar SP dentro de FP, creando nuevo FP.3.Espacio en el stack para reserver mem. para las variables locales. 3.Espacio en el stack para reserver mem. para las variables locales. 

PROCEDURE LOGPROCEDURE LOG: PROLOG: PROLOGpush $ebppush $ebpmov  $esp $ebpmov  $esp $ebppush {valor}, $esppush {valor}, $esp

PROCEDURE EPILOGPROCEDURE EPILOGleaveleaveretret

Page 21: In-Security for fun and pr0fit!

Formas básicasNOP + SHELLCODE + NOP + EIPNOP + SHELLCODE + NOP + EIP

Buffer A Buffer B FP RET a b c

void function(int a, int b, int c) {   char bufferA[5];   char bufferB[10];}

void main() {  function(1,2,3);}

Page 22: In-Security for fun and pr0fit!

Rootkits Attacking SMM Memory via Intel CPU Cache Poisoning

Page 23: In-Security for fun and pr0fit!

Definición Es una herramienta, o un grupo de ellas que tiene como Es una herramienta, o un grupo de ellas que tiene como finalidad esconderse a sí misma y esconder otros finalidad esconderse a sí misma y esconder otros programas, procesos, archivos, directorios, claves de programas, procesos, archivos, directorios, claves de registro, y puertos. registro, y puertos. 

Tipos de rootkits:Tipos de rootkits:

0x410x41> Integrados al núcleo  Kernel, módulos, librerías→

0x420x42> A nivel aplicación   Binarios, librerías→

0x430x43> Hardware   → OMFG!! WTF??OMFG!! WTF??

Page 24: In-Security for fun and pr0fit!

Rings

 Los procesadores modernos utilizan el sistema de rings Los procesadores modernos utilizan el sistema de rings para especificar las distintas capas de seguridad, que para especificar las distintas capas de seguridad, que tienen los distintos permisos de acceso a los recursos.tienen los distintos permisos de acceso a los recursos.

Ring  3Ring  3> Usuario, llamadas al sistema: execv(“/bin/sh”, NULL)execv(“/bin/sh”, NULL)

Ring  0Ring  0> Sistema operativo        Supervisor →

Ring ­1Ring ­1> Virtualización           Hypervisor→

Ring ­2Ring ­2> System Managament Mode   SMM→

Page 25: In-Security for fun and pr0fit!

Modos de Intel x86

 Modo realModo realEs un modo de 16 bits, utilizado durante el booteo.No conoce de protección de memoria ni de multitareas.

Modo protegidoModo protegidoTrabaja a 32 Bits, provee un modelo de protección para el OS.Trabaja a 32 Bits, provee un modelo de protección para el OS.Multitareas, Soporte Memoria Virtual, Protección de memoria, Multitareas, Soporte Memoria Virtual, Protección de memoria, Conmutación de tareas.Conmutación de tareas.

Modo virtual 8086Modo virtual 8086Eficiencia corriendo programas para arquitecturas 8086 y 8088.Eficiencia corriendo programas para arquitecturas 8086 y 8088.

Long ModeLong ModeModo 64 bits.Modo 64 bits.

System Managament ModeSystem Managament ModeFunciones de ahorro de energía.Funciones de ahorro de energía.

Page 26: In-Security for fun and pr0fit!

Rings

 El El SMMSMM es utilizado para ejecutar tareas de manejo de  es utilizado para ejecutar tareas de manejo de energia.energia.

Luego de entrar en el SMM varias partes del sistema Luego de entrar en el SMM varias partes del sistema pueden ser apagadas o deshabilitadas, guardando el pueden ser apagadas o deshabilitadas, guardando el contexto del procesador en algún lugar para ser contexto del procesador en algún lugar para ser restaurado luego.restaurado luego.

El SMM opera independiente al sistema operativo, y se El SMM opera independiente al sistema operativo, y se supone que esto deberia funcionar tanto para:supone que esto deberia funcionar tanto para:

GNU/Linux, FreeBSD, OpenBSD, HP­UX,GNU/Hurd, Solaris, OpenSolaris, AIX,Windows, BeOS, etc.

Page 27: In-Security for fun and pr0fit!

System management mode

 

SMI HANDLER RSM

MODO PROTEGIDOMODO PROTEGIDO

SYSTEM MANAGEMENT MODESYSTEM MANAGEMENT MODEPaginamiento deshabilitado. Se ingresa en un Paginamiento deshabilitado. Se ingresa en un modo de 16 bits, pero toda la memoria física modo de 16 bits, pero toda la memoria física puede ser redireccionada, sin restrinciones de puede ser redireccionada, sin restrinciones de E/S y con igual privilegios que en E/S y con igual privilegios que en RING 0RING 0..Supuestamente el acceso a SMRAM esta Supuestamente el acceso a SMRAM esta reservado para la BIOS.reservado para la BIOS.

Codigo arbitrarioCodigo arbitrario

SMRAMSMRAM

SMRAMSMRAM 0x1FFFF bytes desde SMBASE.

SMBASESMBASE es por default 0x30000

Para acceder a la memoria podemos mapear los rangos del dispositivo /dev/mem

LibPCILeera el contexto grabado y retomara a situación previa del procesador

El hub controlador de memoria tiene un control de registros llamado SMRAM Control Register:

 → Bit D_OPEN: Todo acceso a esta area de memoria empezando de SMBASE es redirigido a SMRAM.

Si no esta seteado todo acceso a SMRAM es forwardeado a la placa de video.

Page 28: In-Security for fun and pr0fit!

Man in the middle

Page 29: In-Security for fun and pr0fit!

Direccionamiento lógico

 Address resolution protocol (ARP) es un Address resolution protocol (ARP) es un protocolo de nivel de red que se utiliza para protocolo de nivel de red que se utiliza para asociar una dirección MAC a una dirección IP.asociar una dirección MAC a una dirección IP.

ARP_REQUEST ARP_REQUEST ARP_REPLYARP_REPLY

Page 30: In-Security for fun and pr0fit!

Ettercap

 ¿Qué es Ettercap?¿Qué es Ettercap?0x41)0x41)Una herramienta muy versátil de manipulación de redes switcheadas.Una herramienta muy versátil de manipulación de redes switcheadas.0x42)0x42)Hace uso de libpcap y libnet (como Wireshark)Hace uso de libpcap y libnet (como Wireshark)0x43)0x43)Captura el tramas que circula en nustra red Captura el tramas que circula en nustra red 0x44)0x44)Interfaz Curses, GTK, ConsolaInterfaz Curses, GTK, Consola0x45)0x45)Diversos pluginsDiversos plugins0x46)0x46)Inteceptor de contraseñasInteceptor de contraseñas0x47)0x47)Soporta múltiples protocolos de redSoporta múltiples protocolos de red0x48)0x48)Intercepta conexiones SSH1, HTTPS (SSL)Intercepta conexiones SSH1, HTTPS (SSL)0x49)0x49)Puede realizar ataques MITM!!!   →Puede realizar ataques MITM!!!   → OMG!OMG!

Page 31: In-Security for fun and pr0fit!

Ettercap

 ARP Poisoning para redes switcheadasARP Poisoning para redes switcheadasPrincipal función de Ettercap.Principal función de Ettercap.Envenenar la tabla significa enviar paquetes espurios, Envenenar la tabla significa enviar paquetes espurios, fingiendo que se es la IP destinatariafingiendo que se es la IP destinataria

0x41)0x41)Inyectar caracteres Inyectar caracteres 0x42)0x42)Filtrar paquetes y modificar paquetesFiltrar paquetes y modificar paquetes0x43)0x43)Recolección de contraseñasRecolección de contraseñas0x44)0x44)Matanza de conexionesMatanza de conexiones

Page 32: In-Security for fun and pr0fit!

Ettercap

 Filtros en EttercapFiltros en Ettercap

0x41)0x41)Permiten cambiar el contenido de los paquetesPermiten cambiar el contenido de los paquetes

0x42)0x42)Algo similares al lenguaje CAlgo similares al lenguaje C

0x43)0x43)Hay que compilar con etterfilter antes de usar.Hay que compilar con etterfilter antes de usar.

0x44)0x44)Son una forma saludable de divertirseSon una forma saludable de divertirse

Page 33: In-Security for fun and pr0fit!

Algunos links útiles0x41)0x41)BlackHack → http://www.blackhack.org/

0x42)0x42)CodigoUnix  → http://www.codigounix.com.ar/ 

0x43)0x43)FreeBSD → http://www.freebsd.org/es/

0x44)0x44)OpenBSDeros → http://www.openbsderos.org/

0x45)0x45)Milw0rm → http://www.milw0rm.org/ 

0x46)0x46)Packet Storn  → http://www.packetstorn.org/

Page 34: In-Security for fun and pr0fit!

AgradecimientosGracias a:

 runlvl→ x41→ dererk→ hdc→ Zerial→ juantelez→ ingnucious→ Cynthia (Traducciones / Psicologia)→ LugMEN→

Page 35: In-Security for fun and pr0fit!

"...Ahora este es nuestro mundo, el mundo del electrón y el interruptor, la

belleza del baudio..." -

The Menthor 08/01/86

Game Over