hacktricks/network-services-pentesting/5353-udp-multicast-dns-mdns.md

8.6 KiB

5353/UDP Multicast DNS (mDNS) y DNS-SD

Aprende hacking en AWS de cero a héroe con htARTE (HackTricks AWS Red Team Expert)!

Otras formas de apoyar a HackTricks:

Información Básica

Multicast DNS (mDNS) es un protocolo de configuración cero que te permite realizar operaciones similares a DNS en la red local en ausencia de un servidor DNS unicast convencional. El protocolo utiliza la misma API, formatos de paquetes y semántica de operación que DNS, lo que te permite resolver nombres de dominio en la red local. DNS Service Discovery (DNS-SD) es un protocolo que permite a los clientes descubrir una lista de instancias nombradas de servicios (como test._ipps._tcp.local o linux._ssh._tcp.local) en un dominio utilizando consultas DNS estándar. DNS-SD se utiliza más a menudo en conjunto con mDNS, pero no depende de él. Ambos son utilizados por muchos dispositivos IoT, como impresoras de red, Apple TVs, Google Chromecast, dispositivos de almacenamiento conectados a la red (NAS) y cámaras.
Puerto predeterminado: 5353/UDP

PORT     STATE SERVICE
5353/udp open  zeroconf

Cómo funciona mDNS

Los dispositivos utilizan mDNS cuando la red local carece de un servidor DNS unicast convencional. Para resolver un nombre de dominio para una dirección local usando mDNS, el dispositivo envía una consulta DNS para un nombre de dominio que termina con .local a la dirección multicast 224.0.0.251 (para IPv4) o FF02::FB (para IPv6). También puedes usar mDNS para resolver nombres de dominio globales (los que no son .local), pero las implementaciones de mDNS deben deshabilitar este comportamiento por defecto. Las solicitudes y respuestas de mDNS utilizan UDP y el puerto 5353 como puerto de origen y destino.

Las respuestas de mDNS contienen varias banderas importantes, incluyendo un valor de Time-to-Live (TTL) que indica cuántos segundos es válido el registro. Enviar una respuesta con TTL=0 significa que el registro correspondiente debe ser eliminado. Otra bandera importante es el bit QU, que indica si la consulta es una consulta unicast o no. Si el bit QU no está establecido, el paquete es una consulta multicast (QM). Debido a que es posible recibir consultas unicast fuera del enlace local, las implementaciones seguras de mDNS siempre deben verificar que la dirección de origen en el paquete coincida con el rango de direcciones de la subred local.

Cómo funciona DNS-SD

DNS-SD permite a los clientes descubrir servicios disponibles en la red. Para usarlo, los clientes envían consultas DNS estándar para registros de puntero (PTR), que mapean el tipo de servicio a una lista de nombres de instancias específicas de ese tipo de servicio.

Para solicitar un registro PTR, los clientes usan el formato de nombre "<Servicio>.<Dominio>". La parte de <Servicio> es el nombre del servicio precedido por "_" (por ejemplo, _ipps, _printer o _ipp) y ya sea _tcp o _udp. La porción de <Dominio> es ".local".
Los respondedores luego devuelven los registros PTR que apuntan a los correspondientes registros de servicio (SRV) y texto (TXT). Aquí hay un ejemplo de un registro PTR:

_ipps._tcp.local: type PTR, class IN, test._ipps._tcp.local

La parte del registro PTR a la izquierda del dos puntos es su nombre, y la parte a la derecha es el registro SRV al que el registro PTR apunta. El registro SRV lista el host objetivo y el puerto donde se puede alcanzar la instancia del servicio. Por ejemplo, la siguiente imagen muestra un registro SRV "test._ipps._tcp.local" en Wireshark en el host ubuntu.local y puerto 8000:

Por lo tanto, el nombre del registro SRV es similar al registro PTR precedido por el nombre de la <Instancia> (test en este caso). El registro TXT tiene el mismo nombre que el registro SRV y contiene la información necesaria cuando la dirección IP y el número de puerto (contenidos en el registro SRV) para un servicio no son suficientes para identificarlo.

Enumeración

nmap

nmap -Pn -sUC -p5353 192.168.1.2

Starting Nmap 6.46 (http://nmap.org) at 2015-01-01 10:30 GMT
Nmap scan report for 192.168.1.2
PORT     STATE SERVICE
5353/udp open  zeroconf
| dns-service-discovery:
|   9/tcp workstation
|     Address=192.168.1.2
|   22/tcp ssh
|     Address=192.168.1.2
|   22/tcp sftp-ssh
|     Address=192.168.1.2
|   445/tcp smb
|     Address=192.168.1.2

Enumeración de Red

Puedes aprender mucho sobre la red local simplemente enviando solicitudes mDNS y capturando tráfico mDNS multicast.

Puedes usar la herramienta Pholus para enviar solicitudes mDNS (-rq) en la red local y capturar tráfico mDNS multicast (durante -stimeout 10 segundos):

sudo python3 pholus3.py eth0 -rq -stimeout 10

Ataques

Abusando de la Fase de Sondeo mDNS

Cuando un respondedor mDNS se inicia o cambia su conectividad, pregunta a la red local si hay algún recurso con el nombre que planea usar. Si la respuesta contiene el registro en cuestión, el host de sondeo debe elegir un nuevo nombre. Si se producen 15 conflictos en 10 segundos, el host debe esperar al menos cinco segundos antes de cualquier intento adicional. Además, si pasa un minuto durante el cual el host no puede encontrar un nombre sin usar, informa de un error al usuario.

El siguiente comando evitará que cualquier nuevo dispositivo obtenga un nuevo nombre, ya que indicará que cualquier nombre ya está tomado:

sudo python pholus.py eth0 -afre -stimeout 1000

Spoofing/MitM

El ataque más interesante que puedes realizar sobre este servicio es llevar a cabo un MitM en la comunicación entre el cliente y el servidor real. Podrías obtener archivos sensibles (MitM en la comunicación con la impresora) o incluso credenciales (autenticación de Windows).
Para más información consulta:

{% content-ref url="../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md" %} spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md {% endcontent-ref %}

Referencias

Aprende hacking en AWS de cero a héroe con htARTE (HackTricks AWS Red Team Expert)!

Otras formas de apoyar a HackTricks: