hücum texnikası (CVE-2019-14899), VPN tunelləri vasitəsilə ötürülən TCP əlaqələrində paketləri dəyişdirmək, əvəzləmək və ya dəyişdirmək imkanı yaradır. Problemin təsir etdiyi sistemlər arasında Linux, FreeBSD, OpenBSD, Android, macOS, iOS və digər Unix-təbəqəsi sistemləri var. Linux, IPv4 üçün rp_filter (tərs yol filtrəsi) mexanizmini dəstəkləyir və onun «Strict» rejimə keçirilməsi, bu problemi neytrallaşdırır.
Metod, şifrələnmiş tunelin içindəki TCP əlaqələrində paketlərin əvəzlənməsini təmin edir, lakin əlavə şifrələmə qatları (məsələn, TLS, HTTPS, SSH) tətbiq edən əlaqələrə müdaxilə etməyə icazə vermir. VPN-lərdə istifadə olunan şifrələmə alqoritmləri əhəmiyyət daşımır, çünki saxta paketlər xarici interfeysdən gəlir və nüvə tərəfindən VPN interfeysindən gələn paketlər kimi işlənir. Hücumun ən ehtimallı hədəfi, şifrələnməmiş HTTP əlaqələrinə müdaxilə etməkdir, lakin və DNS cavabları ilə manipulyasiya üçün hücumu istifadə etmək mümkündür.
Uğurlu paket əvəzlənməsi, OpenVPN, WireGuard və IKEv2/IPSec vasitəsilə yaradılan tunellər üçün nümayiş etdirilib. Tor bu problemdən təsirlənmir, çünki trafiği SOCKS vasitəsilə göndərir və loopback interfeysinə bağlanır. IPv4 üçün hücum, rp_filter'in «Loose» rejiminə keçməsi halında mümkündür (sysctl net.ipv4.conf.all.rp_filter = 2). Əvvəllər əksər sistemlərdə «Strict» rejimində istifadə edilirdi, lakin , keçən ilin dekabrında buraxıldığı zaman, standart iş rejimi «Loose» ilə əvəz olundu və bu dəyişiklik bir çox Linux dağıtımının standart parametrlərində öz gerçəkliyini tapdı.
rp_filter mexanizmi paketlərin mənbə ünvanının spoofingini qarşısını almaq üçün keçid yollarının əlavə yoxlanılması üçün. 0 dəyərinə qoyulduqda mənbə ünvanının yoxlanılması aparılmır və hər hansı bir paket şəbəkə interfeysləri arasında məhdudsuz şəkildə yönləndirilə bilər. 1 «Strict» rejimi, xaricdən gələn hər paketin marşrutlaşdırma cədvəlinə uyğun gəlməsini yoxlayır və əgər paket alındığı şəbəkə interfeysi cavabın optimal çatdırılma yoluyla bağlı deyilsə, o paket silinir. 2 «Loose» rejimi, yük balanslaşdırıcıları və ya qeyri-simmetrik marşrutlaşma zamanı işləməyə icazə vermək üçün yoxlamanı mülayimləşdirir, burada
cavabın marşrutu, gələn paketin daxil olduğu şəbəkə interfeysi vasitəsilə keçməyə bilər.
«Loose» rejiminde daxil olan paket marşrutlaşdırma cədvəlinə uyğunluğu yoxlanılır, lakin mənbə adresi mövcud şəbəkə interfeysi vasitəsilə əldə edilə bilənlərdə qəbul edilir. Təklif olunan hücum, hücumçunun VPN interfeysini uyğun olan dəyişdirilmiş mənbə adresi ilə paket göndərə biləcəyini nəzərdə tutur və baxmayaraq ki, bu paket xarici şəbəkə interfeysi vasitəsilə sistemə daxil olur, «Loose» rp_filter rejimində belə paket atılmayacaq.
Hücum üçün, təcavüzkar istifadəçinin şəbəkəyə daxil olduğu qapını (məsələn, hücumçunun idarə etdiyi simsiz şəbəkə nöqtəsinə qoşulmuş qurban vasitəsilə MITM təşkil edərək) idarə etməlidir. ). Şəbəkəyə qoşulmuş istifadəçi vasitəsilə qapını idarə edərək, hücumçu yalançı paketlər göndərə bilər, bunlar VPN şəbəkə interfeysi kontekstində qəbul ediləcək, lakin cavablar tunel vasitəsilə göndəriləcək.
VPN interfeysinin IP adresini daxil edən yalançı paketlərin axınını yaradaraq müştəri tərəfindən qurulmuş bağlantıya təsir etməyə çalışılır, amma bu paketlərin təsirini yalnız tunel ilə əlaqəli şifrəli trafikdə passiv analizlə izləmək mümkündür. Hücum etmək üçün, VPN serverinin tunel şəbəkə interfeysi üçün təyin etdiyi IP adresini öyrənmək və hal-hazırda tunel vasitəsilə müəyyən bir hosta aktiv bağlantının olub olmadığını müəyyən etmək lazımdır.
VPN virtual şəbəkə interfeysinin IP adresini təyin etmək üçün qurban sisteminə SYN-ACK paketləri göndərilir, virtual adreslər spektrinin boyunca ardıcıl olaraq sınaqdan keçirilir (ilk növbədə, VPN-də standart olaraq istifadə olunan adreslər sınaqdan keçirilir, məsələn, OpenVPN-də 10.8.0.0/24 alt şəbəkəsi istifadə olunur). Bir adresin mövcudluğunu, RST flağı ilə cavabın alınması əsasında müəyyənləşdirmək olar.
Eyni şəkildə, müəyyən bir saytla və müştəri tərəfindəki port nömrəsi ilə bağlantının mövcudluğu müəyyənləşdirilir - istifadəçiyə doğru port nömrələri üzrə SYN paket göndərilir, mənbə adresi olaraq saytın IP-si, hədəf adresi isə VPN virtual IP-si təyin edilir. Server portu əvvəlcədən proqnozlaşdırıla bilər (HTTP üçün 80), müştəri tərəfindəki port nömrəsi isə sınaqdan keçirərək, ACK cavablarının intensivliyindəki dəyişiklikləri analiz edərək və RST flaqlı paketin olmamasını birləşdirərək müəyyən edilə bilər.
Bu mərhələdə hücum edən şəxsin dörd bağlantı elementindən (mənbə IP adresi/portu və təyinat IP adresi/portu) xəbəri var, lakin qurban sisteminin qəbul edəcəyi saxta paketi yaratmaq üçün TCP bağlantısının ardıcıl nömrələrini (seq və ack) müəyyən etməlidir. Bu parametrəri təyin etmək üçün hücum edən şəxs ardıcıl olaraq saxta RST paketləri göndərir, fərqli ardıcıl nömrələrini sınaqdan keçirir, ACK paketi alana qədər, bunun gəlişi TCP pəncərəsinə düşdüyünü göstərir.
Daha sonra hücum edən şəxs nəzərdə tutulmuş ardıcıl nömrəni təsdiqləmək üçün eyni nömrə ilə paketlər göndərir və ACK cavablarının gəlişini izləyir, bu, cari ardıcıl nömrənin dəqiq müəyyənləşdirilməsinə kömək edir. İş daha da çətinləşir, çünki cavablar şifrələnmiş tuneldə göndərilir və onların intercept edilmiş trafikdə mövcud olduğunu yalnız dolayı yollarla analiz etmək mümkündür. Müştəri tərəfindən VPN serverinə ünvanlanan ACK paketinin göndərilmə faktı, saxta paketlərin göndərilməsi ilə əlaqəli şifrələnmiş cavabların ölçüsü və gecikməsi əsasında müəyyən edilir. Məsələn, OpenVPN üçün 79 ölçülü şifrələnmiş paket məzmununda ACK təsdiqi olduğunu dəqiqliklə söyləməyə imkan verir.
Hücumdan müdafiə əlavə edilməzdən əvvəl, problemi dəf etmək üçün müvəqqəti bir metod olaraq paket filtrindən istifadə edərək “preroute” zəncirində, təyinat ünvanı tunelin virtual IP ünvanı olan paketlərin keçidini bloklamaq.
iptables -t raw -I PREROUTING ! -i wg0 -d 10.182.12.8 -m addrtype ! —src-type LOCAL -j DROP
və ya nftables üçün
nft add table ip raw
nft add chain ip raw prerouting ‘{ type filter hook prerouting priority 0; }’
nft add rule ip raw prerouting ‘iifname != «wg0» ip daddr 10.182.12.8 fib saddr type != local drop’
IPv4 ünvanları ilə tunellərin istifadəsində qoruma üçün rp_filter’i «Strict» rejimə keçirmək kifayətdir («sysctl net.ipv4.conf.all.rp_filter = 1»). VPN tərəfdən ardıcıl nömrənin müəyyən edilməsi, bütün paketlərin ölçüsünü eyni edən əlavə doldurulma əlavə edilməklə bloklana bilər.
Mənbə: opennet.ru
