TLS 1.3 schéckt den Servernumm nach ëmmer am kloeren Text
TLS 1.3 verschlësselt den Handshake, awer net d’SNI. Liest den ClientHello, préift eng richteg ECH-Akzeptanz a notéiert, wat en Observateur nach ka gesinn.
Ee Lauschter op TLS 1.3 z’upgraden änert, wat en Observateur liese kann, awer net sou vill wéi d’Versiounsnummer suggeréiert. Den ClientHello reest nach ëmmer, ier eng Verschlësselung ausgehandelt gëtt, an an enger gewéinlecher Verbindung steet den ugefrote Servernumm do am kloeren Text. Encrypted Client Hello ass de Mechanismus, deen en verstoppt, an et ass eng separat Bereitstellung mat hiren eegene Viraussetzungen. Maacht dës véier Schrëtt, ier Dir eng Politik schreift, déi eng vun den zwou Verhalen unhëlt.
Wat den Handshake tatsächlech weist
TLS 1.3 verschlësselt de Certificat vum Server an de gréissten Deel vum Handshake, deen no dem ServerHello kënnt. Alles, wat de Client als éischt schéckt, läit ausserhalb vun dësem Schutz, well d’Schlësselen nach net existéieren. D’Server Name Indication ass Deel vun deem éischte Fluch, dofir kann en passive Observateur se nach liesen, ouni eppes ze briechen.
D’ECH-Spezifikatioun, RFC 9849, ännert dat andeems en en innere ClientHello fir e kooperéierende Server verschlësselt. Den äusseren Handshake bleift a dréit en ëffentlechen Numm, deen d’Netz ka gesinn, also brauch d’Bereitstellung nach ëmmer eng äusserlech Identitéit, déi fir Intermédiairen e Sënn mécht. Dee äusseren Numm ass deen Deel, deen d’Leit verpassen, wann se erwaarden, datt d’Verbindung anonym gëtt. Et ass en Decknumm, keen verstoppten Numm, an en muss sech wéi all aneren opléisen an authentifizéieren.
Näischt dovu verstoppt den Zouliwwerungswee. Quell- an Destinatiounsadressen, Porten, Pakettgréissten an Zäitpunkt bleiwen observabel, an déi soen dacks méi doriwwer, wien schwätzt, wéi den Numm. Nimmopléisung an Bezéiungen op Applikatiounsniveau sinn nach eng aner Schicht, jidderee mat hirer eegener Visibilitéit.
Liest en ClientHello anstatt unzehuelen
D’Versioun am ServerHello seet Iech net, wat de Client geschéckt huet. Kuckt deen éischte Fluch direkt un, vun enger Positioun, déi den Observateur representéiert, deen Iech interesséiert.
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
Den éischte Kommando mécht en Handshake a weist déi ausgehandelt Parameteren, dorënner d’Protokollversioun an den Numm, deen Dir ugefrot hutt. Den zweete fänkt déi éischt Pakete vun enger richte ger Verbindung af, an den drëtte extrahéiert d’SNI-Feld aus deem Opfang. Wann d’Feld gefëllt ass, kann den Observateur, deen Dir emuléiert hutt, et liesen.
Fänkt getrennt op der Client-Säit an um Wee un, wann déi zwee net iwwerenee stëmmen, well en lokalen Opfang en Numm ka weisen, deen eng Middlebox spéider ëmschreift oder verwerft. Fänkt och vun engem Host un, deen TLS net selwer terminéiert, well en terminéierende Proxy de kloeren Text vun der Konstruktioun un gesäit an näischt doriwwer beweist, wat d’Netz gesäit.
Behandelt eng ECH-Erweiderung als Behauptung, net als Beweis
Eng ECH-Erweiderung an engem ClientHello ze gesinn heescht net, datt d’Verbindung ECH benotzt huet. Clienten schécken GREASE ECH, wann se keng brauchbar Konfiguratioun hunn, just dofir, datt hir Handshakes eenheetlech ausgesinn. D’Erweiderung ass do, den inneren Hello ass eng Lockpuppel, an den tatsächlechen Numm ass nach liesbar.
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'
Den éischte Kommando weist, ob den Ursprong en HTTPS-Ressource-Record mat engem ECH-Konfiguratiounsparameter publizéiert, a sou léieren d’Clienten de Schlëssel. Den zweete sicht no Statusinformatiounen vum Handshake, obwuel d’Erfollegsmeldung vun engem Client dee méi staarken Beweis ass. D’Akzeptanz ass dat, wat zielt: e Server, deen de passenden Schlëssel net huet, kann den inneren Hello net entschlësselen, an d’Verbindung fällt zréck.
Kuckt och de Client, well Browserënnerstëtzung a Konfiguratioun sech no Versioun a Plattform ënnerscheeden. Eng Politik, déi op „modern Browseren benotzen ECH“ opgebaut ass, ass eng Vermutung iwwer eng Flott, keen Fakt iwwer Är Flott. Inventariséiert d’Versiounen, déi tatsächlech verbannen, a testt dann eng vun all. Déiselwecht Säit, déi vun engem aktuellen Desktop-Browser funktionéiert, verstoppt vläicht näischt virun engem méi alen Client am selwechten Netz.
Schreift den Ëmfang vum Observateur an d’Politik
Gitt un, wou den Observateur sëtzt a wat op deem Punkt visibel ass, ier Dir entscheet, op wat eng Kontroll sech kann ofstëtzen. D’Verbindung vun engem Browser mat enger Websäit, en äusseren VPN-Transport an en TLS-terminéierende Proxy leeën jiddereen en aneren Set vu Fakten offen, an eng Regel, déi fir eng Positioun geschriwwe gouf, gëtt seelen propper op eng aner iwwer.
Wann eng Kontroll dovun ofhängt, d’SNI ze liesen, testt, wéi sech déi agesat Clienten behuelen, wann ECH verfügbar ass a wann net. Notéiert dann d’Kompatibilitéitsfolleg, well e Filter, dee stëll ophält ze passen, ass schlëmmer wéi en, deen ni agesat gouf.
Zum Schluss behält d’Onsécherheet am Protokoll. Eng al universell Behauptung duerch eng méi nei z’ersetzen hannerléisst déiselwecht Lück ënner engem aneren Protokollnumm, an den nächsten Iwwerprüfer wäert genee sou fest un se gleewen.