sábado, enero 19, 2013

Predicción de direcciones IPv6 de Local-Link en Mac OS X

Una de las cosas que estoy contando en la charla de IPv6 de la Gira Up To Secure 2013 - que la semana que viene pasa por Bilbao, Valladolid y Palma de Mallorca - tiene que ver con la predicción de la dirección de Local-Link - o vínculo local - IPv6 de un equipo a partir de su dirección física MAC, lo que permitiría - de alguna manera - poder escanear un segmento de red en busca de las máquinas que tienen IPv6 activo. 

Direcciones de vínculo local (local-link)

Las direcciones de vínculo local en IPv6 son las equivalentes a las 169.254.X.X que tenemos en IPv4, y como ya vimos en los conceptos básicos de IPv6 tienen un ámbito de utilidad sólo en el mismo segmento físico, ya que no son enrutables - ni en Internet, ni en la red privada -. Sin embargo, a diferencia de las redes IPv4, donde la dirección de vínculo local sólo aparece cuando se ha configurado la obtención de una dirección IPv4 de forma dinámica y ésta no ha se ha podido obtener, en IPv6 se genera siempre  que el equipo tenga activo IPv6.

Figura 1: Dirección de vínculo local IPv6 en un Windows 7

Además, es la dirección IPv6 la que se utiliza en la comunicación entre dos equipos que estén en el mismo segmento, con lo que son utilizadas para compartir archivos o impresoras, o conectarse al servidor DNS - siempre que estén en el mismo segmento de red -. 

Scanning en IPv6

Debido a esta gran utilidad, son muy útiles a la hora de realizar ataques en redes de datos IPv6, pero en un entorno con switches y poco tráfico broadcast se hace un poco difícil localizar los equipos con IPv6 conectados a la red. Sería difícil probar todas las posibles direcciones, ya que las IPv6 de vínculo local tienen un prefijo de 64 bits lo que hace que existan 2 elevado a 64 posibles direcciones IPv6 de vínculo local en un mismo segmento.

Por otro lado, existe un "truco" para escanear una red de equipos con IPv6 en la que haya Mac OS X de por medio - de Linux ya hablaremos otro día -, debido a que siguen generando las direcciones IPv6 a partir de las direcciones MAC de la tarjeta de red, lo que permite:
1.- Gernerar una dirección IPv6 efectiva a partir de una dirección MAC
2.- Detectar un equipo Mac OS X a partir de una dirección IPv6
La idea es que, originalmente, las direcciones IPv6 generan los 64 bits de la parte de Host tal y como se indica en el siguiente gráfico.

Figura 2: generación de la parte de Host en la dirección de vínculo local en IPv6

Es decir, se utilizan primero los 24 bits más significativos de la dirección MAC, después se añaden las contastes FF FE, y por último se agregan los 24 bits menos significativos de la dirección MAC de la tarjeta. Esto se puede ver en la siguiente captura hecha en un Mac OS X Mountain Lion 10.8.2.

Figura 3: Dirección de vínculo local en IPv6 y MAC de un Mac OS X 10.8.2

En ella se puede ver cómo la MAC de la tarjeta está dividida por el medio usando la contaste FFFE, y aparecen los 64 bits de host de la dirección IPv6, que tiene una dirección de vínculo local con un prefijo de 64 bits.

Se me olvidaba, en esa dirección de Mac OS X Mountain Lion 10.8.2, para obtener la dirección MAC, el 2 bit menos significativo del byte más significativo de la dirección MAC hace un complemento a uno, así que si es 1 se pone un 0 y si es 0 se pone un 1. En este caso, se ha puesto a 1, y el segundo valor en hexadecimal que ha pasado de e4 (01110100) a e6 (01110110). 

Debido a esta curiosidad, es posible utilizar el protocolo IPv4 para hacer un escaneo de la subred utilizando el protocolo ARP y obtener una serie de direcciones MAC. A partir de ellas, utilizando la dirección de red de vínculo local, generar direcciones IPv6 siguiendo este método, y probar si es una dirección IPv6 que está siendo utilizada. Es decir:
1) Escanear una dirección IPv4 con ARP
2) Generar una IPv6 de vínculo local a partir de la MAC
3) Probar la IPv6 generada
Si vas a hacer una herramienta que escanee un segmento de red en busca de equipos con IPv6, como nuestra querida Evil FOCA, deberías implementar este mecanismo.

Figura 4: Escaneando la red con Evil FOCA

Extensiones de privacidad en IPv6

Para evitar esta debilidad en la generación de direcciones IPv6, existe el RFC 4941 que propone utilizar direcciones de vínculo local con parte de host totalmente aleatorias, pero por defecto solo se utiliza para las direcciones autogeneradas con SLAAC, y estas solo se utilizarán para conectarse con un router al que se ha conocido por medio de un paquete Router Advertisement y no para conectarse con un vecino del mismo segmento que también tenga la misma dirección de vínculo local. No obstante, se puede cambiar este comportamiento por defecto manipulando los parámetros de IPv6.

Saludos Malignos!

***************************************************************************************************
- Hacking en redes de datos IPv6: Conceptos básicos IPv6 (1)
- Hacking en redes de datos IPv6: Conceptos básicos IPv6 (2)
- Hacking en redes de datos IPv6: Te hackearán por IPv6 por pensar que no lo usas
- Hacking en redes de datos IPv6: Neighbor Spoofing
- Hacking en redes de datos IPv6: Captura de SMB con Neighbor Spoofing
- Hacking en redes de datos IPv6: FC00::1 (Algunos) Ataques en redes de datos
- Hacking en redes de datos IPv6: Man in the middle en redes IPv4 usando IPv6
- Hacking en redes de datos IPv6: Desactivar IPv6 para evitar D.O.S. SLAAC
- Hacking en redes de datos IPv6: Topera - Scanner de puertos sobre IPv6
- Hacking en redes de datos IPv6: Predecir direcciones IPv6 Local-Link de OS X
- Hacking en redes de datos IPv6: Ataques en redes de datos IPv 4 e IPv6
- Hacking en redes de datos IPv6: Evil FOCA: Ataque SLAAC
- Hacking en redes de datos IPv6: Evil FOCA: Bridging HTTP(IPv6) - HTTPs (IPv4)
- Hacking en redes de datos IPv6: Pasar de IPv4 a IPv6 con una respuesta DNS
- Hacking en redes de datos IPv6: Cómo activar IPv6 en Google Chrome
- Hacking en redes de datos IPv4: Ataque DHCP ACK Injector
***************************************************************************************************

Entradas populares