web-dev-qa-db-fra.com

Comment un site Web connaît-il le serveur DNS utilisé par un client?

Il existe des sites Web qui prétendent faire des "tests de fuite DNS". Je ne me soucie pas tellement des fuites DNS mais je suis curieux, comment le site Web sait-il quel serveur DNS j'utilise? J'ai supposé que ce serait un en-tête envoyé dans la requête HTTP mais je n'ai pas pu le trouver.

Exemple de site Web: https://www.dnsleaktest.com/

EDIT: il existe de nombreux autres exemples trouvés grâce à une recherche Google.

28
Craigxyz

Il s'agit d'une astuce de résolution DNS qui pourrait également être effectuée à l'aide de protocoles non http mais dans ce cas, elle est effectuée à l'aide de noms d'hôte aléatoires et d'images à zéro pixel via http.

Regardez le code source sur la page et vous verrez une série de sous-domaines aléatoires de 10 caractères demandés pour plusieurs URL. Ce sont des noms d'hôte très uniques que ni votre ordinateur ni votre FAI, ou plus important encore votre fournisseur DNS, n'auront mis en cache dans le DNS local.

Lorsque les noms d'hôte de ces URL uniques atteignent votre fournisseur DNS, ils doivent alors les demander au site Web des sociétés de test, qui corrèle ensuite l'adresse IP des propriétaires effectuant la demande DNS unique, puis vous informe du nom de la société qui a effectué la demande via une recherche rapide.

Liste des noms d'hôte randomisés tous pour le même domaine

ixc9a5snm4.dnsleaktest.com
rhl50vm36o.dnsleaktest.com
4xov3y3uvc.dnsleaktest.com
2n5t99gbzp.dnsleaktest.com
6mzklkved4.dnsleaktest.com
d6z20e9c2x.dnsleaktest.com

peut être trouvé dans le html suivant (vos noms d'hôtes seront différents)

<img width=0 height=0 src="https://ixc9a5snm4.dnsleaktest.com">.
<img width=0 height=0 src="https://rhl50vm36o.dnsleaktest.com">.
<img width=0 height=0 src="https://4xov3y3uvc.dnsleaktest.com">.
<img width=0 height=0 src="https://2n5t99gbzp.dnsleaktest.com">.
<img width=0 height=0 src="https://6mzklkved4.dnsleaktest.com">.
<img width=0 height=0 src="https://d6z20e9c2x.dnsleaktest.com">.
33
Trey Blalock

Je n'en savais rien. Extrêmement intéressant. Il semble fonctionner en essayant de générer des connexions vers de longs sous-domaines aléatoires qu'il contrôle, et il peut probablement rassembler les demandes de résolution de domaine du serveur DNS appelant.

List of requests initiated by the browser that failed Fig 1: Liste des demandes lancées par le navigateur qui ont échoué


Sous le capot, c'est le suivi standard à l'aide d'un générateur d'images de taille nulle:

    <pre class="progress">Query round Progress... Servers found
        <br/>&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
        <img width=0 height=0 src="https://1k9oraud8h.dnsleaktest.com">.
        <img width=0 height=0 src="https://dajo0hwg9c.dnsleaktest.com">.
        <img width=0 height=0 src="https://6crg9z68gj.dnsleaktest.com">.
        <img width=0 height=0 src="https://nwitgnyo7r.dnsleaktest.com">.
        <img width=0 height=0 src="https://z3yine4a7p.dnsleaktest.com">.
        <img width=0 height=0 src="https://2tvxmp2yd5.dnsleaktest.com">.
    </pre>

Fait intéressant, puisque j'ai piwik (le moteur d'analyse utilisé) bloqué par défaut, toutes les demandes ont échoué, mais mes serveurs DNS étaient toujours identifiés, ce qui signifie qu'ils s'appuient sur plus que le tracker HTTP.

Ajout d'une clarification pour répondre à la question de @ Falco.

Les images ne seront probablement pas chargées pour tout le monde, car les sous-domaines n'existent pas. Par conséquent, les demandes ne sont jamais générées (recherche DNS non valide) comme vous pouvez le voir dans les captures d'écran ci-dessous. La seule différence dans mon cas est qu'ils ne reçoivent pas d'identifiant de suivi.

The domain name never resolves Fig 2: Le nom de domaine ne se résout jamais pour aucun des sous-domaines


Hence the HTTP requests are never made by the browser Fig 3: Par conséquent, les requêtes HTTP ne sont jamais faites par le navigateur


Comme je ne peux pas accéder au backend, je devine simplement ce qui se passe derrière la scène. Ils ont probablement un crochet sur leur serveur DNS qui écrit l'IP source pour chaque Question DNS reçue dans leur base de données (peut-être que ce thread fait également la recherche du nom d'hôte et du FAI avant d'enregistrer les données). Notez qu'il s'agit d'une question DNS et jamais d'une recherche HTTP matérialisée. La seule chose que le serveur Web central doit faire est de renvoyer la ligne correspondant aux domaines du sud associés à mon navigateur.

Le moyen le plus simple serait une correspondance biunivoque avec l'ID de suivi. Normalement, il envoie un cookie de suivi piwik avec un nom comme pk_id et il y a une demande supplémentaire à la fin de piwik.php avec beaucoup de détails de suivi. Dans mon cas, ce cookie n'est jamais établi et le saut supplémentaire n'a pas lieu. Je ne vois aucune autre identification de session qui se passe, je vais y regarder de plus près le week-end si la communauté n'a pas creusé.

13
Jedi