In-Security for fun and pr0fit!
-
Upload
facundo-de-la-cruz -
Category
Documents
-
view
820 -
download
1
description
Transcript of In-Security for fun and pr0fit!
In-Securityfor fun and profit
Expo 2009 Mendoza, Argentina–
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.
$: WHOAMI$: WHOAMI */** My.Name : Facundo M. de la Cruz → _tty0_tty0 * My.EMail: fmdlc <at> debianar.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.**/
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...
Disassemble main
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...
¿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
Exploración
Descubrimiento
Intrusión
Etapas de un ataque
Smashing the stack
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] = '';
........
........
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()
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
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
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
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
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
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);}
Rootkits Attacking SMM Memory via Intel CPU Cache Poisoning
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??
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→
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.
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, HPUX,GNU/Hurd, Solaris, OpenSolaris, AIX,Windows, BeOS, etc.
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.
Man in the middle
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
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!
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
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
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/
AgradecimientosGracias a:
runlvl→ x41→ dererk→ hdc→ Zerial→ juantelez→ ingnucious→ Cynthia (Traducciones / Psicologia)→ LugMEN→
"...Ahora este es nuestro mundo, el mundo del electrón y el interruptor, la
belleza del baudio..." -
The Menthor 08/01/86
Game Over