Door -Peter-: Door Erik van Straten: Wat een onduidelijk plaatje. Het wekt bij mij de suggestie dat er sprake is van twee https verbindingen (tussen de client en de proxy. en tussen de proxy en de "Target"), maar dan zou de proxy alle DNS requests zien. Als dat niet zo is, waarom wordt de request in de client, proxy en target alle drie met "Q" aangeduid, en de responses allemaal met "Q"? (ik zou in de proxy dan op z'n minst iets als Q' en R' verwachten).
Zonder al te diep in de ODoH specificaties te duiken (heb jij ook niet gedaan) alvast wat extra informatie. Die staat redelijk duidelijk uitgelegd in de tekst in het plaatje.
Ondertussen heb ik
https://tools.ietf.org/html/draft-pauly-dprive-oblivious-doh-03 grotendeels gelezen en daar maak ik het volgende uit op (dit is hoe ik vermoed dat het ongeveer gaat, padding e.d. laat ik gemakshalve weg), uitgaande van een DNS-verzoek vanaf die client in Q_plain:
1) Op de client is een oblivious DNS-server geconfigureerd, bijv.
odoh.example.net;
2) De client vraagt, via DNS [*], een public key (t.b.v. encryption) voor oblivious DNS, PubKey_odoh, op van odoh.example.net;
[*] Ik heb me niet in het impliciete kip-ei probleem hierbij verdiept, noch in dat als dit specifieke DNS verkeer direct naar de DNS server gaat (buiten de proxy om dus), de DNS server zou kunnen weten van welk IP-adres het eerstvolgende DNS verzoek (via proxy) afkomstig is.
3) In het antwoord zit PubKey_odoh en een key_ID (kennelijk worden meerdere sleutelparen per server ondersteund);
4) De client genereert een symmetrische sleutel SKey_plain en versleutelt daarmee Q_plain in Q_encrypted;
5) De client versleutelt de symmetrische sleutel met PubKey_odoh van de DNS server, resulterend in SKey_encrypted;
6) De client zet een https verbinding op met de proxy server en POST de volgende gegevens:
- vereiste oblivious DNS server (bijv. odoh.example.net);
- key_ID;
- SKey_encrypted;
- Q_encrypted.
7) De proxy server maakt een (geheel gescheiden) https verbinding met de gespecificeerde oblivious DNS server;
8) De proxy server POST de ontvangen gegevens aldaar (de DNS server komt het IP-adres van de client zo niet te weten);
9) De oblivious DNS server zoekt, op basis van key_ID, de juiste private key PrivKey_odoh op;
10) De oblivious DNS server ontsleutelt SKey_encrypted m.b.v. PrivKey_odoh en verkrijgt zo SKey_plain;
11) De oblivious DNS server ontsleutelt Q_encrypted m.b.v. SKey_plain en verkrijgt zo Q_plain;
12) De oblivious DNS server voert het DNS-verzoek Q_plain uit en verkrijgt antwoord (of foutmelding) R_plain;
13) De oblivious DNS server versleutelt R_plain met SKey_plain en verkrijgt daarmee R_encrypted;
14) De oblivious DNS server stuurt R_encrypted als antwoord naar de proxy server;
15) De proxy server stuurt R_encrypted naar de client als antwoord op diens verzoek in 6);
16) De client ontsleuteld R_encrypted met SKey_plain (die de client bewaard heeft) en heeft zo het antwoord R_plain.
ConclusiesA) Het is enerzijds geen NAT maar anderzijds nauwelijks proxyen (application-level) wat de "proxy server" doet. Er zijn twee gescheiden https verbindingen, maar verder doet de proxy niets op applicatieniveau;
B) Het plaatje zuigt, want -van de geheim te houden info- ziet de proxy server (naast SKey_encrypted) alleen Q_encrypted en R_encrypted;
C) Als de client voor de gek gehouden kan worden met een valse PubKey_odoh, bijv. verstekt door de proxy server, kan de proxy server alles zelf afhandelen zonder dat de client dit weet;
D) De client kiest de oblivious DNS server, maar de proxy kan desgewenst alles weigeren behalve partners. In dat laatste geval is het de vraag hoever dat partnerschap gaat (als de proxy server IP-adressen van clients doorspeelt is het geheel een farce). Als de proxy server willekeurige oblivious DNS servers ondersteunt helpt cybercriminelen dat bij het exporteren van vertrouwelijke informatie en/of C&C communicatie zonder dat Q_plain en R_plain een formaat zoals gespecificeerd in "draft-irtf-cfrg-hpke-06" hoeven te hebben, en mogelijk faciliteert dit het uitvoeren van (D)DoS aanvallen;
E) Maar ook indien de proxy server meer dan één oblivious DNS servers ondersteunt, heeft (malware op) de client in elk geval een keuze welke server zij kiest (bijv. degene die geen of "minder snelle" blacklists hanteert), zonder dat jouw uitgaande firewall weet naar welke uiteindelijke oblivious DNS server de requests gaan; je ziet immers alleen maar dat een of meer clients met de ingestelde proxy communiceren. Met TLS-inspectie zie je dat wel, maar dan heb je slechts Q_encrypted en R_encrypted (dus geen Q_plain en R_plain). Tenzij je PubKey_odoh, voordat deze de client bereikt, straffeloos (zonder foutmeldingen op de client) door een public key van jezelf weet te vervangen, en zo een dubbele MitM realiseert. Maar dat zo'n complexe setup de beveiliging en privacy netto ten goede komt waag ik zeer te betwijfelen;
F) Als ik het goed begrepen heb, wordt er geen gebruik gemaakt van forward secrecy (als dat wel zo is klopt mijn bovenstaande beschrijving niet). Dat betekent dat als de proxy server op een gegeven moment PriKey_odoh in handen krijgt (of uit PubKey_odoh weet te herleiden, bijv. middels een quantum computer), de beheerder alle eerder opgeslagen Q_encrypted en R_encrypted (die zijn versleuteld met PubKey_odoh, en dus ook alle daarmee versleutelde SKey_plain's) kan ontsleutelen, en -zolang PubKey_odoh nog gebruikt blijft worden- alle toekomstige communicatie.
Ten slotte denk ik dat we, om drie redenen, doorschieten met DoH en zeker met dit soort fratsen daarbovenop:
a) Je bemoeilijkt "opsporing" van verdacht gedrag binnen jouw organisatie terwijl je juist cybercriminelen ermee faciliteert, en als "DNS niet werkt" weet je, zeker met odoh, helemaal niet meer waar het probleem zit;
b) Het gedistribueerde karakter van DNS wordt gesloopt, de macht komt bij een klein aantal providers te liggen wat de consequenties van eventuele hacks en/of uitval vergroot en het risico op censuur toeneemt;
c) Als je minister Grapperhaus ook zijn metadata afpakt, zal dat de roep om verzwakte of gebackdoorde encryptie alleen maar vergroten - don't push your luck...