Meningkatkan listener ke TLS 1.3 mengubah apa yang bisa dibaca pengamat, tetapi tidak sebanyak yang disiratkan nomor versi. ClientHello tetap melintas sebelum enkripsi dinegosiasikan, dan pada koneksi biasa nama server yang diminta ada di sana dalam teks polos. Encrypted Client Hello adalah mekanisme yang menyembunyikannya, dan itu penerapan terpisah dengan prasyaratnya sendiri. Jalankan empat langkah ini sebelum menulis kebijakan yang mengasumsikan salah satu perilaku.

Apa yang sebenarnya diekspos handshake

TLS 1.3 mengenkripsi sertifikat server dan sebagian besar handshake yang menyusul setelah ServerHello. Semua yang dikirim klien lebih dulu berada di luar perlindungan itu, karena kuncinya belum ada. Indikasi nama server adalah bagian dari penerbangan pertama itu, sebab itulah pengamat pasif masih bisa membacanya tanpa merusak apa pun.

Spesifikasi ECH, RFC 9849, mengubahnya dengan mengenkripsi ClientHello dalam untuk server yang bekerja sama. Handshake luar tetap ada dan membawa nama publik yang bisa dilihat jaringan, jadi penerapan masih memerlukan identitas luar yang masuk akal bagi perantara. Nama luar itulah bagian yang terlewat ketika orang mengharapkan koneksi menjadi anonim. Itu nama penutup, bukan nama tersembunyi, dan harus diselesaikan serta diautentikasi seperti nama lain.

Tidak satu pun dari ini menyembunyikan jalur pengiriman. Alamat sumber dan tujuan, port, ukuran paket, dan waktu tetap dapat diamati, dan itu sering lebih banyak bicara tentang siapa yang berbicara daripada namanya. Resolusi nama dan hubungan tingkat aplikasi adalah lapisan lain lagi, masing-masing dengan visibilitasnya sendiri.

Baca ClientHello daripada berasumsi

Versi di ServerHello tidak memberi tahu Anda apa yang dikirim klien. Lihat penerbangan pertama secara langsung, dari posisi yang mewakili pengamat yang Anda pedulikan.

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 menampilkan parameter yang dinegosiasikan, termasuk versi protokol dan nama yang Anda minta. Perintah kedua menangkap paket pertama koneksi nyata, dan yang ketiga mengekstrak bidang SNI dari tangkapan itu. Jika bidang itu terisi, pengamat yang Anda tiru bisa membacanya.

Tangkap secara terpisah di sisi klien dan di jalur ketika keduanya tidak sepakat, karena tangkapan lokal bisa menunjukkan nama yang kemudian ditulis ulang atau dibuang oleh middlebox. Tangkap juga dari host yang tidak mengakhiri TLS sendiri, karena proxy yang mengakhiri melihat teks polos secara desain dan tidak membuktikan apa pun tentang apa yang dilihat jaringan.

Perlakukan ekstensi ECH sebagai klaim, bukan bukti

Melihat ekstensi ECH dalam ClientHello tidak berarti koneksi memakai ECH. Klien mengirim GREASE ECH ketika tidak punya konfigurasi yang bisa dipakai, justru agar handshake mereka tampak seragam. Ekstensinya ada, hello dalam adalah umpan, dan nama sebenarnya masih terbaca.

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 apakah asal menerbitkan rekaman sumber daya HTTPS dengan parameter konfigurasi ECH, yang menjadi cara klien mempelajari kuncinya. Perintah kedua mencari informasi status handshake, meskipun pesan sukses klien adalah bukti yang lebih kuat. Penerimaan adalah yang penting: server yang tidak memegang kunci yang cocok tidak bisa mendekripsi hello dalam, dan koneksi mundur.

Periksa juga klien, karena dukungan peramban dan konfigurasi berbeda menurut versi dan platform. Kebijakan yang dibangun di atas „peramban modern memakai ECH“ adalah dugaan tentang armada, bukan fakta tentang armada Anda. Inventarisasi versi yang benar-benar terhubung, lalu uji satu dari masing-masing. Halaman yang sama yang berfungsi dari peramban desktop terkini mungkin tidak menyembunyikan apa pun dari klien lama di jaringan yang sama.

Tulis cakupan pengamat ke dalam kebijakan

Nyatakan di mana pengamat berada dan apa yang terlihat di titik itu sebelum memutuskan pada apa sebuah kontrol bisa bersandar. Koneksi peramban ke situs web, transport VPN luar, dan proxy yang mengakhiri TLS masing-masing menyingkap kumpulan fakta berbeda, dan aturan yang ditulis untuk satu posisi jarang berpindah bersih ke posisi lain.

Jika kontrol bergantung pada pembacaan SNI, uji bagaimana klien yang diterapkan berperilaku ketika ECH tersedia dan ketika tidak. Lalu catat konsekuensi kompatibilitasnya, karena filter yang diam-diam berhenti cocok lebih buruk daripada yang tidak pernah diterapkan.

Terakhir, pertahankan ketidakpastian dalam catatan. Mengganti klaim universal lama dengan yang lebih baru meninggalkan celah yang sama di bawah nama protokol lain, dan peninjau berikutnya akan memercayainya sama teguh.

Artikel terkait