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

109 lines
8.5 KiB
Markdown

# 5353/UDP Multicast DNS (mDNS) e DNS-SD
<details>
<summary><strong>Aprenda hacking no AWS do zero ao herói com</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Outras formas de apoiar o HackTricks:
* Se você quer ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF**, confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
* Adquira o [**material oficial PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
* **Junte-se ao grupo** 💬 [**Discord**](https://discord.gg/hRep4RUj7f) ou ao grupo [**telegram**](https://t.me/peass) ou **siga-me** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Compartilhe suas técnicas de hacking enviando PRs para os repositórios do** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) no github.
</details>
## Informações Básicas
Multicast DNS (mDNS) é um **protocolo de configuração zero** que permite realizar **operações semelhantes ao DNS** na rede local na ausência de um servidor DNS unicast convencional. O protocolo utiliza a **mesma** API, **formatos de pacotes** e semânticas de operação que o DNS, permitindo resolver nomes de domínio na rede local. **DNS Service Discovery (DNS-SD)** é um protocolo que permite aos clientes **descobrir uma lista de instâncias nomeadas de serviços** (como test.\_ipps.\_tcp.local ou linux.\_ssh.\_tcp.local) em um domínio usando consultas DNS padrão. DNS-SD é mais frequentemente usado em conjunto com mDNS, mas não depende dele. Ambos são usados por muitos dispositivos IoT, como impressoras de rede, Apple TVs, Google Chromecast, dispositivos de armazenamento conectados à rede (NAS) e câmeras.\
**Porta padrão:** 5353/UDP
```
PORT STATE SERVICE
5353/udp open zeroconf
```
### Como o mDNS Funciona
Dispositivos usam mDNS quando a rede local **carece** de um **servidor DNS unicast** convencional. Para resolver um nome de domínio para um endereço local usando mDNS, o dispositivo envia uma **consulta DNS para um nome de domínio** terminado em **.local** para o **endereço multicast** 224.0.0.251 (para IPv4) ou FF02::FB (para IPv6). Você também pode usar mDNS para resolver **nomes de domínio globais** (não terminados em .local), mas as implementações de mDNS devem **desativar** esse comportamento por padrão. Solicitações e respostas mDNS usam **UDP** e **porta 5353** como porta de origem e destino.
As respostas mDNS contêm várias flags importantes, incluindo um valor de **Time-to-Live** (TTL) que indica quantos segundos o registro é válido. Enviar uma resposta com **TTL=0 significa que o registro correspondente deve ser apagado**. Outra flag importante é o bit QU, que indica se a consulta é uma consulta unicast ou não. Se o **bit QU não estiver definido**, o pacote é uma consulta **multicast** (QM). Como é possível **receber consultas unicast fora do link local**, implementações seguras de mDNS devem sempre **verificar se o endereço de origem no pacote corresponde à faixa de endereço da sub-rede local**.
### Como o DNS-SD Funciona
DNS-SD permite que clientes **descubram serviços disponíveis na rede**. Para usá-lo, clientes enviam consultas DNS padrão para registros de ponteiros (PTR), que mapeiam o tipo de serviço para uma lista de nomes de instâncias específicas desse tipo de serviço.
Para solicitar um registro PTR, clientes usam o formato de nome "\<Serviço>.\<Domínio>". A parte **\<Serviço>** é o **nome do serviço** precedido por "\_" (por exemplo, \_ipps, \_printer ou \_ipp) e **\_tcp ou \_udp**. A parte **\<Domínio>** é "**.local**".\
**Respondentes** então retornam os registros PTR que apontam para os acompanhantes registros de **serviço (SRV)** e **texto (TXT)**. Aqui está um exemplo de um registro PTR:
```
_ipps._tcp.local: type PTR, class IN, test._ipps._tcp.local
```
A parte do registro PTR à **esquerda** do dois pontos é o seu **nome**, e a parte à **direita** é o registro **SRV** ao qual o registro PTR aponta. O registro **SRV** lista o **host** alvo e a **porta** onde a instância do **serviço** pode ser alcançada. Por exemplo, a próxima imagem mostra um registro SRV "test.\_ipps.\_tcp.local" no Wireshark no host ubuntu.local e porta 8000:
![](<../.gitbook/assets/image (651) (1) (1) (1) (1).png>)
Portanto, o **nome do registro SRV** é **semelhante** ao registro **PTR** **precedido** pelo nome da **\<Instância>** (test neste caso). O registro **TXT** tem o **mesmo** **nome** que o registro **SRV** e contém as informações necessárias quando o endereço IP e o número da porta (contidos no registro SRV) para um serviço não são suficientes para identificá-lo.
## Enumeração
### nmap
```bash
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
```
### Enumeração de Rede
Você pode aprender muito sobre a rede local simplesmente enviando solicitações mDNS e capturando o tráfego mDNS multicast.
Você pode usar a ferramenta [**Pholus**](https://github.com/aatlasis/Pholus/) para enviar solicitações mDNS (-rq) na rede local e capturar o tráfego mDNS multicast (por -stimeout 10 segundos):
```bash
sudo python3 pholus3.py eth0 -rq -stimeout 10
```
## Ataques
### Abusando da Fase de Sondagem mDNS
Quando um respondedor mDNS inicia ou altera sua conectividade, ele pergunta à rede local se há **algum recurso com o nome que planeja usar**. Se a resposta contiver o registro em questão, o host de sondagem **deve escolher um novo nome**. Se 15 conflitos ocorrerem em 10 segundos, o host deve então esperar pelo menos cinco segundos antes de qualquer tentativa adicional. Além disso, se passar um minuto durante o qual o host não conseguir encontrar um nome não utilizado, ele relata um erro ao usuário.
O seguinte comando impedirá que qualquer novo dispositivo obtenha qualquer novo nome, pois indicará que **qualquer nome já está em uso**:
```bash
sudo python pholus.py eth0 -afre -stimeout 1000
```
### Spoofing/MitM
O ataque mais interessante que você pode realizar sobre este serviço é realizar um **MitM** na **comunicação entre o cliente e o servidor real**. Você pode ser capaz de obter arquivos sensíveis (MitM na comunicação com a impressora) ou até mesmo credenciais (autenticação do Windows).\
Para mais informações, confira:
{% 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](../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md)
{% endcontent-ref %}
## Referências
* [Practical IoT Hacking: The Definitive Guide to Attacking the Internet of Things](https://books.google.co.uk/books/about/Practical\_IoT\_Hacking.html?id=GbYEEAAAQBAJ\&redir\_esc=y)
<details>
<summary><strong>Aprenda hacking no AWS do zero ao herói com</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Outras formas de apoiar o HackTricks:
* Se você quer ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF**, confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
* Adquira o [**material oficial PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
* **Junte-se ao grupo** 💬 [**Discord**](https://discord.gg/hRep4RUj7f) ou ao grupo [**telegram**](https://t.me/peass) ou **siga-me** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Compartilhe suas dicas de hacking enviando PRs para os repositórios do** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) no github.
</details>