TLS 1.3 masih menghantar nama pelayan dalam teks biasa
TLS 1.3 menyulitkan handshake tetapi bukan SNI. Baca ClientHello, periksa penerimaan ECH yang sebenar dan catat apa yang masih boleh dilihat pemerhati.
Menaik taraf pendengar kepada TLS 1.3 mengubah apa yang boleh dibaca pemerhati, tetapi tidak sebanyak yang dicadangkan nombor versi. ClientHello masih bergerak sebelum sebarang penyulitan dirundingkan, dan dalam sambungan biasa nama pelayan yang diminta berada di situ dalam teks biasa. Encrypted Client Hello ialah mekanisme yang menyembunyikannya, dan ia penggunaan berasingan dengan prasyaratnya sendiri. Jalankan empat langkah ini sebelum menulis dasar yang menganggap salah satu tingkah laku.
Apa yang sebenarnya didedahkan handshake
TLS 1.3 menyulitkan sijil pelayan dan sebahagian besar handshake yang menyusul selepas ServerHello. Semua yang dihantar klien dahulu berada di luar perlindungan itu, kerana kuncinya belum wujud. Petunjuk nama pelayan ialah bahagian penerbangan pertama itu, sebab itu pemerhati pasif masih boleh membacanya tanpa memecahkan apa-apa.
Spesifikasi ECH, RFC 9849, mengubahnya dengan menyulitkan ClientHello dalaman untuk pelayan yang bekerjasama. Handshake luaran kekal dan membawa nama awam yang boleh dilihat rangkaian, jadi penggunaan masih memerlukan identiti luaran yang masuk akal kepada perantara. Nama luaran itulah bahagian yang terlepas apabila orang menjangkakan sambungan menjadi tanpa nama. Ia nama penutup, bukan nama tersembunyi, dan ia mesti diselesaikan serta disahkan seperti mana-mana yang lain.
Tiada satu pun daripada ini menyembunyikan laluan penghantaran. Alamat sumber dan destinasi, port, saiz paket dan masa kekal boleh diperhatikan, dan itu selalunya lebih banyak bercakap tentang siapa yang bercakap daripada namanya. Penyelesaian nama dan hubungan peringkat aplikasi ialah lapisan lain lagi, masing-masing dengan keterlihatannya sendiri.
Baca ClientHello daripada menganggap
Versi dalam ServerHello tidak memberitahu anda apa yang dihantar klien. Lihat penerbangan pertama secara langsung, dari kedudukan yang mewakili pemerhati yang anda ambil berat.
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
Perintah pertama melakukan handshake dan memaparkan parameter yang dirundingkan, termasuk versi protokol dan nama yang anda minta. Perintah kedua menangkap paket pertama sambungan sebenar, dan yang ketiga mengekstrak medan SNI daripada tangkapan itu. Jika medan itu diisi, pemerhati yang anda tiru boleh membacanya.
Tangkap secara berasingan di sisi klien dan di laluan apabila kedua-duanya tidak sependapat, kerana tangkapan tempatan boleh menunjukkan nama yang kemudiannya ditulis semula atau dibuang oleh middlebox. Tangkap juga daripada hos yang tidak menamatkan TLS sendiri, kerana proksi yang menamatkan melihat teks biasa secara reka bentuk dan tidak membuktikan apa-apa tentang apa yang dilihat rangkaian.
Layan sambungan ECH sebagai dakwaan, bukan bukti
Melihat sambungan ECH dalam ClientHello tidak bermakna sambungan itu menggunakan ECH. Klien menghantar GREASE ECH apabila tiada konfigurasi yang boleh digunakan, justru supaya handshake mereka kelihatan seragam. Sambungan itu ada, hello dalaman ialah umpan, dan nama sebenar masih boleh dibaca.
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'
Perintah pertama menunjukkan sama ada asalan menerbitkan rekod sumber HTTPS dengan parameter konfigurasi ECH, dan begitulah klien mempelajari kuncinya. Perintah kedua mencari maklumat status handshake, walaupun mesej kejayaan klien ialah bukti yang lebih kukuh. Penerimaan ialah perkara yang penting: pelayan yang tidak memegang kunci yang sepadan tidak boleh menyahsulit hello dalaman, dan sambungan berundur.
Periksa klien juga, kerana sokongan pelayar dan konfigurasi berbeza mengikut versi dan platform. Dasar yang dibina atas „pelayar moden menggunakan ECH“ ialah tekaan tentang armada, bukan fakta tentang armada anda. Inventori versi yang benar-benar bersambung, kemudian uji satu daripada setiap satu. Halaman yang sama yang berfungsi daripada pelayar desktop semasa mungkin tidak menyembunyikan apa-apa daripada klien lama pada rangkaian yang sama.
Tulis skop pemerhati ke dalam dasar
Nyatakan di mana pemerhati berada dan apa yang kelihatan pada titik itu sebelum memutuskan apa yang boleh diharap oleh kawalan. Sambungan pelayar ke tapak web, pengangkutan VPN luaran dan proksi yang menamatkan TLS masing-masing mendedahkan set fakta yang berbeza, dan peraturan yang ditulis untuk satu kedudukan jarang berpindah bersih ke kedudukan lain.
Jika kawalan bergantung pada pembacaan SNI, uji bagaimana klien yang digunakan berkelakuan apabila ECH tersedia dan apabila tidak. Kemudian catat akibat keserasian, kerana penapis yang senyap berhenti sepadan lebih buruk daripada yang tidak pernah digunakan.
Akhir sekali, kekalkan ketidakpastian dalam rekod. Menggantikan dakwaan sejagat lama dengan yang lebih baharu meninggalkan jurang yang sama di bawah nama protokol lain, dan penyemak seterusnya akan mempercayainya sama teguh.