Dobësi që lejon që lidhjet TCP të bëra përmes tuneleve VPN të rrëmbehen

Publikuar një teknikë sulmi (CVE-2019-14899) që lejon që paketat të mashtrohen, modifikohen ose zëvendësohen në lidhjet TCP të përcjella përmes tuneleve VPN. Problemi prek Linux, FreeBSD, OpenBSD, Android, macOS, iOS dhe sisteme të tjera të ngjashme me Unix. Linux mbështet mekanizmin rp_filter (filtrimi i rrugës së kundërt) për IPv4, duke e ndezur atë në modalitetin "Rreptë" e neutralizon këtë problem.

Metoda lejon zëvendësimin e paketave në nivelin e lidhjeve TCP që kalojnë brenda një tuneli të koduar, por nuk lejon futjen në lidhje që përdorin shtresa shtesë të enkriptimit (për shembull, TLS, HTTPS, SSH). Algoritmet e enkriptimit të përdorura në VPN nuk kanë rëndësi, pasi paketat e falsifikuara vijnë nga ndërfaqja e jashtme dhe përpunohen nga kerneli si pako nga ndërfaqja VPN. Objektivi më i mundshëm i sulmit është të ndërhyjë në lidhjet e pakriptuara HTTP, por nuk përjashtohet dhe duke përdorur një sulm për të manipuluar përgjigjet DNS.

Një mashtrim i suksesshëm i paketave është demonstruar për tunelet e krijuar duke përdorur OpenVPN, WireGuard dhe IKEv2/IPSec. Tor nuk është i ndjeshëm ndaj problemit, pasi përdor SOCKS për të përcjellë trafikun dhe është i lidhur me një ndërfaqe loopback. Për IPv4, një sulm është i mundur nëse rp_filter është vendosur në modalitetin "Loose" (sysctl net.ipv4.conf.all.rp_filter = 2). Fillimisht, shumica e sistemeve përdorën modalitetin "Rreptë", por duke u nisur nga sistemi 240, i lëshuar dhjetorin e kaluar, mënyra e parazgjedhur e funksionimit u ndryshua në "Loose" dhe ky ndryshim u reflektua në cilësimet e paracaktuara të shumë shpërndarjeve Linux.

mekanizmi rp_filter aplikuar për verifikim shtesë të shtigjeve të paketave për të parandaluar mashtrimin e adresës së burimit. Kur vendoset në 0, nuk kryhet asnjë kontroll i adresës së burimit dhe çdo paketë mund të përcillet midis ndërfaqeve të rrjetit pa kufizime. Modaliteti 1 "Rreptë" përfshin kontrollimin e secilës paketë që vjen nga jashtë për pajtueshmërinë me tabelën e rrugëzimit, dhe nëse ndërfaqja e rrjetit përmes së cilës është marrë paketa nuk lidhet me rrugën optimale të shpërndarjes së përgjigjes, atëherë paketa hidhet poshtë. Modaliteti 2 "Loose" lehtëson kontrollin për të lejuar që balancuesit e ngarkesës ose drejtimi asimetrik të funksionojnë kur
Rruga e përgjigjes mund të kalojë përmes një ndërfaqe rrjeti të ndryshme nga ajo përmes së cilës mbërriti paketa hyrëse.

Në modalitetin Loose, një paketë hyrëse kontrollohet në tabelën e rrugëzimit, por konsiderohet e vlefshme nëse adresa e burimit është e arritshme përmes ndonjë ndërfaqe rrjeti të disponueshëm. Sulmi i propozuar bazohet në faktin se sulmuesi mund të dërgojë një paketë me një adresë burimi të falsifikuar që korrespondon me ndërfaqen VPN, dhe pavarësisht faktit se kjo paketë do të hyjë në sistem përmes ndërfaqes së jashtme të rrjetit dhe jo përmes VPN, në rp_filter Modaliteti "Loose" një paketë e tillë nuk do të hidhet poshtë.

Për të kryer një sulm, sulmuesi duhet të kontrollojë portën përmes së cilës përdoruesi hyn në rrjet (për shembull, përmes një organizate MITM, kur viktima lidhet me një pikë aksesi pa tel të kontrolluar nga sulmuesi, ose përmes hakimi i ruterit). Duke kontrolluar portën përmes së cilës një përdorues është i lidhur me rrjetin, një sulmues mund të dërgojë pako false që do të perceptohen në kontekstin e ndërfaqes së rrjetit VPN, por përgjigjet do të drejtohen përmes tunelit.

Duke gjeneruar një rrymë paketash fiktive në të cilat zëvendësohet adresa IP e ndërfaqes VPN, bëhen përpjekje për të ndikuar në lidhjen e krijuar nga klienti, por ndikimi i këtyre paketave mund të vërehet vetëm përmes analizës pasive të fluksit të trafikut të koduar të lidhur. me funksionimin e tunelit. Për të kryer një sulm, duhet të zbuloni adresën IP të ndërfaqes së rrjetit të tunelit të caktuar nga serveri VPN, dhe gjithashtu të përcaktoni që një lidhje me një host specifik është aktualisht aktive përmes tunelit.

Për të përcaktuar IP-në e ndërfaqes virtuale të rrjetit VPN, paketat SYN-ACK dërgohen në sistemin e viktimës, duke numëruar në mënyrë sekuenciale të gjithë gamën e adresave virtuale (para së gjithash, adresat e përdorura në VPN numërohen si parazgjedhje, për shembull, OpenVPN përdor nënrrjetin 10.8.0.0/24). Ekzistenca e një adrese mund të gjykohet në bazë të marrjes së një përgjigje me flamurin RST.

Në mënyrë të ngjashme, përcaktohet prania e një lidhjeje me një vend të caktuar dhe numri i portit në anën e klientit - duke renditur numrat e portit, një paketë SYN i dërgohet përdoruesit, si adresa burimore, në të cilën IP i faqes është zëvendësuar, dhe adresa e destinacionit është një VPN virtuale IP. Porta e serverit mund të parashikohet (80 për HTTP), dhe numri i portës në anën e klientit mund të llogaritet me forcë brutale, duke analizuar për numra të ndryshëm ndryshimin në intensitetin e përgjigjeve ACK në kombinim me mungesën e një pakete me RST flamuri.

Në këtë fazë, sulmuesi i njeh të katër elementët e lidhjes (adresat IP të burimit/portin dhe adresën/portin IP të destinacionit), por për të gjeneruar një paketë fiktive që sistemi viktimë do ta pranojë, sulmuesi duhet të përcaktojë sekuencën TCP dhe numrat e njohjes (seq dhe ack) - lidhjet. Për të përcaktuar këto parametra, sulmuesi dërgon vazhdimisht pako të rreme RST, duke provuar numra të ndryshëm të sekuencës, derisa të zbulojë një paketë përgjigjeje ACK, mbërritja e së cilës tregon se numri bie në dritaren TCP.

Më pas, sulmuesi sqaron saktësinë e përkufizimit duke dërguar pako me të njëjtin numër dhe duke vëzhguar mbërritjen e përgjigjeve ACK, pas së cilës ai zgjedh numrin e saktë të sekuencës aktuale. Detyra është e ndërlikuar nga fakti se përgjigjet dërgohen brenda një tuneli të koduar dhe prania e tyre në rrjedhën e trafikut të përgjuar mund të analizohet vetëm duke përdorur metoda indirekte. Nëse një klient dërgon një paketë ACK drejtuar serverit VPN, përcaktohet bazuar në madhësinë dhe vonesën e përgjigjeve të koduara, të cilat lidhen me dërgimin e paketave të falsifikuara. Për shembull, për OpenVPN, një madhësi pakete e koduar prej 79 ju lejon të gjykoni me saktësi se ka një ACK brenda.

Derisa mbrojtja nga sulmi të shtohet në kernelin e sistemit operativ si një metodë e përkohshme për të bllokuar problemin rekomanduar duke përdorur një filtër paketash në zinxhirin "preroute", bllokoni kalimin e paketave në të cilat adresa IP virtuale e tunelit është specifikuar si adresa e destinacionit.

iptables -t raw -I PREROUTING ! -i wg0 -d 10.182.12.8 -m adrtype ! --src-lloj LOCAL -j RRJEKË

ose për nftables

nft shtoni ip tavoline raw
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 != drop local'

Për t'u mbrojtur kur përdorni tunele me adresa IPv4, thjesht vendosni rp_filter në modalitetin "Strict" ("sysctl net.ipv4.conf.all.rp_filter = 1"). Në anën VPN, metoda e zbulimit të numrit të sekuencës mund të bllokohet duke shtuar mbushje shtesë në paketat e koduara, duke i bërë të gjitha paketat të njëjtën madhësi.

Burimi: opennet.ru

Shto një koment