Kerentanan yang membolehkan sambungan TCP yang dibuat melalui terowong VPN dirampas

Diterbitkan teknik serangan (CVE-2019-14899) yang membenarkan paket untuk dipalsukan, diubah suai atau digantikan dalam sambungan TCP yang dimajukan melalui terowong VPN. Masalahnya menjejaskan Linux, FreeBSD, OpenBSD, Android, macOS, iOS dan sistem seperti Unix yang lain. Linux menyokong mekanisme rp_filter (penapisan laluan terbalik) untuk IPv4, menghidupkannya dalam mod "Ketat" meneutralkan masalah ini.

Kaedah ini membenarkan penggantian paket pada tahap sambungan TCP yang melalui dalam terowong yang disulitkan, tetapi tidak membenarkan pengikatan ke dalam sambungan yang menggunakan lapisan penyulitan tambahan (contohnya, TLS, HTTPS, SSH). Algoritma penyulitan yang digunakan dalam VPN tidak penting, kerana paket palsu berasal dari antara muka luaran dan diproses oleh kernel sebagai paket daripada antara muka VPN. Sasaran serangan yang paling mungkin adalah untuk mengganggu sambungan HTTP yang tidak disulitkan, tetapi tidak dikecualikan dan menggunakan serangan untuk memanipulasi respons DNS.

Penipuan paket yang berjaya telah ditunjukkan untuk terowong yang dibuat menggunakan OpenVPN, WireGuard dan IKEv2/IPSec. Tor tidak terdedah kepada masalah ini, kerana ia menggunakan SOCKS untuk memajukan trafik dan terikat pada antara muka gelung balik. Untuk IPv4, serangan boleh dilakukan jika rp_filter ditetapkan kepada mod "Loose" (sysctl net.ipv4.conf.all.rp_filter = 2). Pada mulanya, kebanyakan sistem menggunakan mod "Ketat", tetapi bermula dari sistem 240, dikeluarkan pada Disember lalu, mod pengendalian lalai telah ditukar kepada "Loose" dan perubahan ini ditunjukkan dalam tetapan lalai banyak pengedaran Linux.

mekanisme rp_filter terpakai untuk pengesahan tambahan laluan paket untuk mengelakkan penipuan alamat sumber. Apabila ditetapkan kepada 0, tiada semakan alamat sumber dilakukan dan mana-mana paket boleh dimajukan antara antara muka rangkaian tanpa sekatan. Mod 1 "Ketat" termasuk menyemak setiap paket yang datang dari luar untuk pematuhan dengan jadual penghalaan, dan jika antara muka rangkaian yang melaluinya paket diterima tidak dikaitkan dengan laluan penghantaran respons yang optimum, maka paket itu dibuang. Mod 2 "Loose" melonggarkan semakan untuk membenarkan pengimbang beban atau penghalaan asimetri berfungsi apabila
Laluan tindak balas mungkin melalui antara muka rangkaian selain daripada yang melaluinya paket masuk tiba.

Dalam mod Longgar, paket masuk disemak pada jadual penghalaan, tetapi dianggap sah jika alamat sumber boleh dicapai melalui mana-mana antara muka rangkaian yang tersedia. Serangan yang dicadangkan adalah berdasarkan fakta bahawa penyerang boleh menghantar paket dengan alamat sumber palsu yang sepadan dengan antara muka VPN, dan walaupun pada hakikatnya paket ini akan memasuki sistem melalui antara muka rangkaian luaran dan bukan melalui VPN, dalam Mod rp_filter "Loose" paket sedemikian tidak akan dibuang.

Untuk melakukan serangan, penyerang mesti mengawal pintu masuk yang melaluinya pengguna mengakses rangkaian (contohnya, melalui organisasi MITM, apabila mangsa menyambung ke pusat akses wayarles dikawal penyerang, atau melalui penggodaman penghala). Dengan mengawal get laluan di mana pengguna disambungkan ke rangkaian, penyerang boleh menghantar paket palsu yang akan dilihat dalam konteks antara muka rangkaian VPN, tetapi respons akan dihalakan melalui terowong.

Dengan menjana aliran paket rekaan di mana alamat IP antara muka VPN digantikan, percubaan dibuat untuk mempengaruhi sambungan yang diwujudkan oleh pelanggan, tetapi pengaruh paket ini hanya boleh diperhatikan melalui analisis pasif aliran trafik yang disulitkan yang berkaitan. dengan operasi terowong. Untuk melakukan serangan, anda perlu mengetahui alamat IP antara muka rangkaian terowong yang diberikan oleh pelayan VPN, dan juga menentukan bahawa sambungan kepada hos tertentu sedang aktif melalui terowong.

Untuk menentukan IP antara muka rangkaian maya VPN, paket SYN-ACK dihantar ke sistem mangsa, menyenaraikan keseluruhan julat alamat maya secara berurutan (pertama sekali, alamat yang digunakan dalam VPN dikira secara lalai, contohnya, OpenVPN menggunakan subnet 10.8.0.0/24). Kewujudan alamat boleh dinilai berdasarkan penerimaan respons dengan bendera RST.

Dengan cara yang sama, kehadiran sambungan ke tapak tertentu dan nombor port pada bahagian klien ditentukan - dengan mengisih melalui nombor port, paket SYN dihantar kepada pengguna, sebagai alamat sumber, di mana tapak IP diganti, dan alamat destinasi ialah VPN IP maya. Port pelayan boleh diramalkan (80 untuk HTTP), dan nombor port pada bahagian klien boleh dikira dengan kekerasan, menganalisis untuk nombor yang berbeza perubahan dalam keamatan tindak balas ACK dalam kombinasi dengan ketiadaan paket dengan RST bendera.

Pada peringkat ini, penyerang mengetahui keempat-empat elemen sambungan (alamat IP sumber/port dan alamat IP destinasi/port), tetapi untuk menjana paket rekaan yang akan diterima oleh sistem mangsa, penyerang mesti menentukan urutan TCP dan nombor pengakuan (seq dan ack) - sambungan. Untuk menentukan parameter ini, penyerang secara berterusan menghantar paket RST palsu, mencuba nombor urutan yang berbeza, sehingga dia mengesan paket tindak balas ACK, yang ketibaannya menunjukkan bahawa nombor itu berada dalam tetingkap TCP.

Seterusnya, penyerang menjelaskan ketepatan definisi dengan menghantar paket dengan nombor yang sama dan memerhatikan ketibaan respons ACK, selepas itu dia memilih nombor tepat urutan semasa. Tugas ini rumit oleh fakta bahawa respons dihantar di dalam terowong yang disulitkan dan kehadirannya dalam aliran trafik yang dipintas hanya boleh dianalisis menggunakan kaedah tidak langsung. Sama ada pelanggan menghantar paket ACK yang dialamatkan kepada pelayan VPN ditentukan berdasarkan saiz dan kependaman respons yang disulitkan, yang berkait dengan penghantaran paket palsu. Sebagai contoh, untuk OpenVPN, saiz paket yang disulitkan sebanyak 79 membolehkan anda menilai dengan tepat bahawa terdapat ACK di dalamnya.

Sehingga perlindungan serangan ditambahkan pada kernel sistem pengendalian sebagai kaedah sementara untuk menyekat masalah disyorkan menggunakan penapis paket dalam rantaian "prahala", sekat laluan paket di mana alamat IP maya terowong ditentukan sebagai alamat destinasi.

iptables -t mentah -I PREROUTING ! -i wg0 -d 10.182.12.8 -m addrtype ! --src-type LOCAL -j DROP

atau untuk nftables

nft tambah table ip mentah
nft tambah rantaian ip mentah prerouting '{ type filter hook prerouting priority 0; }'
nft add rule ip raw prerouting 'iifname != "wg0" ip daddr 10.182.12.8 fib saddr type != local drop'

Untuk melindungi diri anda apabila menggunakan terowong dengan alamat IPv4, hanya tetapkan rp_filter kepada mod β€œKetat” (β€œsysctl net.ipv4.conf.all.rp_filter = 1”). Di sisi VPN, kaedah pengesanan nombor jujukan boleh disekat dengan menambahkan padding tambahan pada paket yang disulitkan, menjadikan semua paket mempunyai saiz yang sama.

Sumber: opennet.ru

Tambah komen