Questa domanda riguarda DNSCurve . Ho pensato a DNSCurve come "HTTPS per DNS" (come in questo Risposta ) ma ha avuto qualche rammarico per la relazione di fiducia tra resolver e server dei nomi che servono le chiavi pubbliche.
Ecco un esempio per spiegare di cosa sto parlando:
Supponiamo di avere un setup MitM predefinito con Bob come vittima ed eve come attaccante.
- Eve ha trovato un modo per controllare il traffico di rete di Bobs (ad es. con avvelenamento da arp).
- Ora Bob cerca di cercare www.nytimes.com con un risolutore locale, non risolutivo (cache vuota). Il suo risolutore funziona in modo ricorsivo. (root) - > .com. - > nytimes.com. - > www.nytimes.com
- Eve analizza le richieste, le inoltra alla destinazione reale e restituisce finalmente le risposte a bob.
- Quando il risolutore di bob chiede a .com NS per il server dei nomi di nytimes.com, la risposta sarebbe un DNSCurve NS-Record come uz5xgm1kx1zj8xsh51zp315k0rw7dcsgyxqh2sl7g8tjg25ltcvhyw.nytimes.com. Eve ora prende la sua coppia di chiavi e genera un record DNSCrypt falsificato in modo da poter decrittografare le richieste.
- Il risolutore di Bob presuppone che nytimes.com abbia la chiave pubblica di Eve, crea una richiesta DNSCurve e la invia al NS.
- Eve intercetta questo messaggio, decrittografa il suo carico utile (= la richiesta dns), richiede il record reale dal NS reale (con o senza DNSCurve), forgia la risposta (con DNSCurve) e la invia a Bob.
- Bob riceve la richiesta forgiata da Eve, ma poiché Eve ha anche creato il NS Record iniziale, il risolutore di Bob pensa che questa sia la chiave pubblica valida per convalidare la risposta, concludendo che questa è una risposta valida.
Se capisco che DNSCurve correttamente dovrebbe proteggere da questo tipo di situazione. DNSSEC fornisce un Cain-Of-Trust per prevenire questo tipo di attacchi, TSIG utilizza chiavi condivise che devono essere scambiate fuori banda, in che modo DNSCurve gestisce questo problema? La Documentazione ufficiale affermava addirittura che "Se un nome contiene diverse chiavi pubbliche DNSCurve, usa il primo" ( link ) che suona come un problema ancora più grande perché potrebbe consentire anche attacchi più semplici (DNS Spoofing classico con Sniffing e UDP Spoofing).
Sono abbastanza sicuro di aver perso qualcosa qui ma dopo ore di ricerca non sono riuscito a trovare una risposta a questa domanda. Il cuore di questa domanda è "dov'è il processo di creazione del rapporto di fiducia in DNSCurve?"