TLS 1.3 ende e dërgon emrin e serverit në tekst të hapur
TLS 1.3 kripton handshake-un por jo SNI-në. Lexoni ClientHello, kontrolloni një pranim real ECH dhe regjistroni çfarë mund të shohë ende një vëzhgues.
Përmirësimi i një listener në TLS 1.3 ndryshon atë që një vëzhgues mund të lexojë, por jo aq sa sugjeron numri i versionit. ClientHello udhëton ende përpara se të negociohet çdo kriptim, dhe në një lidhje të zakonshme emri i kërkuar i serverit qëndron atje në tekst të hapur. Encrypted Client Hello është mekanizmi që e fsheh atë, dhe është një vendosje e veçantë me parakushtet e veta. Kryeni këto katër hapa përpara se të shkruani një politikë që supozon njërën nga të dyja sjelljet.
Çfarë zbulon në të vërtetë handshake-u
TLS 1.3 kripton certifikatën e serverit dhe pjesën më të madhe të handshake-ut që vjen pas ServerHello. Gjithçka që klienti dërgon së pari qëndron jashtë asaj mbrojtjeje, sepse çelësat nuk ekzistojnë ende. Treguesi i emrit të serverit është pjesë e atij fluturimi të parë, prandaj një vëzhgues pasiv mund ta lexojë ende pa thyer asgjë.
Specifikimi ECH, RFC 9849, e ndryshon këtë duke kriptuar një ClientHello të brendshëm për një server që bashkëpunon. Handshake-u i jashtëm mbetet dhe mban një emër publik që rrjeti mund ta shohë, kështu që vendosja ka ende nevojë për një identitet të jashtëm që ka kuptim për ndërmjetësit. Ai emër i jashtëm është pjesa që njerëzit e humbin kur presin që lidhja të bëhet anonime. Është një emër mbulues, jo një emër i fshehur, dhe duhet të zgjidhet dhe të autentikohet si çdo tjetër.
Asgjë nga kjo nuk e fsheh rrugën e dorëzimit. Adresat burimore dhe të destinacionit, portat, madhësitë e paketave dhe kohëzgjatja mbeten të vëzhgueshme, dhe ato shpesh thonë më shumë për atë se kush flet sesa emri. Zgjidhja e emrave dhe marrëdhëniet në nivel aplikacioni janë edhe një shtresë tjetër, secila me dukshmërinë e vet.
Lexoni një ClientHello në vend që të supozoni
Versioni në ServerHello nuk ju tregon çfarë dërgoi klienti. Shikoni fluturimin e parë drejtpërdrejt, nga një pozicion që përfaqëson vëzhguesin që ju intereson.
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
Komanda e parë kryen një handshake dhe shfaq parametrat e negociuar, duke përfshirë versionin e protokollit dhe emrin që kërkuat. E dyta kap paketat e para të një lidhjeje reale, dhe e treta nxjerr fushën SNI nga ai kapje. Nëse fusha është e mbushur, vëzhguesi që imituat mund ta lexojë atë.
Kapni veçmas në anën e klientit dhe në rrugë kur të dyja nuk përputhen, sepse një kapje lokale mund të tregojë një emër që një middlebox e rishkruan ose e hedh më vonë. Kapni edhe nga një host që nuk e përfundon vetë TLS, pasi një proxy që përfundon e sheh tekstin e hapur për nga dizajni dhe nuk provon asgjë për atë që sheh rrjeti.
Trajtojeni një shtesë ECH si pretendim, jo si provë
Të shohësh një shtesë ECH në një ClientHello nuk do të thotë që lidhja përdori ECH. Klientët dërgojnë GREASE ECH kur nuk kanë një konfigurim të përdorshëm, pikërisht që handshake-ut e tyre të duken uniformë. Shtesa është e pranishme, hello i brendshëm është një karrem, dhe emri aktual është ende i lexueshëm.
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'
Komanda e parë tregon nëse origjina publikon një regjistrim burimi HTTPS me një parametër konfigurimi ECH, dhe kështu klientët mësojnë çelësin. E dyta kërkon informacion për gjendjen e handshake-ut, edhe pse mesazhi i suksesit i një klienti është prova më e fortë. Pranimi është ajo që ka rëndësi: një server që nuk e ka çelësin përkatës nuk mund të dekriptojë hello-n e brendshëm, dhe lidhja kthehet prapa.
Kontrolloni edhe klientin, pasi mbështetja e shfletuesve dhe konfigurimi ndryshojnë sipas versionit dhe platformës. Një politikë e ndërtuar mbi „shfletuesit modernë përdorin ECH“ është një hamendësim për një flotë, jo një fakt për flotën tuaj. Inventarizoni versionet që lidhen në të vërtetë, pastaj provoni nga një nga secili. E njëjta faqe që funksionon nga një shfletues desktop aktual mund të mos fshehë asgjë nga një klient më i vjetër në të njëjtin rrjet.
Shkruani shtrirjen e vëzhguesit në politikë
Përcaktoni ku qëndron vëzhguesi dhe çfarë është e dukshme në atë pikë përpara se të vendosni se ku mund të mbështetet një kontroll. Lidhja e një shfletuesi me një faqe web, një transport i jashtëm VPN dhe një proxy që përfundon TLS zbulojnë secili një grup tjetër faktesh, dhe një rregull i shkruar për një pozicion rrallë transferohet pastër në një tjetër.
Nëse një kontroll varet nga leximi i SNI-së, provoni si sillen klientët e vendosur kur ECH është i disponueshëm dhe kur nuk është. Pastaj regjistroni pasojën e përputhshmërisë, sepse një filtër që ndalon në heshtje së përputhuri është më keq se një që nuk është vendosur kurrë.
Së fundi, mbani pasigurinë në regjistër. Zëvendësimi i një pretendimi të vjetër universal me një më të ri lë të njëjtën boshllëk nën një emër tjetër protokolli, dhe shqyrtuesi i ardhshëm do t'i besojë po aq fort.