Ranjivost koja omogućuje otmicu TCP veza ostvarenih kroz VPN tunele

Objavljeno Tehnika napada (CVE-2019-14899) koja omogućuje lažiranje, mijenjanje ili umetanje paketa u TCP veze usmjerene kroz VPN tunele. Problem utječe LinuxFreeBSD, OpenBSD Android, macOS, iOS i drugi Unix-slični sustavi. Linux podržava mehanizam rp_filter (filtriranje obrnutog puta) za IPv4, koji, kada je omogućen u "Strogom" načinu rada, neutralizira ovaj problem.

Ova metoda omogućuje zamjenu paketa na razini TCP veze unutar šifriranog tunela, ali ne dopušta presretanje veza koje koriste dodatne slojeve šifriranja (npr. TLS, HTTPS, SSH). Algoritmi šifriranja koji se koriste u VPN-u nisu relevantni, jer krivotvoreni paketi dolaze s vanjskog sučelja, a kernel ih obrađuje kao pakete s VPN sučelja. Najvjerojatnija meta napada je ometanje nešifriranih HTTP veza, ali nije isključeno i korištenje napada za manipuliranje DNS odgovorima.

Uspješno lažiranje paketa demonstrirano je za tunele stvorene pomoću OpenVPN, WireGuard IKEv2/IPSec.Tor nije osjetljiv na ovaj problem jer koristi SOCKS za prosljeđivanje prometa i povezivanje s loopback sučeljem. Za IPv4, napad je moguć ako je rp_filter postavljen na "Loose" način rada (sysctl net.ipv4.conf.all.rp_filter = 2). U početku je većina sustava koristila "Strogi" način rada, ali počevši s sistemd 240, objavljenom prošlog prosinca, zadani način rada promijenjen je u "Loose" i ta se promjena odrazila na zadane postavke mnogih distribucija. Linux.

mehanizam rp_filtera primijenjena Za dodatnu provjeru puta paketa kako bi se spriječilo lažiranje izvorne adrese. Kada je postavljeno na 0, provjera izvorne adrese je onemogućena i svaki paket može se proslijediti između mrežnih sučelja bez ograničenja. Način rada 1, "Strogi", omogućuje provjeru svakog dolaznog vanjskog paketa u odnosu na tablicu usmjeravanja, a ako mrežno sučelje putem kojeg je paket primljen nije povezano s optimalnom rutom isporuke odgovora, paket se odbacuje. Način rada 2, "Labavi", ublažava provjeru kako bi se omogućio rad pri korištenju uravnoteživača opterećenja ili asimetričnog usmjeravanja, u kojem
Ruta odgovora možda ne prolazi kroz isto mrežno sučelje kroz koje je stigao dolazni paket.

U "Loose" načinu rada, dolazni paket se provjerava u odnosu na tablicu usmjeravanja, ali se smatra valjanim ako je izvorna adresa dostupna putem bilo kojeg dostupnog mrežnog sučelja. Predloženi napad oslanja se na činjenicu da napadač može poslati paket s lažnom izvornom adresom koja odgovara VPN sučelju. Iako ovaj paket ulazi u sustav putem vanjskog mrežnog sučelja, a ne putem VPN-a, rp_filter "Loose" način rada neće odbaciti takav paket.

Da bi izvršio napad, napadač mora kontrolirati pristupnik kroz koji korisnik pristupa mreži (na primjer, putem MITM organizacije, kada se žrtva spoji na bežičnu pristupnu točku kojom upravlja napadač ili putem hakiranje ruteraKontroliranjem pristupnika putem kojeg je korisnik spojen na mrežu, napadač može slati lažne pakete koji će se pojaviti u kontekstu VPN mrežnog sučelja, ali će odgovori biti usmjereni kroz tunel.

Generiranjem niza lažnih paketa koji oponašaju IP adresu VPN sučelja pokušava se utjecati na uspostavljenu vezu klijenta. Međutim, utjecaj tih paketa može se uočiti samo pasivnom analizom šifriranog toka prometa povezanog s tunelom. Za provođenje napada potrebno je dobiti IP adresu mrežnog sučelja tunela koju je dodijelio VPN poslužitelj i utvrditi da je veza s određenim hostom trenutno aktivna kroz tunel.

Kako bi se odredila IP adresa virtualnog mrežnog sučelja VPN-a, SYN-ACK paketi se šalju sustavu žrtve, sekvencijalno prolazeći kroz cijeli raspon virtualnih adresa (prvo se pretražuju adrese koje se u VPN-u koriste prema zadanim postavkama, na primjer u OpenVPN Koristi se podmreža 10.8.0.0/24). Postojanje adrese može se procijeniti na temelju primitka odgovora s RST zastavom.

Veza s određenom web-lokacijom i broj porta na strani klijenta određuju se na sličan način. SYN paket se šalje korisniku isprobavanjem različitih brojeva portova, s IP adresom web-lokacije kao izvornom adresom i virtualnom IP adresom VPN-a kao odredištem. Port poslužitelja može se predvidjeti (80 za HTTP), a broj porta na strani klijenta može se izračunati brute-forcingom, analizirajući promjenu stope ACK odgovora za različite brojeve, u kombinaciji s odsutnošću paketa s RST zastavom.

U ovoj fazi napadač zna sva četiri elementa veze (izvorišnu IP adresu/port i odredišnu IP adresu/port), ali da bi generirao krivotvoreni paket koji će prihvatiti sustav žrtve, napadač mora odrediti slijed TCP veze i brojeve potvrde (seq i ack). Da bi odredio ove parametre, napadač kontinuirano šalje krivotvorene RST pakete, isprobavajući različite slijedne brojeve, sve dok ne otkrije ACK paket odgovora, čiji dolazak ukazuje da slijedni broj spada unutar TCP prozora.

Napadač zatim provjerava ispravnost detekcije slanjem paketa s istim brojem i promatranjem dolaznih ACK odgovora, nakon čega određuje točan redni broj trenutnog niza. Zadatak je kompliciran činjenicom da se odgovori šalju unutar šifriranog tunela, a njihova prisutnost u presretnutom toku prometa može se analizirati samo neizravno. Je li klijent poslao ACK paket adresiran na VPN poslužitelj određuje se na temelju veličine i latencije šifriranih odgovora, što je u korelaciji sa slanjem krivotvorenih paketa. Na primjer, za OpenVPN Šifrirani paket veličine 79 omogućuje nam da točno procijenimo da sadrži ACK potvrdu.

Dok se zaštita od napada ne doda u jezgru operativnog sustava, kao privremena metoda za blokiranje problema preporuča Pomoću paketnog filtera u lancu "preroute" blokirajte prolaz paketa u kojima je virtualna IP adresa tunela navedena kao odredišna adresa.

iptables -t raw -I PREDUSMERAVANJE ! -i wg0 -d 10.182.12.8 -m vrsta_adrese ! --src-tip LOKALNO -j DROP

ili za nftables

nft dodavanje sirove IP adrese tablice
nft dodaj lanac ip sirovo prethodno usmjeravanje '{ type filter hook prethodno usmjeravanje prioritet 0; }'
nft dodaj pravilo ip sirovo prethodno usmjeravanje 'iifname != "wg0" ip daddr 10.182.12.8 fib saddr tip != lokalno ispuštanje'

Za zaštitu od IPv4 tunela, jednostavno postavite rp_filter na "Strogi" način rada (sysctl net.ipv4.conf.all.rp_filter = 1). Na VPN strani, metoda određivanja rednog broja može se blokirati dodavanjem popunjavanja šifriranim paketima, čime svi paketi postaju iste veličine.

Izvor: opennet.ru

Kupite pouzdan hosting za stranice s DDoS zaštitom, VPS VDS poslužiteljima 🔥 Kupite pouzdan web hosting sa DDoS zaštitom, VPS VDS servere | ProHoster