Ασφάλεια Υπολογιστικών Συστημάτων Ενότητα 9: Intrusion Detection Systems - Netfilter (Μέρος 1) Νικολάου Σπύρος Τμήμα Μηχανικών Πληροφορικής ΤΕ
Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό υλικό, όπως εικόνες, που υπόκειται σε άλλου τύπου άδειας χρήσης, η άδεια χρήσης αναφέρεται ρητώς. 2
Χρηματοδότηση Το παρόν εκπαιδευτικό υλικό έχει αναπτυχθεί στα πλαίσια του εκπαιδευτικού έργου του διδάσκοντα. Το έργο «Ανοικτά Ακαδημαϊκά Μαθήματα στο TEI Δυτικής Μακεδονίας και στην Ανώτατη Εκκλησιαστική Ακαδημία Θεσσαλονίκης» έχει χρηματοδοτήσει μόνο τη αναδιαμόρφωση του εκπαιδευτικού υλικού. Το έργο υλοποιείται στο πλαίσιο του Επιχειρησιακού Προγράμματος «Εκπαίδευση και Δια Βίου Μάθηση» και συγχρηματοδοτείται από την Ευρωπαϊκή Ένωση (Ευρωπαϊκό Κοινωνικό Ταμείο) και από εθνικούς πόρους. 3
Σκοποί ενότητας Το Linux είναι ένα λειτουργικό σύστηµα που έχει εκτεταµένες δικτυακές δυνατότητες, εξαιτίας της ίδιας της φιλοσοφίας µε την οποία έχει σχεδιαστεί. Οι πιο σηµαντικές από αυτές τις δυνατότητες είναι το φιλτράρισµα και η προώθηση πλαισίων, µε γρήγορο και συνάµα πολύπλευρα παραµετροποιήσιµο τρόπο. Σκοπός αυτής της εργαστηριακής άσκησης είναι να µας μάθει πως να χρησιµοποιούµε αυτές τις δυνατότητες που παρέχει ο ίδιος ο πυρήνας του Linux µέσω του λογισμικού netfilter προκειµένου να ασφαλίσουτε το δίκτυο μας από πιθανές επιθέσεις. 4
Περιεχόμενα ενότητας Εισαγωγή. Αλυσίδες του netfilter. Διαχείριση αλυσίδων. Βιβλιογραφία. 5
Intrusion Detection Systems - Netfilter (Μέρος 1)
Εισαγωγή (1/3) Το netfilter είναι ένα πακέτο λογισµικού που επικοινωνεί µε τον πυρήνα, επιβάλλοντάς του κανόνες (rules) δικτυακής "συµπεριφοράς". Βάσει αυτών των κανόνων, που εµείς προσδιορίζουµε, ο πυρήνας φιλτράρει όλα τα πλαίσια δικτύου, που έρχονται, φεύγουν ή προωθούνται από ένα υπολογιστή δίνοντάς µας έτσι τη δυνατότητα να αποτρέψουµε την κυκλοφορία ανεπιθύµητων πακέτων. Αυτό το σύνολο των κανόνων, που δηµιουργούνται, σβήνονται και επιβλέπονται χρησιμοποιώντας την εντολή iptables, ονοµάζεται firewall και είναι από τα σημαντικότερα θέµατα που εξετάζει η ασφάλεια δικτύων. 7
Εισαγωγή (2/3) Στις περισσότερες εκδόσεις Linux το netfilter είναι προεγκατεστημένο. Σε περίπτωση που θέλετε να το εγκαταστήσετε ή να αναβαθμίσετε την έκδοσή του μπορείτε να χρησιμοποιήσετε την εντολή: sudo apt-get install iptables 8
Εισαγωγή (3/3) Το netfilter είναι ένα command-line firewall. Υπάρχουν διαθέσιμες και αντίστοιχες GUI εκδόσεις όπως για παράδειγμα το Firestarter (http://www.fs-security.com) αλλά μαθαίνοντας κανείς μερικές από τις πιο βασικές εντολές του netfilter θα καταλάβει ότι η χρήση της command-line έκδοσης, την οποία θα χρησιμοποιήσουμε και στο εργαστήριο, δεν είναι και τόσο δύσκολη. Γενικά θα πρέπει να είμαστε πολύ προσεκτικοί όταν δημιουργούμε κανόνες στο netfilter γιατί ένας λάθος κανόνας μπορεί να αποτρέψει όλη την κίνηση από την υπολογιστική συσκευή μας. 9
Αλυσίδες του netfilter (1/8) Το firewall του Linux εφαρμόζει µία αρθρωτή (modular) λογική σχεδιασµού µε την έννοια ότι εφαρμόζουμε οµάδες κανόνων, που ονομάζονται αλυσίδες (chains), σε πακέτα που έχουν συγκεκριμένα χαρακτηριστικά και όχι όλους τους κανόνες σε όλα τα πακέτα. Για παράδειγμα ας υποθέσουµε πως θέλουµε να φιλτράρουµε όλα τα εισερχόµενα πακέτα. Το γεγονός ότι όλα εισέρχονται είναι ένα συγκεκριµένο χαρακτηριστικό που έχουν. 10
Αλυσίδες του netfilter (2/8) Θα δημιουργήσουμε µια αλυσίδα κανόνων για τα εισερχόµενα πακέτα στην οποία θα προσθέτουµε συνεχώς κανόνες οι οποίοι θα εφαρµοστούν µόνο σε αυτά. Αυτή την αλυσίδα µας την παρέχει έτοιµη το iptables και ονοµάζεται INPUT. Ακόµα ας υποθέσουµε πως θέλουµε να εφαρµοστούν κάποιοι κανόνες για όλα τα εξερχόµενα πακέτα. Οπότε θα χρησιμοποιήσουμε την αλυσίδα OUTPUT προσθέτοντας κανόνες σε αυτήν βάσει των οποίων θα προσδιορίζουµε την συμπεριφορά του firewall σε αυτά. 11
Αλυσίδες του netfilter (3/8) Αν ένα πακέτο εισέρχεται τότε θα ελεγχθεί από όλους τους κανόνες και ΜΟΝΟ από αυτούς που ανήκουν στην αλυσίδα INPUΤ. Το ίδιο ισχύει και για την OUTPUT αν τα πακέτα είναι εξερχόµενα. Όµως αν ένα πακέτο απλώς προωθείται δεν θα ελεγχθεί από κανένα κανόνα, εκτός και αν προσθέσουµε κανόνες στην αλυσίδα που µας παρέχει το iptables για τα προωθούµενα πακέτα που είναι η FORWARD. 12
Αλυσίδες του netfilter (4/8) Πρέπει να αναφέρουµε πως δεν είναι απαραίτητο να χρησιµοποιήσουµε µόνο τις αλυσίδες που µας παρέχονται έτοιµες, αλλά µπορούµε να δηµιουργήσουµε και δικές µας, όπως θα δούµε παρακάτω. Πρόκειται για μια δυνατότητα που παρέχει το netfilter, ένα πολύ παραµετροποιήσιµο και πολύ ισχυρό firewall και όχι µόνο αυτό. 13
Αλυσίδες του netfilter (5/8) Συνοψίζοντας λοιπόν υπάρχουν 3 αλυσίδες στο netfilter: INPUT: Η αλυσίδα αυτή χρησιμοποιείται για να ελέγχει την συμπεριφορά των εισερχόμενων συνδέσεων. OUTPUT: Η αλυσίδα αυτή χρησιμοποιείται για να ελέγχει τις εξερχόμενες συνδέσεις. FORWARD: Η αλυσίδα αυτή χρησιμοποιείται για να ελέγχει εισερχόμενες συνδέσεις οι οποίες όμως παραδίδουν μηνύματα τοπικά. Π.χ. σε έναν δρομολογητή συνήθως η κίνηση που διέρχεται από αυτόν δεν στοχεύει στο παραδοθεί στον ίδιο αλλά προωθείται από τον δρομολογητή κατάλληλα έτσι ώστε να φτάσει στον προορισμό του. 14
Αλυσίδες του netfilter (6/8) Ένας τρόπος για να καταλάβετε (σε περίπτωση που δεν το γνωρίζετε) αν η υπολογιστική συσκευή σας λειτουργεί σαν σταθμός που προωθεί πακέτα είναι πληκτρολογώντας την εντολη: iptables L v Ένα ενδεικτικό αποτέλεσμα φαίνεται στην εικόνα 1. Η αλυσίδα INPUT έχει επεξεργαστεί πακέα συνολικού μεγέθους 11G, η αλυσίδα OUTPUT 17G ενώ η αλυσίδα FORWARD 0 Bytes. Αυτό σημαίνει οτι απο την στιγμή που ξεκίνησε να λειτουργεί η συγκεκριμένη συσκευή δεν προώθησε κανένα πακέτο. 15
Αλυσίδες του netfilter (7/8) Εικόνα 1. Η εντολή iptables L v. Πηγή: Διδάσκων (2015). 16
Αλυσίδες του netfilter (8/8) Γενικά θα πρέπει να θυμόμαστε όταν θέλουμε να χρησιμοποιήσουμε το netfilter/iptables ότι υπάρχουν πολλές περιπτώσεις που για να χρησιμοποιηθεί ένα πρωτόκολλο απαιτεί εισερχόμενη αλλά και εξερχόμενη επικοινωνία, με αποτέλεσμα να απαιτείται να ρυθμίζουμε κατάλληλα τόσο το INPUT όσο και το OUTPUT chain (π.χ. στο SSH). 17
Διαχείριση αλυσίδων (1/8) Για να αντιληφτούμε πώς λειτουργούν οι αλυσίδες αρκεί να κατανοήσουμε πώς γίνεται η λογική ροή πακέτων σε ένα Linux σύστηµα, σε σχέση µε τις αλυσίδες, η οποία φαίνεται στην Εικόνα 2. 18
Διαχείριση αλυσίδων (2/8) Εικόνα 2. Η λογική ροή πακέτων σε ένα Linux σύστημα σε σχέση με τις αλυσίδες. Πηγή: Διδάσκων (2015). 19
Διαχείριση αλυσίδων (3/8) Για να δούµε όλες τις αλυσίδες του firewall και τους κανόνες που έχει η κάθε µια αρκεί να πληκτρολογήσουµε: iptables L To αποτέλεσµα θα είναι παρόµοιο µε το παρακάτω: Chain INPUT (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination Chain FORWARD (policy ACCEPT) target prot opt source destination 20
Διαχείριση αλυσίδων (4/8) Που σηµαίνει πως οι υπαρκτές αλυσίδες INPUT, FORWARD και OUTPUT δεν έχουν κανένα κανόνα και πως έχουν σαν πολιτική ασφαλείας να δέχονται τα πάντα (policy ACCEPT). Η πολιτική ασφαλείας προσδιορίζει πως να συµπεριφερθεί µια αλυσίδα αν ένα πακέτο που ελέγχει δεν ταιριάζει σε κανένα κανόνα ή δεν υπάρχει κανένας κανόνας σε αυτήν. Αν δηλαδή έρθει ένα πακέτο επειδή δεν υπάρχουν κανόνες στην INPUT αλυσίδα θα εφαρµοστεί η πολιτική που είναι ACCEPT δηλαδή θα το δεχτούµε. 21
Διαχείριση αλυσίδων (5/8) Η αντίθετη πολιτική που µπορούµε να ορίσουµε είναι η DROP. Μπορούμε να ορίσουμε μια default πολιτική για κάποια αλυσίδα χρησιµοποιώντας την εντολή: iptables -P <chain> <policy> ή iptables --policy <chain> <policy> Π.χ. iptables -P FORWARD DROP (απαγορεύει την προώθηση πακέτων) ή αντίστοιχα. iptables --policy FORWARD DROP 22
Διαχείριση αλυσίδων (6/8) Θα δούµε µετά με την χρήση πάλι της εντολής iptables L πως µε την εµφάνιση του firewall έχει αλλάξει η πολιτική του FORWARD: Chain FORWARD (policy DROP) targetprot opt source destination Αν θέλουμε να δούμε μόνο τα default policies για κάθε chain μπορούμε επίσης να χρησιμοποιήσουμε την εντολή: iptables L grep policy 23
Διαχείριση αλυσίδων (7/8) Οπότε θα δούμε το παρακάτω αποτέλεσμα. Chain INPUT (policy ACCEPT) Chain FORWARD (policy DROP) Chain OUTPUT (policy ACCEPT) Η πρώτη απόφαση που καλούμαστε να λάβουμε όταν ρυθμίζουμε ένα firewall είναι η default πολιτική της κάθε αλυσίδας. Εξ ορισμού η πολιτική που ακολουθείται σε κάθε αλυσίδα είναι η ACCEPT. 24
Διαχείριση αλυσίδων (8/8) Αν θελήσουμε να ακολουθήσουμε αυτή την πολιτική θα πρέπει στη συνέχεια να δημιουργήσουμε κανόνες σχετικά με την κίνηση η οποία θέλουμε να απορρίπτεται από το firewall. Αν πάλι επιλέξουμε να αλλάξουμε την default πολιτική μιας ή όλων των αλυσίδων σε DROP θα πρέπει να ορίσουμε παρακάτω με κανόνες ποιά θα είναι η κίνηση που θα επιτρέπουμε να περνάει από το firewall. Σκεφτείτε ένα ουσιαστικό παράδειγμα όπου θα θέλουμε να χρησιμοποιήσουμε αποκλειστικά την πολιτική ACCEPT και όχι την DROP. 25
Σημείωμα Αναφοράς Copyright ΤΕΙ Δυτικής Μακεδονίας, Νικολάου Σπύρος. «Ασφάλεια Υπολογιστικών Συστημάτων». Έκδοση: 1.0. Κοζάνη 2015. Διαθέσιμο από τη δικτυακή διεύθυνση: 26
Σημείωμα Αδειοδότησης Το παρόν υλικό διατίθεται με τους όρους της άδειας χρήσης Creative Commons Αναφορά, Μη Εμπορική Χρήση Παρόμοια Διανομή 4.0 [1] ή μεταγενέστερη, Διεθνής Έκδοση. Εξαιρούνται τα αυτοτελή έργα τρίτων π.χ. φωτογραφίες, διαγράμματα κ.λ.π., τα οποία εμπεριέχονται σε αυτό και τα οποία αναφέρονται μαζί με τους όρους χρήσης τους στο «Σημείωμα Χρήσης Έργων Τρίτων». [1] http://creativecommons.org/licenses/by-nc-sa/4.0/ Ως Μη Εμπορική ορίζεται η χρήση: που δεν περιλαμβάνει άμεσο ή έμμεσο οικονομικό όφελος από την χρήση του έργου, για το διανομέα του έργου και αδειοδόχο. που δεν περιλαμβάνει οικονομική συναλλαγή ως προϋπόθεση για τη χρήση ή πρόσβαση στο έργο. που δεν προσπορίζει στο διανομέα του έργου και αδειοδόχο έμμεσο οικονομικό όφελος (π.χ. διαφημίσεις) από την προβολή του έργου σε διαδικτυακό τόπο. Ο δικαιούχος μπορεί να παρέχει στον αδειοδόχο ξεχωριστή άδεια να χρησιμοποιεί το έργο για εμπορική χρήση, εφόσον αυτό του ζητηθεί. 27
Διατήρηση Σημειωμάτων Οποιαδήποτε αναπαραγωγή ή διασκευή του υλικού θα πρέπει να συμπεριλαμβάνει: το Σημείωμα Αναφοράς. το Σημείωμα Αδειοδότησης. τη δήλωση Διατήρησης Σημειωμάτων. το Σημείωμα Χρήσης Έργων Τρίτων (εφόσον υπάρχει). μαζί με τους συνοδευόμενους υπερσυνδέσμους. 28
Βιβλιογραφία 1. Κρυπτογραφία για Ασφάλεια Δικτύων Αρχές και Εφαρμογές, Stallings. 2. Βασικές Αρχές Ασφάλειας Δικτύων: Εφαρμογές και Πρότυπα, William Stallings. 3. Ασφάλεια δικτύων 6η Έκδοση, McClure Stuart, Scambray Joel, Kurtz George. 4. Ασφάλεια Πληροφοριακών συστημάτων, Παγκαλος Γ., Μαυριδης Ι. 29
Τέλος Ενότητας