Klausytojo atnaujinimas į TLS 1.3 keičia tai, ką stebėtojas gali perskaityti, bet ne tiek, kiek rodo versijos numeris. ClientHello vis dar keliauja prieš susitariant dėl bet kokio šifravimo, o įprastame ryšyje prašomas serverio pavadinimas ten stovi atviru tekstu. Encrypted Client Hello yra mechanizmas, kuris jį paslepia, ir tai atskiras diegimas su savo prielaidomis. Atlikite šiuos keturis veiksmus prieš rašydami politiką, kuri numato vieną iš dviejų elgsenų.

Ką iš tikrųjų atskleidžia handshake

TLS 1.3 užšifruoja serverio sertifikatą ir didžiąją dalį handshake, kuris seka po ServerHello. Viskas, ką klientas siunčia pirmiausia, lieka už šios apsaugos, nes raktų dar nėra. Serverio pavadinimo nuoroda yra to pirmojo skrydžio dalis, todėl pasyvus stebėtojas vis dar gali ją perskaityti nieko nesulaužęs.

Specifikacija ECH, RFC 9849, tai keičia šifruodama vidinį ClientHello bendradarbiaujančiam serveriui. Išorinis handshake išlieka ir neša viešą pavadinimą, kurį tinklas gali matyti, todėl diegimui vis dar reikia išorinės tapatybės, kuri turi prasmę tarpininkams. Tas išorinis pavadinimas yra dalis, kurią žmonės praleidžia tikėdamiesi, kad ryšys taps anonimiškas. Tai dengiamasis pavadinimas, o ne paslėptas, ir jis turi išsispręsti ir autentifikuotis kaip bet kuris kitas.

Niekas iš to nepaslepia pristatymo kelio. Šaltinio ir paskirties adresai, prievadai, paketų dydžiai ir laikas lieka stebimi, ir jie dažnai pasako daugiau apie tai, kas kalba, nei pavadinimas. Vardų sprendimas ir programų lygmens ryšiai yra dar vienas sluoksnis, kiekvienas su savo matomumu.

Skaitykite ClientHello, o ne spėliokite

Versija ServerHello nepasako, ką klientas išsiuntė. Pažiūrėkite į pirmąjį skrydį tiesiogiai, iš pozicijos, kuri atstovauja jus dominančiam stebėtojui.

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

Pirmoji komanda atlieka handshake ir parodo suderintus parametrus, įskaitant protokolo versiją ir pavadinimą, kurio prašėte. Antroji užfiksuoja pirmuosius tikro ryšio paketus, o trečioji ištraukia SNI lauką iš to įrašo. Jei laukas užpildytas, jūsų imituojamas stebėtojas gali jį perskaityti.

Fiksuokite atskirai kliento pusėje ir kelyje, kai šie du nesutampa, nes vietinis įrašas gali parodyti pavadinimą, kurį tarpinė įranga vėliau perrašo arba išmeta. Fiksuokite ir iš prieglobos, kuri pati neužbaigia TLS, kadangi užbaigiantis tarpinis serveris iš prigimties mato atvirą tekstą ir nieko neįrodo apie tai, ką mato tinklas.

Traktuokite ECH plėtinį kaip teiginį, o ne įrodymą

Pamatyti ECH plėtinį ClientHello nereiškia, kad ryšys naudojo ECH. Klientai siunčia GREASE ECH, kai neturi tinkamos konfigūracijos, būtent tam, kad jų handshake atrodytų vienodai. Plėtinys yra, vidinis hello yra masalas, o tikrasis pavadinimas vis dar įskaitomas.

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'

Pirmoji komanda parodo, ar šaltinis skelbia HTTPS ištekliaus įrašą su ECH konfigūracijos parametru, ir taip klientai sužino raktą. Antroji ieško handshake būsenos informacijos, nors kliento sėkmės pranešimas yra stipresnis įrodymas. Priėmimas yra tai, kas svarbu: serveris, neturintis atitinkančio rakto, negali iššifruoti vidinio hello, ir ryšys atsitraukia.

Patikrinkite ir klientą, nes naršyklių palaikymas ir konfigūracija skiriasi pagal versiją ir platformą. Politika, pagrįsta „šiuolaikinės naršyklės naudoja ECH“, yra spėjimas apie laivyną, o ne faktas apie jūsų laivyną. Sudarykite versijų, kurios iš tikrųjų jungiasi, sąrašą ir tada išbandykite po vieną iš kiekvienos. Tas pats puslapis, kuris veikia iš dabartinės darbalaukio naršyklės, gali nieko nepaslėpti nuo senesnio kliento tame pačiame tinkle.

Įrašykite stebėtojo apimtį į politiką

Nurodykite, kur stebėtojas sėdi ir kas tame taške matoma, prieš nuspręsdami, kuo kontrolė gali remtis. Naršyklės ryšys su svetaine, išorinis VPN transportas ir TLS užbaigiantis tarpinis serveris atskleidžia kiekvienas skirtingą faktų rinkinį, o vienai pozicijai parašyta taisyklė retai perkeliama švariai į kitą.

Jei kontrolė priklauso nuo SNI skaitymo, išbandykite, kaip elgiasi įdiegti klientai, kai ECH yra prieinamas ir kai jo nėra. Tada užrašykite suderinamumo pasekmę, nes filtras, kuris tyliai nustoja atitikti, yra blogesnis už tą, kuris niekada nebuvo įdiegtas.

Galiausiai palikite neapibrėžtumą įraše. Seno universalaus teiginio pakeitimas naujesniu palieka tą pačią spragą po kitu protokolo pavadinimu, ir kitas recenzentas juo patikės taip pat tvirtai.

Susiję straipsniai