Metodas leidžia pakeisti paketus TCP jungčių, einančių šifruotame tunelyje, lygiu, tačiau neleidžia įsiterpti į ryšius, naudojančius papildomus šifravimo sluoksnius (pvz., TLS, HTTPS, SSH). VPN naudojami šifravimo algoritmai neturi reikšmės, nes suklastoti paketai gaunami iš išorinės sąsajos, o branduolys juos apdoroja kaip paketus iš VPN sąsajos. Labiausiai tikėtinas atakos tikslas – trukdyti nešifruotiems HTTP ryšiams, tačiau
Sėkmingas paketų klastojimas buvo įrodytas naudojant „OpenVPN“, „WireGuard“ ir „IKEv2/IPSec“ sukurtas „Tor“ problemas, nes jis naudoja SOCKS srautui perduoti ir yra susietas su atgaline sąsaja. Naudojant IPv4, ataka galima, jei rp_filter nustatytas į „Loose“ režimą (sysctl net.ipv4.conf.all.rp_filter = 2). Iš pradžių dauguma sistemų naudojo „griežtą“ režimą, bet nuo
rp_filtro mechanizmas
Atsakymo maršrutas gali eiti per kitą tinklo sąsają nei ta, per kurią buvo gautas paketas.
Laisvu režimu gaunamas paketas tikrinamas pagal maršruto parinkimo lentelę, bet laikomas galiojančiu, jei šaltinio adresas pasiekiamas per bet kurią prieinamą tinklo sąsają. Siūloma ataka pagrįsta tuo, kad užpuolikas gali išsiųsti paketą su suklastotu šaltinio adresu, atitinkančiu VPN sąsają, ir nepaisant to, kad šis paketas pateks į sistemą per išorinę tinklo sąsają, o ne per VPN, rp_filter "Loose" režimas toks paketas nebus išmestas.
Norėdamas įvykdyti ataką, užpuolikas turi valdyti šliuzą, per kurį vartotojas pasiekia tinklą (pavyzdžiui, per MITM organizaciją, kai auka prisijungia prie užpuoliko valdomo belaidžio prieigos taško arba per
Generuojant fiktyvių paketų srautą, kuriame pakeičiamas VPN sąsajos IP adresas, bandoma paveikti kliento užmegztą ryšį, tačiau šių paketų įtaka gali būti stebima tik pasyviai analizuojant susietą šifruoto srauto srautą. su tunelio veikimu. Norėdami įvykdyti ataką, turite sužinoti VPN serverio priskirto tunelio tinklo sąsajos IP adresą, taip pat nustatyti, ar šiuo metu tunelyje yra aktyvus ryšys su konkrečiu pagrindiniu kompiuteriu.
Norint nustatyti VPN virtualaus tinklo sąsajos IP, į nukentėjusiąją sistemą siunčiami SYN-ACK paketai, nuosekliai ieškant visame virtualių adresų diapazone (pirmiausia pagal numatytuosius nustatymus ieškoma VPN naudojamų adresų, pvz. OpenVPN naudoja 10.8.0.0/24 potinklį). Apie adreso egzistavimą galima spręsti pagal gautą atsakymą su RST vėliava.
Panašiu būdu nustatomas prisijungimo prie tam tikros svetainės buvimas ir prievado numeris kliento pusėje – surūšiuojant prievadų numerius vartotojui siunčiamas SYN paketas, kaip šaltinio adresas, kuriame IP svetainės adresas yra pakeistas, o paskirties adresas yra virtualus IP VPN. Serverio prievadą galima nuspėti (80 HTTP atveju), o kliento prievado numerį galima apskaičiuoti naudojant brutalią jėgą, analizuojant skirtingų skaičių ACK atsakymų intensyvumo pokyčius kartu su paketo su RST nebuvimu. vėliava.
Šiame etape užpuolikas žino visus keturis ryšio elementus (šaltinio IP adresus / prievadą ir paskirties IP adresą / prievadą), tačiau norėdamas sugeneruoti fiktyvų paketą, kurį aukų sistema priims, užpuolikas turi nustatyti TCP seką ir patvirtinimo numeriai (seq ir ack) – ryšiai. Norėdami nustatyti šiuos parametrus, užpuolikas nuolat siunčia netikrus RST paketus, bandydamas skirtingus eilės numerius, kol aptinka ACK atsako paketą, kurio gavimas rodo, kad skaičius patenka į TCP langą.
Tada užpuolikas išsiaiškina apibrėžimo teisingumą siųsdamas paketus su tuo pačiu numeriu ir stebėdamas ACK atsakymų gavimą, po kurio jis pasirenka tikslų dabartinės sekos numerį. Užduotį apsunkina tai, kad atsakymai siunčiami šifruotame tunelyje, o jų buvimas perimtame sraute gali būti analizuojamas tik naudojant netiesioginius metodus. Ar klientas siunčia ACK paketą, skirtą VPN serveriui, nustatoma pagal užšifruotų atsakymų dydį ir delsą, kurie koreliuoja su suklastotų paketų siuntimu. Pavyzdžiui, „OpenVPN“ užšifruotas 79 paketo dydis leidžia tiksliai nuspręsti, ar jame yra ACK.
Kol operacinės sistemos branduolyje nebus pridėta apsauga nuo atakų kaip laikinas problemos blokavimo būdas
iptables -t raw -I PREROUTING ! -i wg0 -d 10.182.12.8 -m adrtype ! --src-type LOCAL -j DROP
arba nftables
nft pridėti lentelę ip raw
nft add chain ip raw prerouting '{ tipo filtras kabliukas prerouting prioritetas 0; }'
nft pridėti taisyklė ip raw prerouting 'iifname != "wg0" ip daddr 10.182.12.8 fib saddr type != local drop'
Norėdami apsisaugoti naudodami tunelius su IPv4 adresais, tiesiog nustatykite rp_filter režimą „Griežtas“ („sysctl net.ipv4.conf.all.rp_filter = 1“). VPN pusėje eilės numerio aptikimo metodas gali būti blokuojamas pridedant papildomą užpildymą prie šifruotų paketų, todėl visi paketai yra vienodo dydžio.
Šaltinis: opennet.ru