Një dobësi që lejon ndërhyrjen në lidhjet TCP që realizohen përmes tunelave VPN

Publikuar teknika e sulmit (CVE-2019-14899) që lejon ndryshimin, modifikimin ose zëvendësimin e paketeve në lidhjet TCP që kalojnë përmes tunelieve VPN. Problemi prek Linux, FreeBSD, OpenBSD, Android, macOS, iOS dhe sisteme të tjera të ngjashme me Unix. Linux mbështet mekanizmin rp_filter (filterimi i rrugës së kundërt) për IPv4, aktivizimi i të cilit në mënyrën "Strict" neutralizon këtë problem.

Metoda lejon zëvendësimin e paketeve në nivelin e lidhjeve TCP që kalojnë brenda një tuneli të enkriptuar, por nuk lejon ndërhyrjen në lidhjet që përdorin shtresa shtesë enkriptimi (p.sh., TLS, HTTPS, SSH). Algoritmet e enkriptimit të përdorura në VPN nuk kanë rëndësi, pasi paketat false vijnë nga interfaci i jashtëm dhe trajtohen nga bërthama si paketa nga interfaci VPN. Qëllimi më i mundshëm i sulmit është ndërhyrja në lidhjet HTTP të paenkriptuara, por nuk përjashtohet dhe përdorimi i sulmit për të manipuluar përgjigjet DNS.

Zëvendësimi i suksesshëm i paketeve është demonstruar për tunelë të krijuar me OpenVPN, WireGuard dhe IKEv2/IPSec. Tor nuk është i prekshëm nga ky problem, pasi përdor SOCKS për kalimin e trafikut dhe lidhjen me interfacin loopback. Për IPv4, sulmi është i mundshëm nëse rp_filter kalon në mënyrën "Loose" (sysctl net.ipv4.conf.all.rp_filter = 2). Fillimisht, në shumicën e sistemeve është përdorur mënyra "Strict", por duke filluar nga systemd 240, lëshuar në dhjetorin e vitit të kaluar, mënyra e funksionimit të parazgjedhur u zëvendësua me "Loose" dhe kjo ndryshim u reflektua në cilësimet e parazgjedhura të shumë distribucioneve të Linux.

Mekanizmi rp_filter përdoret për kontrollin shtesë të rrugëve të kalimit të paketeve për të parandaluar falsifikimin e adresës origjinale. Duke e vendosur në vlerën 0, nuk bëhet kontrolli i adresës së origjinës dhe çdo paketë mund të ridrejtohet pa kufizime midis interfazëve të rrjetit. Mënyra 1 "Strict" përfshin kontrollin e çdo pakete që vjen nga jashtë për të përputhur me tabelën e routing, dhe nëse interfaci i rrjetit, përmes të cilit është marrë paketa, nuk lidhet me rrugën optimale të shpërndarjes së përgjigjes, atëherë paketa hidhet poshtë. Mënyra 2 "Loose" lehtëson kontrollin për të lejuar funksionimin gjatë përdorimit të balancuesve të ngarkesës ose routing asimetrik, ku
rruga e përgjigjes mund të kalojë jo përmes atij interfaci të rrjetit përmes të cilit është marrë paketa hyrëse.

Në mënyrën "Loose" paketa hyrëse kontrollohet për të përputhur me tabelën e routing, por konsiderohet e pranueshme nëse adresa e origjinës është e arritshme përmes ndonjë interfaci rrjeti të disponueshëm. Sulmi i propozuar ndodhet në faktin se sulmuesi mund të dërgojë një paketë me një adresë origjinale të falsifikuar që përputhet me interfacin e VPN, dhe megjithëse kjo paketë do të mbërrijë në sistem përmes një interfaci të jashtëm të rrjetit dhe jo përmes VPN, në mënyrën rp_filter "Loose", një paketë e tillë nuk do të hidhet poshtë.

Për të kryer sulmin, sulmuesi duhet të kontrollojë grevën përmes së cilës përdoruesi del në rrjet (p.sh., përmes një organizate MITM, kur viktima lidhet me një pikë të kontrolluar nga sulmuesi të aksesit të wireless ose përmes hacks të routerit). Duke kontrolluar grevën përmes të cilës përdoruesi është i lidhur në rrjet, sulmuesi mund të dërgojë paketa false që do të perceptohen në kontekstin e interfaci të VPN, por përgjigjet do të dërgohen përmes tunelit.

Duke gjeneruar një fluks të pacakteve false, në të cilat vendoset adresa IP e interfaci të VPN, bëhen përpjekje për të ndikuar në lidhjen e vendosur nga klienti, por vëzhgimi i ndikimit të këtyre paketeve mund të bëhet vetëm përmes një analize pasive të fluksit të enkriptuar të trafikut që lidhet me funksionimin e tunelit. Për të kryer sulmin është e nevojshme të dihet adresa IP e caktuar nga serveri VPN të interfaci të tunelit, si dhe të determinohet që në atë moment një lidhje aktive është në tunel me një host të caktuar.

Për të përcaktuar IP-në e interfaci virtual të rrjetit VPN, dërgohen SYN-ACK paketa në sistemin e viktimës, duke e kaluar gradualisht të gjithë diapazonin e adresave virtuale (fillimisht adresa të përdorura në VPN nga e drejta, p.sh. në OpenVPN përdoret subneti 10.8.0.0/24). Eksistencën e adresës mund ta gjykojmë nga marrja e një përgjigjeje me flag RST.

NĂ« mĂ«nyrĂ« tĂ« ngjashme, pĂ«rcaktohet prania e lidhjes me njĂ« faqe tĂ« caktuar dhe numri i portit nĂ« anĂ«n e klientit — duke e kaluar numrat e porteve nĂ« drejtim tĂ« pĂ«rdoruesit dĂ«rgohet njĂ« paketĂ« SYN, nĂ« rolin e adresĂ«s burim, ku vendoset IP e faqes, ndĂ«rsa adresat e destinacionit janĂ« IP virtuale VPN. Porta e serverit mund tĂ« parashikohet (80 pĂ«r HTTP), ndĂ«rsa numri i portit nĂ« anĂ«n e klientit mund tĂ« llogaritet duke kaluar nĂ«pĂ«rmjet analizimit tĂ« ndryshimeve nĂ« intensitetin e pĂ«rgjigjeve ACK nĂ« kombinim me mungesĂ«n e paketĂ«s me flamurin RST.

Në këtë fazë, sulmuesi di të katër elementët e lidhjes (adresat/portet IP të burimit dhe adresën/portin IP të destinacionit), por për të gjeneruar një paketë të rreme që do të perceptohet nga sistemi i viktimës, sulmuesi duhet të përcaktojë numrat e sekuencës dhe të konfirmimit (seq dhe ack) të lidhjes TCP. Për të përcaktuar këto parametra, sulmuesi vazhdon të dërgojë paketa RST të rreme, duke kaluar me numra të ndryshëm sekuence, derisa të regjistrojë paketën ACK përgjigje, e cila tregon se numri është brenda dritares TCP.

Më pas, sulmuesi verifikon saktësinë e përcaktimit duke dërguar paketa me numrin e njëjtë dhe duke vëzhguar ardhjen e përgjigjeve ACK, pas së cilës përcakton numrin e saktë të sekuencës aktuale. Detyra është e komplikuar sepse përgjigjet dërgohen brenda një tuneli të enkriptuar dhe analizimi i tyre në trafikun e kapur mund të bëhet vetëm me metoda indirekte. Fakti i dërgimit të paketës ACK të adresuar në serverin VPN nga klienti përcaktohet në bazë të madhësisë dhe vonesës së përgjigjeve të enkriptuara, që korrelacionojnë me dërgimin e paketimeve të rreme. Për shembull, për OpenVPN, një paketë e enkriptuar me madhësi 79 lejon të gjykohet me saktësi se brenda përmban konfirmimin ACK.

Para se të shtohet mbrojtja ndaj sulmit në bërthamën e sistemit operativ, si një metodë përkohësore të bllokimit të problemit rekomandohet duke bllokuar kalimin e paketimeve me një filtrin e paketave në zinxhirin "preroute", ku si adresë destinacioni është adresa IP virtuale e tunelit.

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

ose për nftables

nft add table ip 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 != local drop’

Për mbrojtje kur përdoren tunel të adresave IPv4 mjafton të kaloni rp_filter në modin "Strict" ("sysctl net.ipv4.conf.all.rp_filter = 1"). Nga ana e VPN, metoda e përcaktimit të numrit të sekuencës mund të bllokohet duke shtuar mbushje në paketat e enkriptuara, duke bërë që madhësia e të gjitha paketave të jetë e njëjtë.

Burimi: opennet.ru

Bleni hostim tĂ« besueshĂ«m pĂ«r faqe me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Bleni hostim tĂ« besueshĂ«m pĂ«r faqe me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster