Hacking en redes de datos IPv6

Publicado el en Artículos, Seguridad

Twitter9Google+4Facebook10LinkedIn0StumbleUpon0tumblrEmail

El protocolo IPv6 lleva ya mucho tiempo entre nosotros, y aunque aún mucha gente se empeña en revisar las configuraciones IPv4 en una red de empresa, lo que realmente está funcionando en las conexiones SMB, DNS o incluso web de la Intranet, es el protocolo IPv6. Conocer su funcionamiento es fundamental para la protección de una red, ya que muchos de los sistemas de protección IDS están configurados para detectar la mayoría de los ataques en redes IPv4, pero no hacen lo mismo con los ataques IPv6.

En este artículo publicado en El Lado del Mal se hablará de este protocolo que debería haber entrado hace mucho tiempo en nuestra vida cotidiana, y sin embargo sigue siendo un gran desconocido para muchos técnicos, a pesar de que al realizar un ipconrfig salga esa dirección fe80:: al principio de todo.

Antes de comenzar con los ataques IPv6 es necesario familiarizarse con todos los conceptos fundamentales de este protocolo, así que habrá que asentar algunas cosas al principio.

Configuración básica de IPv6 en sistemas Microsoft Windows

Si entramos en las propiedades del protocolo IPv6 de un sistema Microsoft Windows, lo primero que encontraremos es una pantalla de configuración más o menos similar a la de IPv4, con la única diferencia de que las direcciones IP serán de 128 bits, que se escriben en hexadecimal separadas en grupos de 16 bits, es decir, cuatro valores hexadecimales. Esto hace que las direcciones IPv6 queden escritas de una forma similar a fe80:123:0000:0000:0000:0000:0000:1ab0. Es un poco más raro, pero no tanto, 8 grupos de 4 valores hexadecimales.

Para que sea más fácil de escribir y recordar, cuando hay una lista de grupos de cuatro ceros seguidos, se puede utilizar el acortador ::, reduciendo la dirección anterior a algo como: fe80:123::1ab0. Esta reducción se puede utilizar una única vez por cada dirección IPv6 y solo para grupos de 4 ceros consecutivos. Es por eso que será muy común encontrar cosas como fc00::1 en una dirección IPv6 de una red privada.

En segundo lugar, aunque no se llama máscara de red, tenemos algo muy similar llamado Prefijo de Subred. Este termino se ha cambiado debido a las cantidades de problemas que causó en muchos usuarios e implementaciones de IPv4 el uso de subnetting, supernetting o la asignación de máscaras de red del tipo 255.0.124.255, algo que fue permitido por el estándar – y por tanto en algunas implementaciones -, pero que no acababa de tener mucho sentido y volvía loco a muchos técnicos cuando descubrían su existencia.

En IPv6 el prefijo tiene la misma función, gestionar la visibilidad de red y utilizarse para hacer subnetting y supernetting, pero todos los unos van seguidos y al principio por definición en el estándar. De esta forma, si tuviéramos dos direcciones IPv6 – sin utilizar una Puerta de Enlace en la red – tales como estas:

A: fc00::2000:0001/96
B: fc00::2001:0001/112

Al hacer un ping en IPv6 de A a B obtendríamos un Time-Out y al hacer un ping de B a A tendríamos una respuesta de Host inaccesible, debido a que A no entra dentro de la misma red que B, pero B si está dentro de la misma red que A.

Para interconectar las redes IPv6, igual que en IPv4, hay que utilizar una Puerta de Enlace o Gateway, que se configura en las propiedades del protocolo de red, igual que los servidores IPv6 que se van a utilizar para la resolución de nombres. Estos servidores DNS no son los que se van a utilizar para resolver los nombres a direcciones IPv6 sino que serán los servidores DNS que se utilizarán para resolver todo cuando se utilice el protocolo IPv6, es decir, también se utilizarán estos servidores cuando haya que resolver un registro DNS de tipo A cuando se utilice en la red local el protocolo IPv6.

Direcciones de Vínculo o Enlace Local en IPv6

Conocidos los parámetros a configurar, hay que entender también que en IPv6, tanto si se realiza una configuración manual de las direcciones IPv6 como si se deja en Automático – configuración por defecto en equipos Windows y Mac OS X – las tarjetas de red con soporte para IPv6 tendrán asociada una dirección de vínculo local.

Esta dirección se genera automáticamente y es anunciada por la red para evitar duplicidad de la misma usando el protocolo NDP (Neighbor Discovery Protocol). Esta duplicidad de direcciones no debería darse de forma habitual, ya que el algoritmo de generación de la misma depende de la dirección MAC de la tarjeta, pero para evitar cualquier situación indeseada se hace uso de un sistema que garantice su unicidad y que resuelva estos conflictos.

Esta dirección es del rango fe80::/10 y es equivalente al rango 169.254.1.X – 169.254.254.X de IPv4. La única diferencia es que en la práctica las direcciones 169.254.X.X no se suelen utilizar en IPv4 y en IPv6 estas direcciones se van a utilizar con mucha frecuencia.

Por supuesto, estas direcciones no son enrutables, pero sí que son utilizadas para comunicarse con el router o cualquier servidor de la organización que se encuentre en la red local. Si no has tocado nada de la configuración por defecto, tendrás una de estas direcciones asociadas y podrás utilizarla para hacer ping a cualquier equipo de tu red local con una dirección IPv6 de Enlace-Local.

Direcciones Well-Known en IPv6

Además de las direcciones de Enlace o Vínculo Local, en IPv6 hay una buena cantidad de direcciones que deben ser conocidas, así que toca describir las más importantes aquí para entender luego los entornos de ataque:

  • ::/128: Es una dirección con todos los bits a 0. Es la dirección IPv6 indefinida.
  • ::/0: Es la dirección de red IPv6 para describir la ruta por defecto en una tabla de enrutamiento. Es equivalente a la dirección IPv4 0.0.0.0.
  • ::1/128: Localhost en IPv6. Equivalente a 127.0.0.1 (IPv4).
  • fe80::/10: Direcciones de vínculo o enlace local. No son enrutables pero generan una red local efectiva en el rango fe80::/64. La parte de Host se suele calcular a partir de la dirección MAC de la tarjeta.
  • ff02::/16: Direcciones de redes IPv6 Multicast. Equivalentes a las (224.X) en redes IPv4.
  • fc00::/7: Son las direcciones para redes IPv6 privadas. Estas direcciones tampoco son enrutables en Internet y son equivalentes a 10.X, 172.16.X y 192.168.X en redes IPv4
  • ::ffff:0:0/96: Direcciones IPv4 mapeadas en IPv6. Se utilizan para conversiones e interconexiones de protocolos IPv4 e IPv6.
  • 64:ff9b::/96: Direcciones IPv6 generadas automáticamente a partir de IPv4. Se utilizan para cuando sea necesario hacer nuevas direcciones IPv6 y se quiera generar a partir de la dirección IPv4 de la máquina.
  • 2002::/16: Indica que es una red 6 to 4 mapeada y utilizará la dirección IPv4 192.88.99.X como gateway para la interconexión.

Además de estas direcciones, hay algunas reservadas para propósitos especiales, como son las siguientes:

  • 2001::/32: Usado por el protocolo de túneles Teredo que permite hacer tunneling IPv6 sobre redes IPv4 en Internet. Este sistema es el que se utiliza a la hora de implementar Direct Access en Windows Server 2008 R2 y Windows 7.
  • 2001:2::/48: Asignado a Benchmarking Methodology Working Group (BMWG) para comparativas (benchmarking) en IPv6 (similar a la red 198.18.0.0/15 para comparativas en IPv4).
  • 2001:10::/28: ORCHID (Overlay Routable Cryptographic Hash Identifiers). Direcciones IPv6 no-enrutables usadas para identificadores criptográficos Hash.
  • 2001:db8::/32: Direcciones utilizadas para documentación o ejemplos IPv6. Similar a las redes 192.0.2.0/24, 198.51.100.0/24 y 203.0.113.0/24 en IPv4.

Precedencia de protocolos

En los entornos actuales, lo más probable es que el protocolo IPv6 conviva junto con el protocolo IPv4 – y puede que incluso algún otro – así que el sistema operativo deberá elegir ente IPv4 según algunas normas. Estas normas se definen mediante un algoritmo de precedencia definido en el RFC 3484 y en el más reciente de Septiembre de 2012 RFC 6724, titulado “Default Address Selection for Internet Protocol version 6 (IPv6)” en el que se explica cuáles son las normas para elegir IPv6 o IPv4 en un entorno mixto.

El documento explica dos algoritmos basados en la dirección de origen y la dirección de destino para elegir un protocolo u otro. Estos algoritmos tienen en cuenta cosas como la existencia o no de puertas de enlace, ya que puede que el origen sea una dirección IPv4, el destino sea una dirección IPv4, pero esta se encuentra en otra red y sólo existe una puerta de enlace para IPv6, por lo que se podría elegir un encapsulado de direcciones IPv4 sobre IPv6 para poder enrutar el tráfico.

En un sistema Microsoft Windows se puede consultar esta configuración en todo momento por medio del comando netsh interface ipv6 show prefix, donde se mostrará por pantalla una tabla de prioridades con valores similares a la que se puede ver a continuación.

El algoritmo de precedencia da prioridad a IPv6 sobre IPv4 si es posible establecer una comunicación con este protocolo, pero en cualquier momento se puede modificar este comportamiento haciendo uso de los siguientes comandos netsh.

netsh interface ipv6 show prefixpolicies: Muestra la tabla local de políticas
netsh interface ipv6 add prefixpolicies: Añade nuevas entradas a la tabla
netsh interface ipv6 set prefixpolicies: Configura entradas en la tabla
netsh interface ipv6 delete prefixpolicies: Borra entradas en la tabla

Ejemplo:

netsh interface ipv6 set prefixpolicies prefix=2001::/32 precedence=15 label=5

Además, este comportamiento no interfiere para nada en la elección que haya realizado anteriormente una aplicación o un usuario de forma explícita, por lo que solo es una regla de comportamiento para cuando no se ha establecido una restricción previa.

Descubrimiento de vecinos con Neighbor Discovery Protocol

Para descubrir los vecinos de una red IPv6 no existe el protocolo ARP o RARP, y todo se basa en mensajes ICMPv6. El protocolo para descubrimiento de vecinos se llama Neighbor Discovery Protocol e implementa 5 tipos de mensajes distintos. De ellos, los equivalentes a ARP serían los mensajes Neighbor Solicitation (NS), donde se pide la resolución de una dirección MAC asociada a una dirección IPv6 y Neighbor Advertisement (NA), donde se contesta con la dirección MAC de la dirección IPv6 buscada.

Lo normal es que estos mensajes sean enviados a una dirección multicast y que conteste el vecino que tenga la dirección IPv6 que se busca, pero también pueden ser mensajes unicast enviados a una dirección concreta a la que se interroga.

Todas las direcciones MAC asociadas a direcciones IPv6 quedarán almacenadas en una Tabla de vecinos que puede ser consultada con el comando netsh interface ipv6 show neighbor.

Como se puede imaginar ya, estos mensajes tendrán una gran importancia en varios de los ataques que vamos a describir en IPv6 de D.O.S. y Man in the middle.

Resolución de nombres a direcciones IP en ámbito local

En el caso de los sistemas Microsoft Windows, cuando se realiza la resolución de nombres, para poder funcionar con IPv4 e IPv6 se incluyó el protocolo LLMNR (Link-Local Multicast Name Resolution), descrito en el RFC 4795, un protocolo que utilizando multicast permite resolver las direcciones IPv4 y/o IPv6 asociadas a un nombre de dominio. Este sistema permite realizar búsquedas locales o mediante el uso de resolución de registros A y/o AAAA con un servidor DNS.

Utilizando la resolución de nombres con LLMNR, la búsqueda de direcciones MAC de vecinos con NDP y a la tabla de precedencia, los sistemas Microsoft Windows construyen la comunicación entre equipos con IPv6.

Configuración de equipos IPv6 en la red

Para configurar el protocolo IPv6 de los equipos de una red existen diferentes alternativas. La primera de ellas sería realizar una Configuración Estática o manual, en la que se configuran la dirección IPv6, la Puerta de enlace y los servidores DNS de forma individual y manual – o mediante un script – en cada equipo.

La segunda forma de configurar es utilizar un servidor DHCPv6 para configurar todas las propiedades IPv6 de los equipos de un ámbito de red IPv6. Estos servidores DHCPv6 están soportados en los servidores Windows Server 2008, Windows Server 2008 R2 y Windows Server 2012. Al igual que se hacía en IPv4 se pueden configurar dirección IPv6, prefijo de red – o máscara -, puerta de enlace por defecto o servidores DNS a utilizar.

La tercera forma de configurar equipos en la red es mediante el protocolo Neighbor Discovery Protocol y los mensajes RS (Router Solicitation), RA (Router Advertisiment) y Redirect, junto con el funcionamiento SLAAC (Stateless Address Auto Configurator) de los equipos. La idea es que un equipo puede conectarse automáticamente en una red con IPv6 si conoce algún router de conexión. Para ello, el equipo realiza una petición RS en busca de una puerta de enlace.

Todos los routers de la red le contestarán con un RA dándole a SLAAC la información necesaria para que el equipo se autoconfigure una dirección IPv6 que le permita tener conectividad a través del router. Si hay más de un router en la red, y el equipo elige un router como primer salto erróneo, este le contestará con un mensaje NDP de tipo Redirect informándole de cuál es la mejor ruta, para que actualice su tabla de enrutamiento.

Por supuesto, tanto DHCPv6 y SLAAC van a poder ser utilizados para realizar ataques D.O.S. y Man in the middle en las redes IPv6, como veremos más adelante, con esquemas de Rogue DHCPv6 Servers o Rogue Routers.

DNS Autodiscovery

Cuando un equipo se conecta a la red IPv6 a través de una configuración SLAAC existe el problema de que no se pueden configurar los servidores DNS y todas las peticiones de resolución se reducen a LLMNR de tipo difusión en busca de posibles servidores en la red de vínculo local. Sin embargo, si el servidor fuera externo es necesario contar con un servicio de resolución de nombres DNS en la red IPv6. Para ello, cuando no se configura ningún servidor, los equipos Microsoft Windows buscan automáticamente tres direcciones IPv6 establecidas por el estándar IPv6 DNS Autodiscovery.

Si una empresa no quiere usar DHCPv6, puede configurar un DNS en una de esas direcciones IPv6 y junto con un router IPv6 enviando mensajes RA para que los clientes se autoconfiguren, podrá tener la red funcionando.

Neighbor Spoofing

Para descubrir a los vecinos de una red se utiliza el protocolo NDP (Neighbor Discovery Protocol). Este subconjunto de mensajes ICMPv6 cuenta con dos que convierten la dirección IPv6 a una dirección de enlace local (Local-Link) que en las redes de datos de area local será la dirección MAC.

El funcionamiento habitual es que un equipo envíe un mensaje de Neightbor Solicitation NS a una dirección multicast cuando vaya a comunicarse con un equipo y que el que tenga esa dirección IPv6 responda al mensaje multicast con un mensaje unicast de Neighbor Advertisement NA con su dirección física MAC. El receptor del mensaje NA almacenará en la la tabla de vecinos la dirección IPv6 y la dirección MAC asociada.

Sin embargo, al igual que con el protocolo ARP en IPv4, un atacante puede enviar un mensaje NA sin haber recibido el mensaje previo de NS y hacer hacer que en la caché de la tabla de vecinos se almacene el registro. Un ataque de Neighbor Spoofing para hacer man in the middle se basará por tanto en enviar un mensaje NA a los dos equipos a los que se quiere hacer el ataque, poniendo en ambos la dirección IPv6 del otro, y la dirección MAC del atacante.

El ataque se realiza spoofeando la dirección IPv6 de origen del paquete, para simular ser un mensaje que viene del otro equipo víctima, pero en ambos casos se pone la dirección MAC del atacante, para conseguir que el switch de comunicaciones haga llegar todos los mensajes a la máquina del hombre en medio.

Parasite6 (The Hacking Choice)

Una de las herramientas que implementa estos ataques es parasite6, de The Hacker Choice (THC). Esta herramienta está incluida en BackTrack. Por defecto la herramienta realiza man in the middle entre todos los equipos IPv6 que descubre por la red, por lo que ponerla activa en una red de datos en la que hay IPv6 es meter un auténtico parásito. Los pasos para que funcione con la configuración por defecto son:

1) Poner primero una dirección IPv6 en el interfaz de red de BackTrack que esté en la red en que se va a hacer el ataque.

- ifconfig eth0 inet6 add [ipv6]

2) Arrancar parasite6

- parasite6 eth0

3) Configurar el enrutamiento

- sysctl -w net.ipv6.conf.all.forwarding=1

4) Activar un sniffer (Wireshark) y analizar los paquetes.

A partir de ese momento, se empezarán a enviar mensajes NA para hacer man in the middle en las direcciones IPv6 que se detecten y se envenenarán las tablas de vecinos de todos ellos.

Por desgracia, el número de herramientas que analizan los flujos sobre IPv6 no son muchos, y no contamos con muchos filtros que recompongan ficheros transmitidos o analicen sesiones, por lo que el trabajo hay que hacerlo a día de hoy un poco manualmente.

Scapy Project

Otra herramienta que se puede utilizar para crear los paquetes es Scapy, escrita en Python y que permite configurar cualquier tipo de paquete de red, incluidos los de IPv6. Esta utilidad es perfecta para automatizar ataques con scripts, e implementar todos los ataques que se conocen hoy en día.

Puedes descargar la herramienta desde la web de Scapy Project y tienes más información en la presentación que se hizo en Hack In The Box 2006: Scapy and IPv6 networking.

Evil FOCA

En Evil FOCA hemos implementado el ataque de Neighbor Spoofing y basta con seleccionar los equipos a los que se quiere hacer man in the middle para que la herramienta envíe los paquetes NA adecuados.

Utilizando Evil FOCA es posible capturar los ficheros transmitidos una red de area local en la que se esté utilizando IPv6: Captura de ficheros transmitidos por SMB con ataques man in the middle en IPv6 usando Evil FOCA


vía El Lado del Mal

Hacking en redes de datos IPv6 5.00/5 (100.00%) 1 voto

Tags: , ,

Deje un comentario

Cuanto es 22 + 7 ?
Please leave these two fields as-is:
IMPORTANTE! Necesitas resolver la operación matemática para poder continuar.