-| mDNS /!\ flood /!\ POC |-

mdns flood preuve par le concept.

mdns flood,  si vous avez besoin  de remettre les choses dans le contexte alors allez relire ça => mdns-flood

Maintenant, j’aimerais bien voir si j’arrive à reproduire ce bug en envoyant moi même les requêtes mDNS, c’est plus fun!

Alors je vais utiliser scapy c’est un frameware python qui permet de forger ses propres paquets réseaux. Apres deux trois recherches google et le parcours de la documentation, j’arrive a forger ma trame:

send((IP(dst= »224.0.0.251″)/UDP(dport=5353)/DNS(qd=DNSQR(qtype= »PTR », qname= »_http._tcp.local. »))), count=120)

wireshark mdns googlecast
wireshark mdns googlecast

J’ai fais plusieurs tests et lors du premier, il m’a fallu uniquement 120 requetes pour déclancher le bug.

Une fois l’ampli rebooter et donc la mémoire vide, deux salves de 600 et boom. Vous remarquez qu’au premier envoie, on entend le son qui grésille vers la fin…

 

 

 

mDNS flood Android

mDNS

Vous vous souvenez du « fameux » bug googlecast mDNS? non! donc allez relire ça  BUG

Ce soir, je suis chez moi et j’écoute de la musique quand je décide de changer de morceau. J’attrape mon téléphone et j’appuie sur le bouton pour le déverrouiller et là, paff plus de musique!  Je ne sais pas pourquoi, je repense à ce fameux BUG et n’y une n’y deux, je décide de sniffer tout le trafic du M-CR611 avec wireshark. je configure mon switch et reboot mon ampli.

Je démarre wireshark… ok! du flux TCP de la webradio. Je prend mon téléphone (android) et j’appuie pour le déverrouiller… PAFF plus de son!!! je regarde mon wireshark et là BINGO une salve de requêtes mDNS!

wireshark mdns googlecast
wireshark mdns googlecast

je vois bien que mon téléphone cherche désespérément un chromecast et rapidement je compte environs 200 requêtes mDNS… avec ça même le chromecaste de voisine répond!!

En suivant, je tente de reproduire le BUG et vous savez quoi… ca marche! enfin ça plante!

En conclusion, certain routeurs sont impactés par ce bug mais quand on y pense qui est « responsable »? L’appareil qui envoie des (trop) de requêtes ou alors le récepteur qui n’est pas capable de maîtriser la gestion de sa mémoire?  Si à chaque requête vous utiliser de la mémoire et à la requête suivante vous utilisé un autre espace mémoire sans « recycler » les anciens! Il arrive quoi? et bien on remplit le buffer et la lecture du streaming s’arrête, par example…

 

 

Zeroconf mDNS

Zeroconf

Vous connaissez Zeroconf? C’est un ensemble de protocoles permettant aux différents appareils de pouvoir communiquer entre eux sans infrastructure serveur et donc plus besoin de serveur DNS! Vous comprenez le concept? 🙂

Par exemple quand votre téléphone veut connaitre l’IP d’un appareil pouvant diffuser de la musique par Spotify, il fera une requête mDNS sur le réseau pour le nom spotify.local ou un truc comme ça… Une fois qu’un appareil (le m-cr611 au piff) reconnaîtra son/le « nom » et  il répond et donne son adresse ip, plus d’autres informations.

A ce moment l’application spotify connait l’existant d’un appareil compatible. Apres le reste du protocol finit de faire le reste et vous pouvez diffuser le musique. 

Pour info les requêtes mDNS se feront sur l’IP multicast 224.0.0.251 cf RFC6762

Any DNS query for a name ending with ".local." MUST be sent to the
   mDNS IPv4 link-local multicast address 224.0.0.251 (or its IPv6
   equivalent FF02::FB).

 

De nombreux appareils fonctionnent avec ce protocol comme le chromecast:

wireshark mdns googlecast
wireshark mdns googlecast

Vous voyez un téléphone qui chercher un chromecast…