Rompiendo el protocolo: Usos y Abusos de TCP/IPDaniel Torres Falkonert (bytemare) bytemare@lownoisehg.orgtwitter: @bytemar...
Agenda<br />Avisos Parroquiales<br />¿Qué es romper el protocolo?<br />Obedeciendo las reglas<br />Rompiendo El protocolo<...
Grupo de Investigación (Hacking only)<br /> Creado en 1995<br /> Multidisciplinario (No sólo Ingenieros)<br /> Objetivo Co...
Sobre bytemare<br />Descubrí el gusto por los computadores desde los 4 años (Gracias papá!!)<br />En el mundo de la seguri...
Disclaimer<br />Todo lo que se hable y se muestre en esta charla es el resultado de investigaciones con fines educativos.<...
Prerrequisitos<br />Conocimientos generales de redes<br />TCP/IP<br />Programación en C<br />Creatividad e imaginación<br ...
¿Qué es romper el protocolo?<br />protocolo.<br />(Del b. lat. protocollum, y este del gr. πρωτόκολλον).<br />1. m. Serie ...
Esencialmente es encontrar usos no intencionados a las leyes y propiedades  de un sistema para aplicarlas en formas nuevas...
No todo tiene que ver con seguridad<br />10<br />
Siguiendo el protocolo<br />Para romper las reglas, primero debemos conocerlas<br />
Protocolo IP<br />“Es un protocolo no orientado a conexión usado tanto por el origen como por el destino para la comunicac...
Protocolo IPv4<br />local<br />ISP<br />local<br />ISP<br />Tier 3<br />ISP<br />local<br />ISP<br />local<br />ISP<br />T...
Capa de red<br />Diferentes problemas afectan la red .<br />Daños de Hardware<br />Congestión en la red<br />Malas configu...
Servicio Confiable<br />¿Cómo asegurar la confiabilidad a las aplicaciones si los protocolos inferiores no son confiables?...
TCP<br />Rfc 793<br />
TCP sobre IP<br />Conexión Confiable<br />TCP<br />TCP<br />Envío no confiable (unreliable) <br />IP<br />IP<br />
Aplicaciones que usan TCP<br />
Encabezado<br />Payload<br />Datos Originales<br />TCP divide los datos en paquetes…<br />Añade los encabezados a cada paq...
Confirmación Positiva con Retransmisión<br />Host 2<br />Host 1<br />Paquete Perdido<br />Enviar paquete<br />Iniciar Temp...
Pero la confirmación positiva es leeeenta<br />
A menos que se utilicen Ventanas Deslizantes<br />
3-23<br />Administración de Conexión en TCP<br /><ul><li>Establecimiento de conexión</li></ul>client<br />server<br />Requ...
3-24<br />Administración de Conexión en TCP<br /><ul><li>Establecimiento de conexión</li></ul>cliente<br />servidor<br />R...
Capa Transporte<br />3-25<br />Administración de la conexión TCP (cont.)<br />Cerrando una conexión:<br />Puede ser inicia...
Números de Secuencia<br />Todo octeto de datos enviado por una conexión de TCP tiene asociado un número de secuencia <br /...
Documentación<br />Los rfc son las fuentes definitivas sobre los protocolos<br />ARP (rfc826), IP (rfc791), ICMP (rfc792),...
Romper el protocolo<br />Porque las reglas se hicieron para romperlas<br />
Port Scanning<br />Se utiliza para saber qué puertos tiene abiertos un sistema.<br />Se utilizan características básicas d...
Enfoque positivo<br />Basado en las respuestas de los puertos que responden que están abiertos<br />Rápido<br />Confiable<...
TCP Connect<br />Puerto Abierto<br />Puerto Cerrado<br />31<br />Syn<br />Syn<br />Syn+Ack<br />Rst+Ack<br />Ack<br />Rst<...
TCP Half Open Scan<br />Puerto Abierto<br />Puerto Cerrado<br />32<br />Syn<br />Syn<br />Syn+Ack<br />Rst+Ack<br />Rst<br...
Enfoque Negativo<br />Basado en las respuestas de los puertos que responden que están cerrados<br />Lento<br />Poco fiable...
Null Stealth Scan<br />Puerto Abierto<br />Puerto Cerrado<br />34<br />Rst+Ack<br />Requiere privilegios de administrador<...
XMAS Stealth Scan<br />Puerto Abierto<br />Puerto Cerrado<br />35<br />Fin+Psh+Urg<br />Fin+Psh+Urg<br />Rst+Ack<br />Requ...
IP Spoofing<br />“Suplantación de IP. Consiste básicamente en sustituir la dirección IP origen de un paquete TCP/IP por ot...
Reset Hijacking<br />
RST Hijacking<br />Note las direcciones MAC<br />
Fin Hijacking<br />
Fin Hijacking<br /><ul><li>Note las direcciones MAC</li></li></ul><li>Idle Scanning<br />
Idle Scanning<br />SourceDestinationPortsFlagsInfo<br />¿Host inactivo?<br />200.21.33.129       125.33.12.55     61976 > ...
Idle Scanning<br />
Idle Scanning<br />SourceDestinationPortsFlagsInfo<br />¿Host inactivo?<br />200.21.33.129       125.33.12.55     61976 > ...
SourceDestinationPortsFlagsInfo<br />200.21.33.129       125.33.12.55     61976 > 666 [SYN, ACK] IPid: 0x07e9 (2025)<br />...
Jugando con ICMP Redirect y volviendo obsoleto el arp cache poisoning<br />Un ejemplo más elaborado<br />
ICMP Redirect<br />Imagen tomada de [7]<br />
Redireccionamiento<br />Un paquetepara 192.168.1.x<br />Reenvío 1st paquete<br />redireccion<br />Los siguientes paquetes<...
Ataque de suplantación DNS, con la técnica de redirección ICMP<br />El objetivo de este ataque es realizar una suplantació...
Ataque de suplantación DNS, con la técnica de redirección ICMP<br />Este ataque tiene un efecto similar al ataque de hombr...
Ataque de suplantación DNS, con la técnica de redirección ICMP<br />
Ataque de suplantación DNS, con la técnica de redirección ICMP<br />Configuración de la red de la víctima<br />
Ataque de suplantación DNS, con la técnica de redirección ICMP<br />Tabla ARP de la víctima donde se puede ver la direcció...
Ataque de suplantación DNS, con la técnica de redirección ICMP<br />Tabla de enrutamiento. no aparecen entradas que dirija...
Ataque de suplantación DNS, con la técnica de redirección ICMP<br />Ruta previa al ataque hacia el servidor DNS (solo los ...
Ataque de suplantación DNS, con la técnica de redirección ICMP<br />Mostramos que no se puede encontrar el nombre de domin...
Ataque de suplantación DNS, con la técnica de redirección ICMP<br />En la captura de tráfico se puede confirmar que el ser...
Ataque de suplantación DNS, con la técnica de redirección ICMP<br />Configuración de la red del atacante<br />
Ataque de suplantación DNS, con la técnica de redirección ICMP<br />Se configuró y ejecutó la herramienta DNS Spoof, notes...
Ataque de suplantación DNS, con la técnica de redirección ICMP<br />Note en la Fig. que la dirección MAC destino de la sol...
Ataque de suplantación DNS, con la técnica de redirección ICMP<br />tráfico generado al enviarle el paquete que causará la...
Ataque de suplantación DNS, con la técnica de redirección ICMP<br />En el detalle del mensaje ICMP (Fig. 15) se le informa...
Ataque de suplantación DNS, con la técnica de redirección ICMP<br />Actualización de la tabla arp de la víctima<br />
Ataque de suplantación DNS, con la técnica de redirección ICMP<br />Tabla de enrutamiento de la víctima. Note la tercera e...
Ataque de suplantación DNS, con la técnica de redirección ICMP<br />Se logró suplantar al servidor de nombres, se ejecutó ...
Ataque de suplantación DNS, con la técnica de redirección ICMP<br />puede observase el proceso que sigue la aplicación pin...
Ataque de suplantación DNS, con la técnica de redirección ICMP<br />Note como cambia la ruta a seguir para llegar al servi...
Ataque de suplantación DNS, con la técnica de redirección ICMP<br />Muchas veces la diferencia entre bug y funcionalidad e...
Desarrollo de Herramientas de hacking<br />The Lord of the Bits<br />
Hacking y programación<br />¿Para qué desarrollarlas?<br />Adaptarse fácilmente a diferentes entornos<br />Implementación ...
Herramientas de Hacking<br />“A network security tool is an algorithmic implement that is designed to probe, assess, or in...
Mini-Introducción a la programación de Redes<br />Lo quedebióaprender en el curso de redes<br />
Berkeley Sockets<br />
Berkeley Sockets<br />Son estructuras de datos que permiten la comunicación entre procesos.<br />En nuestro caso a través ...
Socket: es una puerta entre el proceso aplicación y el protocolo de transporte de extremo a extremo (UCP o TCP)‏<br />Cont...
Visto de otra forma<br />Puerto<br />Puerto<br />Proceso<br />Proceso<br />Transporte<br />Host<br />Host<br />76<br />
Familias de Sockets<br />Pueden ser:<br />PF_INET para IPv4<br />PF_INET6  para IPv6.<br />PF_PACKET para protocolos capa ...
Stream Sockets (Capa de transporte)<br />Se utilizan en la mayoría de los casos, en especial cuando no es necesario manipu...
Raw Sockets (Capa de Internet)<br />Se utilizan para acceder a los protocolos de la capa de internet.<br />Permiten manipu...
Raw Sockets (Capa de Internet)<br />En algunos Casos, también se requiere manipular los campos del encabezado IP.(p.e. IP ...
Packet Sockets (Capa de Enlace)<br />Se utilizan para acceder a los protocolos de la capa de enlace.<br />Sockets de más b...
Ejemplos<br />
Aclaración<br />Se han eliminado líneas no relevantes en el código fuente que se presenta a continuación. <br />En especia...
Ejemplo 2<br />Un Sniffer<br />
sniffercito<br />El siguiente ejemplo es un sniffer muy simple. (MUY)<br />Captura paquetes, los imprime … y ya.<br />
¿Qué Hace?<br />Lee los argumentos<br />Crea el socket<br />Habilita el modo promiscuo en la interfaz<br />Recibe paquetes...
Plantilla Sniffer<br />Qué incluir?<br />
PlantillaSniffer<br />
¿Cómo se podría mejorar?<br />Agregándole una función filtro<br />Cuando se cumpla el criterio (o no se cumpla) ejecutar a...
Ejemplo 3<br />Un Backdoor<br />
El Backdoor<br />Este es un ejemplo más elaborado<br />Es una puerta trasera que se puede instalar en un sistema Linux ya ...
¿Cómo empezó todo?<br />Corre en modo demonio.<br />Espera que llegue un paquete especial ICMP tipo 0 (echo reply)<br />Lo...
¿Que tiene de especial?<br />No está escuchando en ningún puerto, por lo tanto netstat no lo ve.<br />Tampoco lo ve un por...
Escenario<br />
Escenario<br />0: Escuchar en un puerto<br />
Escenario<br />0: Escuchar en un puerto<br />1: icmp echo reply<br />ICMP Seq: Clave<br />
Escenario<br />0: Escuchar en un puerto<br />2: Verificar clave<br />Si es correcta conectar<br />1: icmp echo reply<br />...
Escenario<br />0: Escuchar en un puerto<br />3: Conectar a puerto<br />2: Verificar clave<br />Si es correcta conectar<br ...
¿Qué Incluir?<br />Note que son solo librerías estándar<br />
¿Cómo Mejorarlo?<br />Usar el campo de datos de icmp<br />Soporte de otro tipo de mensajes icmp<br />No usar la dirección ...
El Generador de paquetes <br />El complemento del backdoor es un programa para generar un paquete ICMP con los datos que s...
Generador de paquetes<br />Se ejecuta:<br />gp <srcip> <dstip> <icmp_id> <icmp_seq><br />
¿Cómo mejorarlo?	<br />Generar los campos de los encabezados de manera dinámica<br />Manejar otro tipo de mensajes ICMP<br...
El Backdoor Mejorado<br />Es la misma idea del anterior<br />También usa icmp (codigo 8 y 0)<br />Cambia la forma de conec...
¿Qué hace?<br />Espera que llegue un paquete  ICMP tipo 8 (echo reply) con código 1<br />Si el código es 0, como normalmen...
¿Que tiene de especial?<br />No está escuchando en ningún puerto, por lo tanto netstat no lo ve.<br />Tampoco lo ve un por...
Ejemplo 4<br />Backdoor Mejorado<br />
Ping<br />Se utiliza para hacer pruebas<br />Si el destino es alcanzable<br />RTT (Round Trip Time)<br />2 Tipos de mensaj...
Ping<br />Adiciona 2 campos al encabezado ICMP<br />Identificador y secuencia<br />También puede incluir una marca de tiem...
Imagen tomada de [7]<br />
Ping: Ejemplo<br />
Protocolo de Diffie-Hellman<br />Desarrollado por Whitfield Diffie y Martin Hellman<br />Permite el intercambio secreto de...
Protocolo de Diffie-Hellman<br />Para dos partes A y B que intentan establecer una clave secreta y un adversario E, la ver...
Protocolo de Diffie-Hellman[8]<br />
Protocolo de Diffie-Hellman[8]<br />Note que:<br />Esta cantidad común a A y B es la llave intercambiada<br />
Protocolo de Diffie-Hellmansobre icmp<br />
Conclusiones<br />Es clave entender la teoría<br />No hace daño leer los rfc<br />Piense en alto nivel, programe en bajo n...
Preguntas<br />
Muchas Gracias!!!<br />bytemare@lownoisehg.orgtwitter: @bytemarehackhttp://www.lownoisehg.org<br />
Rompiendo el protocolo: Usos y abusos de TCP/IP
Upcoming SlideShare
Loading in …5
×

Rompiendo el protocolo: Usos y abusos de TCP/IP

2,198 views
2,054 views

Published on

Presentación sobre desarrollo de herramientas de hacking presentada en Campus Party 2011 en Bogotá, Colombia.

Published in: Technology, Education
1 Comment
1 Like
Statistics
Notes
No Downloads
Views
Total views
2,198
On SlideShare
0
From Embeds
0
Number of Embeds
14
Actions
Shares
0
Downloads
0
Comments
1
Likes
1
Embeds 0
No embeds

No notes for slide

Rompiendo el protocolo: Usos y abusos de TCP/IP

  1. 1.
  2. 2. Rompiendo el protocolo: Usos y Abusos de TCP/IPDaniel Torres Falkonert (bytemare) bytemare@lownoisehg.orgtwitter: @bytemarehackhttp://www.lownoisehg.org<br />
  3. 3. Agenda<br />Avisos Parroquiales<br />¿Qué es romper el protocolo?<br />Obedeciendo las reglas<br />Rompiendo El protocolo<br />Ejemplos<br />Conclusiones<br />
  4. 4. Grupo de Investigación (Hacking only)<br /> Creado en 1995<br /> Multidisciplinario (No sólo Ingenieros)<br /> Objetivo Común:<br />Seguridad vs. Inseguridad<br /> Sin Ánimo de Lucro<br /> Recursos Propios<br /> Sin Afiliación a Empresas/Entidades<br />¿ Qué es LowNoise HG ?<br />
  5. 5. Sobre bytemare<br />Descubrí el gusto por los computadores desde los 4 años (Gracias papá!!)<br />En el mundo de la seguridad desde el año 96<br />Ingeniero de Sistemas (Uniandes)<br />Especialista en seguridad de la información (Uniandes)<br />Trabajo en Informática Forense desde el 2003<br />Mi primer computador<br />
  6. 6. Disclaimer<br />Todo lo que se hable y se muestre en esta charla es el resultado de investigaciones con fines educativos.<br />Todo descubrimiento realizado, ha sido y será usado de forma legal, por LNHG.<br />La audiencia debe asumir todo lo se exponga hoy, como “falso” y “sin fundamento” hasta que lo compruebe personalmente.<br />
  7. 7. Prerrequisitos<br />Conocimientos generales de redes<br />TCP/IP<br />Programación en C<br />Creatividad e imaginación<br />No tenerle miedo al bajo nivel<br />
  8. 8. ¿Qué es romper el protocolo?<br />protocolo.<br />(Del b. lat. protocollum, y este del gr. πρωτόκολλον).<br />1. m. Serie ordenada de escrituras matrices y otros documentos que un notario o escribano autoriza y custodia con ciertas formalidades.<br />2. m. Acta o cuaderno de actas relativas a un acuerdo, conferencia o congreso diplomático.<br />3. m. Regla ceremonial diplomática o palatina establecida por decreto o por costumbre.<br />4. m. Plan escrito y detallado de un experimento científico, un ensayo clínico o una actuación médica.<br />
  9. 9. Esencialmente es encontrar usos no intencionados a las leyes y propiedades de un sistema para aplicarlas en formas nuevas e inventivas para resolver un problema<br />
  10. 10. No todo tiene que ver con seguridad<br />10<br />
  11. 11. Siguiendo el protocolo<br />Para romper las reglas, primero debemos conocerlas<br />
  12. 12. Protocolo IP<br />“Es un protocolo no orientado a conexión usado tanto por el origen como por el destino para la comunicación de datos a través de una red de paquetes conmutados”<br />
  13. 13. Protocolo IPv4<br />local<br />ISP<br />local<br />ISP<br />Tier 3<br />ISP<br />local<br />ISP<br />local<br />ISP<br />Tier-2 ISP<br />Tier-2 ISP<br />NAP<br />Tier-2 ISP<br />local<br />ISP<br />Tier-2 ISP<br />Tier-2 ISP<br />local<br />ISP<br />local<br />ISP<br />local<br />ISP<br />Provee 3 servicios primarios<br />Direccionamiento Global<br />Servicio de datagramas no fiable (Besteffort)<br />Fragmentación<br />Tier 1 ISP<br />Tier 1 ISP<br />Tier 1 ISP<br />
  14. 14. Capa de red<br />Diferentes problemas afectan la red .<br />Daños de Hardware<br />Congestión en la red<br />Malas configuraciones …<br />Diferentes tecnologías<br />Esto puede tener diferentes efectos<br />Pérdidas<br />Duplicaciones <br />Fragmentación<br />Retardos<br />daños en los datos<br />…<br />
  15. 15. Servicio Confiable<br />¿Cómo asegurar la confiabilidad a las aplicaciones si los protocolos inferiores no son confiables?<br />
  16. 16. TCP<br />Rfc 793<br />
  17. 17. TCP sobre IP<br />Conexión Confiable<br />TCP<br />TCP<br />Envío no confiable (unreliable) <br />IP<br />IP<br />
  18. 18. Aplicaciones que usan TCP<br />
  19. 19. Encabezado<br />Payload<br />Datos Originales<br />TCP divide los datos en paquetes…<br />Añade los encabezados a cada paquete<br />En el destino, se usa la información de los encabezados para reensamblar los datos originales<br />Fragmentación en el origen(Flujo no estructurado)<br />
  20. 20. Confirmación Positiva con Retransmisión<br />Host 2<br />Host 1<br />Paquete Perdido<br />Enviar paquete<br />Iniciar Temp.<br />El paquete debería llegar<br />Y se debería enviar un ACK<br />Temp<br />El ACK debería llegar<br />Expira el tiempo<br />Retransmitir Paquete 1<br />Iniciar Temp<br />Recibe Paquete 1<br />Envía ACK 1<br />Temp<br />Recibe ACK 1<br />Cancelar Temp<br />
  21. 21. Pero la confirmación positiva es leeeenta<br />
  22. 22. A menos que se utilicen Ventanas Deslizantes<br />
  23. 23. 3-23<br />Administración de Conexión en TCP<br /><ul><li>Establecimiento de conexión</li></ul>client<br />server<br />Requerimientode Conexión<br />SYN=1, seq=client_isn<br />Conexiónpermitida<br />SYN=1, seq=server_isn,ack=client_isn+1<br />ACK<br />SYN=0, seq=client_isn+1,ack=server_isn+1<br />
  24. 24. 3-24<br />Administración de Conexión en TCP<br /><ul><li>Establecimiento de conexión</li></ul>cliente<br />servidor<br />Requerimientode Conexión<br />SYN=1, seq=client_isn<br />Conexiónpermitida<br />SYN=1, seq=server_isn,ack=client_isn+1<br />ACK<br />SYN=0, seq=client_isn+1,ack=server_isn+1<br />
  25. 25. Capa Transporte<br />3-25<br />Administración de la conexión TCP (cont.)<br />Cerrando una conexión:<br />Puede ser iniciado por el servidor, aquí suponemos lo inicia el cliente.<br />Paso 1: host cliente envía segmento TCP FIN al servidor<br />Paso 2:servidor recibe FIN, responde con ACK. Ante un cierre de conexión de la aplicación y envía FIN. <br />Paso 3:cliente recibe FIN, responde con ACK. <br /><ul><li>Entra en “tiempo de espera” – responderá con ACK a FINs recibidos</li></ul>Paso 4:servidor, recibe ACK. Pasa a conexión cerrada. <br />cliente<br />servidor<br />Cerrando<br />FIN<br />ACK<br />Cerrando<br />FIN<br />ACK<br />Cerrado<br />Cerrado<br />
  26. 26. Números de Secuencia<br />Todo octeto de datos enviado por una conexión de TCP tiene asociado un número de secuencia <br />Si hay un problema con un paquete solo se retransmite esta porción de los datos<br />El mecanismo de acuse de recibo empleado es acumulativo, de tal forma que el acuse de recibo de un número de secuencia X indica que todos los octetos hasta, pero no incluyendo, X, han sido recibidos <br />Este mecanismo permite la detección fácil y directa de duplicados o pérdida de segmentos. <br />26<br />
  27. 27. Documentación<br />Los rfc son las fuentes definitivas sobre los protocolos<br />ARP (rfc826), IP (rfc791), ICMP (rfc792), TCP (rfc793), UDP (rfc768), …<br />http://www.faqs.org/rfcs/<br />
  28. 28. Romper el protocolo<br />Porque las reglas se hicieron para romperlas<br />
  29. 29. Port Scanning<br />Se utiliza para saber qué puertos tiene abiertos un sistema.<br />Se utilizan características básicas de TCP/IP para implementar la técnicas<br />Se puede realizar con 2 enfoques<br />Positivo<br />Negativo<br />29<br />Daniel Torres Falkonert (C) 2008<br />
  30. 30. Enfoque positivo<br />Basado en las respuestas de los puertos que responden que están abiertos<br />Rápido<br />Confiable<br />Fácil de detectar por la cantidad de paquetes<br />30<br />Daniel Torres Falkonert (C) 2008<br />
  31. 31. TCP Connect<br />Puerto Abierto<br />Puerto Cerrado<br />31<br />Syn<br />Syn<br />Syn+Ack<br />Rst+Ack<br />Ack<br />Rst<br />No requiere privilegios e administrador<br />Utiliza Stream Sockets<br />Congestiona la red si se hacen muchas pruebas<br />
  32. 32. TCP Half Open Scan<br />Puerto Abierto<br />Puerto Cerrado<br />32<br />Syn<br />Syn<br />Syn+Ack<br />Rst+Ack<br />Rst<br />Requiere privilegios de administrador<br />Utiliza Raw Sockets<br />Congestiona un poco menos la red<br />Daniel Torres Falkonert (C) 2008<br />
  33. 33. Enfoque Negativo<br />Basado en las respuestas de los puertos que responden que están cerrados<br />Lento<br />Poco fiable<br />Un poco más difícil de detectar pero los paquetes tienen opciones sospechosas<br />33<br />Daniel Torres Falkonert (C) 2008<br />
  34. 34. Null Stealth Scan<br />Puerto Abierto<br />Puerto Cerrado<br />34<br />Rst+Ack<br />Requiere privilegios de administrador<br />Utiliza Raw Sockets<br />Congestiona poco la red<br />Daniel Torres Falkonert (C) 2008<br />
  35. 35. XMAS Stealth Scan<br />Puerto Abierto<br />Puerto Cerrado<br />35<br />Fin+Psh+Urg<br />Fin+Psh+Urg<br />Rst+Ack<br />Requiere privilegios de administrador<br />Utiliza Raw Sockets<br />Congestiona poco la red<br />Daniel Torres Falkonert (C) 2008<br />
  36. 36. IP Spoofing<br />“Suplantación de IP. Consiste básicamente en sustituir la dirección IP origen de un paquete TCP/IP por otra dirección IP a la cual se desea suplantar. “<br />
  37. 37. Reset Hijacking<br />
  38. 38. RST Hijacking<br />Note las direcciones MAC<br />
  39. 39. Fin Hijacking<br />
  40. 40. Fin Hijacking<br /><ul><li>Note las direcciones MAC</li></li></ul><li>Idle Scanning<br />
  41. 41. Idle Scanning<br />SourceDestinationPortsFlagsInfo<br />¿Host inactivo?<br />200.21.33.129 125.33.12.55 61976 > 666 [SYN, ACK] IPid: 0x07e9 (2025)<br />125.33.12.55 200.21.33.129 666 > 61976 [RST] IPid: 0x5e93 (24211)<br />200.21.33.129 125.33.12.55 62180 > 666 [SYN, ACK] IPid: 0x75d3 (30163)<br />125.33.12.55 200.21.33.129 666 > 62180 [RST] IPid: 0x5e94 (24212)<br />Puerto Abierto:<br />125.33.12.55 157.253.33.144 666 > 22 [SYN] IPid: 0x5caa (23722)<br />125.33.12.55 200.21.33.129 666 > 62093 [RST] IPid: 0x5e96 (24214)<br />Puerto Cerrado:<br />125.33.12.55 157.253.33.144 666 > 110 [SYN] IPid: 0xe2cd (58061)<br />125.33.12.55 200.21.33.129 666 > 61980 [RST] IPid: 0x5e97 (24215)<br />
  42. 42. Idle Scanning<br />
  43. 43. Idle Scanning<br />SourceDestinationPortsFlagsInfo<br />¿Host inactivo?<br />200.21.33.129 125.33.12.55 61976 > 666 [SYN, ACK] IPid: 0x07e9 (2025)<br />125.33.12.55 200.21.33.129 666 > 61976 [RST] IPid: 0x5e93 (24211)<br />200.21.33.129 125.33.12.55 62180 > 666 [SYN, ACK] IPid: 0x75d3 (30163)<br />125.33.12.55 200.21.33.129 666 > 62180 [RST] IPid: 0x5e94 (24212)<br />Puerto Abierto:<br />125.33.12.55 157.253.33.144 666 > 22 [SYN] IPid: 0x5caa (23722)<br />125.33.12.55 200.21.33.129 666 > 62093 [RST] IPid: 0x5e96 (24214)<br />Puerto Cerrado:<br />125.33.12.55 157.253.33.144 666 > 110 [SYN] IPid: 0xe2cd (58061)<br />125.33.12.55 200.21.33.129 666 > 61980 [RST] IPid: 0x5e97 (24215)<br />
  44. 44. SourceDestinationPortsFlagsInfo<br />200.21.33.129 125.33.12.55 61976 > 666 [SYN, ACK] IPid: 0x07e9 (2025)<br />125.33.12.55 200.21.33.129 666 > 61976 [RST] IPid: 0x5e93 (24211)<br />200.21.33.129 125.33.12.55 62180 > 666 [SYN, ACK] IPid: 0x75d3 (30163)<br />125.33.12.55 200.21.33.129 666 > 62180 [RST] IPid: 0x5e94 (24212)<br />125.33.12.55 157.253.33.144 666 > 22 [SYN] IPid: 0x5caa (23722)<br />157.253.33.144 125.33.12.55 22 > 666 [SYN, ACK] IPid: 0x0000 (0)<br />125.33.12.55 157.253.33.144 666 > 22 [RST] IPid: 0x5e95 (24213)<br />200.21.33.129 125.33.12.55 62093 > 666 [SYN, ACK] IPid: 0xf34d (62285)<br />125.33.12.55 200.21.33.129 666 > 62093 [RST] IPid: 0x5e96 (24214)<br />125.33.12.55 157.253.33.144 666 > 110 [SYN] IPid: 0xe2cd (58061)<br />157.253.33.144 125.33.12.55 110 > 666 [RST, ACK] IPid: 0x0000 (0)<br />200.21.33.129 125.33.12.55 61980 > 666 [SYN, ACK] IPid: 0x537d (21373)<br />125.33.12.55 200.21.33.129 666 > 61980 [RST] IPid: 0x5e97 (24215)<br />
  45. 45. Jugando con ICMP Redirect y volviendo obsoleto el arp cache poisoning<br />Un ejemplo más elaborado<br />
  46. 46. ICMP Redirect<br />Imagen tomada de [7]<br />
  47. 47. Redireccionamiento<br />Un paquetepara 192.168.1.x<br />Reenvío 1st paquete<br />redireccion<br />Los siguientes paquetes<br />Los hosts aprenden nuevas rutas por medio de redireccionamiento<br />192.168.20.0<br />192.168.1.0<br />192.168.1.1<br />Router<br />206.71.183.1<br />192.168.20.1<br />Router<br />206.71.183.2<br />IP 106.91.183.9<br />Default router<br /> 106.91.183.2<br />106.91.183.0<br />Host<br />
  48. 48. Ataque de suplantación DNS, con la técnica de redirección ICMP<br />El objetivo de este ataque es realizar una suplantación del servicio de DNS utilizado por el sistema con dirección IP 192.168.1.104 con dirección MAC 00:21:70:ED:EA:50. <br />Se aplicará la técnica de redirección a través de mensajes ICMP código 5 tipo 1 [1], que permiten cambiar dinámicamente la tabla de enrutamiento de un host. <br />El ataque fue realizado desde un sistema GNU/Linux 2.6.20 contra un Sistema Windows XP SP3. Para realizar la suplantación de DNS se utilizó la herramienta dnsspoof. <br />
  49. 49. Ataque de suplantación DNS, con la técnica de redirección ICMP<br />Este ataque tiene un efecto similar al ataque de hombre en el medio a través del envenamiento de la tabla ARP, sin embargo, tiene varias diferencias significativas:<br />Modifica las tablas de enrutamiento de la víctima<br />Un único paquete para que la víctima redirija el tráfico hacia el sistema del atacante por un tiempo razonable. <br />No redirige todo el tráfico de la víctima.<br />
  50. 50. Ataque de suplantación DNS, con la técnica de redirección ICMP<br />
  51. 51. Ataque de suplantación DNS, con la técnica de redirección ICMP<br />Configuración de la red de la víctima<br />
  52. 52. Ataque de suplantación DNS, con la técnica de redirección ICMP<br />Tabla ARP de la víctima donde se puede ver la dirección MAC de el enrutador que usa por defecto.<br />
  53. 53. Ataque de suplantación DNS, con la técnica de redirección ICMP<br />Tabla de enrutamiento. no aparecen entradas que dirijan el tráfico hacia el servidor DNS, es importante tener esto en cuenta para más adelante notar el efecto del ataque.<br />
  54. 54. Ataque de suplantación DNS, con la técnica de redirección ICMP<br />Ruta previa al ataque hacia el servidor DNS (solo los primeros 3 saltos)<br />el tráfico dirigido al servidor DNS se realiza a través de la puerta de enlace por defecto.<br />
  55. 55. Ataque de suplantación DNS, con la técnica de redirección ICMP<br />Mostramos que no se puede encontrar el nombre de dominio www.banco.com.co ejecutando nslookup en la víctima<br />
  56. 56. Ataque de suplantación DNS, con la técnica de redirección ICMP<br />En la captura de tráfico se puede confirmar que el servidor DNS no puede resolver el dominio<br />
  57. 57. Ataque de suplantación DNS, con la técnica de redirección ICMP<br />Configuración de la red del atacante<br />
  58. 58. Ataque de suplantación DNS, con la técnica de redirección ICMP<br />Se configuró y ejecutó la herramienta DNS Spoof, notese que se responderá con la dirección local del atacante a toda solicitud de resolución de nombres relacionada con el dominio banco.com.co<br />
  59. 59. Ataque de suplantación DNS, con la técnica de redirección ICMP<br />Note en la Fig. que la dirección MAC destino de la solicitud de resolución está dirigida a la dirección MAC de la puerta de enlace por defecto. Este es un detalle importante a tener en cuenta para ver el efecto del ataque.<br />
  60. 60. Ataque de suplantación DNS, con la técnica de redirección ICMP<br />tráfico generado al enviarle el paquete que causará la modificación de la tabla de enrutamiento del sistema víctima. Nótese que el mensaje ICMP “redirect for host” envía a la víctima suplantando la dirección de la puerta de enlace por defecto. <br />Dado que todavía no ha habido comunicación desde el sistema atacante con la víctima, es necesario hacer una solicitud de arp en busca de la dirección MAC correspondiente a la ip 192.168.1.101 (Víctima).<br />
  61. 61. Ataque de suplantación DNS, con la técnica de redirección ICMP<br />En el detalle del mensaje ICMP (Fig. 15) se le informa que la ruta hacia la dirección IP 190.157.2.140 (servidor de nombres de la víctima) ha cambiado y que ahora la puerta de enlace para este host ahora es la 192.168.1.130 (Sistema del atacante). <br />Note que el paquete se origina desde la dirección MAC 00:0c:29:a7:bf:5f que corresponde a la máquina del atacante, sin embargo, la dirección origen es 192.168.1.1 que es la del Gateway por defecto, cuya dirección MAC es la 00:21:29:78:ba:ae. Esto es una clara utilización de la técnica de suplantación IP (IP Spoofing).<br />
  62. 62. Ataque de suplantación DNS, con la técnica de redirección ICMP<br />Actualización de la tabla arp de la víctima<br />
  63. 63. Ataque de suplantación DNS, con la técnica de redirección ICMP<br />Tabla de enrutamiento de la víctima. Note la tercera entrada de la tabla.<br />
  64. 64. Ataque de suplantación DNS, con la técnica de redirección ICMP<br />Se logró suplantar al servidor de nombres, se ejecutó de nuevo un ping al nombre de dominio www.banco.com.co, para demostrar que ahora este se resuelve a la dirección IP del sistema atacante.<br />
  65. 65. Ataque de suplantación DNS, con la técnica de redirección ICMP<br />puede observase el proceso que sigue la aplicación ping ejecutada desde el sistema víctima, donde primero hace una solicitud ARP para averiguar la puerta de enlace a utilizar para dirigir el datagrama con la petición DNS, luego esta última se realiza y se responde suplantando al servidor DNS, en este punto es cuando entra en juego la aplicación dnsspoof.<br />Y los siguientes paquetes muetran una secuencia normal ICMP echo request/reply (ping) desde el sitema víctima a la dirección ip resuelta por el supuesto DNS, que resulta ser la misma dirección desde la que se ejecutó el ataque, vale la pena decir que esta respuesta se hubiera podido dirigir a cualquier otra dirección IP.<br />
  66. 66. Ataque de suplantación DNS, con la técnica de redirección ICMP<br />Note como cambia la ruta a seguir para llegar al servidor DNS, nótese que ahora el primer salto es el sistema atacante y no la puerta de enlace por defecto.<br />
  67. 67. Ataque de suplantación DNS, con la técnica de redirección ICMP<br />Muchas veces la diferencia entre bug y funcionalidad es difusa. <br />Este ataque puede extenderse para atacar otros servicios.<br />
  68. 68. Desarrollo de Herramientas de hacking<br />The Lord of the Bits<br />
  69. 69. Hacking y programación<br />¿Para qué desarrollarlas?<br />Adaptarse fácilmente a diferentes entornos<br />Implementación de nuevas técnicas<br />Modificar otras herramientas<br />Evitar la detección<br />
  70. 70. Herramientas de Hacking<br />“A network security tool is an algorithmic implement that is designed to probe, assess, or increase the overall safety of or to mitigate the risk associated with an entity across a communications medium”.<br />Mike Schiffman[7]<br />Network securitytool== herramienta de hacking<br />
  71. 71. Mini-Introducción a la programación de Redes<br />Lo quedebióaprender en el curso de redes<br />
  72. 72. Berkeley Sockets<br />
  73. 73. Berkeley Sockets<br />Son estructuras de datos que permiten la comunicación entre procesos.<br />En nuestro caso a través de una red<br />Los “Berkeley sockets” (A.K.A. BSD socket API) son una librería que permite su implementación.<br />Es el estándar para sockets de red.<br />
  74. 74. Socket: es una puerta entre el proceso aplicación y el protocolo de transporte de extremo a extremo (UCP o TCP)‏<br />Controlado por<br />El desarrollador<br />De la aplicación<br />Controlado por<br />El desarrollador<br />De la aplicación<br />proceso<br />Sockets <br />proceso<br />socket<br />socket<br />TCP con<br />buffers,<br />variables<br />TCP con<br />buffers,<br />variables<br />Controlado por el<br />sistema<br />operativo<br />Controlado por el<br />sistema<br />operativo<br />Internet<br />servidoro<br />cliente<br />cliente o<br />servidor<br />
  75. 75. Visto de otra forma<br />Puerto<br />Puerto<br />Proceso<br />Proceso<br />Transporte<br />Host<br />Host<br />76<br />
  76. 76. Familias de Sockets<br />Pueden ser:<br />PF_INET para IPv4<br />PF_INET6 para IPv6.<br />PF_PACKET para protocolos capa de enlace<br />PF_UNIX comunicación local<br />Dependiendo de la capa en la que se quiere trabajar hay diferentes tipos de socket<br />
  77. 77. Stream Sockets (Capa de transporte)<br />Se utilizan en la mayoría de los casos, en especial cuando no es necesario manipular los campos de los protocolos de red y transporte<br />Pueden ser:<br />De Flujo (Stream)<br />sd = socket (PF_INET, SOCK_STREAM, 0)<br />De Datagramas<br />sd = socket (PF_INET, SOCK_DGRAM, 0)<br />0 se refiere al protocolo por defecto de transporte<br />Más información: man 7 socket<br />
  78. 78. Raw Sockets (Capa de Internet)<br />Se utilizan para acceder a los protocolos de la capa de internet.<br />Permiten manipular el segmento de datos <br />Se llaman Raw Sockets:<br />sd = socket (PF_INET, SOCK_RAW, <Protocol>)<br />Protocol puede ser:<br />IPPROTO_TCP, IPPROTO_UDP, IPPROTO_ICMP, IPPROTO_RAW<br />
  79. 79. Raw Sockets (Capa de Internet)<br />En algunos Casos, también se requiere manipular los campos del encabezado IP.(p.e. IP Spoofing)<br />Para esto se especifica la opción IP_HDRINCL con la función setsockopt():<br />constinton = 1;<br />setsockopt(sockd, IPPROTO_IP, IP_HDRINCL, (char *)&on, sizeof(on))<br />Mas información: man 7 raw<br />
  80. 80. Packet Sockets (Capa de Enlace)<br />Se utilizan para acceder a los protocolos de la capa de enlace.<br />Sockets de más bajo nivel (a nivel del Driver del dispositivo)<br />Se llaman Packet Sockets<br />Con ellos se puede hacer un Sniffer<br />Prototipo:<br />#include <sys/socket.h><br />#include <netpacket/packet.h><br />#include <net/ethernet.h> /* The L2 protocols */<br />sd = socket (PF_PACKET, intsocket_type, intprotocol)<br />
  81. 81. Ejemplos<br />
  82. 82. Aclaración<br />Se han eliminado líneas no relevantes en el código fuente que se presenta a continuación. <br />En especial la parte de verificación de errores.<br />Sin embargo al implementar las herramientas es importante incluir estas verificaciones<br />
  83. 83. Ejemplo 2<br />Un Sniffer<br />
  84. 84. sniffercito<br />El siguiente ejemplo es un sniffer muy simple. (MUY)<br />Captura paquetes, los imprime … y ya.<br />
  85. 85. ¿Qué Hace?<br />Lee los argumentos<br />Crea el socket<br />Habilita el modo promiscuo en la interfaz<br />Recibe paquetes<br />Imprime los datos del paquete<br />Goto 4<br />
  86. 86. Plantilla Sniffer<br />Qué incluir?<br />
  87. 87. PlantillaSniffer<br />
  88. 88. ¿Cómo se podría mejorar?<br />Agregándole una función filtro<br />Cuando se cumpla el criterio (o no se cumpla) ejecutar alguna acción<br />Inyección de paquetes<br />Análisis de encabezados <br />Análisis de contenidos (DPI)<br />Estadísticas<br />…<br />
  89. 89. Ejemplo 3<br />Un Backdoor<br />
  90. 90. El Backdoor<br />Este es un ejemplo más elaborado<br />Es una puerta trasera que se puede instalar en un sistema Linux ya comprometido.<br />Solo hace uso de librerías estándar.<br />Utiliza raw sockets y stream sockets<br />Debe ejecutarse con privilegios de root<br />Se ejecuta:<br />Backdoor <clave><br />
  91. 91. ¿Cómo empezó todo?<br />Corre en modo demonio.<br />Espera que llegue un paquete especial ICMP tipo 0 (echo reply)<br />Lo especial es que verifica el identificador de icmp si coincide se conecta a la dirección ip origen y al puerto que viene en el número de secuencia<br />Si no coincide simplemente lo ignora<br />
  92. 92. ¿Que tiene de especial?<br />No está escuchando en ningún puerto, por lo tanto netstat no lo ve.<br />Tampoco lo ve un port scanner.<br />Se puede ver a través de ps (pero se le puede poner un nombre que no genere sospechas (sysklogd, httpd, etc.).<br />Usando técnicas de rootkits se puede esconder aún más.<br />
  93. 93. Escenario<br />
  94. 94. Escenario<br />0: Escuchar en un puerto<br />
  95. 95. Escenario<br />0: Escuchar en un puerto<br />1: icmp echo reply<br />ICMP Seq: Clave<br />
  96. 96. Escenario<br />0: Escuchar en un puerto<br />2: Verificar clave<br />Si es correcta conectar<br />1: icmp echo reply<br />ICMP Seq: Clave<br />
  97. 97. Escenario<br />0: Escuchar en un puerto<br />3: Conectar a puerto<br />2: Verificar clave<br />Si es correcta conectar<br />1: icmp echo reply<br />ICMP Seq: Clave<br />
  98. 98. ¿Qué Incluir?<br />Note que son solo librerías estándar<br />
  99. 99.
  100. 100.
  101. 101. ¿Cómo Mejorarlo?<br />Usar el campo de datos de icmp<br />Soporte de otro tipo de mensajes icmp<br />No usar la dirección origen del encabezado ip<br />Aprovechar la fragmentación de ip<br />Ejecutarlo como un LKM<br />…<br />
  102. 102. El Generador de paquetes <br />El complemento del backdoor es un programa para generar un paquete ICMP con los datos que se necesitan para la conexión. <br />La clave<br />La Dirección IP<br />El Puerto<br />Utiliza Raw Sockets<br />También la técnica IP Spoofing, de esta manera se le puede poner cualquier dirección de origen ]:-)<br />
  103. 103. Generador de paquetes<br />Se ejecuta:<br />gp <srcip> <dstip> <icmp_id> <icmp_seq><br />
  104. 104.
  105. 105.
  106. 106. ¿Cómo mejorarlo? <br />Generar los campos de los encabezados de manera dinámica<br />Manejar otro tipo de mensajes ICMP<br />Manipulación del segmento de datos<br />…<br />
  107. 107. El Backdoor Mejorado<br />Es la misma idea del anterior<br />También usa icmp (codigo 8 y 0)<br />Cambia la forma de conectarse y de asignar el puerto<br />Lo interesante es que utiliza el protocolo de intercambio de Diffie-Hellman para determinar en cuál puerto escuchar<br />
  108. 108. ¿Qué hace?<br />Espera que llegue un paquete ICMP tipo 8 (echo reply) con código 1<br />Si el código es 0, como normalmente debería ser, responde como un servidor de ping normal.<br />De lo contrario hace el intercambio de diffie-Helmann<br />
  109. 109. ¿Que tiene de especial?<br />No está escuchando en ningún puerto, por lo tanto netstat no lo ve.<br />Tampoco lo ve un port scanner.<br />Se puede ver a través de ps (pero se le puede poner un nombre que no genere sospechas (sysklogd, httpd, etc.).<br />Usando técnicas de rootkits se puede esconder aún más.<br />
  110. 110. Ejemplo 4<br />Backdoor Mejorado<br />
  111. 111. Ping<br />Se utiliza para hacer pruebas<br />Si el destino es alcanzable<br />RTT (Round Trip Time)<br />2 Tipos de mensajes<br />Echo request, tipo 8<br />Echo Reply, tipo 0<br />
  112. 112. Ping<br />Adiciona 2 campos al encabezado ICMP<br />Identificador y secuencia<br />También puede incluir una marca de tiempo<br />En el paquete de respuesta se incluyen los mismos datos que en el del requerimiento<br />
  113. 113. Imagen tomada de [7]<br />
  114. 114. Ping: Ejemplo<br />
  115. 115. Protocolo de Diffie-Hellman<br />Desarrollado por Whitfield Diffie y Martin Hellman<br />Permite el intercambio secreto de claves entre dos partes que no han tenido contacto previo, utilizando un canal inseguro, y de manera anónima (no autenticada).<br />
  116. 116. Protocolo de Diffie-Hellman<br />Para dos partes A y B que intentan establecer una clave secreta y un adversario E, la versión básica es como sigue:<br />Se establecen un primo p y un generador <br /> Estos son públicos, conocidos no sólo por las partes A y B sino también por el adversario E.<br />A escoge al azar <br />calcula X = g^x mod p, y envía X a B<br />B escoge al azar<br />calcula Y = g^y mod p, y envía Y a A<br />
  117. 117. Protocolo de Diffie-Hellman[8]<br />
  118. 118. Protocolo de Diffie-Hellman[8]<br />Note que:<br />Esta cantidad común a A y B es la llave intercambiada<br />
  119. 119. Protocolo de Diffie-Hellmansobre icmp<br />
  120. 120. Conclusiones<br />Es clave entender la teoría<br />No hace daño leer los rfc<br />Piense en alto nivel, programe en bajo nivel<br />Baje de nivel según la necesidad (¿Hacer un cliente http con packet sockets?:-S)<br />No es necesario aprenderse de memoria los llamados a las funciones. La red está plagada de ejemplos<br />Use los buscadores!!!!!<br />Hacker que se respete desarrolla algunas de sus herramientas<br />
  121. 121. Preguntas<br />
  122. 122. Muchas Gracias!!!<br />bytemare@lownoisehg.orgtwitter: @bytemarehackhttp://www.lownoisehg.org<br />

×