Le richieste e le risposte DNS sono non HTTP; loro sono ... DNS. Vedi lo standard . La maggior parte delle volte, le richieste e le risposte DNS utilizzano UDP : la richiesta è un pacchetto IP singolo e così è la risposta.
Con UDP, ogni pacchetto è identificato da:
- l'indirizzo IP di origine
- l'indirizzo IP di destinazione
- la porta di origine
- la porta di destinazione
Una richiesta DNS dal client C al server DNS S userà l'indirizzo IP di C come sorgente, S come destinazione, un valore di porta casuale p come porta di origine e 53 come porta di destinazione (il valore di porta standard per il server DNS). La risposta DNS userà l'indirizzo IP di C come destinazione, l'indirizzo IP S come sorgente, 53 come porta sorgente e p come porta di destinazione. Il client accetterà la risposta come "corretta" perché usa p come porta di destinazione, lo stesso p come quello utilizzato dal client come origine per la sua richiesta.
Un utente malintenzionato che desidera fornire informazioni DNS false al client C può conoscere l'indirizzo IP C e l'indirizzo IP S e può fare una buona ipotesi sul momento in cui il cliente invierà la sua richiesta. L'obiettivo dell'attaccante è inviare una falsa risposta DNS, sostenendo di provenire dal server DNS S , ma contenente. Senza un accesso completo a intercettazioni, l'attaccante non può conoscere il valore di p , perché non può vedere pacchetti. Tuttavia, i numeri di porta sono in un intervallo limitato (i numeri di porta vanno da 0 a 65535, ma l'intervallo effettivo per i numeri allocati casualmente è minore e dipende dal sistema operativo coinvolto). Pertanto, l'attaccante può semplicemente inviare alcune migliaia di pacchetti IP falsificati, ciascuno contenente le informazioni false, per tutti i possibili valori di p di porta. Il client li abbandonerà tutti tranne quello che utilizza il valore p corretto.
Lo stesso concetto può essere esteso alle comunicazioni tra server DNS, perché parlano tra loro e nascondono le risposte. Spesso è più facile tirare fuori l'attaccante, perché può innescare lo scambio DNS-to-DNS, permettendo un tempismo preciso per il suo lancio delle sue migliaia di risposte falsificate. Quando riesce a fornire informazioni false a un server DNS, si dice che il server DNS sia avvelenato .
Questo genere di cose è relativamente facile anche per gli attaccanti di bassa tecnologia che non hanno abilità di intercettazione, per non parlare del potere di intercettazione che sarebbe richiesto per un vero MitM tra il client e il suo server DNS, o tra server DNS. Il motivo per cui è semplice utilizzare l'UDP implica che l'hacker conosce tutto tranne la porta di origine casuale, che vive in un intervallo ristretto. Se i due server DNS parlano tra loro su TCP , allora l'attacco è più difficile, perché l'iniezione di dati falsi in un TCP il flusso implica di indovinare i numeri di sequenza di connessione , scelti casualmente in un intervallo di 32 bit: le "migliaia di pacchetti" sono diventati "miliardi di pacchetti".