Un serveur DNS permet d'obtenir l'adresse IP d'une cible à partir de son nom (par exemple l'entrée pour fr.wikipedia.org retourne 145.97.39.155). Afin d'obtenir cette IP, le serveur peut soit consulter son cache si l'information s'y trouve ou alors propager la requête plus loin, vers d'autres serveurs de manière récursive. L'ensemble du réseau est organisé selon un arbre subdivisé en domaines. Dans le cas de fr.wikipedia.org, le serveur DNS chargé du domaine .org va être interrogé, il va indiquer quel serveur peut donner des informations au sujet du domaine wikipedia.org. Finalement, ce dernier serveur indiquera l'IP complet pour fr.wikipedia.org. La validité des messages repose sur un identifiant de 16 bits qui doit être le même durant une transaction. Par ailleurs, le port et l'adresse utilisée pour la réponse doivent correspondre aux paramètres utilisés lors de l'envoi de la requête.
Cette attaque part du principe qu'un identifiant de 16 bits ne garantit pas une sécurité suffisante. Grâce au paradoxe des anniversaires, il est en effet possible de générer un grand nombre de messages de manière à tomber sur un identifiant valide. L'attaque se déroule comme suit et s'apparente à du spoofing :
La difficulté de cette attaque consiste à déterminer le port sur lequel le serveur B va répondre et à empêcher le vrai serveur de nom de répondre dans les temps. Si les ports sont aléatoires alors l'attaque sera beaucoup plus difficile, car elle nécessite plus de messages. Certaines attaques reposaient sur le fait que les générateurs de nombres pseudo-aléatoires des serveurs n'offraient pas un aléa suffisant. Des identifiants de transaction avaient ainsi plus de chance d'apparaître que d'autres, offrant à l'attaque une probabilité de réussite accrue.
La solution à ce problème fut d'empêcher les demandes multiples émanant de la même source pour un même nom de domaine (c'est-à-dire qu'une seule requête d'Alice concernant fr.wikipedia.org est traitée à la fois).
Pour contourner le problème lié au TTL, au lieu de susciter une requête pour fr.wikipedia.org, le hacker génère une série de requêtes pour des hôtes du même sous-domaine, par exemple xx.wikipedia.org, et tente à chaque fois un empoisonnement en tentant de deviner le numéro de transaction. La réponse consiste non pas en un enregistrement A vers un serveur pirate (dont l'IP est 6.6.6.6) mais un NS :
xx.wikipedia.org IN NS fr.wikipedia.org fr.wikipedia.org IN A 6.6.6.6
Le second enregistrement est alors mis en cache, ce qui assure le succès de l'attaque. Le hacker peut envoyer de très nombreuses réponses (seule celle avec le numéro de transaction correct sera pris en compte), et le temps dont il dispose dépend de la rapidité de la réponse du serveur DNS légitime. Si cette tentative échoue, il peut recommencer immédiatement avec un autre hôte du sous-domaine, ce qui augmente de façon importante ses chances de succès. Les serveurs récursifs n'étant généralement accessibles qu'à certaines plages d'adresses IP (les clients), le hacker peut utiliser une fausse adresse IP source ou bien générer un trafic qui résultera probablement en une requête DNS (SMTP HELO, scanning, etc).
L'attaquant dispose d'un serveur de nom pour un domaine (par exemple empoisonnement-dns.com). Le but est de polluer le cache du serveur cible A en se basant sur une vulnérabilité et en procédant comme suit :
Cette attaque a été utilisée en juin 1997 par Eugene Kashpureff qui gérait un serveur DNS alternatif à la racine du système (nommé AlterNIC). Kashpureff redirigea le trafic d'Internic (son concurrent direct) vers le site d'AlterNIC. Nommée Operation DNS Storm, son action lui valut d'être arrêté quelques mois plus tard.