Ευπάθεια που επιτρέπει την παραβίαση συνδέσεων TCP που γίνονται μέσω σήραγγες VPN

Δημοσίευσε μια τεχνική επίθεσης (CVE-2019-14899) που επιτρέπει στα πακέτα να παραποιούνται, να τροποποιούνται ή να αντικαθίστανται σε συνδέσεις TCP που προωθούνται μέσω σήραγγες VPN. Το πρόβλημα επηρεάζει τα Linux, FreeBSD, OpenBSD, Android, macOS, iOS και άλλα συστήματα παρόμοια με το Unix. Το Linux υποστηρίζει τον μηχανισμό rp_filter (φίλτρο αντίστροφης διαδρομής) για το IPv4, η ενεργοποίησή του σε λειτουργία "Αυστηρή" εξουδετερώνει αυτό το πρόβλημα.

Η μέθοδος επιτρέπει την αντικατάσταση πακέτων στο επίπεδο των συνδέσεων TCP που περνούν μέσα σε μια κρυπτογραφημένη σήραγγα, αλλά δεν επιτρέπει τη σφήνωση σε συνδέσεις που χρησιμοποιούν πρόσθετα επίπεδα κρυπτογράφησης (για παράδειγμα, TLS, HTTPS, SSH). Οι αλγόριθμοι κρυπτογράφησης που χρησιμοποιούνται στο VPN δεν έχουν σημασία, καθώς τα πλαστά πακέτα προέρχονται από την εξωτερική διεπαφή και επεξεργάζονται από τον πυρήνα ως πακέτα από τη διεπαφή VPN. Ο πιο πιθανός στόχος της επίθεσης είναι η παρέμβαση σε μη κρυπτογραφημένες συνδέσεις HTTP, αλλά δεν αποκλείεται και χρησιμοποιώντας μια επίθεση για τον χειρισμό των αποκρίσεων DNS.

Έχει αποδειχθεί επιτυχής πλαστογράφηση πακέτων για σήραγγες που δημιουργήθηκαν με χρήση OpenVPN, WireGuard και IKEv2/IPSec. Το Tor δεν είναι ευαίσθητο στο πρόβλημα, καθώς χρησιμοποιεί SOCKS για την προώθηση της κυκλοφορίας και είναι συνδεδεμένο σε μια διεπαφή loopback. Για το IPv4, μια επίθεση είναι δυνατή εάν το rp_filter έχει ρυθμιστεί σε λειτουργία "Χαλαρή" (sysctl net.ipv4.conf.all.rp_filter = 2). Αρχικά, τα περισσότερα συστήματα χρησιμοποιούσαν τη λειτουργία "Αυστηρή", αλλά ξεκινώντας από σύστημα 240, που κυκλοφόρησε τον περασμένο Δεκέμβριο, ο προεπιλεγμένος τρόπος λειτουργίας άλλαξε σε "Loose" και αυτή η αλλαγή αντικατοπτρίστηκε στις προεπιλεγμένες ρυθμίσεις πολλών διανομών Linux.

μηχανισμός rp_filter εφαρμοσμένος για πρόσθετη επαλήθευση των διαδρομών πακέτων για την αποφυγή πλαστογράφησης διεύθυνσης πηγής. Όταν οριστεί στο 0, δεν πραγματοποιείται έλεγχος διεύθυνσης πηγής και οποιοδήποτε πακέτο μπορεί να προωθηθεί μεταξύ διεπαφών δικτύου χωρίς περιορισμούς. Η λειτουργία 1 «Αυστηρή» περιλαμβάνει τον έλεγχο κάθε πακέτου που έρχεται από έξω για συμμόρφωση με τον πίνακα δρομολόγησης και εάν η διεπαφή δικτύου μέσω της οποίας ελήφθη το πακέτο δεν συσχετίζεται με τη βέλτιστη διαδρομή παράδοσης απόκρισης, τότε το πακέτο απορρίπτεται. Η λειτουργία 2 "Χαλαρά" χαλαρώνει τον έλεγχο για να επιτρέψει τη λειτουργία των εξισορροπητών φορτίου ή της ασύμμετρης δρομολόγησης όταν
Η διαδρομή απόκρισης μπορεί να περάσει μέσα από μια διεπαφή δικτύου διαφορετική από αυτή μέσω της οποίας έφτασε το εισερχόμενο πακέτο.

Στη λειτουργία Loose, ένα εισερχόμενο πακέτο ελέγχεται στον πίνακα δρομολόγησης, αλλά θεωρείται έγκυρο εάν η διεύθυνση πηγής είναι προσβάσιμη μέσω οποιασδήποτε διαθέσιμης διεπαφής δικτύου. Η προτεινόμενη επίθεση βασίζεται στο γεγονός ότι ο εισβολέας μπορεί να στείλει ένα πακέτο με μια πλαστή διεύθυνση πηγής που αντιστοιχεί στη διεπαφή VPN και παρά το γεγονός ότι αυτό το πακέτο θα εισέλθει στο σύστημα μέσω της εξωτερικής διεπαφής δικτύου και όχι μέσω του VPN, rp_filter «Χαλαρή» λειτουργία ένα τέτοιο πακέτο δεν θα απορριφθεί.

Για να πραγματοποιήσει μια επίθεση, ο εισβολέας πρέπει να ελέγξει την πύλη μέσω της οποίας ο χρήστης έχει πρόσβαση στο δίκτυο (για παράδειγμα, μέσω ενός οργανισμού MITM, όταν το θύμα συνδέεται σε ένα σημείο ασύρματης πρόσβασης που ελέγχεται από τον εισβολέα ή μέσω hacking δρομολογητή). Ελέγχοντας την πύλη μέσω της οποίας συνδέεται ένας χρήστης στο δίκτυο, ένας εισβολέας μπορεί να στείλει ψεύτικα πακέτα που θα γίνουν αντιληπτά στο πλαίσιο της διεπαφής δικτύου VPN, αλλά οι αποκρίσεις θα δρομολογηθούν μέσω του τούνελ.

Δημιουργώντας μια ροή πλασματικών πακέτων στα οποία αντικαθίσταται η διεύθυνση IP της διεπαφής VPN, γίνονται προσπάθειες να επηρεαστεί η σύνδεση που δημιουργείται από τον πελάτη, αλλά η επιρροή αυτών των πακέτων μπορεί να παρατηρηθεί μόνο μέσω παθητικής ανάλυσης της κρυπτογραφημένης ροής κυκλοφορίας που σχετίζεται με τη λειτουργία της σήραγγας. Για να πραγματοποιήσετε μια επίθεση, πρέπει να μάθετε τη διεύθυνση IP της διεπαφής δικτύου σήραγγας που έχει εκχωρηθεί από τον διακομιστή VPN και επίσης να προσδιορίσετε ότι μια σύνδεση με έναν συγκεκριμένο κεντρικό υπολογιστή είναι ενεργή αυτήν τη στιγμή μέσω του τούνελ.

Για τον προσδιορισμό της IP της διεπαφής εικονικού δικτύου VPN, τα πακέτα SYN-ACK αποστέλλονται στο σύστημα θύματος, απαριθμώντας διαδοχικά ολόκληρο το εύρος των εικονικών διευθύνσεων (πρώτα απ 'όλα, οι διευθύνσεις που χρησιμοποιούνται στο VPN απαριθμούνται από προεπιλογή, για παράδειγμα, OpenVPN χρησιμοποιεί το υποδίκτυο 10.8.0.0/24). Η ύπαρξη μιας διεύθυνσης μπορεί να κριθεί με βάση τη λήψη απάντησης με τη σημαία RST.

Με παρόμοιο τρόπο, προσδιορίζεται η παρουσία μιας σύνδεσης σε μια συγκεκριμένη τοποθεσία και ο αριθμός θύρας στην πλευρά του πελάτη - ταξινομώντας τους αριθμούς θύρας, αποστέλλεται ένα πακέτο SYN στον χρήστη, ως διεύθυνση πηγής, στην οποία βρίσκεται ο ιστότοπος Το IP αντικαθίσταται και η διεύθυνση προορισμού είναι ένα εικονικό IP VPN. Η θύρα διακομιστή μπορεί να προβλεφθεί (80 για το HTTP) και ο αριθμός θύρας στην πλευρά του πελάτη μπορεί να υπολογιστεί με ωμή βία, αναλύοντας για διαφορετικούς αριθμούς την αλλαγή στην ένταση των αποκρίσεων ACK σε συνδυασμό με την απουσία πακέτου με το RST σημαία.

Σε αυτό το στάδιο, ο εισβολέας γνωρίζει και τα τέσσερα στοιχεία της σύνδεσης (διευθύνσεις IP πηγής/θύρα και διεύθυνση IP/θύρα IP προορισμού), αλλά για να δημιουργήσει ένα εικονικό πακέτο που θα δεχτεί το σύστημα θύματος, ο εισβολέας πρέπει να καθορίσει την ακολουθία TCP και αριθμοί επιβεβαίωσης (seq και ack) - συνδέσεις. Για να καθορίσει αυτές τις παραμέτρους, ο εισβολέας στέλνει συνεχώς ψεύτικα πακέτα RST, δοκιμάζοντας διαφορετικούς αριθμούς ακολουθίας, μέχρι να εντοπίσει ένα πακέτο απόκρισης ACK, η άφιξη του οποίου δείχνει ότι ο αριθμός εμπίπτει στο παράθυρο TCP.

Στη συνέχεια, ο εισβολέας διευκρινίζει την ορθότητα του ορισμού στέλνοντας πακέτα με τον ίδιο αριθμό και παρατηρώντας την άφιξη των απαντήσεων ACK, μετά την οποία επιλέγει τον ακριβή αριθμό της τρέχουσας ακολουθίας. Η εργασία περιπλέκεται από το γεγονός ότι οι απαντήσεις αποστέλλονται μέσα σε μια κρυπτογραφημένη σήραγγα και η παρουσία τους στο ρεύμα κυκλοφορίας που έχει υποκλαπεί μπορεί να αναλυθεί μόνο με έμμεσες μεθόδους. Το αν ένας πελάτης στέλνει ένα πακέτο ACK που απευθύνεται στον διακομιστή VPN καθορίζεται με βάση το μέγεθος και τον λανθάνοντα χρόνο των κρυπτογραφημένων απαντήσεων, οι οποίες συσχετίζονται με την αποστολή πλαστών πακέτων. Για παράδειγμα, για το OpenVPN, ένα κρυπτογραφημένο μέγεθος πακέτου 79 σάς επιτρέπει να κρίνετε με ακρίβεια ότι υπάρχει ένα ACK μέσα.

Μέχρι να προστεθεί προστασία επίθεσης στον πυρήνα του λειτουργικού συστήματος ως προσωρινή μέθοδος αποκλεισμού του προβλήματος συνιστάται χρησιμοποιώντας ένα φίλτρο πακέτων στην αλυσίδα «προδρομολόγησης», αποκλείστε τη διέλευση πακέτων στα οποία η εικονική διεύθυνση IP του τούνελ καθορίζεται ως διεύθυνση προορισμού.

iptables -t raw -I PREROUTING ! -i wg0 -d 10.182.12.8 -m addrtype ! --src-τύπου LOCAL -j DROP

ή για nftables

nft προσθήκη 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, απλώς ρυθμίστε το rp_filter στη λειτουργία "Αυστηρή" ("sysctl net.ipv4.conf.all.rp_filter = 1"). Από την πλευρά του VPN, η μέθοδος ανίχνευσης αριθμών ακολουθίας μπορεί να αποκλειστεί προσθέτοντας επιπλέον padding στα κρυπτογραφημένα πακέτα, καθιστώντας όλα τα πακέτα το ίδιο μέγεθος.

Πηγή: opennet.ru

Προσθέστε ένα σχόλιο