TLS 1.3 još šalje ime poslužitelja u čistom tekstu
TLS 1.3 šifrira rukovanje, ali ne SNI. Pročitajte ClientHello, provjerite stvarno prihvaćanje ECH i zabilježite što promatrač još može vidjeti.
Nadogradnja listenera na TLS 1.3 mijenja što promatrač može pročitati, ali ne onoliko koliko sugerira broj verzije. ClientHello još putuje prije nego što se dogovori ikakvo šifriranje, a u običnoj vezi traženo ime poslužitelja stoji tamo u čistom tekstu. Encrypted Client Hello mehanizam je koji ga skriva, i to je zasebna implementacija s vlastitim preduvjetima. Provedite ova četiri koraka prije nego napišete politiku koja pretpostavlja jedno od dva ponašanja.
Što rukovanje zapravo otkriva
TLS 1.3 šifrira poslužiteljev certifikat i većinu rukovanja koje slijedi nakon ServerHello. Sve što klijent pošalje prvo ostaje izvan te zaštite, jer ključevi još ne postoje. Oznaka imena poslužitelja dio je tog prvog leta, zato je pasivni promatrač još može pročitati bez da išta razbije.
Specifikacija ECH, RFC 9849, to mijenja šifriranjem unutarnjeg ClientHello za poslužitelj koji surađuje. Vanjsko rukovanje ostaje i nosi javno ime koje mreža može vidjeti, pa implementacija i dalje treba vanjski identitet koji ima smisla posrednicima. To vanjsko ime je dio koji ljudi propuste kad očekuju da veza postane anonimna. To je pokrovno ime, a ne skriveno, i mora se razriješiti i autentificirati kao i svako drugo.
Ništa od ovoga ne skriva put dostave. Izvorna i odredišna adresa, portovi, veličine paketa i vrijeme ostaju vidljivi, i često govore više o tome tko govori nego ime. Razrješavanje imena i odnosi na razini aplikacije još su jedan sloj, svaki s vlastitom vidljivošću.
Pročitajte ClientHello umjesto da pretpostavljate
Verzija u ServerHello ne govori vam što je klijent poslao. Pogledajte prvi let izravno, s položaja koji predstavlja promatrača koji vas zanima.
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
Prva naredba izvodi rukovanje i pokazuje dogovorene parametre, uključujući verziju protokola i ime koje ste zatražili. Druga snima prve pakete stvarne veze, a treća izvlači polje SNI iz tog snimka. Ako je polje ispunjeno, promatrač koji ste oponašali može ga pročitati.
Snimajte odvojeno na strani klijenta i na putu kad se to dvoje ne slaže, jer lokalni snimak može pokazati ime koje middlebox kasnije prepiše ili odbaci. Snimajte i s hosta koji sam ne završava TLS, budući da proxy koji završava vidi čisti tekst po dizajnu i ne dokazuje ništa o tome što mreža vidi.
Tretirajte ECH proširenje kao tvrdnju, ne kao dokaz
Vidjeti ECH proširenje u ClientHello ne znači da je veza upotrijebila ECH. Klijenti šalju GREASE ECH kad nemaju upotrebljivu konfiguraciju, upravo da bi njihova rukovanja izgledala jednoliko. Proširenje je prisutno, unutarnji hello je mamac, a stvarno ime još je čitljivo.
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'
Prva naredba pokazuje objavljuje li izvor HTTPS zapis resursa s parametrom konfiguracije ECH, a to je način na koji klijenti uče ključ. Druga traži informacije o stanju rukovanja, iako je klijentova poruka o uspjehu jači dokaz. Prihvaćanje je ono što je važno: poslužitelj koji nema odgovarajući ključ ne može dešifrirati unutarnji hello, i veza se vraća natrag.
Provjerite i klijenta, jer se podrška preglednika i konfiguracija razlikuju prema verziji i platformi. Politika izgrađena na „moderni preglednici koriste ECH“ nagađanje je o floti, a ne činjenica o vašoj floti. Popišite verzije koje se doista povezuju, zatim testirajte po jednu od svake. Ista stranica koja radi iz aktualnog stolnog preglednika možda neće ništa sakriti od starijeg klijenta u istoj mreži.
Upišite opseg promatrača u politiku
Navedite gdje promatrač sjedi i što je na tom mjestu vidljivo prije nego odlučite na što se kontrola može osloniti. Veza preglednika s web-mjestom, vanjski VPN transport i proxy koji završava TLS otkrivaju svaki drugi skup činjenica, a pravilo napisano za jedan položaj rijetko se čisto prenosi na drugi.
Ako kontrola ovisi o čitanju SNI-ja, testirajte kako se implementirani klijenti ponašaju kad je ECH dostupan i kad nije. Zatim zabilježite posljedicu za kompatibilnost, jer je filtar koji tiho prestane odgovarati gori od onoga koji nikad nije bio implementiran.
Naposljetku, zadržite nesigurnost u zapisu. Zamjena stare univerzalne tvrdnje novijom ostavlja istu prazninu pod drugim imenom protokola, i sljedeći će recenzent u nju vjerovati jednako čvrsto.