TLS 1.3 joprojām sūta servera nosaukumu atklātā tekstā
TLS 1.3 šifrē rokasspiedienu, bet ne SNI. Lasiet ClientHello, pārbaudiet īstu ECH pieņemšanu un ierakstiet, ko novērotājs vēl var redzēt.
Klausītāja jaunināšana uz TLS 1.3 maina to, ko novērotājs var nolasīt, bet ne tik daudz, cik liek domāt versijas numurs. ClientHello joprojām ceļo pirms jebkādas šifrēšanas vienošanās, un parastā savienojumā pieprasītais servera nosaukums atrodas tur atklātā tekstā. Encrypted Client Hello ir mehānisms, kas to slēpj, un tā ir atsevišķa ieviešana ar saviem priekšnosacījumiem. Veiciet šos četrus soļus, pirms rakstāt politiku, kas pieņem vienu no abām uzvedībām.
Ko rokasspiediens faktiski atklāj
TLS 1.3 šifrē servera sertifikātu un lielāko daļu rokasspiediena, kas seko pēc ServerHello. Viss, ko klients nosūta vispirms, paliek ārpus šīs aizsardzības, jo atslēgas vēl nepastāv. Servera nosaukuma norāde ir daļa no šī pirmā lidojuma, tāpēc pasīvs novērotājs to joprojām var nolasīt, neko nesalaužot.
Specifikācija ECH, RFC 9849, to maina, šifrējot iekšējo ClientHello sadarbojošamies serverim. Ārējais rokasspiediens paliek un nes publisku nosaukumu, ko tīkls var redzēt, tāpēc ieviešanai joprojām vajag ārēju identitāti, kam ir jēga starpniekiem. Šis ārējais nosaukums ir tā daļa, ko cilvēki palaiž garām, gaidot, ka savienojums kļūs anonīms. Tas ir segvārds, nevis slēpts nosaukums, un tam jāatrisinās un jāautentificējas kā jebkuram citam.
Nekas no tā neslēpj piegādes ceļu. Avota un galamērķa adreses, porti, pakešu izmēri un laiks paliek novērojami, un tie bieži vien pasaka vairāk par to, kas runā, nekā nosaukums. Nosaukumu atrisināšana un lietojumlīmeņa attiecības ir vēl viens slānis, katram ar savu redzamību.
Lasiet ClientHello, nevis pieņemiet
Versija ServerHello jums nepasaka, ko klients nosūtīja. Paskatieties uz pirmo lidojumu tieši, no pozīcijas, kas atspoguļo novērotāju, kas jūs interesē.
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
Pirmā komanda veic rokasspiedienu un parāda saskaņotos parametrus, tostarp protokola versiju un nosaukumu, ko pieprasījāt. Otrā tver īsta savienojuma pirmās paketes, un trešā izvelk SNI lauku no šī tveršanas faila. Ja lauks ir aizpildīts, jūsu atdarinātais novērotājs to var nolasīt.
Tveriet atsevišķi klienta pusē un ceļā, kad šie divi nesakrīt, jo lokāls tvērums var parādīt nosaukumu, ko starpniekserveris vēlāk pārraksta vai izmet. Tveriet arī no resursdatora, kas pats neizbeidz TLS, jo izbeidzošais starpniekserveris pēc būtības redz atklātu tekstu un neko nepierāda par to, ko redz tīkls.
Uzskatiet ECH paplašinājumu par apgalvojumu, nevis pierādījumu
ECH paplašinājuma redzēšana ClientHello nenozīmē, ka savienojums izmantoja ECH. Klienti sūta GREASE ECH, kad tiem nav izmantojamas konfigurācijas, tieši tāpēc, lai viņu rokasspiedieni izskatītos vienveidīgi. Paplašinājums ir klāt, iekšējais hello ir ēsma, un faktiskais nosaukums joprojām ir nolasāms.
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'
Pirmā komanda parāda, vai izcelsme publicē HTTPS resursa ierakstu ar ECH konfigurācijas parametru, un tā klienti uzzina atslēgu. Otrā meklē rokasspiediena statusa informāciju, lai gan klienta veiksmes ziņojums ir spēcīgāks pierādījums. Pieņemšana ir tas, kam ir nozīme: serveris, kuram nav atbilstošās atslēgas, nevar atšifrēt iekšējo hello, un savienojums atkāpjas.
Pārbaudiet arī klientu, jo pārlūku atbalsts un konfigurācija atšķiras atkarībā no versijas un platformas. Politika, kas balstīta uz „mūsdienu pārlūki izmanto ECH“, ir minējums par floti, nevis fakts par jūsu floti. Uzskaitiet versijas, kas faktiski savienojas, un pēc tam pārbaudiet pa vienai no katras. Tā pati lapa, kas darbojas no pašreizējā galddatora pārlūka, vecākam klientam tajā pašā tīklā var neko nepaslēpt.
Ierakstiet novērotāja tvērumu politikā
Norādiet, kur novērotājs atrodas un kas šajā punktā ir redzams, pirms izlemjat, uz ko kontrole var paļauties. Pārlūka savienojums ar vietni, ārējs VPN transports un TLS izbeidzošs starpniekserveris katrs atklāj citu faktu kopumu, un vienai pozīcijai rakstīts noteikums reti tiek tīri pārnests uz citu.
Ja kontrole atkarīga no SNI nolasīšanas, pārbaudiet, kā uzvedas ieviestie klienti, kad ECH ir pieejams un kad nav. Pēc tam ierakstiet saderības sekas, jo filtrs, kas klusi pārstāj atbilst, ir sliktāks par to, kas nekad nav ieviests.
Visbeidzot, saglabājiet nenoteiktību protokolā. Vecā universālā apgalvojuma aizstāšana ar jaunāku atstāj to pašu robu zem cita protokola nosaukuma, un nākamais recenzents tam ticēs tikpat stingri.