Redes
IPv6 para Pentesters
Fundamentos de IPv6 orientados al pentest: tipos de dirección, NDP, SLAAC y por qué amplía la superficie de ataque en redes con Windows.
Índice▾
- Por qué IPv6 importa en el OSCP (y en la vida real)
- Estructura de una dirección IPv6
- Comparación IPv4 vs IPv6
- Tipos de dirección IPv6
- Link-local — fe80::/10
- Unique Local Address (ULA) — fc00::/7
- Global Unicast — 2000::/3
- Loopback — ::1
- Multicast — ff00::/8
- Autoconfiguración: SLAAC vs DHCPv6
- SLAAC (Stateless Address Autoconfiguration)
- DHCPv6
- NDP: el sustituto de ARP en IPv6
- Por qué IPv6 amplía la superficie de ataque
- Windows prefiere IPv6
- Servicios escuchando en IPv6 sin filtrar
- Active Directory y mitm6
- Herramientas IPv6 esenciales
- Nmap con soporte IPv6
- ping6 / ping -6
- Descubrimiento de vecinos en el segmento
- Otras herramientas
- Resumen visual de tipos de dirección
- Práctica
- Recursos
Por qué IPv6 importa en el OSCP (y en la vida real)
Muchos pentesters ignoran IPv6 porque "el cliente no lo usa". Error frecuente: Windows tiene IPv6 activo y preferido por defecto desde Vista/Server 2008. Un host con IPv4 bien filtrado puede tener servicios accesibles por IPv6 que nadie ha revisado. Además, ataques como mitm6 explotan directamente el protocolo para capturar credenciales en redes Active Directory.
Estas técnicas son para entornos de laboratorio autorizado. Ataques NDP o DHCPv6 en redes de producción sin permiso son ilegales y disruptivos.
Estructura de una dirección IPv6
IPv6 usa 128 bits escritos en hexadecimal, divididos en 8 grupos de 16 bits separados por :.
Dirección completa:
2001:0db8:0000:0000:0000:0000:0000:0001
Reglas de compresión:
1. Omitir ceros a la izquierda en cada grupo:
2001:db8:0:0:0:0:0:1
2. Reemplazar UNA secuencia contigua de grupos de ceros con `::`
(solo una vez por dirección):
2001:db8::1
3. Loopback completo: 0000:...:0001 → ::1:: solo puede aparecer una vez. 2001::db8::1 es inválido. Si hay ambigüedad, :: absorbe todos los grupos posibles desde su posición.
Comparación IPv4 vs IPv6
| Característica | IPv4 | IPv6 |
|---|---|---|
| Longitud | 32 bits | 128 bits |
| Notación | Decimal punteada | Hexadecimal con : |
| Broadcast | Sí | No (usa multicast) |
| ARP | Sí | No (sustituido por NDP) |
| Autoconfiguración | DHCP (manual/auto) | SLAAC + DHCPv6 |
| Espacio | ~4.300 millones | ~3,4 × 10³⁸ |
Tipos de dirección IPv6
Link-local — fe80::/10
Rango: fe80:: a febf::...
Ejemplo: fe80::a1b2:c3d4:e5f6:1234Siempre presente en cualquier interfaz IPv6 activa. Se genera automáticamente a partir de la MAC (o aleatoriamente en Linux/Windows modernos). No es enrutable: solo funciona en el segmento local (entre hosts en la misma red cableada/inalámbrica). Es la dirección que NDP y el mecanismo SLAAC usan para comunicarse antes de obtener una dirección global.
Para hacer ping a una dirección link-local necesitas especificar la interfaz de salida: ping6 fe80::1%eth0 (Linux) o ping fe80::1%3 (Windows, donde 3 es el índice de interfaz).
Unique Local Address (ULA) — fc00::/7
Rango práctico: fd00::/8 (el más usado; fc00::/8 está reservado)
Ejemplo: fd12:3456:789a::1Equivalente a los rangos privados de IPv4 (10.0.0.0/8, 192.168.0.0/16). Se usa en redes internas sin necesidad de coordinación global. No enrutable en Internet.
Global Unicast — 2000::/3
Rango: 2000:: a 3fff::...
Ejemplo: 2001:db8::1 (2001:db8::/32 es rango de documentación)Equivalente a las IPs públicas IPv4. Enrutable globalmente en Internet.
Loopback — ::1
Equivalente exacto de 127.0.0.1. Un host que escucha en ::1 solo acepta conexiones locales.
Multicast — ff00::/8
IPv6 no tiene broadcast. En su lugar, usa multicast para llegar a grupos de hosts. Esto es fundamental para el pentest porque grupos como ff02::1 (todos los hosts del segmento) o ff02::2 (todos los routers) son análogos al broadcast en funcionalidad.
ff02::1 → todos los nodos del segmento local
ff02::2 → todos los routers
ff02::fb → mDNS
ff02::1:2 → todos los agentes DHCPv6 (relay + servidores)Autoconfiguración: SLAAC vs DHCPv6
SLAAC (Stateless Address Autoconfiguration)
Cuando una interfaz IPv6 se activa, envía un Router Solicitation (RS) al grupo multicast ff02::2. Los routers responden con Router Advertisements (RA) que contienen el prefijo de red. El host construye su propia dirección combinando ese prefijo con un sufijo de 64 bits (derivado de la MAC o aleatorio).
Host → ff02::2 : Router Solicitation (RS)
Router → ff02::1 : Router Advertisement (RA) [prefijo: 2001:db8::/64]
Host construye: 2001:db8::<interfaz-id-64bits>No requiere servidor DHCP: de ahí "stateless". El router no lleva registro de qué host tiene qué dirección.
DHCPv6
Similar a DHCPv4 pero sobre IPv6. Puede ser:
- Stateful: el servidor asigna y lleva registro de direcciones (como DHCPv4).
- Stateless: solo distribuye opciones (DNS, dominio) mientras SLAAC da la dirección.
El ataque mitm6 abusa de DHCPv6 respondiendo a solicitudes legítimas con una dirección DNS maliciosa, redirigiendo el tráfico para capturar credenciales NTLM. Ver mitm6 y NTLM Relay.
NDP: el sustituto de ARP en IPv6
NDP (Neighbor Discovery Protocol) opera sobre ICMPv6 y reemplaza a ARP (y a otros protocolos IPv4). Sus mensajes principales:
| Tipo ICMPv6 | Tipo | Equivalente IPv4 | Función |
|---|---|---|---|
| Neighbor Solicitation (NS) | 135 | ARP Request | "¿Quién tiene esta IP?" |
| Neighbor Advertisement (NA) | 136 | ARP Reply | "Yo tengo esta IP, mi MAC es..." |
| Router Solicitation (RS) | 133 | — | "¿Hay algún router?" |
| Router Advertisement (RA) | 134 | — | "Soy un router, prefijo: X" |
| Redirect | 137 | ICMP Redirect | "Usa este router para X" |
Flujo NS/NA (equivalente a ARP):
Host A quiere saber la MAC de fe80::b:
A → ff02::1:ff00:b (multicast solicited-node)
ICMPv6 Type 135 (NS): "¿quién tiene fe80::b?"
Host B responde:
B → A ICMPv6 Type 136 (NA): "fe80::b es mía, MAC: aa:bb:cc:dd:ee:ff"Para ver la diferencia con ARP en IPv4 y profundizar en ICMP, consulta la lección UDP, ICMP y ARP.
Como NDP no tiene autenticación, es vulnerable a NDP spoofing (análogo al ARP poisoning): un atacante puede enviar NA falsos para redirigir tráfico.
Por qué IPv6 amplía la superficie de ataque
Windows prefiere IPv6
Windows utiliza IPv6 por defecto y, según RFC 6724, prefiere direcciones IPv6 sobre IPv4 cuando ambas están disponibles. Si un atacante responde como servidor DHCPv6/DNS, el tráfico de Windows puede ir a él antes que al servidor IPv4 legítimo.
Servicios escuchando en IPv6 sin filtrar
Es habitual que un administrador configure el firewall con cuidado para IPv4 y olvide las reglas equivalentes para IPv6. Resultado:
Puerto 445 en 10.10.10.50 (IPv4) → FILTRADO por firewall
Puerto 445 en fe80::... (IPv6) → ABIERTO, sin reglasActive Directory y mitm6
En redes con Windows + Active Directory, el ataque mitm6 responde a solicitudes DHCPv6 que Windows hace periódicamente, asignándose como servidor DNS. Cuando los hosts resuelven nombres por IPv6, el tráfico pasa por el atacante, quien puede retransmitir credenciales NTLM.
Ver: mitm6 y NTLM Relay.
Herramientas IPv6 esenciales
Nmap con soporte IPv6
# Escaneo básico IPv6 (flag -6 obligatorio)
nmap -6 fe80::a1b2:c3d4%eth0
nmap -6 2001:db8::1
# Descubrimiento de hosts en el segmento link-local
nmap -6 -sn fe80::%eth0/64
# Escaneo completo con detección de servicios
nmap -6 -sV -sC -p- <dirección-ipv6>En Nmap, las direcciones link-local requieren especificar la interfaz con %: fe80::1%eth0. Sin el %iface, Nmap no sabe por qué interfaz enviar.
ping6 / ping -6
# Linux
ping6 fe80::1%eth0 # link-local (interfaz obligatoria)
ping6 2001:db8::1 # global unicast
# Windows
ping -6 fe80::1%3 # %3 es el índice de interfaz (ver 'ipconfig')Descubrimiento de vecinos en el segmento
# Ver tabla de vecinos NDP (equivalente a 'arp -n' en IPv4)
ip -6 neigh show # Linux
netsh interface ipv6 show neighbors # Windows
# Descubrir hosts link-local enviando ping al grupo multicast
ping6 ff02::1%eth0 # responden todos los nodos del segmentoOtras herramientas
# Ver configuración IPv6 de la interfaz
ip -6 addr show eth0 # Linux
ipconfig /all # Windows (busca "IPv6 Address")
# Ver rutas IPv6
ip -6 route show # Linux
netsh interface ipv6 show route # WindowsLa mayoría de herramientas de pentest (netcat, curl, wget, socat) necesitan el flag -6 explícito o la dirección IPv6 entre corchetes: curl http://[2001:db8::1]:80/. Verifica siempre si la herramienta que usas soporta IPv6 de forma nativa.
Resumen visual de tipos de dirección
Espacio de direcciones IPv6:
::/128 → Dirección no especificada (equivale a 0.0.0.0)
::1/128 → Loopback (equivale a 127.0.0.1)
fe80::/10 → Link-local (autoasignada, no enrutable)
fc00::/7 → Unique Local (privada, fd00::/8 en la práctica)
2000::/3 → Global Unicast (pública, enrutable)
ff00::/8 → Multicast (no hay broadcast en IPv6)
Grupos multicast clave:
ff02::1 → Todos los nodos (segmento local)
ff02::2 → Todos los routers
ff02::1:2 → Todos los agentes DHCPv6Práctica
Ejercicio 1. Clasifica las siguientes direcciones según su tipo e indica si son enrutables globalmente: fe80::1, ::1, 2001:db8::5, fd00::cafe:1, ff02::2.
Ver solución
| Dirección | Tipo | Enrutable globalmente |
|---|---|---|
fe80::1 | Link-local (fe80::/10) | No (solo segmento local) |
::1 | Loopback | No (solo el host) |
2001:db8::5 | Global Unicast (rango de documentación 2001:db8::/32) | En teoría sí (es global unicast), pero 2001:db8::/32 está reservado para documentación y no se enruta en Internet |
fd00::cafe:1 | Unique Local (fd00::/8) | No (privada, análoga a RFC 1918) |
ff02::2 | Multicast (todos los routers, segmento local) | No (ff02::/16 es link-scoped multicast) |
Ejercicio 2. Un cliente te dice que su firewall IPv4 está perfectamente configurado y todos los puertos están filtrados. Sin embargo, los hosts son Windows Server 2019 en una red corporativa. ¿Por qué aún podrías tener superficie de ataque y cómo lo verificarías?
Ver solución
Por qué hay superficie de ataque:
-
IPv6 activo por defecto: Windows Server 2019 tiene IPv6 habilitado y preferido sobre IPv4 según RFC 6724. Los servicios que escuchan en
0.0.0.0(todas las interfaces) también escuchan en::(todas las interfaces IPv6). -
Reglas de firewall solo para IPv4: Es habitual que el firewall de Windows o el perimetral solo tenga reglas para IPv4. El mismo puerto 445 (SMB), 5985 (WinRM) o 3389 (RDP) puede estar abierto en IPv6 aunque filtrado en IPv4.
-
Ataques DHCPv6/NDP: Con herramientas como
mitm6, puedes responder a las solicitudes DHCPv6 que Windows hace periódicamente y asignarte como servidor DNS, redirigiendo tráfico NTLM para relay.
Cómo verificarlo:
# 1. Descubrir hosts con IPv6 en el segmento
ping6 ff02::1%eth0
ip -6 neigh show
# 2. Escanear con nmap en IPv6
nmap -6 -sV -p 445,3389,5985,5986 <dirección-fe80-del-objetivo>%eth0
# 3. Comprobar si SMB responde en IPv6
nmap -6 -p 445 --script smb-security-mode <objetivo-ipv6>Ejercicio 3. Tienes acceso a un Linux en la red objetivo. ¿Cómo descubrirías qué hosts IPv6 hay en el segmento link-local sin usar Nmap?
Ver solución
# Enviar ping al grupo multicast "todos los nodos" del segmento
ping6 -c 3 ff02::1%eth0
# Ver qué hosts respondieron en la tabla de vecinos NDP
ip -6 neigh show
# Alternativa: usar ndisc6 (herramienta específica para NDP)
ndisc6 ff02::1 eth0Todos los hosts del segmento que tengan IPv6 activo responderán al ping multicast ff02::1. Sus direcciones link-local aparecerán en la tabla de vecinos (ip -6 neigh show), que es el equivalente IPv6 de la caché ARP.