Handshake yang berakhir dengan ralat terasa seperti serangan sehingga anda melihat mesejnya, dan kebanyakannya ia aritmetik: tiada cadangan bersama, sijil yang tamat tempoh, atau paket yang tidak pernah tiba. Serangan downgrade ialah sesuatu yang khusus: penyerang menolak kedua-dua hujung ke arah tingkah laku yang lebih lemah daripada yang mereka pilih, dan ia meninggalkan bukti yang berbeza. Melayan setiap kegagalan sebagai niat jahat menghantar anda mencari mangsa yang mungkin tidak wujud, manakala melayan downgrade sebenar sebagai pepijat konfigurasi membiarkan hasil yang lebih lemah kekal. Kedua-dua kesilapan berbeza kosnya, dan hanya satu yang murah untuk dibetulkan.

Apa yang sebenarnya diubah oleh serangan downgrade

Matlamatnya bukan memecahkan sifer dan bukan meneka kunci. Matlamatnya ialah mempengaruhi rundingan supaya kedua-dua pihak berhenti pada versi lebih lama atau algoritma lebih lemah yang mampu dikendalikan penyerang, atau membuat satu pihak percaya pihak lain hanya menyokong itu.

Yang berubah ialah persetujuan, bukan pengesahan. Jika penyerang boleh mengubah tawaran tanpa dikesan, pihak-pihak masih boleh menyelesaikan handshake dan masih mengesahkan satu sama lain, tetapi dengan parameter yang disukai penyerang. Itulah sebabnya soalan menariknya ialah sama ada rundingan itu sendiri dilindungi oleh perlindungan integriti.

Mengapa rundingan itu sendiri mesti disahkan

TLS 1.3 menjadikan perlindungan itu eksplisit. Klien yang menawarkan versi lebih baharu boleh mengesan pelayan yang berundur secara senyap, kerana nilai rawak pelayan membawa corak tetap apabila ia merundingkan 1.2 atau lebih rendah, dan klien wajib berhenti apabila melihatnya. Transkrip penuh juga dilindungi oleh mesej akhir, jadi perubahan di mana-mana dalam rundingan gagal kemudiannya dan bukan berlalu secara senyap.

Versi protokol lama mempunyai kisah yang lebih lemah, dan itulah sebabnya peraturan fallback penting. Titik akhir TLS 1.0 dalam konfigurasi yang sama bukan serangan downgrade; ia hasil yang dibenarkan yang anda pilih untuk benarkan. Perbezaannya ialah sama ada hasil yang lebih lemah datang daripada keputusan yang dilindungi atau daripada laluan tidak dilindungi yang boleh dipengaruhi perantara. Apabila dirumuskan begitu, kebanyakan insiden menjadi persoalan konfigurasi.

IKEv2 berkelakuan berbeza tetapi bersandar pada idea yang sama. Cadangan dibawa dalam pertukaran yang kemudian mengesahkan kedua-dua pihak, jadi kotak tengah yang menulis semula algoritma memecahkan pengesahan dan bukan mengarahkannya. Saluran kawalan OpenVPN melindungi rundingannya dengan TLS dan kemudian menggunakan saluran itu untuk bersetuju tentang sifer saluran data, itulah sebabnya baris log saluran kawalan yang menarik.

Keserasian yang dikonfigurasikan bukan serangan

Pentadbir boleh dengan sengaja membenarkan pilihan lama untuk menyokong klien yang didokumenkan, dan keputusan itu kelihatan dalam konfigurasi. Penyerang tidak boleh mencipta konfigurasi itu; mereka hanya boleh mengeksploitasi laluan yang membolehkan mereka mempengaruhi tawaran.

Pembaikan berbahaya ialah yang membuang bukti perbezaan. Mengaktifkan setiap pilihan legasi, mematikan pengesahan sijil atau menerima sebarang sifer supaya ralat hilang meluaskan apa yang akan dipersetujui titik akhir, dan membuang pemeriksaan yang sepatutnya melaporkan hasil yang lebih lemah.

Jika anda mesti menyimpan satu pilihan lama, namakan sebab dan klien dalam komen konfigurasi, kemudian hadkan pilihan itu kepada profil yang memerlukannya. Pengecualian keserasian yang terhad kepada satu pendengar boleh diaudit; yang digunakan secara global hanyalah lalai yang lebih lemah yang tiada siapa ingat pernah memilihnya.

Baca kegagalan sebelum menamakan punca

Simpan rentetan ralat yang tepat, versi klien dan pelayan serta masa sebelum sebarang perubahan. Kemudian kelaskan: adakah pihak-pihak tidak bersetuju tentang cadangan, laluan paket gagal, atau satu pihak menolak parameter yang pernah diterimanya?

Ketidakpadanan cadangan biasanya menamakan versi atau algoritma yang bermasalah dan gagal pada titik yang sama setiap kali. Masalah penghalaan atau MTU tersekat atau tamat masa, dan ia sering berbeza mengikut rangkaian. Sijil tamat tempoh menghasilkan ralat pengesahan dan bukan ralat rundingan.

Tiada satu pun daripadanya bukti penyerang. Menetapkan punca berniat jahat pada kegagalan pertama ialah kesilapannya, kerana ia menyembunyikan pepijat deterministik yang akan gagal lagi esok.

Sahkan apa yang sebenarnya dipilih

Selepas sebarang pembetulan, baca hasil yang dirundingkan dan bukan mempercayai bahawa sambungan telah naik. Sambungan yang berjaya kerana pengesahan dibuang ialah hasil yang anda cuba elakkan. Dua arahan berikut menunjukkan versi dan sifer yang dipilih untuk titik akhir dengan TLS di hadapan, serta baris saluran kawalan daripada log pelayan OpenVPN.

openssl s_client -connect 198.51.100.30:443 -servername vpn.example.net -brief </dev/null
grep -iE 'Control Channel|Data Channel' /var/log/openvpn.log | tail -5

Bandingkan hasilnya dengan konfigurasi yang anda maksudkan, bukan dengan apa yang kini bersambung. Jika versi yang dipilih lebih lama daripada minimum yang dibenarkan, profil atau senarai fallback ialah tempat untuk melihat, dan jawapannya ialah membetulkan senarai itu, bukan mengisytiharkan serangan dan membina semula segala-galanya.

Artikel berkaitan