Ranljivost v izvedbi VPN v Linuxu in Unixu

Matej Huš

9. dec 2019 ob 22:22:59

Raziskovalci z Univerze v Novi Mehiki so v večini distribucij Linuxa in nekaterih drugih izpeljankah iz Unixa (FreeBSD, OpenBSD, macOS, iOS, Android) odkrili ranljivost v načinu, kako se vzpostavljajo povezave prek navideznih zasebnih omrežij (VPN). Ranljivost napadalcem omogoča, da ugotovijo, ali je uporabnik povezan v VPN, kateri naslov IP mu je bil dodeljen in ali je aktivno povezan na neko spletno stran. S štetjem paketkov in analizo njihove velikost je moč izluščiti vrednosti seq in ack. V nekaterih primerih je mogoče vrivati podatke v povezavo. Ranljive so distribucije, ki uporabljajo systemd od lanskega 28. novembra (izklop reverse path filtering); prav tako je ranljivost tudi v IPv6.

Ranljivost je tako neodvisna od konkretne implementacije VPN, torej je vseeno, ali uporabljamo OpenVPN, WireGuard ali IKEv2/IPSec. Kaže pa, da se s Torom izognemo ranljivosti, ker uporablja SOCKS in se ugotavljanje pristnosti in šifriranje izvajata v uporabniškem delu in ne v jedru. Da napad deluje, mora biti napadalec v istem delu omrežja kakor uporabnik. To je najlaže doseči tako, da napadalec ustvari lažno dostopno točko, prek katere se uporabnik poveže. Pri uporabni neznanih dostopnih točk je VPN način, kako se izognemo prisluškovanju, a nova ranljivost kaže, da vseeno puščamo nekaj drobtinic podatkov. Napada ne moremo uporabiti na vseh sistemih na enak način; na primer na macOS/iOS je treba uporabiti odprta vrata, denimo 5223.

Napad gre takole: ko se žrtev poveže na nevarno dostopno točko in vzpostavi povezavo s strežnikom VPN, dobi virtualni naslov IP. Napadalec lahko potem pošilja paketke SYN-ACK na celoten prostor in ko ugane IP, dobi odgovor RST. Na podoben način lahko preverimo, ali je žrtev povezana z določenim spletnim strežnikom. Če ji, ko IP naslov poznamo, pošljemo lažen paketek, ki ima ponarejen virni naslov IP, se bo v primeru, da ga zadenemo, odziv glasil drugače. Tedaj dobimo več ACK in ne RST. Nadaljnje preizkušanje in analiza omogočata ugotoviti tudi zaporedni številki seq ack, kar na koncu omogoča vrivanje paketkov v povezavo.