TLS 1.3 stále posiela meno servera v otvorenom texte
TLS 1.3 šifruje handshake, ale nie SNI. Prečítajte si ClientHello, overte skutočné prijatie ECH a zaznamenajte, čo pozorovateľ ešte vidí.
Prechod listenera na TLS 1.3 mení to, čo môže pozorovateľ prečítať, ale nie tak veľa, ako naznačuje číslo verzie. ClientHello stále putuje skôr, než sa vyjedná akékoľvek šifrovanie, a v bežnom spojení tam požadované meno servera leží v otvorenom texte. Encrypted Client Hello je mechanizmus, ktorý ho skrýva, a je to samostatné nasadenie s vlastnými predpokladmi. Vykonajte tieto štyri kroky, kým napíšete zásadu, ktorá predpokladá jedno z oboch správaní.
Čo handshake skutočne odhaľuje
TLS 1.3 šifruje certifikát servera a väčšinu handshake, ktorý nasleduje po ServerHello. Všetko, čo klient odošle ako prvé, zostáva mimo tejto ochrany, pretože kľúče ešte neexistujú. Označenie mena servera je súčasťou toho prvého letu, a preto ho pasívny pozorovateľ môže stále čítať bez toho, aby čokoľvek rozbil.
Špecifikácia ECH, RFC 9849, to mení tým, že šifruje vnútorný ClientHello pre spolupracujúci server. Vonkajší handshake zostáva a nesie verejné meno, ktoré sieť vidí, takže nasadenie stále potrebuje vonkajšiu identitu, ktorá dáva zmysel pre sprostredkovateľov. To vonkajšie meno je časť, ktorú ľudia prehliadnu, keď očakávajú, že spojenie bude anonymné. Je to krycie meno, nie skryté, a musí sa prekladať a overovať ako každé iné.
Nič z toho neskrýva cestu doručenia. Zdrojové a cieľové adresy, porty, veľkosti paketov a časovanie zostávajú pozorovateľné a často povedia viac o tom, kto hovorí, než meno. Preklad mien a vzťahy na úrovni aplikácie sú ďalšou vrstvou, každá s vlastnou viditeľnosťou.
Čítajte ClientHello namiesto predpokladov
Verzia v ServerHello vám nepovie, čo klient odoslal. Pozrite sa na prvý let priamo, z pozície, ktorá predstavuje pozorovateľa, na ktorom vám záleží.
openssl s_client -connect app.plant.example:443 -servername app.plant.example -tls1_3 </dev/null> 2>/dev/null | head -20 sudo tcpdump -ni eth0 -c 40 'tcp port 443' -w /tmp/tls.pcap tshark -r /tmp/tls.pcap -Y 'tls.handshake.extensions_server_name' -T fields -e tls.handshake.extensions_server_name
Prvý príkaz vykoná handshake a ukáže vyjednané parametre, vrátane verzie protokolu a mena, ktoré ste požadovali. Druhý zachytí prvé pakety skutočného spojenia a tretí vytiahne pole SNI z tohto zachytenia. Ak je pole vyplnené, pozorovateľ, ktorého ste napodobnili, ho môže čítať.
Zachytávajte oddelene na strane klienta a na ceste, keď sa obe nezhodujú, pretože miestne zachytenie môže ukázať meno, ktoré middlebox neskôr prepíše alebo zahodí. Zachytávajte aj z hostiteľa, ktorý sám neukončuje TLS, pretože ukončujúca proxy vidí otvorený text zo zásady a nič nedokazuje o tom, čo vidí sieť.
Berte rozšírenie ECH ako tvrdenie, nie ako dôkaz
Vidieť rozšírenie ECH v ClientHello neznamená, že spojenie ECH použilo. Klienti posielajú GREASE ECH, keď nemajú použiteľnú konfiguráciu, práve preto, aby ich handshake vyzeral rovnako. Rozšírenie je prítomné, vnútorné hello je návnada a skutočné meno je stále čitateľné.
dig +short HTTPS app.plant.example openssl s_client -connect app.plant.example:443 -tls1_3 -status </dev/null> 2>/dev/null | grep -i -E 'ech|status_request'
Prvý príkaz ukáže, či zdroj publikuje záznam prostriedku HTTPS s parametrom konfigurácie ECH, čo je spôsob, akým sa klienti učia kľúč. Druhý hľadá informácie o stave handshake, hoci správa o úspechu klienta je silnejším dôkazom. Prijatie je to, na čom záleží: server, ktorý nemá zodpovedajúci kľúč, nemôže vnútorné hello dešifrovať a spojenie sa vracia späť.
Skontrolujte aj klienta, pretože podpora prehliadačov a konfigurácia sa líšia podľa verzie a platformy. Zásada postavená na „moderné prehliadače používajú ECH“ je dohad o flotile, nie fakt o vašej flotile. Zmapujte verzie, ktoré sa skutočne pripájajú, a potom každú z nich otestujte. Tá istá stránka, ktorá funguje z aktuálneho stolného prehliadača, nemusí pred starším klientom v tej istej sieti skryť nič.
Zapíšte rozsah pozorovateľa do zásady
Uveďte, kde pozorovateľ sedí a čo je v tomto bode viditeľné, kým rozhodnete, na čo sa môže kontrola spoliehať. Pripojenie prehliadača k webu, vonkajší transport VPN a proxy ukončujúca TLS odhaľujú každý inú sadu faktov a pravidlo napísané pre jednu pozíciu sa len zriedka prenesie čisto na inú.
Ak kontrola závisí od čítania SNI, otestujte, ako sa nasadení klienti správajú, keď je ECH dostupné a keď nie. Potom zaznamenajte dôsledok pre kompatibilitu, pretože filter, ktorý ticho prestane odpovedať, je horší ako ten, ktorý nebol nikdy nasadený.
Nakoniec ponechajte neistotu v zázname. Nahradenie starého univerzálneho tvrdenia novším zanechá rovnakú medzeru pod iným názvom protokolu a ďalší recenzent mu uverí rovnako pevne.