VPN tunnellari orqali amalga oshirilgan TCP ulanishlarini o'g'irlash imkonini beruvchi zaiflik

Chop etilgan VPN tunnellari orqali uzatiladigan TCP ulanishlarida paketlarni soxtalashtirish, o'zgartirish yoki almashtirish imkonini beruvchi hujum texnikasi (CVE-2019-14899). Muammo Linux, FreeBSD, OpenBSD, Android, macOS, iOS va boshqa Unix-ga o'xshash tizimlarga ta'sir qiladi. Linux IPv4 uchun rp_filter (teskari yo'lni filtrlash) mexanizmini qo'llab-quvvatlaydi, uni "Qat'iy" rejimida yoqish bu muammoni neytrallashtiradi.

Usul shifrlangan tunnel ichidan o'tadigan TCP ulanishlari darajasida paketlarni almashtirishga imkon beradi, lekin qo'shimcha shifrlash qatlamlaridan (masalan, TLS, HTTPS, SSH) foydalanadigan ulanishlarga ulanishga ruxsat bermaydi. VPN-da ishlatiladigan shifrlash algoritmlari muhim emas, chunki soxta paketlar tashqi interfeysdan keladi va yadro tomonidan VPN interfeysidan paketlar sifatida qayta ishlanadi. Hujumning eng ehtimolli maqsadi shifrlanmagan HTTP ulanishlariga xalaqit berishdir, lekin istisno qilinmaydi va DNS javoblarini manipulyatsiya qilish uchun hujumdan foydalanish.

OpenVPN, WireGuard va IKEv2/IPSec yordamida yaratilgan tunnellar uchun paketlarni aldash muvaffaqiyatli namoyish etildi. Tor bu muammoga sezgir emas, chunki u trafikni yo‘naltirish uchun SOCKS dan foydalanadi va orqaga qaytish interfeysiga bog‘langan. IPv4 uchun rp_filter "Bo'sh" rejimiga o'rnatilgan bo'lsa, hujum qilish mumkin (sysctl net.ipv4.conf.all.rp_filter = 2). Dastlab, aksariyat tizimlar "Qat'iy" rejimidan foydalangan, ammo undan boshlab 240, o'tgan dekabr oyida chiqarilgan, standart ish rejimi "Bo'sh" ga o'zgartirildi va bu o'zgarish ko'plab Linux tarqatishlarining standart sozlamalarida aks etdi.

rp_filtr mexanizmi qo'llaniladi manba manzilini aldashning oldini olish uchun paket yo'llarini qo'shimcha tekshirish uchun. 0 ga o'rnatilganda, manba manzili tekshirilmaydi va har qanday paket tarmoq interfeyslari o'rtasida cheklovlarsiz uzatilishi mumkin. 1-rejim "Qat'iy" tashqaridan kelgan har bir paketni marshrutlash jadvaliga muvofiqligini tekshirishni o'z ichiga oladi va agar paket qabul qilingan tarmoq interfeysi javobni etkazib berishning optimal marshruti bilan bog'liq bo'lmasa, paket bekor qilinadi. 2-rejim "Bo'sh" yuk balanslagichlari yoki assimetrik marshrutlashning ishlashiga ruxsat berish uchun chekni yumshatadi.
Javob yo'nalishi kiruvchi paket kelganidan boshqa tarmoq interfeysi orqali o'tishi mumkin.

Bo'sh rejimda kiruvchi paket marshrutlash jadvaliga nisbatan tekshiriladi, lekin manba manziliga istalgan tarmoq interfeysi orqali kirish mumkin bo'lsa, haqiqiy hisoblanadi. Taklif etilayotgan hujum tajovuzkor VPN interfeysiga mos keladigan soxta manba manzilli paketni yuborishi mumkinligiga asoslanadi va bu paket tizimga VPN orqali emas, tashqi tarmoq interfeysi orqali kirishiga qaramay. rp_filter "Bo'sh" rejimida bunday paket tashlanmaydi.

Hujumni amalga oshirish uchun tajovuzkor foydalanuvchi tarmoqqa kiradigan shlyuzni boshqarishi kerak (masalan, MITM tashkiloti orqali, jabrlanuvchi tajovuzkor tomonidan boshqariladigan simsiz kirish nuqtasiga ulanganda yoki orqali. routerni buzish). Foydalanuvchi tarmoqqa ulangan shlyuzni boshqarish orqali tajovuzkor VPN tarmoq interfeysi kontekstida qabul qilinadigan soxta paketlarni yuborishi mumkin, ammo javoblar tunnel orqali yo'naltiriladi.

VPN interfeysining IP manzili almashtirilgan xayoliy paketlar oqimini yaratish orqali mijoz tomonidan o'rnatilgan ulanishga ta'sir ko'rsatishga urinishlar amalga oshiriladi, ammo bu paketlarning ta'sirini faqat shifrlangan trafik oqimini passiv tahlil qilish orqali kuzatish mumkin. tunnelning ishlashi bilan. Hujumni amalga oshirish uchun siz VPN serveri tomonidan tayinlangan tunnel tarmoq interfeysining IP-manzilini bilib olishingiz, shuningdek, tunnel orqali ma'lum bir xostga ulanish hozirda faol ekanligini aniqlashingiz kerak.

VPN virtual tarmoq interfeysining IP-manzilini aniqlash uchun SYN-ACK paketlari jabrlanuvchi tizimiga yuboriladi, ular ketma-ket virtual manzillarning butun diapazonini sanab o'tadi (birinchi navbatda, VPN-da ishlatiladigan manzillar sukut bo'yicha sanab o'tilgan, masalan, OpenVPN. 10.8.0.0/24 pastki tarmoqdan foydalanadi). Manzilning mavjudligi RST bayrog'i bilan javob olish asosida baholanishi mumkin.

Xuddi shunday, ma'lum bir saytga ulanish mavjudligi va mijoz tomonidagi port raqami aniqlanadi - port raqamlarini saralash orqali foydalanuvchiga SYN paketi manba manzili sifatida yuboriladi, unda sayt joylashgan. IP almashtiriladi va maqsad manzil virtual IP VPN hisoblanadi. Server portini bashorat qilish mumkin (HTTP uchun 80) va mijoz tomonidagi port raqamini RST bilan paketning yo'qligi bilan birgalikda ACK javoblari intensivligining o'zgarishini turli raqamlar uchun tahlil qilib, qo'pol kuch bilan hisoblash mumkin. bayroq.

Ushbu bosqichda tajovuzkor ulanishning barcha to'rtta elementini (manba IP manzillari/port va maqsad IP-manzil/port) biladi, ammo qurbonlar tizimi qabul qiladigan xayoliy paketni yaratish uchun tajovuzkor TCP ketma-ketligini aniqlashi kerak va tasdiqlash raqamlari (seq va ack) - ulanishlar. Ushbu parametrlarni aniqlash uchun tajovuzkor ACK javob paketini aniqlamaguncha, turli xil tartib raqamlarini sinab ko'rgan holda, soxta RST paketlarini doimiy ravishda yuboradi, uning kelishi raqam TCP oynasiga to'g'ri kelishini ko'rsatadi.

Keyinchalik, tajovuzkor bir xil sonli paketlarni yuborish va ACK javoblarining kelishini kuzatish orqali ta'rifning to'g'riligini aniqlaydi, shundan so'ng u joriy ketma-ketlikning aniq sonini tanlaydi. Javoblar shifrlangan tunnel ichida yuborilishi va ularning tutilgan trafik oqimida mavjudligini faqat bilvosita usullar yordamida tahlil qilish mumkinligi bilan vazifa murakkablashadi. Mijoz VPN serveriga ACK paketini yuboradimi yoki yo'qmi, soxta paketlarni yuborish bilan bog'liq bo'lgan shifrlangan javoblarning o'lchami va kechikishi asosida aniqlanadi. Misol uchun, OpenVPN uchun shifrlangan paket hajmi 79, ichida ACK borligini aniq baholash imkonini beradi.

Muammoni blokirovka qilishning vaqtinchalik usuli sifatida operatsion tizim yadrosiga hujumdan himoyalanish qo'shilmaguncha tavsiya etiladi "preroute" zanjiridagi paketli filtrdan foydalanib, tunnelning virtual IP manzili maqsad manzili sifatida ko'rsatilgan paketlarning o'tishini bloklang.

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

yoki nftables uchun

nft jadval ip raw qo'shing
nft add chain ip raw 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'

IPv4 manzillari bilan tunnellardan foydalanganda o'zingizni himoya qilish uchun rp_filterni "Qat'iy" rejimiga o'rnating ("sysctl net.ipv4.conf.all.rp_filter = 1"). VPN tomonida ketma-ketlik raqamini aniqlash usuli shifrlangan paketlarga qo'shimcha plomba qo'shish orqali bloklanishi mumkin, bu esa barcha paketlarni bir xil o'lchamda qiladi.

Manba: opennet.ru

a Izoh qo'shish