Kerentanan yang memungkinkan koneksi TCP yang dibuat melalui terowongan VPN dibajak

Diterbitkan teknik serangan (CVE-2019-14899) yang memungkinkan paket dipalsukan, dimodifikasi, atau diganti dalam koneksi TCP yang diteruskan melalui terowongan VPN. Masalahnya mempengaruhi Linux, FreeBSD, OpenBSD, Android, macOS, iOS dan sistem mirip Unix lainnya. Linux mendukung mekanisme rp_filter (pemfilteran jalur terbalik) untuk IPv4, mengaktifkannya dalam mode β€œKetat” akan menetralisir masalah ini.

Metode ini mengizinkan substitusi paket pada tingkat koneksi TCP yang lewat di dalam terowongan terenkripsi, tetapi tidak mengizinkan penggabungan ke dalam koneksi yang menggunakan lapisan enkripsi tambahan (misalnya, TLS, HTTPS, SSH). Algoritme enkripsi yang digunakan dalam VPN tidak menjadi masalah, karena paket palsu berasal dari antarmuka eksternal dan diproses oleh kernel sebagai paket dari antarmuka VPN. Sasaran serangan yang paling mungkin adalah mengganggu koneksi HTTP yang tidak terenkripsi, namun tidak dikecualikan dan menggunakan serangan untuk memanipulasi respons DNS.

Spoofing paket yang berhasil telah dibuktikan untuk terowongan yang dibuat menggunakan OpenVPN, WireGuard dan IKEv2/IPSec. Tor tidak rentan terhadap masalah ini, karena ia menggunakan SOCKS untuk meneruskan lalu lintas dan terikat pada antarmuka loopback. Untuk IPv4, serangan mungkin terjadi jika rp_filter diatur ke mode β€œLoose” (sysctl net.ipv4.conf.all.rp_filter = 2). Awalnya, sebagian besar sistem menggunakan mode β€œKetat”, tetapi dimulai dari systemd 240, dirilis Desember lalu, mode operasi default diubah menjadi "Loose" dan perubahan ini tercermin dalam pengaturan default banyak distribusi Linux.

mekanisme rp_filter terapan untuk verifikasi tambahan jalur paket guna mencegah spoofing alamat sumber. Jika disetel ke 0, tidak ada pemeriksaan alamat sumber yang dilakukan dan paket apa pun dapat diteruskan antar antarmuka jaringan tanpa batasan. Mode 1 "Ketat" mencakup pemeriksaan setiap paket yang datang dari luar untuk kesesuaian dengan tabel perutean, dan jika antarmuka jaringan yang melaluinya paket diterima tidak dikaitkan dengan rute pengiriman respons optimal, maka paket tersebut akan dibuang. Mode 2 "Loose" melonggarkan pemeriksaan untuk memungkinkan penyeimbang beban atau perutean asimetris berfungsi saat
Rute respons mungkin melewati antarmuka jaringan selain antarmuka yang dilalui paket masuk.

Dalam mode Longgar, paket masuk diperiksa berdasarkan tabel routing, namun dianggap valid jika alamat sumber dapat dijangkau melalui antarmuka jaringan apa pun yang tersedia. Serangan yang diusulkan didasarkan pada kenyataan bahwa penyerang dapat mengirim paket dengan alamat sumber palsu yang sesuai dengan antarmuka VPN, dan terlepas dari kenyataan bahwa paket ini akan memasuki sistem melalui antarmuka jaringan eksternal dan bukan melalui VPN, di rp_filter Mode β€œLoose” paket seperti itu tidak akan dibuang.

Untuk melakukan serangan, penyerang harus mengontrol gateway yang digunakan pengguna untuk mengakses jaringan (misalnya, melalui organisasi MITM, saat korban terhubung ke titik akses nirkabel yang dikendalikan penyerang, atau melalui peretasan router). Dengan mengendalikan gateway yang dilalui pengguna untuk terhubung ke jaringan, penyerang dapat mengirimkan paket palsu yang akan dirasakan dalam konteks antarmuka jaringan VPN, namun responsnya akan dialihkan melalui terowongan.

Dengan menghasilkan aliran paket fiktif yang menggantikan alamat IP antarmuka VPN, upaya dilakukan untuk mempengaruhi koneksi yang dibuat oleh klien, namun pengaruh paket ini hanya dapat diamati melalui analisis pasif dari arus lalu lintas terenkripsi yang terkait. dengan pengoperasian terowongan. Untuk melakukan serangan, Anda perlu mengetahui alamat IP antarmuka jaringan terowongan yang ditetapkan oleh server VPN, dan juga menentukan bahwa koneksi ke host tertentu sedang aktif melalui terowongan.

Untuk menentukan IP antarmuka jaringan virtual VPN, paket SYN-ACK dikirim ke sistem korban, secara berurutan menghitung seluruh rentang alamat virtual (pertama-tama, alamat yang digunakan dalam VPN dihitung secara default, misalnya OpenVPN menggunakan subnet 10.8.0.0/24). Keberadaan suatu alamat dapat dinilai berdasarkan diterimanya respon dengan flag RST.

Dengan cara yang sama, keberadaan koneksi ke situs tertentu dan nomor port di sisi klien ditentukan - dengan mengurutkan nomor port, paket SYN dikirim ke pengguna, sebagai alamat sumber, di mana situs tersebut IP diganti, dan alamat tujuan adalah IP virtual VPN. Port server dapat diprediksi (80 untuk HTTP), dan nomor port di sisi klien dapat dihitung dengan brute force, menganalisis perubahan intensitas respons ACK untuk nomor yang berbeda dalam kombinasi dengan tidak adanya paket dengan RST bendera.

Pada tahap ini, penyerang mengetahui keempat elemen koneksi (alamat/port IP sumber dan alamat/port IP tujuan), tetapi untuk menghasilkan paket fiktif yang akan diterima sistem korban, penyerang harus menentukan urutan TCP dan nomor pengakuan (seq dan ack) - koneksi. Untuk menentukan parameter ini, penyerang terus menerus mengirimkan paket RST palsu, mencoba nomor urut yang berbeda, hingga ia mendeteksi paket respons ACK, yang kedatangannya menunjukkan bahwa nomor tersebut termasuk dalam jendela TCP.

Selanjutnya, penyerang mengklarifikasi kebenaran definisi dengan mengirimkan paket dengan nomor yang sama dan mengamati kedatangan respons ACK, setelah itu ia memilih nomor pasti dari urutan saat ini. Tugas ini diperumit oleh kenyataan bahwa respons dikirim dalam terowongan terenkripsi dan keberadaannya dalam arus lalu lintas yang disadap hanya dapat dianalisis menggunakan metode tidak langsung. Apakah klien mengirimkan paket ACK yang dialamatkan ke server VPN ditentukan berdasarkan ukuran dan latensi respons terenkripsi, yang berkorelasi dengan pengiriman paket palsu. Misalnya, untuk OpenVPN, ukuran paket terenkripsi sebesar 79 memungkinkan Anda menilai secara akurat apakah ada ACK di dalamnya.

Hingga perlindungan serangan ditambahkan ke kernel sistem operasi sebagai metode sementara untuk memblokir masalah direkomendasikan menggunakan filter paket dalam rantai "preroute", memblokir perjalanan paket di mana alamat IP virtual terowongan ditentukan sebagai alamat tujuan.

iptables -t mentah -I PREROUTING! -i wg0 -d 10.182.12.8 -m tipe tambahan ! --src-tipe LOKAL -j DROP

atau untuk nftable

nft tambahkan ip tabel mentah
nft tambahkan rantai ip prerouting mentah '{ ketik filter hook prerouting prioritas 0; }'
nft tambahkan aturan ip mentah prerouting 'iifname != "wg0" ip daddr 10.182.12.8 fib saddr type != local drop'

Untuk melindungi diri Anda saat menggunakan terowongan dengan alamat IPv4, cukup setel rp_filter ke mode β€œStrict” (β€œsysctl net.ipv4.conf.all.rp_filter = 1”). Di sisi VPN, metode deteksi nomor urut dapat diblokir dengan menambahkan padding tambahan ke paket terenkripsi, sehingga membuat semua paket berukuran sama.

Sumber: opennet.ru

Tambah komentar