Vulnerabilidade nos Protocolos mDNS e DNS-SD
Por Spawnzao em 29/11/2018 - 1,418 views
De maneira geral, o mDNS [RFC 6762] é um protocolo DNS Multicast, isto é, repassa a mesma mensagem para múltiplos destinatários simultaneamente, e o DNS-SD [RFC 6763] permite encontrar e divulgar instâncias de um serviço desejado na rede. É um método para descoberta de vizinhos em uma LAN, similar ao protocolo UPnP que usa HTTP, ao invés do DNS.
- mDNS: usa UDP porta 5353 (origem e destino)
- DNS-SD: usa o DNS unicast e multicast
Os 2 protocolos foram projetados pela Apple, e formam o ZeroConf (Zero Configuration Networking), um conjunto de técnicas que criam de forma automática uma rede IP, sem a necessidade de configuração ou servidores. Ele é usado por muitos dispositivos (Apple TV, Chromecast, home speakers, NAS devices, etc.)
Zero Conf = automatic IP configuration + host name resolution + target service discovery
Como saber se o seu host está vulnerável?
dig +short @IP -p 5353 -t any _services._dns-sd._udp.local
Execute o comando acima, lembrando de trocar o “IP” pelo IP do seu host, de uma outra máquina. Se obtiver uma resposta diferente de timeout, você está vulnerável e está sujeito aos seguintes tipos de ataques:
- Reconnaissance:
- Discovery of available services
- Querying a specific instance of a service
- Discovering instances of a specific service
- Advertised DNS Reverse Mapping
- Implicit Network Sweeping
- Spoofing Services / Man in the Middle Attacks
- Denial of Service / Flooding
- Remote unicast interaction (& implications)
- Other potential attack vectors:
- Potential overflow attempts
- Unicast DNS Cache Poisoning
Considerando o pior dos casos, o DDoS (Amplification) Attack pode atingir um fator de amplificação de até 8x, vai depender da mensagem e do sistema Operacional. Além disso, ele pode ser aumentado ainda mais por serviços de anúncios de valores baixos de TTL (hosts will send queries due to forthcoming expiration).
Para ter informações mais detalhadas, você pode utilizar o script:
https://github.com/chadillac/mdns_recon
Como resolver o problema?
Você tem 2 opções:
- Bloquear no firewall o acesso a porta 5353/UDP
- Desativar o serviço, que no Linux por exemplo é o avahi-daemon
Para bloquear a porta 5353/UDP no firewall, execute:
iptables -A INPUT -p udp --dport 5353 -j DROP
Para desativar o serviço no CentOS 7, execute:
systemctl stop avahi-daemon.socket avahi-daemon.service systemctl disable avahi-daemon.socket avahi-daemon.service
Para verificar se o serviço está rodando, execute:
netstat -navpu | grep 5353
Pronto, agora você pode descobrir se o seu servidor está vulnerável e como solucionar o problema.