Kwetsberens wêrmei TCP-ferbiningen makke fia VPN-tunnels kinne wurde kape

Publisearre in oanfalstechnyk (CVE-2019-14899) wêrtroch pakketten kinne wurde spoofed, wizige, of ferfongen yn TCP-ferbiningen trochstjoerd fia VPN-tunnels. It probleem hat ynfloed op Linux, FreeBSD, OpenBSD, Android, macOS, iOS en oare Unix-like systemen. Linux stipet it rp_filter (reverse path filtering) meganisme foar IPv4, it ynskeakelje yn "Strict" modus neutralisearret dit probleem.

De metoade lit pakketferfanging mooglik meitsje op it nivo fan TCP-ferbiningen dy't binnen in fersifere tunnel passe, mar lit it net ynkeare yn ferbiningen dy't ekstra fersiferingslagen brûke (bygelyks TLS, HTTPS, SSH). De fersiferingsalgoritmen dy't brûkt wurde yn 'e VPN dogge net út, om't de spoofed pakketten komme fan' e eksterne ynterface en wurde ferwurke troch de kernel as pakketten fan 'e VPN-ynterface. It meast wierskynlike doel fan 'e oanfal is om te bemuoien mei net-fersifere HTTP-ferbiningen, mar net útsletten en it brûken fan in oanfal om DNS-antwurden te manipulearjen.

Súksesfolle pakketspoofing is oantoand foar tunnels makke mei OpenVPN, WireGuard en IKEv2 / IPSec. Tor is net gefoelich foar it probleem, om't it SOCKS brûkt om ferkear troch te stjoeren en bûn is oan in loopback-ynterface. Foar IPv4 is in oanfal mooglik as rp_filter is ynsteld op "Los" modus (sysctl net.ipv4.conf.all.rp_filter = 2). Yn it earstoan brûkten de measte systemen de "Strikte" modus, mar begjinnend fan systemd 240, útbrocht ferline desimber, de standert bestjoeringsmodus waard feroare nei "Loose" en dizze feroaring waard wjerspegele yn de standert ynstellings fan in protte Linux distribúsjes.

rp_filter meganisme tapast foar ekstra ferifikaasje fan pakketpaden om spoofing fan boarneadres te foarkommen. As ynsteld op 0, wurdt gjin boarneadreskontrôle útfierd en kin elk pakket sûnder beheiningen trochstjoerd wurde tusken netwurkynterfaces. Mode 1 "Strikt" omfettet it kontrolearjen fan elk pakket dat fan bûten komt foar neilibjen fan 'e routingtabel, en as de netwurkynterface wêrmei't it pakket ûntfongen is net assosjearre is mei de optimale leveringsrûte foar antwurd, dan wurdt it pakket wegere. Mode 2 "Los" ûntspant de kontrôle om load balancers as asymmetryske routing te wurkjen as
De antwurdrûte kin troch in oare netwurkynterface gean dan dejinge wêrby't it ynkommende pakket oankaam.

Yn Losse modus wurdt in ynkommende pakket kontrolearre tsjin de routing tafel, mar wurdt beskôge as jildich as de boarne adres is te berikken fia alle beskikbere netwurk ynterface. De foarstelde oanfal is basearre op it feit dat de oanfaller in pakket kin stjoere mei in spoofed boarneadres dat oerienkomt mei de VPN-ynterface, en nettsjinsteande it feit dat dit pakket it systeem sil ynfiere fia de eksterne netwurkynterface en net fia de VPN, yn 'e rp_filter "Loose" modus sa'n pakket sil net wurde wegere.

Om in oanfal út te fieren, moat de oanfaller de poarte kontrolearje wêrmei't de brûker tagong hat ta it netwurk (bygelyks fia in MITM-organisaasje, as it slachtoffer ferbynt mei in troch oanfaller kontrolearre draadloos tagongspunt, of fia router hacking). Troch it kontrolearjen fan de poarte wêrby't in brûker ferbûn is mei it netwurk, kin in oanfaller falske pakketten stjoere dy't wurde waarnommen yn 'e kontekst fan' e VPN-netwurkynterface, mar de antwurden wurde troch de tunnel stjoerd.

Troch it generearjen fan in stream fan fiktive pakketten wêryn it IP-adres fan 'e VPN-ynterface wurdt ferfongen, wurde besocht om de ferbining te beynfloedzjen dy't troch de kliïnt fêststeld is, mar de ynfloed fan dizze pakketten kin allinich beoardiele wurde troch passive analyze fan' e fersifere ferkearsstream ferbûn mei de eksploitaasje fan de tunnel. Om in oanfal út te fieren, moatte jo it IP-adres fine fan 'e tunnelnetwurkynterface tawiisd troch de VPN-tsjinner, en ek bepale dat in ferbining mei in spesifike host op it stuit aktyf is troch de tunnel.

Om it IP fan 'e VPN-firtuele netwurkynterface te bepalen, wurde SYN-ACK-pakketten nei it slachtoffersysteem stjoerd, opfolgjend it heule berik fan firtuele adressen opnimt (alearst wurde de adressen brûkt yn' e VPN standert opnomd, bygelyks OpenVPN brûkt it subnet 10.8.0.0/24). It bestean fan in adres kin beoardiele wurde op basis fan de ûntfangst fan in antwurd mei de RST-flagge.

Op in fergelykbere manier wurde de oanwêzigens fan in ferbining mei in bepaalde side en it poartenûmer oan 'e kliïntkant bepaald - troch de poartenûmers te sortearjen wurdt in SYN-pakket nei de brûker stjoerd, as it boarneadres, wêryn't de side IP wurdt ferfongen, en it bestimmingsadres is in firtuele IP VPN. De serverpoarte kin foarsein wurde (80 foar HTTP), en it poartenûmer oan 'e kliïntkant kin wurde berekkene troch brute krêft, analysearje foar ferskate nûmers de feroaring yn' e yntensiteit fan ACK-antwurden yn kombinaasje mei it ûntbrekken fan in pakket mei de RST flagge.

Op dit poadium ken de oanfaller alle fjouwer eleminten fan 'e ferbining (boarne IP-adressen/poarte en bestimmings-IP-adres/poarte), mar om in fiktyf pakket te generearjen dat it slachtoffersysteem sil akseptearje, moat de oanfaller de TCP-sekwinsje bepale en acknowledgement numbers (seq en ack) - ferbinings. Om dizze parameters te bepalen, stjoert de oanfaller kontinu falske RST-pakketten, besykje ferskate folchoardernûmers, oant hy in ACK-antwurdpakket ûntdekt, wêrfan de komst oanjout dat it nûmer binnen it TCP-finster falt.

Dêrnei ferdúdlikt de oanfaller de krektens fan 'e definysje troch pakketten mei itselde nûmer te ferstjoeren en de komst fan ACK-antwurden te observearjen, wêrnei't hy it krekte nûmer fan' e aktuele folchoarder selektearret. De taak is komplisearre troch it feit dat antwurden yn in fersifere tunnel stjoerd wurde en har oanwêzigens yn 'e ûnderskepte ferkearsstream kin allinich analysearre wurde mei yndirekte metoaden. Oft in kliïnt in ACK-pakket stjoert oan 'e VPN-tsjinner wurdt bepaald op basis fan' e grutte en latency fan 'e fersifere antwurden, dy't korrelearje mei it ferstjoeren fan spoofed pakketten. Bygelyks, foar OpenVPN, in fersifere pakketgrutte fan 79 lit jo sekuer beoardielje dat d'r in ACK binnen is.

Oant oanfal beskerming wurdt tafoege oan it bestjoeringssysteem kernel as in tydlike metoade foar blokkearjen fan it probleem oanrikkemandearre mei help fan in pakketfilter yn 'e "preroute" keten, blokkearje de passaazje fan pakketten wêryn it firtuele IP-adres fan 'e tunnel wurdt oantsjutte as it bestimmingsadres.

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

of foar nftables

nft tafoegje tabel ip raw
nft add chain ip raw prerouting '{ type filter hook prerouting prioriteit 0; }'
nft add rule ip raw prerouting 'iifname != "wg0" ip daddr 10.182.12.8 fib saddr type != local drop'

Om josels te beskermjen by it brûken fan tunnels mei IPv4-adressen, set rp_filter gewoan yn op "Strikt" modus ("sysctl net.ipv4.conf.all.rp_filter = 1"). Oan 'e VPN-kant kin de metoade foar it opspoaren fan folchoardernûmer blokkearre wurde troch ekstra padding ta te foegjen oan' e fersifere pakketten, wêrtroch alle pakketten deselde grutte meitsje.

Boarne: opennet.ru

Add a comment