Προγραμματισμός

Port knocking: Μια ιδέα ασφαλείας που έχει έρθει η ώρα

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

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

Για παράδειγμα, ας υποθέσουμε ότι ο απομακρυσμένος πελάτης θέλει να συνδεθεί σε έναν διακομιστή SSH. Ο διαχειριστής διαμορφώνει εκ των προτέρων τις απαιτήσεις χτυπήματος θύρας, απαιτώντας η σύνδεση απομακρυσμένων πελατών να συνδεθεί πρώτα στις θύρες 3400, 4000 και 9887 πριν συνδεθεί στη θύρα τελικού προορισμού, 22. Ο διαχειριστής λέει σε όλους τους νόμιμους πελάτες τον σωστό «συνδυασμό» για σύνδεση ; κακόβουλοι χάκερ που επιθυμούν να συνδεθούν στην υπηρεσία SSH δεν θα έχουν πρόσβαση χωρίς το συνδυασμό. Το χτύπημα της θύρας θα αποδυναμώσει ακόμη και τους λάτρεις της σάρωσης και της αρπαγής.

Επειδή μπορεί να χρησιμοποιηθεί οποιοσδήποτε συνδυασμός λιμένων και πρωτοκόλλων μεταφοράς, ο αριθμός πιθανών ακολουθιών που θα πρέπει να μαντέψει ένας εισβολέας είναι υψηλός. Ακόμα κι αν ο εισβολέας ήξερε ότι είχαν εμπλακεί μόνο τρία χτυπήματα θύρας, όπως στο πολύ απλό παράδειγμα παραπάνω, με 64.000 πιθανές θύρες TCP, UDP και ICMP (Internet Control Message Protocol) για να διαλέξετε, το προκύπτον σύνολο πιθανών συνδυασμών για τον hacker προσπαθήστε να φτάσει τα εκατομμύρια. Οι σαρωτές θύρας θα απογοητευτούν επειδή το χτύπημα θύρας χρησιμοποιεί κλειστές θύρες για να κάνει την ακρόαση (περισσότερα σχετικά με αυτό παρακάτω)

Το μεγαλύτερο πλεονέκτημα όλων είναι ότι το knocking port είναι ανεξάρτητο από την πλατφόρμα, την υπηρεσία και την εφαρμογή: Κάθε λειτουργικό σύστημα με το σωστό λογισμικό πελάτη και διακομιστή μπορεί να επωφεληθεί από την προστασία του. Παρόλο που το knocking port είναι κυρίως μια εφαρμογή Linux / Unix, υπάρχουν εργαλεία Windows που μπορούν να κάνουν το ίδιο πράγμα. Και παρόμοιο με το IPSec και άλλους προστατευτικούς μηχανισμούς, καμία από τις εμπλεκόμενες υπηρεσίες ή εφαρμογές δεν πρέπει να είναι ενήμερη.

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

Οι πιο προηγμένες υλοποιήσεις του port knocking δουλεύουν στη στοίβα IP και είτε ακούνε και καταγράφουν συνδέσεις σε κλειστές θύρες είτε χρησιμοποιούν έναν πιο εξελιγμένο μηχανισμό. Ορισμένες εφαρμογές αναζητούν μια συγκεκριμένη σειρά byte κατά την πρώτη προσπάθεια σύνδεσης. Αυτά τα byte μπορούν ακόμη και να «κρυφτούν» μέσα σε ένα απλό ping αιτήματος echo ICMP. Ακόμη ισχυρότερες μέθοδοι διαπραγμάτευσης που απαιτούν θύρα περιλαμβάνουν κρυπτογράφηση ή ασύμμετρο έλεγχο ταυτότητας.

Η θύρα θύρας μπορεί επίσης να χρησιμεύσει ως ένα επιπλέον επίπεδο ασφάλειας για την προστασία υπηρεσιών απομακρυσμένης διαχείρισης υψηλού κινδύνου, όπως SSH και RDP (Πρωτόκολλο απομακρυσμένης επιφάνειας εργασίας). Δυστυχώς, το port knocking έχει χρησιμοποιηθεί από περισσότερους από μερικούς Trojan rootkit, καθώς οι δημιουργοί τους χάκερ προσπαθούν να διατηρήσουν τον έλεγχο των δικών τους κακόβουλων δημιουργιών.

Οι επικριτές συχνά επισημαίνουν το γεγονός ότι οι χάκερ που παρακολουθούν υποκλοπές μπορεί να είναι σε θέση να συλλάβουν και να επαναλάβουν την επιτυχημένη ακολουθία ή σειρά byte που χτυπάει το port. Αν και αυτό μπορεί να ισχύει για τις βασικές υλοποιήσεις, επιθέσεις όπως αυτές θα συντριβούν χρησιμοποιώντας πιο εξελιγμένες μεθόδους ελέγχου ταυτότητας ή θα ελαχιστοποιηθούν χρησιμοποιώντας δευτερεύουσες σκληρές κωδικοποιημένες επιτρεπόμενες διευθύνσεις IP όπως TCP wrappers.

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

Μακάρι τα Windows να είχαν ενσωματωμένους μηχανισμούς θύρας θύρας. Θα ήταν ένα καλό συμπλήρωμα στις εφαρμογές IPSec και Kerberos που έχουν δοκιμαστεί στην αγορά της Microsoft. Ο κόσμος Linux / Unix διαθέτει πληθώρα εφαρμογών που χτυπούν θύρες, καμία από τις οποίες δεν απαιτεί απίστευτη εξειδίκευση για τη διαμόρφωση ή τη χρήση.

Για περισσότερες πληροφορίες σχετικά με το χτύπημα θύρας, επισκεφθείτε τη διεύθυνση www.portknocking.org ή en.wikipedia.org/wiki/Port_knocking. Για λεπτομέρειες διαμόρφωσης από ένα παράδειγμα εφαρμογής, ανατρέξτε στο gentoo-wiki.com/HOWTO_Port_Knocking.

Μια εξαιρετική συλλογή λογισμικού και βοηθητικών προγραμμάτων που θυμίζει θύρες μπορεί να βρεθεί στη διεύθυνση www.portknocking.org/view/implementations και ένας άλλος διακομιστής και πελάτης που βασίζεται σε Windows μπορεί να βρεθεί στη διεύθυνση www.security.org.sg/code/portknock1 .html.

$config[zx-auto] not found$config[zx-overlay] not found