VPN туннельдері арқылы жасалған TCP қосылымдарын ұрлауға мүмкіндік беретін осалдық

Жарияланды VPN туннельдері арқылы жіберілетін TCP қосылымдарында пакеттерді жалғандыққа, өзгертуге немесе ауыстыруға мүмкіндік беретін шабуыл әдісі (CVE-2019-14899). Мәселе Linux, FreeBSD, OpenBSD, Android, macOS, iOS және басқа Unix тәрізді жүйелерге әсер етеді. Linux IPv4 үшін rp_filter (кері жолды сүзу) механизмін қолдайды, оны «Қатаң» режимде қосу бұл мәселені бейтараптандырады.

Әдіс шифрланған туннель ішінде өтетін TCP қосылымдары деңгейінде пакетті ауыстыруға мүмкіндік береді, бірақ қосымша шифрлау қабаттарын (мысалы, TLS, HTTPS, SSH) пайдаланатын қосылымдарға қосылуға мүмкіндік бермейді. VPN-де қолданылатын шифрлау алгоритмдері маңызды емес, өйткені жалған пакеттер сыртқы интерфейстен келеді және ядро ​​арқылы VPN интерфейсінің пакеттері ретінде өңделеді. Шабуылдың ең ықтимал мақсаты шифрланбаған HTTP қосылымдарына кедергі жасау болып табылады, бірақ алынып тасталмайды және DNS жауаптарын басқару үшін шабуылды пайдалану.

OpenVPN, WireGuard және IKEv2/IPSec көмегімен жасалған туннельдер үшін сәтті пакеттік спуфинг көрсетілді. Tor трафикті бағыттау үшін SOCKS пайдаланады және кері байланыс интерфейсіне байланысты болғандықтан, мәселеге сезімтал емес. IPv4 үшін rp_filter «Бос» режиміне орнатылған болса, шабуыл мүмкін болады (sysctl net.ipv4.conf.all.rp_filter = 2). Бастапқыда көптеген жүйелер «қатаң» режимін пайдаланды, бірақ бастап жүйелік 240, өткен желтоқсанда шығарылған, әдепкі жұмыс режимі «Бос» күйге өзгертілді және бұл өзгеріс көптеген Linux дистрибутивтерінің әдепкі параметрлерінде көрініс тапты.

rp_сүзгі механизмі қолданылады бастапқы мекенжайды бұрмалауды болдырмау үшін пакет жолдарын қосымша тексеру үшін. 0 мәніне орнатылған кезде, бастапқы мекенжайды тексеру орындалмайды және кез келген пакетті желі интерфейстері арасында шектеусіз қайта жіберуге болады. 1 «Қатаң» режимі сырттан келетін әрбір пакетті маршруттау кестесіне сәйкестігін тексеруді қамтиды және пакетті алған желілік интерфейс оңтайлы жауап беру маршрутымен байланысты болмаса, пакет жойылады. 2-режим «Бос» жүктемені теңестірушілерге немесе асимметриялық бағыттауға рұқсат беру үшін тексеруді босатады.
Жауап жолы кіріс пакеті келгеннен басқа желілік интерфейс арқылы өтуі мүмкін.

Бос режимде кіріс пакеті маршруттау кестесімен салыстырылады, бірақ бастапқы мекенжай кез келген қолжетімді желі интерфейсі арқылы қол жеткізуге болатын болса жарамды болып саналады. Ұсынылған шабуыл шабуылдаушы VPN интерфейсіне сәйкес келетін жалған бастапқы мекенжайы бар пакетті жібере алатындығына негізделген және бұл пакет жүйеге VPN арқылы емес, сыртқы желі интерфейсі арқылы енетініне қарамастан. rp_filter «Бос» режимі мұндай пакет жойылмайды.

Шабуыл жасау үшін шабуылдаушы пайдаланушы желіге кіретін шлюзді басқаруы керек (мысалы, MITM ұйымы арқылы, жәбірленуші шабуылдаушы басқаратын сымсыз кіру нүктесіне қосылған кезде немесе маршрутизаторды бұзу). Пайдаланушы желіге қосылатын шлюзді басқара отырып, шабуылдаушы VPN желі интерфейсінің контекстінде қабылданатын жалған пакеттерді жібере алады, бірақ жауаптар туннель арқылы бағытталады.

VPN интерфейсінің IP мекенжайы ауыстырылатын жалған пакеттер ағынын құру арқылы клиент орнатқан қосылымға әсер ету әрекеттері жасалады, бірақ бұл пакеттердің әсерін тек шифрланған трафик ағынының пассивті талдауы арқылы байқауға болады. туннельдің жұмысымен. Шабуыл жасау үшін VPN сервері тағайындаған туннельдік желі интерфейсінің IP-мекен-жайын білу керек, сондай-ақ нақты хостқа қосылу қазіргі уақытта туннель арқылы белсенді екенін анықтау керек.

VPN виртуалды желі интерфейсінің IP мекенжайын анықтау үшін SYN-ACK пакеттері виртуалды мекенжайлардың барлық диапазонын дәйекті түрде санай отырып, құрбандық жүйесіне жіберіледі (ең алдымен, VPN-де қолданылатын мекенжайлар әдепкі бойынша тізімделеді, мысалы, OpenVPN 10.8.0.0/24 ішкі желіні пайдаланады). Мекенжайдың бар-жоғын RST жалаушасы бар жауап алу негізінде бағалауға болады.

Дәл осылай белгілі бір сайтқа қосылудың болуы және клиент жағындағы порт нөмірі анықталады - порт нөмірлерін сұрыптау арқылы SYN пакеті пайдаланушыға бастапқы мекенжай ретінде жіберіледі, онда сайт IP ауыстырылады, ал тағайындалған мекенжай виртуалды IP VPN болып табылады. Сервер портын болжауға болады (HTTP үшін 80), ал клиент жағындағы порт нөмірін RST пакетінің жоқтығымен үйлесімде ACK жауаптарының қарқындылығының өзгеруін әртүрлі сандар үшін талдай отырып, дөрекі күшпен есептеуге болады. жалау.

Бұл кезеңде шабуылдаушы қосылымның барлық төрт элементін біледі (бастапқы IP мекенжайлары/порт және тағайындалған IP мекенжайы/порт), бірақ жәбірленуші жүйе қабылдайтын жалған пакетті жасау үшін, шабуылдаушы TCP реттілігін анықтауы керек және растау сандары (seq және ack) - қосылыстар. Бұл параметрлерді анықтау үшін шабуылдаушы ACK жауап пакетін анықтағанға дейін әртүрлі реттік нөмірлерді қолданып көру арқылы жалған RST пакеттерін үздіксіз жібереді, оның келуі санның TCP терезесіне түсетінін көрсетеді.

Әрі қарай, шабуылдаушы бірдей нөмірлері бар пакеттерді жіберу және ACK жауаптарының келуін бақылау арқылы анықтаманың дұрыстығын нақтылайды, содан кейін ол ағымдағы тізбектің нақты санын таңдайды. Жауаптардың шифрланған туннель ішінде жіберілуімен және олардың ұсталған трафик ағынында болуы жанама әдістерді қолдану арқылы ғана талдауға болатындығымен тапсырма күрделі. Клиенттің VPN серверіне жіберілген ACK пакетін жіберуі жалған пакеттерді жіберумен байланысты шифрланған жауаптардың өлшемі мен кідірісіне байланысты анықталады. Мысалы, OpenVPN үшін шифрланған пакет өлшемі 79 ішінде ACK бар екенін дәл анықтауға мүмкіндік береді.

Мәселені блоктаудың уақытша әдісі ретінде операциялық жүйе ядросына шабуылдан қорғау қосылғанша ұсынылған «алдын ала маршрут» тізбегіндегі пакеттік сүзгіні пайдаланып туннельдің виртуалды IP мекенжайы тағайындалған мекенжай ретінде көрсетілген пакеттердің өтуін блоктаңыз.

iptables -t raw -I PREROUTING ! -i wg0 -d 10.182.12.8 -m addrtype ! --src-түрі LOCAL -j DROP

немесе nftables үшін

nft кестені ip raw қосыңыз
nft add chain ip raw prerouting '{ типті сүзгі ілмегі алдын ала бағыттау басымдығы 0; }'
nft қосу ережесі ip raw алдын ала бағыттау 'iifname != "wg0" ip daddr 10.182.12.8 fib saddr түрі != жергілікті түсіру'

IPv4 мекенжайлары бар туннельдерді пайдалану кезінде өзіңізді қорғау үшін rp_filter параметрін «Қатаң» режиміне қойыңыз («sysctl net.ipv4.conf.all.rp_filter = 1»). VPN жағында реттік нөмірді анықтау әдісі шифрланған пакеттерге толтырғыш қосу арқылы бұғатталуы мүмкін, бұл барлық пакеттердің өлшемі бірдей болады.

Ақпарат көзі: opennet.ru

пікір қалдыру