Αυτό το άρθρο είναι ένα άρθρο καθρέφτη της αυτόματης μετάφρασης, κάντε κλικ εδώ για να μεταβείτε στο αρχικό άρθρο.

Άποψη: 13773|Απάντηση: 0

[Οδηγός ασφαλείας] Επιθέσεις SYN Flood, άμυνα cookie SYN και τροποποίηση παραμέτρων πυρήνα για Linux/FreeBSD

[Αντιγραφή συνδέσμου]
Δημοσιεύτηκε στις 27/10/2014 9:37:19 μ.μ. | | |

ΧάκερΕίναι μια επιθυμητή και πολλά υποσχόμενη καριέρα. Εκτιμώ τους καλούς χάκερ και μισώ τους κακούς χάκερ. Ο λεγόμενος κακός χάκερ είναι το είδος του τύπου που κάνει κάποιον από την άλλη πλευρά να δουλεύει υπερωρίες.

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

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

    Οι επιθέσεις SYN Flood εκμεταλλεύονται την τριμερή διαδικασία χειραψίας του πρωτοκόλλου TCP στο IPv4. Αυτό το πρωτόκολλο ορίζει ότι εάν το ένα άκρο θέλει να ξεκινήσει μια σύνδεση TCP στο άλλο άκρο, πρέπει πρώτα να στείλει ένα πακέτο TCP SYN (συγχρονισμός) στο άλλο μέρος και το άλλο μέρος στέλνει ένα πακέτο TCP SYN + ACK πίσω μετά τη λήψη του και, στη συνέχεια, ο εκκινητής στέλνει ένα πακέτο TCP ACK (ACKnowledge Character) πίσω, έτσι ώστε οι τρεις χειραψίες να έχουν τελειώσει.

    Στην παραπάνω διαδικασία, υπάρχουν ορισμένες σημαντικές έννοιες:

    Η ουρά δεν είναι συνδεδεμένη: Στο πρωτόκολλο τριμερούς χειραψίας, ο διακομιστής διατηρεί μια μη συνδεδεμένη ουρά που ανοίγει μια καταχώρηση για το πακέτο SYN κάθε πελάτη (syn=j) που υποδεικνύει ότι ο διακομιστής έχει λάβει το πακέτο SYN και εκδίδει μια επιβεβαίωση στον πελάτη, περιμένοντας το πακέτο επιβεβαίωσης του πελάτη. Η σύνδεση που προσδιορίζεται από αυτές τις καταχωρήσεις βρίσκεται σε κατάσταση Syn_RECV στο διακομιστή και όταν ο διακομιστής λάβει ένα πακέτο επιβεβαίωσης από τον πελάτη, η καταχώρηση διαγράφεται και ο διακομιστής εισέρχεται στην κατάσταση FOUNDED. Με άλλα λόγια, όταν ο διακομιστής TCP λαμβάνει το πακέτο αίτησης TCP SYN, πριν στείλει το πακέτο TCP SYN+ACK πίσω στον πελάτη TCP, ο διακομιστής TCP πρέπει πρώτα να εκχωρήσει μια περιοχή δεδομένων για να εξυπηρετήσει τη σύνδεση TCP που σχηματίζεται από αυτό το χέρι. Γενικά, η κατάσταση σύνδεσης όταν λαμβάνεται το πακέτο SYN αλλά το πακέτο ACK δεν έχει ληφθεί ακόμαΜισάνοιχτη σύνδεση(Μισάνοιχτη σύνδεση).

    Παράμετρος Backlog: Υποδεικνύει τον μέγιστο αριθμό μη συνδεδεμένων ουρών.

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

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

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

    2. Η αρχή των cookies SYN

    Ένας από τους τρόπους για την αποτελεσματική αποτροπή των επιθέσεων SYN Flood είναι τα cookies SYN. SYN Cookie Λόγος δ. Εφευρέθηκε από τους J. Bernstain και Eric Schenk.

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

    Ας μιλήσουμε για το πώς να ρυθμίσετε τις παραμέτρους του πυρήνα για την εφαρμογή cookies SYN σε Linux και FreeBSD

    Τρία: Ρυθμίσεις Linux

    Εάν η διαμόρφωση του διακομιστή σας δεν είναι καλή, ο αριθμός των υποδοχών TCP TIME_WAIT φτάνει τις 20.000 ή 30.000 και ο διακομιστής μπορεί εύκολα να συρθεί μέχρι θανάτου. Τροποποιώντας τις παραμέτρους του πυρήνα Linux, ο αριθμός των υποδοχών TIME_WAIT στον διακομιστή μπορεί να μειωθεί.

    TIME_WAIT μπορεί να προβληθεί με την ακόλουθη εντολή:

  1. 以下是代码片段:
  2. netstat -an | grep "TIME_WAIT" | wc -l
Αντιγραφή κώδικα

Σε Linux, όπως το CentOS, μπορείτε να το πετύχετε τροποποιώντας το αρχείο /etc/sysctl.conf.

    Προσθέστε τις ακόλουθες γραμμές:

  1. 以下是代码片段:
  2. net.ipv4.tcp_fin_timeout = 30
  3. net.ipv4.tcp_keepalive_time = 1200
  4. net.ipv4.tcp_syncookies = 1
  5. net.ipv4.tcp_tw_reuse = 1
  6. net.ipv4.tcp_tw_recycle = 1
  7. net.ipv4.ip_local_port_range = 1024    65000
  8. net.ipv4.tcp_max_syn_backlog = 8192
  9. net.ipv4.tcp_max_tw_buckets = 5000
  10. net.ipv4.tcp_synack_retries = 2
  11. net.ipv4.tcp_syn_retries = 2
Αντιγραφή κώδικα

Διευκρινίζω:

net.ipv4.tcp_syncookies = 1 σημαίνει ότι τα SYN Cookies είναι ενεργοποιημένα, το οποίο είναι BOOLEAN. Όταν το SYN περιμένει να ξεχειλίσει η ουρά, ενεργοποιήστε τα cookies για να το αντιμετωπίσουν, κάτι που μπορεί να αποτρέψει έναν μικρό αριθμό επιθέσεων SYN και η προεπιλογή είναι 0, που σημαίνει ότι είναι κλειστό.
net.ipv4.tcp_tw_reuse = 1 σημαίνει ότι η επαναχρησιμοποίηση είναι ενεργοποιημένη, η οποία είναι BOOLEAN. Επιτρέπει την επαναχρησιμοποίηση υποδοχών TIME-WAIT για νέες συνδέσεις TCP, με προεπιλογή 0, υποδεικνύοντας κλείσιμο.
net.ipv4.tcp_tw_recycle = 1 σημαίνει ότι ενεργοποιείται η γρήγορη ανακύκλωση των υποδοχών TIME-WAIT σε συνδέσεις TCP, που είναι BOOLEAN, και η προεπιλογή είναι 0, που σημαίνει ότι είναι κλειστό.
net.ipv4.tcp_fin_timeout = 30 σημαίνει ότι εάν η υποδοχή κλείσει από ένα τοπικό αίτημα, αυτή η παράμετρος καθορίζει πόσο καιρό θα παραμείνει στην κατάσταση FIN-WAIT-2. Η μονάδα είναι δευτερόλεπτα.
net.ipv4.tcp_keepalive_time = 1200 υποδεικνύει πόσο συχνά το TCP στέλνει μηνύματα διατήρησης εν ενεργεία όταν χρησιμοποιείται η διατήρηση εν ενεργεία. Η προεπιλογή είναι 2 ώρες, άλλαξε σε 20 λεπτά. Η μονάδα είναι δευτερόλεπτα.
net.ipv4.ip_local_port_range = 1024 65000 υποδεικνύει το εύρος των θυρών που χρησιμοποιούνται για τις εξερχόμενες συνδέσεις. Η προεπιλεγμένη περίπτωση είναι μικρή: 32768 έως 61000, άλλαξε σε 1024 έως 65000.
net.ipv4.tcp_max_syn_backlog = 8192 υποδεικνύει το μήκος της ουράς SYN, το οποίο είναι 1024 από προεπιλογή, και το μήκος της αυξημένης ουράς είναι 8192 για να φιλοξενήσει περισσότερες συνδέσεις δικτύου σε αναμονή για σύνδεση.
net.ipv4.tcp_max_tw_buckets = 5000 υποδεικνύει τον μέγιστο αριθμό υποδοχών που διατηρεί το σύστημα ταυτόχρονα TIME_WAIT και σε περίπτωση υπέρβασης αυτού του αριθμού, TIME_WAIT πρίζες θα διαγραφούν αμέσως και θα εκτυπωθεί ένα προειδοποιητικό μήνυμα. Η προεπιλογή είναι 180000, άλλαξε σε 5000. Για διακομιστές όπως ο Apache και ο Nginx, οι παράμετροι στις προηγούμενες γραμμές μπορούν να μειώσουν TIME_WAIT τον αριθμό των υποδοχών, αλλά για το Squid, το αποτέλεσμα δεν είναι μεγάλο. Αυτή η παράμετρος ελέγχει τον μέγιστο αριθμό υποδοχών TIME_WAIT για να αποτρέψει την έλξη του διακομιστή Squid από μεγάλο αριθμό υποδοχών TIME_WAIT.
net.ipv4.tcp_synack_retries και net.ipv4.tcp_syn_retries καθορίζουν τον αριθμό των επαναλήψεων SYN.

Εκτελέστε την ακόλουθη εντολή για να τεθεί σε ισχύ η διαμόρφωση:

  1. 以下是代码片段:
  2. /sbin/sysctl -p
Αντιγραφή κώδικα

Αν δεν θέλετε να τροποποιήσετε το /etc/sysctl.conf, μπορείτε επίσης να χρησιμοποιήσετε την εντολή για να το κάνετε:

  1. 以下是代码片段:
  2. /sbin/sysctl -w key=value
Αντιγραφή κώδικα

Τέταρτον, δημιουργήθηκε στο FreeBSD

    Η προσωπική άποψη του yayu για τη μάθηση: η άμυνα ενάντια στο syn στο FreeBSD μπορεί να μην είναι η ίδια όπως στο Linux, οι παράμετροι που έχουν ρυθμιστεί δεν είναι ακριβώς οι ίδιες και η σχετική ρύθμιση και κατανόηση μπορεί να μην είναι σωστή :)

    Υπάρχει ένα στον σύνδεσμο TCPMSL (μέγιστη διάρκεια ζωής τμήματος)Η έννοια τουΜέγιστος χρόνος παραγωγήςΗ τιμή MSL λαμβάνεται για 30 δευτερόλεπτα σε γενικές υλοποιήσεις και ορισμένες υλοποιήσεις χρειάζονται 2 λεπτά. "Παθητικός τερματισμός λειτουργίας" στον υπολογιστή κατάστασης TCP: Από το CLOSE_WAIT έως το LAST_ACK, υπάρχει ένας κανόνας ως εξής: Όταν το TCP εκτελεί ενεργό τερματισμό λειτουργίας και στέλνει πίσω το τελευταίο ACK, η σύνδεση πρέπει να παραμείνει στην κατάσταση TIME_WAIT για διπλάσιο χρόνο από το MSL. Αυτό επιτρέπει στο TCP να στείλει ξανά το τελευταίο ACK σε περίπτωση που χαθεί (το άλλο τέλος λήγει και στέλνει ξανά το τελευταίο FIN).

    Η ύπαρξη αυτού του κανόνα έχει ως συνέπεια ότι ο σύνδεσμος (διεύθυνση πελάτη, θύρα και διεύθυνση από την πλευρά του διακομιστή, θύρα) σε αυτήν τη διεύθυνση δεν μπορεί να χρησιμοποιηθεί κατά τη διάρκεια αυτού του χρόνου 2*MSL. Για παράδειγμα, εάν κλείσουμε έναν σύνδεσμο μετά τη δημιουργία του και στη συνέχεια επανεκκινήσουμε γρήγορα τον σύνδεσμο, τότε η θύρα δεν θα είναι διαθέσιμη.

    TIME_WAIT χρόνος είναι 2*MSL. Έτσι, μπορείτε να μειώσετε TIME_WAIT χρόνο προσαρμόζοντας το net.inet.tcp.msl. Για τον διακομιστή ιστού, αυτή η τιμή μπορεί να ρυθμιστεί σε 7500 ή 2000 (πρόσβαση σε έναν ιστό, η σελίδα δεν μπορεί να αναβοσβήνει για περισσότερο από 4~15 δευτερόλεπτα, μπορείτε να εξετάσετε το ενδεχόμενο να τα παρατήσετε -_-)

    Αναφορά ρύθμισης παραμέτρων:

  1. 以下是引用片段:
  2. net.inet.tcp.syncookies=1
  3. 防止DOS攻击

  4. net.inet.tcp.msl=7500
  5. 防止DOS攻击,默认为30000

  6. net.inet.tcp.blackhole=2
  7. 接收到一个已经关闭的端口发来的所有包,直接drop,如果设置为1则是只针对TCP包

  8. net.inet.udp.blackhole=1
  9. 接收到一个已经关闭的端口发来的所有UDP包直接drop
Αντιγραφή κώδικα

Στο FreeBSD, ο yayu δεν είδε μια εντολή όπως το "/sbin/sysctl -p" που θα μπορούσε να κάνει τα περιεχόμενα του /etc/sysctl.conf αποτελεσματικά, οπότε χρησιμοποίησε απλώς την εντολή:

  1. 以下是代码片段:
  2. sysctl net.inet.tcp.syncookies=1 net.inet.tcp.msl=7500 net.inet.tcp.blackhole=2 net.inet.udp.blackhole=1
Αντιγραφή κώδικα






Προηγούμενος:Μια επιστολή από έναν φοιτητή του Ινστιτούτου Τεχνολογίας Wuchang προς τα μέσα ενημέρωσης
Επόμενος:Αποκαταστήστε την αλήθεια για την οργάνωση της πορνείας σε ξενοδοχεία σε κολέγια και πανεπιστήμια «Ινστιτούτο Τεχνολογίας Wuchang: Οι φήμες σταματούν στο...
Αποκήρυξη:
Όλο το λογισμικό, το υλικό προγραμματισμού ή τα άρθρα που δημοσιεύονται από το Code Farmer Network προορίζονται μόνο για μαθησιακούς και ερευνητικούς σκοπούς. Το παραπάνω περιεχόμενο δεν θα χρησιμοποιηθεί για εμπορικούς ή παράνομους σκοπούς, άλλως οι χρήστες θα υποστούν όλες τις συνέπειες. Οι πληροφορίες σε αυτόν τον ιστότοπο προέρχονται από το Διαδίκτυο και οι διαφορές πνευματικών δικαιωμάτων δεν έχουν καμία σχέση με αυτόν τον ιστότοπο. Πρέπει να διαγράψετε εντελώς το παραπάνω περιεχόμενο από τον υπολογιστή σας εντός 24 ωρών από τη λήψη. Εάν σας αρέσει το πρόγραμμα, υποστηρίξτε γνήσιο λογισμικό, αγοράστε εγγραφή και λάβετε καλύτερες γνήσιες υπηρεσίες. Εάν υπάρχει οποιαδήποτε παραβίαση, επικοινωνήστε μαζί μας μέσω email.

Mail To:help@itsvse.com