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

Objavljeno tehnika napada (CVE-2019-14899) koja omogućuje lažiranje, modificiranje ili zamjenu paketa u TCP vezama koje se prosljeđuju kroz VPN tunele. Problem utječe na Linux, FreeBSD, OpenBSD, Android, macOS, iOS i druge sustave slične Unixu. Linux podržava mehanizam rp_filter (filtriranje obrnutim putem) za IPv4, uključivanje u "Strogom" načinu neutralizira ovaj problem.

Metoda dopušta zamjenu paketa na razini TCP veza koje prolaze unutar šifriranog tunela, ali ne dopušta umetanje u veze koje koriste dodatne slojeve šifriranja (na primjer, TLS, HTTPS, SSH). Algoritmi šifriranja koji se koriste u VPN-u nisu bitni, budući da lažirani paketi dolaze s vanjskog sučelja i obrađuje ih kernel kao pakete s VPN sučelja. Najvjerojatniji cilj napada je ometanje nešifriranih HTTP veza, ali nije isključeno i korištenje napada za manipuliranje DNS odgovorima.

Uspješno lažiranje paketa dokazano je za tunele stvorene korištenjem OpenVPN-a, WireGuarda i IKEv2/IPSec-a. Tor nije osjetljiv na problem budući da koristi SOCKS za prosljeđivanje prometa i vezan je na sučelje povratne petlje. Za IPv4, napad je moguć ako je rp_filter postavljen na “Loose” mod (sysctl net.ipv4.conf.all.rp_filter = 2). U početku je većina sustava koristila "Strogi" način rada, ali počevši od sistemd 240, objavljen prošlog prosinca, zadani način rada promijenjen je u "Loose" i ta se promjena odrazila na zadane postavke mnogih distribucija Linuxa.

rp_filter mehanizam primijenjena za dodatnu provjeru putova paketa kako bi se spriječilo krivotvorenje izvorne adrese. Kada je postavljeno na 0, ne provodi se provjera adrese izvora i bilo koji paket se može proslijediti između mrežnih sučelja bez ograničenja. Način 1 "Strict" uključuje provjeru usklađenosti svakog paketa koji dolazi izvana s tablicom usmjeravanja, a ako mrežno sučelje kroz koje je paket primljen nije povezano s optimalnom rutom isporuke odgovora, tada se paket odbacuje. Način 2 "Loose" ublažava provjeru kako bi omogućio rad balansera opterećenja ili asimetričnog usmjeravanja
Ruta odgovora može proći kroz mrežno sučelje koje nije ono kroz koje je stigao dolazni paket.

U Loose modu, dolazni paket se provjerava prema tablici usmjeravanja, ali se smatra važećim ako je adresa izvora dostupna preko bilo kojeg dostupnog mrežnog sučelja. Predloženi napad temelji se na činjenici da napadač može poslati paket s lažiranom izvornom adresom koja odgovara VPN sučelju, i unatoč činjenici da će taj paket ući u sustav preko vanjskog mrežnog sučelja, a ne kroz VPN, u rp_filter “Loose” način rada takav paket neće biti odbačen.

Da bi izveo napad, napadač mora kontrolirati pristupnik putem kojeg korisnik pristupa mreži (na primjer, preko MITM organizacije, kada se žrtva poveže na bežičnu pristupnu točku koju kontrolira napadač ili putem hakiranje rutera). Kontroliranjem pristupnika preko kojeg je korisnik spojen na mrežu, napadač može slati lažne pakete koji će biti percipirani u kontekstu sučelja VPN mreže, ali će odgovori biti usmjereni kroz tunel.

Generiranjem streama fiktivnih paketa u kojima je zamijenjena IP adresa VPN sučelja, pokušava se utjecati na vezu koju uspostavlja klijent, ali se utjecaj tih paketa može promatrati samo kroz pasivnu analizu kriptiranog toka prometa povezanog s njim. s radom tunela. Da biste izvršili napad, morate saznati IP adresu mrežnog sučelja tunela koju je dodijelio VPN poslužitelj, te također utvrditi da je veza s određenim hostom trenutno aktivna kroz tunel.

Kako bi se odredio IP sučelja virtualne mreže VPN-a, SYN-ACK paketi se šalju u sustav žrtve, sekvencijalno nabrajajući cijeli raspon virtualnih adresa (prije svega, adrese koje se koriste u VPN-u su nabrojane prema zadanim postavkama, na primjer, OpenVPN koristi podmrežu 10.8.0.0/24). Postojanje adrese može se prosuditi na temelju primitka odgovora s RST zastavom.

Na sličan način utvrđuje se postojanje veze s određenom stranicom i broj porta na strani klijenta - razvrstavanjem brojeva portova korisniku se kao izvorna adresa šalje SYN paket u kojem se nalazi web stranica. IP je zamijenjen, a odredišna adresa je virtualni IP VPN. Port poslužitelja može se predvidjeti (80 za HTTP), a broj porta na strani klijenta može se izračunati grubom silom, analizirajući za različite brojeve promjenu intenziteta ACK odgovora u kombinaciji s nedostatkom paketa s RST-om. zastava.

U ovoj fazi napadač zna sva četiri elementa veze (izvorišnu IP adresu/port i odredišnu IP adresu/port), ali da bi generirao fiktivni paket koji će žrtveni sustav prihvatiti, napadač mora odrediti TCP sekvencu i brojevi potvrde (seq i ack) - veze. Kako bi odredio ove parametre, napadač kontinuirano šalje lažne RST pakete, pokušavajući s različitim sekvencijskim brojevima, sve dok ne detektira ACK paket odgovora, čiji dolazak označava da broj pada unutar TCP prozora.

Zatim napadač razjašnjava ispravnost definicije slanjem paketa s istim brojem i promatranjem pristizanja ACK odgovora, nakon čega odabire točan broj trenutne sekvence. Zadatak je kompliciran činjenicom da se odgovori šalju unutar šifriranog tunela i da se njihova prisutnost u presretnutom prometu može analizirati samo neizravnim metodama. Hoće li klijent poslati ACK paket adresiran na VPN poslužitelj određuje se na temelju veličine i latencije šifriranih odgovora, koji su u korelaciji sa slanjem lažiranih paketa. Na primjer, za OpenVPN, veličina šifriranog paketa od 79 omogućuje vam točnu procjenu postoji li ACK unutra.

Dok se zaštita od napada ne doda jezgri operativnog sustava kao privremena metoda blokiranja problema preporuča pomoću filtera paketa u lancu “preroute” blokiraju prolaz paketa u kojima je virtualna IP adresa tunela navedena kao odredišna adresa.

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

ili za nftables

nft dodaj tablicu ip raw
nft add chain ip raw prerouting '{ type filter hook prioritet predusmjeravanja 0; }'
nft add rule ip raw prerouting 'iifname != "wg0" ip daddr 10.182.12.8 fib saddr type != local drop'

Kako biste se zaštitili kada koristite tunele s IPv4 adresama, samo postavite rp_filter na “Strict” mod (“sysctl net.ipv4.conf.all.rp_filter = 1”). Na strani VPN-a, metoda otkrivanja redoslijednog broja može se blokirati dodavanjem dodatnog punjenja šifriranim paketima, čime svi paketi postaju iste veličine.

Izvor: opennet.ru

Dodajte komentar