==Phrack Inc.== Volume 0x0b, Issue 0x39, Phile #0x06 of 0x12 |=------------------------=[ T A R A N I S ]=-----------------------=| |=------------------------------------------------------------------=| |=----------------------=[ Jonathan Wilkins ]=----------------------=| Taranis Code by Jonathan Wilkins Original concept by Jesse Thanks to Skyper for his assistance. URL: [http://www.bitland.net/taranis] Resumen Taranis reexpide el tráfico sobre un conmutador (switch) enviando tráfico ethernet falsificado (spoof). Ésto no es lo mismo que un ataque 'envenenado' de ARP (ARP poisoning attack) ya que sólo afecta al conmutador (switch), y no depende de paquetes ARP. Además, es virtualmente invisible porque los paquetes que envía no son vistos en ningún puerto del conmutador (switch). Evadir la detección de un Sistema de Detección de Intrusos (IDS), que debe estar escuchando sobre un puerto monitorizado, es tan simple como cambiar el tipo de paquete que es enviado por el paquete del hilo (thread) falsificado (spoof). Como trabaja Primero, algo de historia. En los viejos tiempos, teníamos 10base5, o Ethernet gruesa. El prefijo 10 significaba que era de 10 Megabits y el sufijo 5 indicaba que el tamaño máximo de cable era de 500 metros. Se utilizaba cable coaxial, como el cable que usa la TV. (La diferencia está en la impedancia máxima del cable, el cable de TV es 75 ohm, ethernet 50 ohm). El cable coaxial consiste en un hilo central rodeado por una capa de aislante, encerrada en una protección hecha de un hilo fino encallado. Ésto está cubierto por otra capa aislante más fina. Una red Ethernet gruesa tenía un cable compartido y luego una serie de transceptores que se conectaban a él. Si la parte común del cable se rompía, o lo mordisquean unos roedores estropeándolo completamente, entonces la red entera se caía. Como el cable era normalmente puesto completamente a través del techo y las paredes, era bastante inconveniente fijarlo. Series largas de cable tenían que ser aumentadas por un repetidor, que era un pequeño dispositivo que aumentaba la fuerza de la señal. Una red 10base5 se parecía a algo como ésto: Cable compartido X-+------+------+------+------+------+-X (+- Transceptor) | | | | | | (X - Terminador) | | | | | | Host Host Host Host Host Host A B C D E F Éste fue reemplazado por la Ethernet fina (10base2, que significa que era de 10Mbits y tenía un tamaño máximo de cable de 200 metros), que estaba basado en un cable compartido pero no requería transceptores y por eso era menos caro. (10base2 era también conocida como 'red más barata' (cheapernet)). Era también vulnerable al ataque roedor. 10base2 se parecía a algo como ésto: X------.------.------.------.------.------X Host Host Host Host Host A B C D E (X - Terminador que es un reóstato de 50 ohm) (. - Conector BNC, pieza en forma de T de metal que conectaba dos trozos de cable con una máquina) Entonces llegó la 10baseT, o Ethernet de Par Trenzado. Estaba basado en una topología en estrella. La razón para el nombre está clara cuando ves un diagrama. Host A Host B Host C | | | \--------- | ---------/ \|/ Switch o Hub /|\ /~~~~~~~~~ | ~~~~~~~~~\ Host D Host E Host F Ahora si las ratas mordisqueaban estropeando completamente un cable de red, solo una máquina perdería la conectividad de la red. Si una rata gigante mordisqueaba hasta comerse el hub de red, era fácil crimpar nuevos conectores sobre el cable par trenzado y comprar un nuevo hub. Un encabezamiento de marco Ethernet se parece como ésto: | | | | | | | | | | | | | | 0 6 11 13 Bytes 0-5 son la Dirección de Destino Bytes 6-11 son la Dirección Origen Bytes 12-13 es el Tipo de Código (IP es 0x0800) Todos los tipos de ethernet comentados (10base5, 10base2 y 10baseT) están basados en un medio compartido. Ésto significa que los paquetes son difundidos a cada máquina conectada. Significa también que cuando un dispositivo está enviando, ningún otro puede enviar. Para incrementar el ancho de banda, se crearon los conmutadores (switches). Los conmutadores (switches) Ethernet sólo envían los paquetes al puerto (un puerto es el agujero donde tu conectas el cable) al que está destinado dicho paquete. (Ésto significa a todos los puertos en el caso de un paquete de difusión (broadcast)). Ésto significó que muchos más paquetes podían ser enviados a través de la red si se usaba un conmutador (switch) en vez de un hub. Los conmutadores (switches) y hubs son construídos para permitir 'uplinking' (cuando conectas otro switch o hub en un puerto en vez de una máquina simple). En el caso de un hub, ésto significa que hay más máquinas compartiendo el ancho de banda disponible. En el caso de un conmutador (switch) significa que el tráfico interno de un hub no será visto en otros puertos. También significa que las múltiples direcciones ethernet pueden ser de cada puerto y que el conmutador (switch) debe contener una lista de todas las direcciones ethernet que estan sobre un puerto físico dado y sólo envía tráfico al puerto del host destino. Debería ser ridículo requerir un administrador de red para averiguar las direcciones ethernet de cada una de las máquinas conectadas e introducirlas manualmente para construír esta lista, así que los conmutadores (switches) generan esta lista automáticamente observando el tráfico de red. Mientras haya un modo para ésto ser configurado automáticamente, el conmutador (switch) es probablemente vulnerable a este ataque. Cuando corre, Taranis empezará enviando paquetes con la dirección ethernet del servidor de correo como la dirección ethernet origen y la dirección ethernet real de la máquina atacante como la dirección de destino. Cuando el conmutador (switch) ve este paquete actualizará su table interna de puerto -> mapas de direcciones ethernet. (Ésto se llama la tabla CAM. Para más información sobre cómo la tabla CAM es actualizada examinar, [http://routergod.com/gilliananderson/] Para que quede constancia, CAM aparentemente significa Memoria Direccionable de Contenido, un término extremadamente genérico). El switch no enviará el paquete a ninguno de los otros puertos ya que la dirección ethernet de destino está establecida a una dirección ethernet ya asociada con el puerto actual. Esta tabla interna se parece a algo como ésto: Puerto | Direcciones Ethernet ----------+------------------------------- Puerto 1 | 01:00:af:34:53:62 (Máquina) Puerto 2 | 01:e4:5f:2a:63:35 00:c1:24:ee:62:66 ... (Hub/Switch) Puerto 3 | 11:af:5a:69:08:63 00:17:72:e1:72:70 ... (Hub/Switch) Puerto 4 | 00:14:62:74:23:5a (Máquina) En lo que al conmutador (switch) concierne, tiene un hub conectado en ese puerto, y vió un paquete de un host sobre ese hub a otro host del mismo hub. No necesita enviarlo a ningún lugar. Ahora que estamos viendo tráfico destinado al servidor de correo, ¿qué podemos hacer? La idea inicial era hacer un 'ataque de hombre en el medio' (a man in the middle attack), pero ésto resultó ser mas difícil de lo esperado. (ver los comentarios para switchtest al final de este archivo) En su lugar taranis engaña lo suficiente a una sesión pop o imap para conseguir que un cliente se autentifique enviando su nombre de usuario y contraseña. Taranis almacenará esta información de autentificación a un logfile. Para ver mostrado todo en un formato más bonito correr: cat taranis.log | sort | uniq Configuración Taranis fué desarrollado bajo FreeBSD 4.3. También trabaja bajo OpenBSD y Linux. Si lo portas a otra plataforma envíame diff's y los integraré en el paquete de taranis (release). Necesitarás un parche para tu kernel para permitirte falsificar (spoof) direcciones origen ethernet bajo FreeBSD y OpenBSD. LibNet tiene uno para OpenBSD y para FreeBSD < 4.0. He actualizado este parche para FreeBSD 4+ y está incluído en este archivo como if_ethersubr.c.patch. Puedes usarlo como sigue ... - su root - cd /usr/src/sys/net - patch < if_ethersubr.c.patch y entonces recompilar tu kernel Switchtest Switchtest fué escrito durante el desarrollo de Taranis. Está incluído en caso de que alguien quiera testear sus switches y pilas ip. No seríamos capaces de encontrar un switch que dejase entrar a modo hub cuando se enfrente con muchos paquetes con direcciones ethernet origen aleatorias. Quizás alguien lo hará. También intenta un ataque de hombre en el medio (a man in the middle attack). Ésto no debería trabajar ya que está basado en reenviar tráfico a la dirección de difusión (broadcast ethernet) o direcciones multicast ethernet. Si una pila IP objetivo es vulnerable, me gustaría enterarme de ello. Hemos discutido la posibilidad de un ataque generalizado de hombre en el medio (generalized man in the middle attack). Es de considerar que podrías hacer un trabajo decente del ataque redireccionando poco tráfico, y encolando los paquetes, entonces resetear el conmutador (switch) (con una petición arp) y entonces enviar los paquetes encolados, entonces redireccionar de nuevo. Ésto probablemente causará muchos paquetes 'dropeados' (packet drops), pero las aplicaciones tcp deben ser capaces de continuar frente a ésto. FAQ P: ¿De dónde viene el nombre? R: Taranis era el nombre de un dios de la antigüa Galia. Cada vez que no puedo pensar en un nombre pillo algo aleatoriamente de [www.pantheon.org]. P: ¿Por qué obtengo errores al abrir PCAP (PCAP open errors)? R: No eres root o tu kernel no tiene un modo compatible pcap de captura de paquetes. Quizás tu red no es ethernet. P: ¿Por qué no estoy viendo paquetes de la máquina objetivo? R: Hay varias posibilidades: 1. Tu sistema no esta falsificando (spoof) tráfico ethernet. Examina la salida con ethereal ([http://ethereal.zing.org/]) o tcpdump ([www.tcpdump.org]). Si estás usando tcpdump usa el parámetro -e para mostrar las direcciones de nivel de enlace. 2. Si el sistema donde estás está falsificando (spoof) los marcos ethernet correctamente es posible que el switch tenga un retraso antes de que desvíe el puerto asociado con una dirección ethernet. Algunos conmutadores (switches) también tienen un modo de bloqueo, donde no aceptarán ningún cambio a su tabla CAM. P: ¿Realmente [inserte tipo de red aquí] se parece a algo como eso? R: No. Pero yo no tengo gráficos ascii técnicos. Cuando tenga una ocasión localizaré algunos dibujos reales y los postearé en: [www.bitland.net/taranis/diagrams.html]