Il blocco dei DNS non protegge dai sofisticati attacchi di rebinding DNS .
Considera uno scenario in cui un utente malintenzionato imposta un firewall davanti al proprio server web. Richiedete il loro sito web, attacker.com, che risulta in una query DNS che restituisce il loro indirizzo IP. Il risultato DNS ha un TTL (time to live) di 1 secondo. Normalmente, questo significa che il browser deve effettuare un'altra richiesta DNS dopo che è trascorso 1 secondo, tuttavia, il blocco DNS indica al browser di ignorare il TTL e aggiungere un'unità di tempo (ad esempio un'ora). Quindi ora il tuo browser non effettuerà un'altra query DNS per quel nome host per 1 ora e 1 secondo. Al termine della query DNS, la richiesta HTTP viene inviata e l'utente malintenzionato restituisce il sito Web richiesto con codice javascript che avvierà l'attacco.
Ora, il Javascript dell'attaccante ha impostato una richiesta AJAX che attende due secondi prima di sparare. Quindi richiede di nuovo alcune risorse sul sito Web dell'attaccante. Tuttavia, la richiesta non riesce. Questo perché l'autore dell'attacco ha già impostato una regola firewall che blocca la richiesta del tuo browser . Ora siamo nel seguente stato:
- Il TTL è scaduto sulla prima richiesta DNS, ma il blocco DNS è ancora in vigore
- Hai inoltrato una richiesta al sito web dell'attaccante tramite la loro chiamata JS AJAX
- La richiesta è stata rilasciata dal firewall dell'attaccante
Queste tre cose faranno sì che il tuo browser invii un'altra query DNS nonostante tu stia usando il pinning DNS. In effetti, l'attaccante ha facilmente sconfitto la tua strategia di blocco DNS usando un firewall e inviare una seconda richiesta al di fuori del TTL. Il blocco dei DNS non è una strategia efficace perché ci sono molti motivi legittimi per cui il server di qualcuno potrebbe essere inattivo; il tuo browser è costretto a fare una seconda query DNS nel caso in cui ci sia un altro record DNS che verrà risolto sulla macchina corretta (ad esempio in caso di migrazione del server, tempi di inattività, qualsiasi cosa). Fondamentalmente, il tuo browser non ha modo di sapere se viene effettivamente attaccato qui o no; per quello che ne sa, il server è legittimamente inattivo e quindi DEVE fare un'altra richiesta DNS.
Quindi ... perché è importante che ci sia una seconda richiesta DNS?
La seconda richiesta DNS viene solitamente utilizzata dall'attaccante per restituire un indirizzo IP errato per il record DNS. I browser hanno quella che viene definita una politica di "stessa origine" che impedisce alle pagine Web di effettuare richieste di risorse che non possiedono. Fondamentalmente il modo in cui funziona la stessa origine è che dice che il link può richiedere solo link . Ma in realtà funziona usando l'indirizzo IP per hostname.com, non il nome host leggibile da solo. Quindi, in un attacco di rebinding DNS, quando il browser esegue la seconda query DNS che ho descritto in precedenza, l'utente malintenzionato restituirà un indirizzo IP "falso" nel risultato della query DNS. Quindi il tuo browser penserà, ad esempio, che l'indirizzo IP 1.1.1.1 appartiene ad attacker.com anche se appartiene davvero a google.com. Ciò consente all'aggressore di sfruttare la stessa politica di origine del browser; ora il javascript dell'attaccante può richiedere materiale da google.com tramite AJAX. Inoltre, possono leggere e impostare cookie e altre informazioni dannose. Questo sfrutta la stessa politica di origine ingannando il browser e confidando nel secondo record DNS che è stato restituito. Ora il browser pensa che hostname.com sia associato all'indirizzo IP 1.1.1.1 anche se in realtà non lo è. Cosa deve fare un browser? DNS non ha quel tipo di autenticazione integrata.: (
Prevenzione dell'attacco rebinding DNS
Ci sono un sacco di modi per prevenirlo, e sono abbastanza sicuro che i browser moderni abbiano già implementato la protezione contro questi attacchi. Un modo semplice per prevenirlo (come proprietario del web) è controllare l'intestazione dell'host HTTP di una richiesta. Ad esempio, se sei google.com, riceverai una richiesta ma l'intestazione host direbbe ancora attacker.com. Ovviamente questo non fa parte del tuo dominio, quindi puoi prevenire l'attacco semplicemente facendo cadere la richiesta. Perché qualcuno dovrebbe voler fare questo per cominciare? Bene, clicca la frode nella pubblicità. Raschiare i motori di ricerca da molte macchine contemporaneamente. Rubare dati preziosi dai siti Web sulla rete aziendale interna. Ecc.