11.11.2012

Κάτω από την πλημμύρασυνεπάγεται μια τεράστια ροή δεδομένων με τη μορφή μηνυμάτων, τα οποία αποστέλλονται για ανάρτηση σε κάθε είδους φόρουμ και συνομιλίες. Από τεχνική άποψη, πλημμύραείναι ένα από τα πιο κοινά είδη επιθέσεων υπολογιστή, και σκοπός του είναι να στείλει τέτοιο αριθμό αιτημάτων που θα αναγκαστεί να εκτελέσει το υλικό του διακομιστή άρνηση παροχής υπηρεσιώνυπηρεσίες χρηστών. Αν ένα επίθεση υπολογιστήπραγματοποιείται με ένας μεγάλος αριθμόςυπολογιστές, τότε έχετε να κάνετε με .

Υπάρχουν διάφοροι τύποι επιθέσεων πλημμύρας DDoS, οι κυριότεροι από τους οποίους παρατίθενται παρακάτω:

  • Πλημμύρα SYN-ACK
  • HTTP πλημμύρα
  • Πλημμύρα ICMP
  • Πλημμύρα UDP

Πλημμύρα SYN-ACK

Πλημμύρα SYN-ACK- ένας από τους τύπους επιθέσεις δικτύου, το οποίο βασίζεται στην αποστολή ενός τεράστιου αριθμού αιτημάτων SYN ανά μονάδα χρόνου. Το αποτέλεσμα θα είναι η απενεργοποίηση της υπηρεσίας, η λειτουργία της οποίας βασίστηκε στο πρωτόκολλο TCP. Αρχικά, ο πελάτης στέλνει ένα πακέτο στον διακομιστή που περιέχει μια σημαία SYN, η παρουσία του οποίου υποδεικνύει ότι ο πελάτης θέλει να δημιουργήσει μια σύνδεση. Ο διακομιστής, με τη σειρά του, στέλνει ένα πακέτο απόκρισης. Εκτός από τη σημαία SYN, περιέχει επίσης μια σημαία ACK, η οποία εφιστά την προσοχή του πελάτη στο γεγονός ότι το αίτημα έχει γίνει αποδεκτό και η σύνδεση αναμένεται να επιβεβαιωθεί από τον πελάτη. Απαντά με ένα πακέτο με σημαία ACK σχετικά με μια επιτυχημένη σύνδεση. Ο διακομιστής αποθηκεύει όλα τα αιτήματα για "σύνδεση" από πελάτες σε μια ουρά ορισμένου μεγέθους. Τα αιτήματα βρίσκονται στην ουρά μέχρι να επιστραφεί η σημαία ACK από τον πελάτη. Μια επίθεση SYN βασίζεται στην αποστολή πακέτων από μια ανύπαρκτη πηγή στον διακομιστή που υπερβαίνει το μέγεθος της ουράς. Ο διακομιστής απλά δεν θα μπορεί να απαντήσει σε ένα πακέτο σε μια πλασματική διεύθυνση. Η ουρά δεν θα μειωθεί και η υπηρεσία θα σταματήσει να λειτουργεί.

HTTP πλημμύρα

HTTP πλημμύρα- ισχύει όταν η υπηρεσία λειτουργεί με βάση δεδομένων. Η επίθεση στοχεύει είτε σε διακομιστή ιστού, ή σε ένα σενάριο που λειτουργεί με τη βάση δεδομένων. Ένας τεράστιος αριθμός αιτημάτων GET αποστέλλεται στη θύρα 80, έτσι ώστε ο διακομιστής web να μην μπορεί να δώσει τη δέουσα προσοχή σε αιτήματα διαφορετικού τύπου. Τα αρχεία καταγραφής μεγαλώνουν και η εργασία με τη βάση δεδομένων γίνεται αδύνατη.

Πλημμύρα ICMP

Πλημμύρα ICMP- εύκολος τρόπος μείωση της απόδοσηςκαι αύξηση φορτίουστη στοίβα μέσω αποστολής παρόμοιων αιτημάτων ICMP PING. Επικίνδυνο εάν δίνεται λίγη προσοχή στα τείχη προστασίας, καθώς ένας διακομιστής που ανταποκρίνεται σε ατελείωτα αιτήματα ECHO είναι καταδικασμένος. Επομένως, σε περίπτωση ίσης εισερχόμενης και εξερχόμενης κίνησης, απλώς γράψτε τους κανόνες iptables.

Πλημμύρα UDP

Πλημμύρα UDP- ένας άλλος τρόπος ακαταστασία εύρους ζώνης, το οποίο βασίζεται στην εργασία με ένα πρωτόκολλο που δεν απαιτεί συγχρονισμό πριν από την αποστολή δεδομένων. Η επίθεση καταλήγει στη συνήθη αποστολή ενός πακέτου στη θύρα UDP του διακομιστή. Μετά τη λήψη του πακέτου, ο διακομιστής αρχίζει να το επεξεργάζεται εντατικά. Στη συνέχεια, ο πελάτης στέλνει ένα προς ένα πακέτα Udp με κακή μορφή. Ως αποτέλεσμα, οι θύρες θα σταματήσουν να λειτουργούν και το σύστημα θα καταρρεύσει.

Βασικά, ο ορισμός τύπος επίθεσης DDoSσυχνά δεν χρειάζεται να ξοδέψετε πολύ χρόνο. Αρκεί να γνωρίζουμε μερικά σημάδια. Αν σημαντικά αύξησε το μέγεθος των αρχείων καταγραφής- Έχεις να κάνεις HTTP πλημμύρα. Αν ένα περιορισμένη πρόσβαση στην υπηρεσίαως αποτέλεσμα της υπέρβασης του αριθμού των επιτρεπόμενων συνδέσεων είναι Πλημμύρα SYN-ACK. Αν εξερχόμενη και εισερχόμενη κίνησηπερίπου ίσο- Έχεις να κάνεις Πλημμύρα ICMP. Το κύριο πράγμα δεν είναι να ξεχάσετε τη συντήρηση την ασφάλεια του διακομιστή σαςαπό το DDoS και δώστε τη δέουσα προσοχή σε αυτό. Το καλύτερο είναι να φροντίζεις

DoS (συντομ. Denial of Service "άρνηση υπηρεσίας") - επίθεση χάκερσε ένα υπολογιστικό σύστημα για να το φέρει σε αστοχία, δηλαδή τη δημιουργία τέτοιων συνθηκών υπό τις οποίες οι ευσυνείδητοι χρήστες του συστήματος δεν μπορούν να αποκτήσουν πρόσβαση στους παρεχόμενους πόρους του συστήματος (διακομιστές), ή αυτή η πρόσβαση είναι δύσκολη.

Υπάρχουν δύο τύποι επιθέσεων DoS / DDoS και η πιο συνηθισμένη βασίζεται στην ιδέα του flooding, δηλαδή πλημμυρίζοντας το θύμα με έναν τεράστιο αριθμό πακέτων. Η πλημμύρα μπορεί να είναι διαφορετική: πλημμύρα ICMP, πλημμύρα SYN, πλημμύρα UDP και πλημμύρα HTTP. Τα σύγχρονα ρομπότ DoS μπορούν να χρησιμοποιήσουν όλους αυτούς τους τύπους επιθέσεων ταυτόχρονα, επομένως θα πρέπει να φροντίζετε εκ των προτέρων για την επαρκή προστασία έναντι καθενός από αυτούς.

Ανίχνευση επιθέσεων DoS

πλημμύρα ΣΥΝ

Η παρουσία μιας πλημμύρας SYN διαπιστώνεται εύκολα - μετρώντας τον αριθμό των "μισά-ανοιχτών" συνδέσεων TCP. Σε μια κανονική κατάσταση, δεν πρέπει να είναι καθόλου (ή πολύ μικρή ποσότητα: το πολύ 1-3).

Προστασία DoS

    Μπλοκάρει θραύσματα - πακέτα. Δεδομένου ότι, λόγω του λειτουργικού σκοπού του πρωτοκόλλου, τα πακέτα ICMP πρέπει να είναι πολύ μικρά και κανονικά να ταιριάζουν στο MTU, η παρουσία των θραυσμάτων τους συνήθως υποδηλώνει σφάλμα ή απόπειρα επίθεσης. iptables -A INPUT -p icmp -f -j DROP

    Αποτρέψτε την πλαστογράφηση για λογαριασμό σας. iptables -A INPUT -m conntrack --ctstate NEW,INVALID -p tcp --tcp-flags SYN,ACK SYN,ACK -j LOG --log-level info --log-prefix "DROP SYN,ACK: " iptables - A INPUT -m conntrack --ctstate NEW,INVALID -p tcp --tcp-flags SYN,ACK SYN,ACK -j REJECT --reject-με tcp-reset

    Εξάλλου, εάν λάβουμε ένα πακέτο με τις σημαίες SYN και ACK που έχουν οριστεί (μόνο μια απάντηση σε ένα πακέτο SYN έχει τέτοιο συνδυασμό σημαιών) σε μια σύνδεση που δεν είναι ακόμη ανοιχτή, αυτό σημαίνει ότι κάποιος έστειλε ένα πακέτο SYN σε άλλο κεντρικό υπολογιστή για λογαριασμό μας, και η απάντηση ήρθε σε εμάς. Φυσικά, ο επιθετικός θα πρέπει ακόμα να μαντέψει τον αριθμό σειράς, αλλά είναι καλύτερα να μην του δοθεί μια τέτοια ευκαιρία. Σύμφωνα με τον παραπάνω κανόνα, ο κεντρικός υπολογιστής μας θα απαντήσει με ένα πακέτο RST, μετά τη λήψη του οποίου ο κεντρικός υπολογιστής που δέχεται επίθεση θα κλείσει τη σύνδεση. Η προσθήκη ενός τέτοιου κανόνα στη διαμόρφωση του τείχους προστασίας σας συνιστάται ιδιαίτερα, γιατί εάν ένας εισβολέας καταφέρει να πλαστογραφήσει εκ μέρους σας, η διαδρομή θα σας οδηγήσει κατά τη διερεύνηση αυτού του επεισοδίου.

πλημμύρα ΣΥΝ

Ένας από τους συνηθισμένους τρόπους όχι μόνο για να μπλοκάρετε το κανάλι επικοινωνίας, αλλά και να εισέλθετε στοίβα δικτύουλειτουργικό σύστημα σε κατάσταση όπου δεν μπορεί πλέον να δέχεται νέες αιτήσεις σύνδεσης. Βασίζεται σε μια προσπάθεια προετοιμασίας ενός μεγάλου αριθμού ταυτόχρονων συνδέσεων TCP με την αποστολή ενός πακέτου SYN με ανύπαρκτη διεύθυνση επιστροφής. Μετά από πολλές προσπάθειες αποστολής ενός πακέτου ACK απόκρισης σε μια μη προσβάσιμη διεύθυνση, τα περισσότερα λειτουργικά συστήματα βάζουν στην ουρά μια μη εγκατεστημένη σύνδεση. Και μόνο μετά την nη προσπάθεια, η σύνδεση κλείνει. Δεδομένου ότι η ροή των πακέτων ACK είναι πολύ μεγάλη, σύντομα η ουρά γεμίζει και ο πυρήνας αρνείται να προσπαθήσει να ανοίξει μια νέα σύνδεση. Τα πιο έξυπνα ρομπότ DoS αναλύουν επίσης το σύστημα πριν ξεκινήσουν μια επίθεση, προκειμένου να στείλουν αιτήματα μόνο για άνοιγμα ζωτικής σημασίας θύρες. Ο εντοπισμός μιας τέτοιας επίθεσης είναι απλός: απλώς προσπαθήστε να συνδεθείτε σε μία από τις υπηρεσίες. Τα αμυντικά μέτρα περιλαμβάνουν συνήθως:

Αυξήστε την ουρά των "μισάνοιχτων" συνδέσεων TCP:

# sysctl -w net.ipv4.tcp_max_syn_backlog=1024

Μείωση του χρόνου διατήρησης των "μισάνοιχτων" συνδέσεων:

# sysctl -w net.ipv4.tcp_synack_retries=1

Ενεργοποίηση του μηχανισμού συγχρονισμού TCP:

# sysctl -w net.ipv4.tcp_syncookies=1

Πλημμύρα UDP

Μέθοδος ακαταστασίας εύρους ζώνης. Βασίζεται στην ατελείωτη αποστολή πακέτων UDP στις θύρες διαφόρων υπηρεσιών UDP. Εξαλείφεται εύκολα αποκόπτοντας τέτοιες υπηρεσίες από τον έξω κόσμο και θέτοντας ένα όριο στον αριθμό των συνδέσεων ανά μονάδα χρόνου.

#Ορίστε ένα όριο 5 συνδέσεων στη θύρα 80. iptables -A INPUT -p tcp --syn --dport 80 -m connlimit --connlimit-πάνω από 5 -j REJECT # Να επιτρέπεται μόνο μία ταυτόχρονη σύνδεση από μία IP σε smtp iptables -A FORWARD -p tcp --syn --dport smtp -m connlimit --connlimit-πάνω από 1 -j DROP # Ορίστε ένα όριο 200 συνδέσεων στη θύρα 1720. iptables -A INPUT -p tcp --syn --dport 1720 -m connlimit --connlimit-πάνω από 200 -j REJECT # udp 5060 $IPT -A INPUT -p udp --dport 5060 -m connlimit --connlimit-a -j LOG --πληροφορίες επιπέδου καταγραφής --log-πρόθεμα "REJECT 5060: " $IPT -A INPUT -p udp --dport 5060 -m connlimit --connlimit-πάνω από 60 -j REJECT # tcp 1720 $IPT -A INPUT -p tcp --syn --dport 1720 -m connlimit --connlimit-πάνω από 60 -j LOG --log-level info --log-prefix "REJECT 1720: " $IPT -A INPUT -p tcp --syn --dport 1720 -m connlimit --connlimit-πάνω από 60 -j REJECT

Πλημμύρα ICMP

Μια πολύ πρωτόγονη μέθοδος περιορισμού του εύρους ζώνης και δημιουργίας φορτίων στη στοίβα δικτύου μέσω της μονότονης αποστολής αιτημάτων ICMP είναι το πρωτόκολλο διάγνωσης συμφόρησης δικτύου ECHO (ping). Εντοπίζεται εύκολα με ανάλυση των ροών κυκλοφορίας και προς τις δύο κατευθύνσεις: κατά τη διάρκεια μιας επίθεσης πλημμύρας ICMP, είναι σχεδόν πανομοιότυπες. Ένας σχεδόν ανώδυνος τρόπος απόλυτης προστασίας βασίζεται στην απενεργοποίηση των απαντήσεων σε αιτήματα ICMP ECHO:

sysctl net.ipv4.icmp_echo_ignore_all=1

Ή με τείχος προστασίας:

Iptables -A INPUT -p icmp -j DROP --icmp-type 8

HTTP πλημμύρα

    Αριθμός διεργασιών ps aux | grep apache | wc -l

    Αριθμός συνδέσεων στη θύρα 80 netstat -na | grep ":80" | wc -l

    Προβολή λίστας διευθύνσεις IPαπό το οποίο γίνονται αιτήσεις σύνδεσης: netstat -na | grep ":80" | ταξινόμηση | uniq -c | ταξινόμηση-αρ

sysctl

    Προστασία από πλαστογράφηση net.ipv4.conf.default.rp_filter = 1

    Ελέγχετε τη σύνδεση TCP κάθε λεπτό. Εάν υπάρχει νόμιμο αυτοκίνητο από την άλλη πλευρά, θα απαντήσει αμέσως. Η προεπιλεγμένη τιμή είναι 2 ώρες. net.ipv4.tcp_keepalive_time = 60

    Δοκιμάστε ξανά σε δέκα δευτερόλεπτα net.ipv4.tcp_keepalive_intvl = 10

    Αριθμός ελέγχων πριν από το κλείσιμο της σύνδεσης net.ipv4.tcp_keepalive_probes = 5

Debian: Καταπολέμηση DDoS

Από προεπιλογή, το Debian OS και άλλα λειτουργικά συστήματα δεν μπορούν να υποστηρίξουν τον τεράστιο αριθμό συνδέσεων που δημιουργούνται από το botnet. Πρέπει να γίνουν αλλαγές στη διαμόρφωση του πυρήνα για να ενισχυθεί η στοίβα TCP/IP. Ένα παράδειγμα τέτοιας διαμόρφωσης:

net.ipv4.conf.all.accept_redirects = 0 net.ipv4.conf.eth0.accept_redirects = 0 net.ipv4.conf.default.accept_redirects = 0 net.core.rmem_max = 996777216 net.max.wme196 .tcp_rmem = 4096 87380 4194304 net.ipv4.tcp_mem= 786432 1048576 996777216 net.ipv4.tcp_wmem = 4096 87380 4194304 net.ipv4.tcp_max_orphans = 2255360 net.core.netdev_max_backlog = 10000 net.ipv4.tcp_fin_timeout = 10 net.ipv4.tcp_keepalive_intvl = 15 net.ipv4.tcp_max_syn_backlog = 2048 net.ipv4.tcp_synack_retries = 1 kernel.msgmnb = 65536 kernel.msgmax = 65536 kernel.shmmax = 495corekernel2.6max = 495corekernel20.

Αλλάξτε προσεκτικά τη διαμόρφωση του πυρήνα και επανεκκινήστε τον διακομιστή...

FreeBSD: Καταπολέμηση DDoS

Μειώνουμε τον χρόνο αναμονής για ένα πακέτο απόκρισης σε ένα αίτημα SYN-ACK (προστασία από πλημμύρα SYN):

# sysctl net.inet.tcp.msl=7500

Μετατρέπουμε τον διακομιστή σε μαύρη τρύπα. Έτσι, ο πυρήνας δεν θα στέλνει πακέτα απόκρισης όταν προσπαθεί να συνδεθεί σε μη κατειλημμένες θύρες (μειώνει το φορτίο στο μηχάνημα κατά τη διάρκεια DDoS "αλλά σε τυχαίες θύρες):

# sysctl net.inet.tcp.blackhole=2 # sysctl net.inet.udp.blackhole=1

Περιορίζουμε τον αριθμό των απαντήσεων σε μηνύματα ICMP σε 50 ανά δευτερόλεπτο (προστασία από πλημμύρες ICMP):

# sysctl net.inet.icmp.icmplim=50

Αυξάνουμε μέγιστο ποσόσυνδέσεις με τον διακομιστή (προστασία έναντι όλων των τύπων DDoS):

# sysctl kern.ipc.somaxconn=32768

Ενεργοποιούμε τη συσκευή DEVICE_POLLING - αυτόματη δημοσκόπηση του προγράμματος οδήγησης δικτύου από τον πυρήνα σε υψηλά φορτία (μειώνει σημαντικά το φορτίο στο σύστημα κατά τη διάρκεια DDoS "a):

Δημιουργήστε ξανά τον πυρήνα με την επιλογή "επιλογές DEVICE_POLLING". Ενεργοποιήστε τον μηχανισμό δημοσκόπησης: "sysctl kern.polling.enable=1"; Προσθέστε μια καταχώρηση "kern.polling.enable=1" στο /etc/sysctl.conf.

Για να μην μπείτε σε αδιέξοδο κατά τη διάρκεια της κατάρρευσης μιας καταιγίδας DDoS στα συστήματα, πρέπει να τα προετοιμάσετε προσεκτικά για μια τέτοια κατάσταση:

    Όλοι οι διακομιστές που έχουν άμεση πρόσβαση στο εξωτερικό δίκτυο θα πρέπει να είναι προετοιμασμένοι για μια απλή και γρήγορη απομακρυσμένη επανεκκίνηση (το sshd θα σώσει τον πατέρα της ρωσικής δημοκρατίας). Ένα μεγάλο πλεονέκτημα θα είναι η παρουσία μιας δεύτερης, διαχειριστικής, διεπαφής δικτύου μέσω της οποίας μπορείτε να έχετε πρόσβαση στον διακομιστή σε περίπτωση που το κύριο κανάλι είναι φραγμένο.

    Το λογισμικό που χρησιμοποιείται στον διακομιστή πρέπει να είναι πάντα ενημερωμένο. Όλες οι τρύπες διορθώθηκαν, οι ενημερώσεις έχουν εγκατασταθεί (απλή σαν εκκίνηση, συμβουλές που πολλοί δεν ακολουθούν). Αυτό θα σας προστατεύσει από επιθέσεις DoS που εκμεταλλεύονται σφάλματα στις υπηρεσίες.

    Όλες οι υπηρεσίες δικτύου ακρόασης που προορίζονται για διοικητική χρήση θα πρέπει να είναι κρυμμένες πίσω από ένα τείχος προστασίας από οποιονδήποτε δεν θα πρέπει να έχει πρόσβαση σε αυτές. Τότε ο εισβολέας δεν θα μπορεί να τα χρησιμοποιήσει για να πραγματοποιήσει επίθεση DoS ή ωμή βία.

    Στις προσεγγίσεις στον διακομιστή (πλησιέστερος δρομολογητής), θα πρέπει να εγκατασταθεί ένα σύστημα ανάλυσης κυκλοφορίας (NetFlow για βοήθεια), το οποίο θα σας επιτρέψει να μάθετε για μια αρχική επίθεση έγκαιρα και να λάβετε έγκαιρα μέτρα για την αποτροπή της.

Η επίθεση πλημμύρας SYN είναι μια μορφή επίθεσης άρνησης υπηρεσίας κατά την οποία ένας εισβολέας στέλνει μεγάλο αριθμό αιτημάτων SYN στις υπηρεσίες ενός συστήματος στόχου που χρησιμοποιούν πρωτόκολλο TCP. Αυτό καταναλώνει τους πόρους του διακομιστή ώστε το σύστημα να μην ανταποκρίνεται ακόμη και σε νόμιμη κυκλοφορία. Αυτή η επίθεση μπορεί να συμβεί σε οποιεσδήποτε υπηρεσίες χρησιμοποιούν πρωτόκολλο TCP αλλά κυρίως σε υπηρεσίες web. Σε αυτό το σεμινάριο, θα δούμε αναλυτικά τα βασικά των επιθέσεων πλημμύρας SYN και τα βήματα μετριασμού.

Η επίθεση SYN Flood εκμεταλλεύεται ένα χαρακτηριστικό υλοποίησης του Πρωτοκόλλου Ελέγχου Μετάδοσης (TCP), το οποίο ονομάζεται 3-way handshake. Τα παρακάτω είναι τα βήματα που συμβαίνουν σε μια κανονική χειραψία 3 κατευθύνσεων:

1. Ο πελάτης ζητά σύνδεση στέλνοντας ένα μήνυμα SYN (συγχρονισμός) στον διακομιστή.
2. Ο διακομιστής αναγνωρίζει αυτό το αίτημα στέλνοντας SYN-ACK πίσω στον πελάτη.
3. Ο πελάτης απαντά με ένα ACK και η σύνδεση αποκαθίσταται.

Μια επίθεση πλημμύρας SYN λειτουργεί με το να μην αποκρίνεται στον διακομιστή με τον αναμενόμενο κωδικό ACK. Με αυτές τις μισάνοιχτες συνδέσεις, το ανεκτέλεστο TCP των μηχανών-στόχων θα γεμίσει και, ως εκ τούτου, όλες οι νέες συνδέσεις μπορεί να αγνοηθούν. Αυτό θα έχει ως αποτέλεσμα να αγνοηθούν και οι νόμιμοι χρήστες.

Αυτή η επίθεση μπορεί να γίνει με δύο τρόπους:

1. Άμεση επίθεση

Σε αυτό το είδος επίθεσης, οι εισβολείς στέλνουν γρήγορα τμήματα SYN χωρίς να πλαστογραφούν τη διεύθυνση πηγής IP τους. Όταν εντοπιστεί, αυτός ο τύπος επίθεσης είναι πολύ εύκολο να υπερασπιστεί, επειδή μπορούμε να προσθέσουμε έναν απλό κανόνα τείχους προστασίας για να αποκλείσουμε πακέτα με τη διεύθυνση IP πηγής του εισβολέα που θα επιτεθεί.

2. Χρήση διεύθυνσης IP Spoofing

Αυτή είναι μια πιο περίπλοκη μορφή επίθεσης από την άμεση επίθεση. Σε αυτή τη μέθοδο, το κακόβουλο μηχάνημα θα στείλει πλημμύρες αιτημάτων SYN στο μηχάνημα προορισμού από πλαστές διευθύνσεις IP, αναγκάζοντας τον διακομιστή να στείλει το SYN-ACK σε μια παραποιημένη διεύθυνση IP - η οποία δεν θα στείλει ACK επειδή "γνωρίζει" ότι ποτέ δεν έστειλε ΣΥΝ.

Ανίχνευση επίθεσης πλημμύρας SYN

Το γενικό σύμπτωμα της επίθεσης SYN Flood σε έναν επισκέπτη ιστότοπου είναι ότι ένας ιστότοπος χρειάζεται πολύ χρόνο για να φορτώσει ή φορτώνει ορισμένα στοιχεία μιας σελίδας αλλά όχι άλλα. Εάν υποπτεύεστε επίθεση SYN Flood σε διακομιστή ιστού, μπορείςχρησιμοποιήστε για να ελέγξετε τα αιτήματα σύνδεσης διακομιστή web που βρίσκονται στην κατάσταση "SYN_RECEIVED".

netstat -tuna | grep:80 | grep SYN_RECV

Εάν εμφανίζει πολλές συνδέσεις με αυτήν την κατάσταση, ο διακομιστής μπορεί να βρίσκεται υπό επίθεση SYN Flood. Εάν η επίθεση είναι άμεση με μεγάλο αριθμό πακέτων SYN_RECV από μία διεύθυνση IP, μπορείτε να σταματήσετε αυτήν την επίθεση προσθέτοντας αυτήν τη διεύθυνση IP στο τείχος προστασίας. Εάν έχετε εγκαταστήσει APF ή τείχος προστασίας στον διακομιστή σας, μπορείτε να το πετύχετε εκτελώντας την ακόλουθη εντολή:

apf -d IPADDRESS
csf -dIPADDRESS

Defending SYN Flood Attack

Χρήση cookies SYN

Αυτή είναι η πιο αποτελεσματική μέθοδος άμυνας από την επίθεση SYN Flood. Η χρήση των cookies SYN επιτρέπει σε έναν διακομιστή να αποφεύγει την απόρριψη συνδέσεων όταν γεμίζει η ουρά SYN. Αντίθετα, ο διακομιστής συμπεριφέρεται σαν να έχει μεγεθυνθεί η ουρά SYN. Ο διακομιστής στέλνει πίσω την κατάλληλη απάντηση SYN+ACK στον πελάτη, αλλά απορρίπτει την καταχώρηση ουράς SYN. Εάν ο διακομιστής λάβει μια επόμενη απόκριση ACK από τον πελάτη, μπορεί να ανακατασκευάσει την καταχώρηση ουράς SYN χρησιμοποιώντας πληροφορίες που κωδικοποιούνται στον αριθμό ακολουθίας TCP.

Τα cookie SYN μπορούν να ενεργοποιηθούν προσθέτοντας τα ακόλουθα στο /etc/sysctl.conf

net.ipv4.tcp_synccookies=1

Αφού τροποποιήσετε το αρχείο διαμόρφωσης sysctl, πρέπει να εκτελέσετε την ακόλουθη εντολή για να φορτώσετε τις ρυθμίσεις sysctl από το αρχείο /etc/sysctl.conf

Αύξηση της ουράς ανεκτέλεστου SYN

Μια προαιρετική τεχνική υπεράσπισης είναι η αύξηση του μεγέθους της ουράς ανεκτέλεσης SYS. Το προεπιλεγμένο μέγεθος είναι 1024. Αυτό μπορεί να γίνει προσθέτοντας τα ακόλουθα στο /etc/sysctl.conf

net.ipv4.tcp_max_syn_backlog=2048

Μείωση των επαναλήψεων SYN_ACK

Η προσαρμογή της παραμέτρου του πυρήνα tcp_synack_retries αναγκάζει τον πυρήνα να κλείσει νωρίτερα τις συνδέσεις κατάστασης SYN_RECV. Η προεπιλεγμένη τιμή είναι 5.

net.ipv4.tcp_synack_retries = 3

Ρύθμιση χρονικού ορίου λήξης SYN_RECV

Η μείωση της τιμής χρονικού ορίου για το SYN_RECV θα βοηθήσει στη μείωση της επίθεσης πλημμύρας SYN. Η προεπιλεγμένη τιμή είναι 60 και μπορούμε να τη μειώσουμε σε 40 ή 45. Αυτό μπορεί να γίνει προσθέτοντας την ακόλουθη γραμμή στο sysctl.conf.

net.ipv4.netfilter.ip_conntrack_tcp_timeout_syn_recv=45

Αποτροπή πλαστογράφησης IP

Η ακόλουθη παράμετρος sysctl θα βοηθήσει στην προστασία από πλαστογράφηση IP που χρησιμοποιείται για επιθέσεις πλημμύρας SYN.

net.ipv4.conf.all.rp_filter = 1

Πολλές εταιρείες φιλοξενίας παρέχουν προστασία έναντι της επίθεσης SYN, αναπτύσσοντας τείχη προστασίας που χρησιμοποιούν προστασία από πλημμύρες SYN, όπως το Netscreen ή το Appsafe.

Οι επιθέσεις DoS/DDoS στοχεύουν να διακόψουν την υποκείμενη υπηρεσία διαθεσιμότητας. Ο κύριος στόχος των επιθέσεων DoS/DDoS είναι να θέσουν εκτός υπηρεσίας το αντικείμενο επίθεσης και να καταστήσουν τους πόρους του απρόσιτους για τους νόμιμους χρήστες. Μια επίθεση άρνησης υπηρεσίας μπορεί να πραγματοποιηθεί με δύο τρόπους: χρησιμοποιώντας τρωτά σημεία στο λογισμικόσύστημα που έχει επιτεθεί και με την αποστολή μεγάλου αριθμού πακέτων δικτύου ειδικά διαμορφωμένων (flood).

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

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

Για πολλά DoS/ Επιθέσεις DDoSτα αποτελέσματα της επεξεργασίας από τον διακομιστή των πακέτων που αποστέλλονται από τον εισβολέα δεν ενδιαφέρουν τον τελευταίο. Αυτό σημαίνει ότι ένας εισβολέας μπορεί να στείλει μια ροή ψευδών αξιώσεων από ψευδείς διευθύνσεις IP (αυτή η έννοια ονομάζεται πλαστογράφηση), γεγονός που τον εμποδίζει να εντοπιστεί και να αντιμετωπίσει αποτελεσματικά τέτοιες επιθέσεις.

Για να πραγματοποιηθεί μια επιτυχημένη επίθεση DoS, απαιτείται ένα αρκετά υψηλό εύρος ζώνης καναλιού. Επομένως, μια επίθεση άρνησης υπηρεσίας στις περισσότερες περιπτώσεις πραγματοποιείται από πολλά μηχανήματα ταυτόχρονα. Μια επίθεση που περιλαμβάνει μεγάλο αριθμό μηχανών ονομάζεται DDoS. Αξίζει να σημειωθεί ότι για μια κατανεμημένη επίθεση μπορούν να χρησιμοποιηθούν μηχανήματα μολυσμένα με ειδικό λογισμικό που δεν ανήκουν στον εισβολέα. Τέτοια μολυσμένα μηχανήματα ονομάζονται «ζόμπι». Ένας τρόπος για να αποκτήσετε "ζόμπι" είναι η μαζική εισαγωγή "trojans" στους υπολογιστές των φιλήσυχων χρηστών. Έχοντας λάβει μια εντολή από το εξωτερικό, ένας τέτοιος "trojan" μετατρέπει έναν "ειρηνικό" υπολογιστή με πρόσβαση στο Διαδίκτυο σε πηγή ψευδών αιτημάτων που στοχεύουν στην υπερφόρτωση πόρων διακομιστή.

Οι πιο συνηθισμένες επιθέσεις DoS είναι:

TCP SYN Flood ή απλώς TCP SYN

Το Ping of Death

Ας ρίξουμε μια πιο προσεκτική ματιά στην επίθεση TCP SYN (tcp syn flood), η οποία στοχεύει σε υπηρεσίες εφαρμογών που χρησιμοποιούν το πρωτόκολλο επιπέδου μεταφοράς TCP. Αυτό το πρωτόκολλο έχει γίνει ευρέως διαδεδομένο στα πληροφοριακά συστήματα λόγω του γεγονότος ότι εγγυάται 100% παράδοση όλων των μεταδιδόμενων δεδομένων. Οι αλληλεπιδρώντες κόμβοι δικτύου που χρησιμοποιούν αυτό το πρωτόκολλο ως μεταφορά δημιουργούν συνδέσεις TCP μεταξύ τους, εντός των οποίων ελέγχεται ότι ο παραλήπτης θα λάβει όλα τα πακέτα που αποστέλλονται από τον αποστολέα. Αυτό επιτυγχάνεται όταν ο παραλήπτης ειδοποιεί τον αποστολέα για τα πακέτα που έχει λάβει. Εάν δεν έχουν φτάσει στον παραλήπτη όλα τα πακέτα που προορίζονται για αυτόν, τότε ο αποστολέας θα τα ξαναστείλει. Όπως μπορείτε να δείτε, το πλεονέκτημα αυτού του πρωτοκόλλου είναι η δυνατότητα δημιουργίας σύνδεσης. Για την αποθήκευση πληροφοριών σχετικά με την τρέχουσα κατάσταση της σύνδεσης, ειδικότερα, χρησιμοποιείται το πεδίο σημαιών bit στα πακέτα που χρησιμοποιούνται από το πρωτόκολλο. 8 bit είναι δεσμευμένα για αυτό το πεδίο, ωστόσο 2 από αυτά είναι δεσμευμένα και επί του παρόντος χρησιμοποιούνται μόνο 6 σημαίες: URG (σημαία επείγουσας ανάγκης), ACK (σημαία επιβεβαίωσης), PSH (σημαία λειτουργίας push), RST (σημαία επαναφοράς), SYN (συγχρονισμός ) και FIN (Σημαία τέλους). Δυστυχώς, ο μηχανισμός εγκατάστασης σύνδεσης που καθιερώθηκε από το πρότυπο δεν είναι τέλειος και η υπό εξέταση επίθεση χρησιμοποιεί απλώς τις αδυναμίες της.

Ο κύριος στόχος αυτής της επίθεσης TCP SYN είναι να υπερβεί το όριο στον αριθμό των συνδέσεων TCP που βρίσκονται σε κατάσταση εγκατάστασης. Εξετάστε τη διαδικασία για τη δημιουργία μιας σύνδεσης TCP. Αρχικά, ο πελάτης που ξεκινά τη σύνδεση στέλνει ένα αίτημα TCP-SYN στον διακομιστή. Μόλις λάβει ένα τέτοιο αίτημα, ο διακομιστής εκχωρεί μνήμη για τις παραμέτρους σύνδεσης σε ένα ειδικά σχεδιασμένο buffer. Στη συνέχεια στέλνει ένα πακέτο με τις σημαίες SYN+ACK στον πελάτη TCP. Κατά τη λήψη ενός πακέτου SYN+ACK, ο πελάτης πρέπει να στείλει ένα πακέτο επιβεβαίωσης στον διακομιστή, δηλ. ένα πακέτο με το σετ σημαίας ACK. Όταν ο διακομιστής λάβει και επεξεργάζεται αυτό το πακέτο, η σύνδεση δημιουργείται. Που περιγράφονται παραπάνω

η διαδικασία φαίνεται στο Σχ. 1.1

Ρύζι. 1.1

Μια επίθεση TCP SYN εκτελείται ως εξής: ένας εισβολέας δημιουργεί μεγάλο αριθμό πακέτων με τις σημαίες SYN του συνόλου πρωτοκόλλων TCP. Κατά τη λήψη πακέτων, το μηχάνημα που δέχεται επίθεση εκχωρεί μνήμη για να αποθηκεύσει τις παραμέτρους σύνδεσης και στέλνει μια απάντηση - ένα πακέτο με τις σημαίες SYN + ACK και αναμένει ένα πακέτο με τη σημαία ACK. Προφανώς, δεν θα λάβει την αναμενόμενη απάντηση και η μνήμη θα ελευθερωθεί μόνο μετά τη λήξη του καθορισμένου χρονικού ορίου. Μετά από κάποιο χρονικό διάστημα, η προσωρινή μνήμη που διατίθεται για την αποθήκευση των παραμέτρων TCP των συνδέσεων θα είναι πλήρως κατειλημμένη, με αποτέλεσμα το σύστημα να μην μπορεί να δημιουργήσει νέες συνδέσεις. Μετά από αυτό, το καθένα πρόσθετο αίτημααυξάνει περαιτέρω την επιβάρυνση. Τέτοιες επιθέσεις δεν χρειάζονται ανατροφοδότησημε τον εισβολέα, και επομένως ο εισβολέας μπορεί να δημιουργήσει ένα πακέτο με αυθαίρετες διευθύνσεις IP του αποστολέα.

Η έλλειψη ανατροφοδότησης από τον εισβολέα κάνει τον εντοπισμό και την απόκρουση μιας επίθεσης TCP-SYN αρκετά πρόκληση.

Θέτοντας στόχους για προστασία από απειλές

Προς το παρόν, δεν είναι γνωστές στην ανοιχτή βιβλιογραφία αποτελεσματικές μέθοδοι για τον εντοπισμό επιθέσεων TCP SYN. Τα σύγχρονα λειτουργικά συστήματα διαθέτουν μηχανισμούς για την προστασία του διακομιστή που δέχεται επίθεση, όπως τα SYN cookies. Το λειτουργικό σύστημα ενεργοποιεί αυτόματα την προστασία όταν εντοπίσει υπέρβαση ορισμένων παραμέτρων. Για παράδειγμα, τα Windows 2000 παρακολουθούν τις τιμές τριών παραμέτρων: TcpMaxHalfOpen, TcpMaxHalfOpenRetried, TcpMaxPortsExhausted. Τα όρια για αυτές τις ρυθμίσεις έχουν προεπιλεγμένες τιμές και μπορούν να αλλάξουν από τον διαχειριστή. Εάν οι αρχικές τιμές δεν είναι κατάλληλες για έναν συγκεκριμένο διακομιστή, τότε ο διαχειριστής έχει ένα δύσκολο έργο να διαμορφώσει αποτελεσματικά την προστασία. Επιπλέον, αυτή η μέθοδος απαιτεί κατάλληλες αλλαγές στην υλοποίηση της στοίβας TCP/IP, την οποία ορισμένοι ειδικοί δικτύωσης θεωρούν «σοβαρή παραβίαση» του πρωτοκόλλου TCP.

Ένα άλλο μειονέκτημα των εργαλείων ανίχνευσης επιθέσεων TCP που είναι ενσωματωμένα στο λειτουργικό σύστημα είναι ότι όταν υπερφορτώνονται (που σημαίνει έλλειψη πόρων επεξεργαστή και μνήμης) ή το ίδιο το σύστημα παγώνει, τα αντίμετρα καθίστανται επίσης ανενεργά.

Ο σκοπός της εργασίας του πλοιάρχου είναι να δημιουργήσει μια μαθηματικά ορθή μέθοδο για τον εντοπισμό επιθέσεων TCP SYN. Για να γίνει αυτό, είναι απαραίτητο να δημιουργηθεί ένα μαθηματικό μοντέλο που να περιγράφει την αλληλεπίδραση ενός διακομιστή TCP με τους πελάτες. Οι αρχικές παράμετροι για ένα τέτοιο μοντέλο θα πρέπει να είναι τα χαρακτηριστικά του διακομιστή και του καναλιού επικοινωνίας και η παράμετρος εξόδου θα πρέπει να είναι μια δήλωση σχετικά με την παρουσία ή την απουσία επίθεσης TCP-SYN.

Να είναι σε θέση να χρησιμοποιήσει την προτεινόμενη μεθοδολογία στην πράξη για την προστασία κρίσιμων πόρων εταιρικό δίκτυοχρειάζονται επίσης εργαλεία για τον προσδιορισμό των πραγματικών τιμών των παραμέτρων εισόδου του μοντέλου για έναν συγκεκριμένο διακομιστή και το δίκτυο στο οποίο είναι συνδεδεμένο.

Αποποίηση ευθυνών 1: Συγχωρέστε με για το γεγονός ότι το άρθρο είναι μάλλον τσαλακωμένο και πολλά θέματα δεν καλύπτονται πλήρως. Μη διστάσετε να κάνετε ερωτήσεις στα σχόλια. Εγώ με τη σειρά μου θα προσπαθήσω να αποκαλύψω τα περισσότερα ενδιαφέροντα θέματασε μελλοντικά άρθρα.

Αποποίηση ευθυνών 2: Υπάρχουν πολλά άρθρα στο διαδίκτυο με τίτλους "Πώς να προστατεύσετε τον διακομιστή σας από επιθέσεις SYN" ή "Προστασία Linux DDoS". Πρέπει να σας προειδοποιήσω ότι πολλά από αυτά δεν πρέπει σε καμία περίπτωση να τα εμπιστεύεστε τυφλά! Συχνά γράφονται από άτομα που δεν καταλαβαίνουν καλά τι συμβαίνει κατά τη διάρκεια μιας επίθεσης και προτείνουν να κάνετε τρελά πράγματα - κάποιος "βελτιστοποιεί" το sysctl έτσι ώστε ακόμη και η κανονική κίνηση να σταματήσει να πηγαίνει στον διακομιστή και οι περισσότεροι συμβουλεύουν επίσης την ενεργοποίηση syncookies, κάτι που είναι κατηγορηματικά γίνεται είναι αδύνατο με τις περισσότερες από τις πραγματικές επιθέσεις!

Αυτό το άρθρο έχει 3 στόχους:

Τι είναι η επίθεση SYN;

Μια επίθεση SYN flood ή SYN είναι μια τεχνική άρνησης υπηρεσίας που επηρεάζει τους κεντρικούς υπολογιστές που εκτελούν διεργασίες διακομιστή TCP. Η επίθεση εκμεταλλεύεται το γεγονός ότι το TCP αποθηκεύει την κατάσταση περιόδου λειτουργίας μετά τη λήψη ενός τμήματος SYN σε μια θύρα που βρίσκεται σε κατάσταση LISTEN. Η κύρια ιδέα είναι να εκμεταλλευτεί αυτή τη συμπεριφορά αναγκάζοντας τον κεντρικό υπολογιστή να αποθηκεύσει τόσο μεγάλη κατάσταση για ψευδείς μισάνοιχτες περιόδους λειτουργίας που δεν του έχουν απομείνει πόροι για τη δημιουργία νέων συνδέσεων (RFC4987).

Το SYN flooding είναι σχετικά δύσκολο να αντιμετωπιστεί, γι' αυτό και αυτός ο τύπος επίθεσης είναι τόσο δημοφιλής. Γιατί;

1) Συνήθως χρησιμοποιούνται IP τυχαίας πηγής, οι οποίες είναι άχρηστο να αποκλειστούν, επειδή δημιουργούνται εκ νέου σε κάθε πακέτο.
2) Η επίθεση SYN καταναλώνει λίγους πόρους από την πλευρά του εισβολέα και πολλούς από την πλευρά του θύματος.
3) Η προστασία έναντι αυτού του τύπου επίθεσης είναι αρκετά περίπλοκη, γεμάτη αποχρώσεις και απαιτεί χρόνο για να κατανοηθεί και να εφαρμοστεί.

Πιστεύω ότι οι διακομιστές που είναι δυνητικά επιτιθέμενοι (στην πραγματικότητα, όλοι οι διακομιστές που έχουν δημόσιες διευθύνσεις IP, ειδικά οι διακομιστές Ιστού) θα πρέπει να προστατεύονται εκ των προτέρων από επιθέσεις SYN.

Εικόνα 1: Επίθεση SYN

Πώς εκτελούνται οι επιθέσεις SYN;

Ένα παράδειγμα βοηθητικού προγράμματος που χρησιμοποιείται συχνά για την πραγματοποίηση επιθέσεων είναι το hping3. Μπορείτε να το χρησιμοποιήσετε για να δοκιμάσετε τον διακομιστή σας πριν το κάνουν οι εισβολείς για εσάς.

Το hping3 είναι ένα βοηθητικό πρόγραμμα πλούσιο σε χαρακτηριστικά που μπορεί να κάνει πολλούς τύπους επιθέσεων με διαφορετικές παραμέτρους. Δεν θα δώσω master class για τη χρήση του, θα δείξω μόνο ένα παράδειγμα για το πώς μπορείτε να ελέγξετε τον διακομιστή σας για ευπάθεια σε μια μικρή επίθεση SYN:

# hping3 -S<--fast|--faster|--flood>-σελ 80 xx.xx.xx.xx

80 (HTTP) σε αυτό το παράδειγμα είναι η θύρα προορισμού. Ρίξτε μια ματιά στις άλλες επιλογές (hping3 --help) για να δείτε πώς οι επιθέσεις μπορεί να διαφέρουν μεταξύ τους.

Χρησιμοποιήστε αυτό το βοηθητικό πρόγραμμα προσεκτικά και μόνο για να δοκιμάσετε τους δικούς σας πόρους! Για να είμαστε ειλικρινείς, το μεγαλύτερο μέρος του Διαδικτύου είναι ευάλωτο σε αυτές τις απλές λειτουργίες, ακόμα κι αν ο εισβολέας έχει σημαντικά μικρότερο κανάλι από αυτόν που δέχεται επίθεση.

Πώς να αναγνωρίσετε και να μετρήσετε μια επίθεση SYN;

1) Κατά τη διάρκεια μιας επίθεσης SYN, ο εισβολέας ανοίγει πολλές συνδέσεις στον διακομιστή σας, αλλά δεν τις κλείνει ποτέ και οι συνδέσεις συνεχίζουν να βρίσκονται σε κατάσταση SYN_RECV. Μπορούν να υπολογιστούν ως εξής:

# netstat -anutp | grep SYN_RECV | wc -l

Εάν αυτός ο αριθμός είναι >30, πιθανότατα βρίσκεστε υπό επίθεση SYN.

2) Μπορείτε να παρακολουθήσετε το τρέχον φορτίο δικτύου χρησιμοποιώντας το vnstat:

# vnstat -l -i eth0

Αυτό είναι ένα πολύ χρήσιμο βοηθητικό πρόγραμμα που θα σας βοηθήσει να καταλάβετε πόσο ισχυρή είναι μια επίθεση.

Πατήστε F2, μεταβείτε στις "Επιλογές εμφάνισης" και επιλέξτε "Εμφάνιση νημάτων σε διαφορετικό χρώμα". Σε ροζ χρώμα, μπορείτε να δείτε το φορτίο από διακοπές συστήματος.

4) Ελέγξτε τα SYN που λαμβάνει ο διακομιστής - τι κοινό έχουν; Το "-c 100" λέει στο tcpdump να περιοριστεί σε 100 πακέτα.

# tcpdump -i eth0 -nn "tcp port 80" and "tcp == 2" -c 100

Τέλος, να θυμάστε ότι πολλές επιθέσεις SYN δεν είναι «ομοιόμορφες», έχουν κορυφές και βυθίσεις που πρέπει να ληφθούν υπόψη στη διαδικασία ανάλυσης.



Εικόνα 2. Δυναμική μιας τυπικής επίθεσης

Καταρχάς

NIC, διακοπές, ουρές...

Το πρώτο πράγμα που πρέπει να δουλέψετε είναι ο οδηγός κάρτα δικτύου. Όταν ένα πλαίσιο φτάνει στην κάρτα δικτύου, πρέπει να ξεκινήσει μια διακοπή συστήματος, η οποία λέει στον επεξεργαστή να αναστείλει την τρέχουσα εργασία και να επεξεργαστεί το εισερχόμενο τμήμα της κυκλοφορίας. Ωστόσο, εάν κάθε καρέ προκαλούσε άμεση διακοπή και «αποσπούσε» την CPU από την τρέχουσα εργασία, θα μπορούσε να παρατηρηθεί αξιοσημείωτη υποβάθμιση της απόδοσης ακόμη και στις πιο απλές λειτουργίες δικτύου, όπως η μεταφορά αρχείων μέσω FTP. Επομένως, αυτές οι διακοπές οργανώνονται σε μια ουρά που συσσωρεύεται στην κάρτα δικτύου και υποβάλλεται σε επεξεργασία από τον επεξεργαστή κάθε φορά. Συνήθως αυτό συμβαίνει 250-1000 φορές το δευτερόλεπτο, όσο λιγότερο συχνά - όσο χαμηλότερο είναι το φορτίο της CPU, τόσο μεγαλύτερη είναι η καθυστέρηση.

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

1) Το πρώτο και προτεινόμενο είναι να χρησιμοποιήσετε ουρές υλικού. Τα σύγχρονα NIC έχουν πολλαπλές ουρές διακοπής, συνήθως 4-16. Για κάποιο λόγο, στο Linux είναι συχνά απενεργοποιημένα από προεπιλογή. Πρέπει να τα ενεργοποιήσουμε και στη συνέχεια να τα κατανείμουμε ομοιόμορφα στους επεξεργαστές.

2) Η δεύτερη μέθοδος ονομάζεται RPS - Receive Packet Steering. Είναι όμορφο νέος μηχανισμόςπυρήνα, που κατανέμει αυτόματα το φορτίο μεταξύ όλων των πυρήνων, δεν έχει σημασία αν η κάρτα έχει πολλές ουρές υλικού ή όχι. Χρησιμοποιήστε αυτήν τη μέθοδο μόνο εάν έχετε περισσότερους πυρήνες από ουρές υλικού (παρεμπιπτόντως, σκεφτείτε να απενεργοποιήσετε το SMT/HyperThreading - θα σας φανεί χρήσιμο κατά τη διάρκεια μιας επίθεσης).


Εικόνα 3. Intel 10Gb NIC

Βήματα που πρέπει να κάνετε:

1) Προσδιορίστε τον κατασκευαστή και το μοντέλο της κάρτας δικτύου (θα ήταν καλύτερα αν ήταν η Intel)

# ethtool -i eth0

2) Εγκατάσταση τελευταία προγράμματα οδήγησης. Μεταβείτε στον ιστότοπο του κατασκευαστή του τσιπ κάρτας δικτύου και πραγματοποιήστε λήψη τελευταία έκδοσηπρογράμματα οδήγησης για Linux (για να το δημιουργήσετε, χρειάζεστε τις πηγές του τρέχοντος πυρήνα)

3) Ρύθμιση ουρών υλικού. Για να το κάνετε αυτό, θα χρειαστεί να χρησιμοποιήσετε την τεκμηρίωση από το πρόγραμμα οδήγησης της κάρτας δικτύου που συνοδεύει. για igb( Προγράμματα οδήγησης Intel) με 8 ουρές και 4 θύρες μοιάζει με αυτό:

# rmmod igb
# modprobe igb QueuePairs=1,1,1,1 RSS=8,8,8,8 IntMode=3,3,3,3 InterruptThrottleRate=3000,3000,3000,3000

Για το πρόγραμμα οδήγησης igb στο RHEL/CentOS, μπορείτε απλώς να προσθέσετε τη γραμμή επιλογών προγράμματος οδήγησης στο /etc/modprobe.conf και να κάνετε επανεκκίνηση:

επιλογές igb QueuePairs=1,1,1,1 RSS=8,8,8,8 IntMode=3,3,3,3 InterruptThrottleRate=3000,3000,3000,3000

4) Κατανείμετε ομοιόμορφα τα φορτία διακοπής μεταξύ των πυρήνων.
Θα χρειαστεί να προσδιορίσουμε ποιους αριθμούς διακοπής χρησιμοποιεί η κάρτα (στην περίπτωσή μας, eth0).

# cat /proc/interrupts | grep eth0

Εδώ μπορείτε να δείτε όλους τους αριθμούς διακοπής που χρησιμοποιεί το NIC σας και πώς είναι στην πραγματικότητα κατανεμημένοι αυτή τη στιγμή στους πυρήνες. Γράψτε αυτούς τους αριθμούς. Τώρα πρέπει να αλλάξουμε τη συνάφεια SMP για να εκχωρήσουμε σε κάθε διακοπή τον δικό της πυρήνα (διακοπή 1 > cpu 1, διακοπή 2 > cpu 2, κ.λπ.). Δείτε πώς γίνεται:

# ηχώ > /proc/irq/xx/smp_affinity

5) ΠΡΟΑΙΡΕΤΙΚΑ: Ενεργοποιήστε το RPS (αυτό μπορεί να μην χρειάζεται, δείτε παραπάνω)

# echo f > /sys/class/net/eth0/queues/rx-0/rps_cpus

Επιλέξτε την κατάλληλη συσκευή (αν δεν είναι eth0) και όλες τις ουρές λήψης που υποστηρίζει (rx-0..n).

sysctl

Το επόμενο πράγμα ονομάζεται sysctl. Αυτή είναι μια διεπαφή λογισμικού που σας επιτρέπει να διαμορφώνετε πολλές ρυθμίσεις συστήματος εν κινήσει. Ωστόσο, σε αυτό το άρθρο, θα αποφύγουμε να συζητήσουμε πώς να τα χρησιμοποιήσουμε για την προστασία από επιθέσεις SYN - έχουν ήδη γραφτεί πάρα πολλά σχετικά με αυτό στο Διαδίκτυο.

Σε αντίθεση με ό,τι πιστεύουν οι περισσότεροι "σύμβουλοι", ΔΕΝ ΥΠΑΡΧΟΥΝ "καθολικές βελτιστοποιήσεις" που θα ταιριάζουν σε όλους όσους έχουν διακομιστή. Κάθε λεγόμενη βελτιστοποίηση έχει συνέπειες όπως αυξημένη κατανάλωση μνήμης ή μειωμένη προσβασιμότητα/λειτουργικότητα. Φυσικά, πρέπει να εφαρμοστούν ορισμένες αλλαγές, αλλά αυτό το θέμα αξίζει ένα ξεχωριστό άρθρο, πιο εκτενές από αυτό.

Το μόνο πράγμα που θέλω να σημειώσω ως σημαντικό και συχνά λανθασμένο είναι τα λεγόμενα syncookies. Εν ολίγοις, αυτός είναι ένας μηχανισμός σε όλο το σύστημα για την καταπολέμηση των επιθέσεων SYN με την αποστολή cookies ως απάντηση σε κάθε αίτημα SYN για επιβεβαίωση της νομιμότητας της σύνδεσης. Το γεγονός είναι ότι αυτό μπορεί να είναι πραγματικά χρήσιμο εάν το ποσοστό επίθεσης είναι 40% του ενεργού εύρους ζώνης του διακομιστή ή λιγότερο (με αποτελεσματικό εννοώ αυτό διακίνηση, το οποίο ο διακομιστής είναι πραγματικά σε θέση να επεξεργαστεί). Σε άλλες περιπτώσεις, η χρήση syncookies οδηγεί σε αύξηση του φόρτου του δικτύου, της CPU και, ως εκ τούτου, σε άρνηση υπηρεσίας.

Προσωπικά, απενεργοποιώ τα syncookies στις περισσότερες περιπτώσεις.

Βασικές τεχνικές ασφάλειας με iptables

Μην ξεχάσετε να "ενδυναμώσετε" το τείχος προστασίας σας: μπλοκάρετε όλη την εισερχόμενη κίνηση εκτός από αυτό που ΠΡΑΓΜΑΤΙΚΑ χρειάζεται στον διακομιστή σας. Να επιτρέπεται η διαχείριση μόνο από αξιόπιστα δίκτυα.

Η απλούστερη περίπτωση είναι μια επίθεση από 1 IP χωρίς αντικατάσταση διεύθυνσης (spoofing). Είναι εύκολο να αντιμετωπιστούν:

# iptables -A INPUT -p tcp -m κατάσταση --κράτοςΝΕΟ -m πρόσφατη --ενημέρωση --δευτερόλεπτα 60 --αριθμός επισκέψεων 20 -j ΠΑΡΑΓΩΓΗ
# iptables -A INPUT -p tcp -m κατάσταση --state NEW -m πρόσφατο --set -j ACCEPT

Αυτοί οι κανόνες περιορίζουν τον αριθμό των πακέτων SYN ανά διεύθυνση σε 20 ανά λεπτό. Απλά μην το χρησιμοποιείτε συνέχεια! Μπορείτε να αποκλείσετε τη νόμιμη κυκλοφορία πίσω από το NAT.

Πολλές επιθέσεις SYN μπορούν να φιλτραριστούν από «ασυνήθιστες» και επαναλαμβανόμενες παραμέτρους κεφαλίδας TCP που επιτίθενται στα βοηθητικά προγράμματα με «αμαρτία».

Η πρώτη τέτοια παράμετρος είναι το MSS (Maximum Segment Size) - το μέγιστο μέγεθος τμήματος που θέλει να επιτρέπει ο κεντρικός υπολογιστής που ξεκινά τη σύνδεση. Τα περισσότερα εργαλεία επίθεσης (συμπεριλαμβανομένου του hping) δεν ενεργοποιούν αυτή την επιλογή από προεπιλογή. Από την άλλη, δεν έχω δει ακόμη νόμιμους πελάτες που δεν θα το εγκατέστησαν. Οι "κανονικές" τιμές κυμαίνονται από 536 έως 65535, ας το χρησιμοποιήσουμε:

# iptables -t mangle -I PREROUTING -p tcp -m tcp --dport 80 -m κατάσταση --κατάσταση ΝΕΟ -m tcpmss ! --mss 536:65535 -j DROP

Παρεμπιπτόντως, ο πίνακας παραμόρφωσης είναι πιο γρήγορος από το φίλτρο, επειδή υποβάλλεται σε επεξεργασία νωρίτερα, αλλά ΟΛΗ η κίνηση περνάει μέσα από αυτόν και δεν υπάρχει τρόπος να διαχωρίσετε το INPUT, OUTPUT και FORWARD.

Άλλο ένα εξαιρετικά χρήσιμη παράμετροςείναι το μέγεθος του παραθύρου TCP. Οι περισσότεροι επιτιθέμενοι δεν το δημιουργούν κάθε φορά και παραμένει το ίδιο καθ' όλη τη διάρκεια της επίθεσης. Για να φιλτράρετε και να αποκλείσετε τμήματα κατά μέγεθος παραθύρου, χρειάζεστε τη μονάδα u32 για iptables. Μόλις μάθετε το μέγεθος του παραθύρου επίθεσης (για παράδειγμα, 512), μετατρέψτε το σε hex (στην περίπτωσή μας, 0x200) και εκτελέστε την ακόλουθη εντολή:

# iptables -t mangle -I PREROUTING -d xx.xx.xx.xx -p tcp -m u32 --u32 "6&0xFF=0x6 && 32&0xFFFF=0x200" -j DROP

Αλλά πρόσεχε! Μην αποκλείετε γνωστά μεγέθη παραθύρων που χρησιμοποιούνται από δημοφιλή λειτουργικά συστήματα: 14600, 1892, 65535, 62240, 5840, 32120, 5720, 4128, 8760, 16384, 62920, 643820 και 17.

Τέλος, θα αναφέρουμε την παράμετρο TTL (Time To Live). Θέλω αυτή να είναι η τελευταία παράμετρος στην οποία βασίζονται οι έλεγχοι σας, καθώς το εύρος των τιμών είναι μικρό και σχεδόν σίγουρα θα αποκλείσετε το λάθος άτομο. Αλλά όταν βλέπετε πολλά πακέτα επίθεσης και ταιριάζουν μόνο με το TTL - αυτό μπορεί να σας βοηθήσει.

# iptables -A FORWARD -p tcp -m ttl --ttl-eq=55 -m κατάσταση --state NEW -j DROP

Αν τίποτα δεν βοηθάει

Επικοινωνήστε με τους επαγγελματίες! Σοβαρολογώ. Αυτό που περιγράφεται εδώ είναι μόνο η κορυφή του παγόβουνου. Θυμηθείτε, υπάρχουν δύο στρατηγικές άμυνας που πρέπει να χρησιμοποιηθούν μαζί:

1) Αύξηση/βελτιστοποίηση πόρων υπολογιστών/δικτύων για την επεξεργασία μεγαλύτερου αριθμού αιτημάτων.
2) Διαχωρισμός της ανεπιθύμητης κίνησης από τη νόμιμη κίνηση για περαιτέρω αποκλεισμό της.

Έτσι, έχετε 3 λόγους για να ζητήσετε βοήθεια από έξω:
1) Δεν έχετε αρκετό εύρος ζώνης ή υπολογιστικούς πόρους για να διαχωρίσετε την ανεπιθύμητη κίνηση από τη νόμιμη.
2) Η επίθεση είναι πολύπλοκη και τα ανεπιθύμητα πακέτα δεν διαφέρουν ή σχεδόν δεν διαφέρουν από τα νόμιμα. Οι επαγγελματίες χρησιμοποιούν πιο προηγμένες μεθόδους φιλτραρίσματος και μερικές φορές ακριβό εξειδικευμένο υλικό και λογισμικό.

Και τελικά