L'empoisonnement du cache DNS ou pollution de cache DNS (DNS cache poisoning ou DNS cache pollution en anglais) est une technique permettant de leurrer les serveurs DNS afin de leur faire croire qu'ils reçoivent une requête valide tandis qu'elle est frauduleuse. Une fois que le serveur DNS a été empoisonné, l'information est mise dans un cache, rendant ainsi vulnérable tous les utilisateurs de ce serveur. Ce type d'attaque permet, par exemple, d'envoyer un utilisateur vers un faux site dont le contenu peut servir à de l'hameçonnage (dans le cas du DNS, on parle de pharming) ou comme vecteur de virus et autres applications malveillantes.
Un ordinateur présent sur Internet utilise normalement un serveur DNS géré par le fournisseur d'accès. Ce serveur DNS est la plupart du temps limité aux seuls utilisateurs du réseau du fournisseur d'accès et son cache contient une partie des informations rapatriées par le passé. Une attaque par empoisonnement sur un seul serveur DNS du fournisseur d'accès peut affecter l'ensemble de ses utilisateurs, soit directement ou indirectement si des serveurs esclaves s'occupent de propager l'information.
Pour mener à bien une attaque par empoisonnement de cache, l'attaquant exploite une vulnérabilité du serveur DNS qui accepte alors des informations incorrectes. Si le serveur ne valide pas les informations reçues et qu'il ne vérifie pas qu'elles proviennent d'une source fiable, alors il stockera dans son cache ces informations erronées. Il les transmettra par la suite aux utilisateurs qui effectuent la requête visée par l'attaque.
Cette technique peut être employée pour substituer un contenu, que les victimes s'attendent à obtenir, par un autre contenu. L'attaquant peut par exemple rediriger un utilisateur d'un site web vers un autre site dont le serveur est compromis ou maintenu par l'attaquant. Selon le type d'attaque menée et afin de ne pas éveiller les soupçons, le nouveau contenu doit ressembler le plus possible au contenu original.
Cette manipulation peut avoir plusieurs buts :
La plupart des attaques peuvent être évitées en ajoutant des vérifications supplémentaires. Dans le cas d'une attaque comme celle d'Eugene Kashpureff, la parade consiste à vérifier que la réponse correspond à ce qui était attendu (l'IP du nom de domaine demandé et rien d'autre) et à l'ignorer dans le cas contraire. L'amélioration des générateurs de nombres pseudo-aléatoires en utilisant des générateurs cryptographiques pour l'identifiant de 16 bits et les ports ont permis de limiter les problèmes dans les serveurs les plus utilisés (dont BIND). La limitation des demandes multiples pour un même nom à partir d'une même source a partiellement réduit l'attaque par le paradoxe des anniversaires, mais elle pourrait être menée à partir d'un botnet, ce qui nécessite d'autres moyens de défense pour détecter les tentatives de ce type.
Une version sécurisée du DNS existe, DNSSEC, qui se base sur des signatures électroniques avec un certificat qui permet de vérifier l'authenticité des données. Il reste toutefois peu répandu. L'empoisonnement peut être limité au niveau des couches transport ou application grâce à une authentification des intervenants, via par exemple TLS. Un serveur DNS pourrait ainsi s'assurer qu'il reçoit bien les informations depuis un serveur de confiance. Il en va de même pour les autres applications comme les navigateurs qui peuvent vérifier l'authenticité d'une page grâce aux certificats.
En juillet 2008, des mises à jour de sécurité concernant les serveurs DNS ont été effectuées par un grand nombre d'acteurs du logiciel libre et propriétaire. Ces mises à jour ont été effectuées de façon synchronisée pour remédier à une faille découverte plusieurs mois avant par Dan Kaminski (de la société IOActive) qui s'avérait critique. Cette faille a été jugée suffisamment sérieuse pour que le secret soit conservé le temps de mettre en place des solutions de protection.