Κεφάλαιο 14 Ασφάλεια Η ασφάλεια κάθε συστήματος είναι σημαντική. Μπορεί να αποτρέψει τους άλλους απο το να χρησιμοποιήσουν τον υπολογιστή σας για να κάνουν μια επίθεση, καθώς επίσης και να προστατέψει δεδομένα ευαίσθητης φύσεως. Αυτό το κεφάλαιο πραγματεύεται το πως θα ξεκινήσετε να ασφαλίζετε το slackware μηχάνημά σας ενάντια σε ατάλαντους και ταλαντούχους επίδοξους εισβολείς. Να έχετε ωστόσο υπόψιν σας ότι αυτό είναι μόνο η αρχή της ασφάλισης ενός συστήματος: γιατί η ασφάλεια είναι μια διαδικασία, όχι μια κατάσταση. 14.1 Απενεργοποιήστε υπηρεσίες Το πρώτο βήμα μετά την εγκατάσταση του slackware θα πρέπει να είναι να απενεργοποιήσετε τυχόν υπηρεσίες που δεν χρειάζεστε. Κάθε υπηρεσία μπορεί να αποτελέσει μια απειλή στην ασφάλεια, γιαυτό είναι σημαντικό να εκτελείτε όσο το δυνατόν λιγότερες (δηλ. μόνο αυτές που είναι απαραίτητες). Οι υπηρεσίες εκκινούνται κυρίως απο δύο σημεία - το inetd και διάφορα script εκκίνησης. 14.1.1 Υπηρεσίες που εκκινούνται απο το inetd Πολλές υπηρεσίες του slackware εκτελούνται από το inetd(8). Το inetd είναι ένα daemon που "ακούει" στις θύρες που χρησιμοποιούνται απο όσες υπηρεσίες είναι ρυθμισμένες να εκκινούνται από αυτό, και φορτώνει ένα στιγμιότυπο της σχετικής υπηρεσίας όταν γίνεται μια απόπειρα σύνδεσης. Οι υπηρεσίες που εκκινούνται απο το inetd μπορούν να απενεργοποιηθούν τοποθετώντας μέσα σε σχόλια τις αντίστοιχες γραμμές στο /etc/inetd.conf. Για να το κάνετε αυτό, ανοίχτε αυτό το αρχείο με τον αγαπημένο σας επεξεργαστή κειμένου (π.χ. τον vi) και θα δείτε κάτι παρόμοιο με: telnet stream tcp nowait root /usr/sbin/tcpd in.telnetd Μπορείτε να απενεργοποιήσετε αυτή την υπηρεσία, και όποια άλλη δεν χρειάζεστε, τοποθετώντας τες μέσα σε σχόλια (δηλ. προσθέτοντας ένα σύμβολο # (δίεση) στην αρχή της γραμμής). Έτσι η παραπάνω γραμμή θα γίνει: #telnet stream tcp nowait root /usr/sbin/tcpd in.telnetd Μόλις επανεκκινηθεί το inetd, η υπηρεσία θα απενεργοποιηθεί. Μπορείτε να απενεργοποιήσετε το inetd με την εντολή: # kill -HUP $(cat /var/run/inetd.pid) 14.1.2 Υπηρεσίες που εκκινούνται απο script εκκίνησης Οι υπόλοιπες υπηρεσίες που ξεκινούν όταν ανοίγει ο υπολογιστής εκκινούνται απο τα scripts εκκίνησης στο /etc/rc.d/. Αυτές μπορούν να απενεργοποιηθούν με δύο διαφορετικούς τρόπους: ο πρώτος είναι να αφαιρέσετε τα δικαιώματα εκτέλεσης απο το σχετικό script εκκίνησης, ενώ ο δεύτερος να βάλετε μέσα σε σχόλια τις σχετικές γραμμές μέσα στα script. Για παράδειγμα, το SSH εκκινεί απο το δικό του script στο /etc/rd.c/rc.sshd. Μπορείτε να το απενεργοποιήσετε με την εντολή:
# chmod -x /etc/rc.d/rc.sshd Για υπηρεσίες που δεν έχουν δικό τους script εκκίνησης, θα χρειαστεί να βάλετε μέσα σε σχόλια τις κατάλληλες γραμμές σε άλλα script εκκίνησης για να τις απενεργοποιήσετε. Για παράδειγμα, η υπηρεσία portmap εκκινείται απο τις ακόλουθες γραμμές στο /etc/rc.d/rc.inet2: # This must be running in order to mount NFS volumes. # Start the RPC portmapper: if [ -x /sbin/rpc.portmap ]; then echo "Starting RPC portmapper: /sbin/rpc.portmap" /sbin/rpc.portmap fi # Done starting the RPC portmapper. Αυτό μπορεί να απενεργοποιηθεί προσθέτοντας σύμβολα # στις αρχές των γραμμών που δεν ξεκινούν ήδη με #, έτσι: # This must be running in order to mount NFS volumes. # Start the RPC portmapper: #if [ -x /sbin/rpc.portmap ]; then # echo "Starting RPC portmapper: /sbin/rpc.portmap" # /sbin/rpc.portmap #fi # Done starting the RPC portmapper. Οι αλλαγές αυτές θα επιδράσουν μόνο μετά από μια επανεκκίνηση ή με μια αλλαγή απο κάποιο άλλο runlevel σε runlevel 3 ή 4. Αυτό μπορείτε να το κάνετε δίνοντας τα ακόλουθα στην κονσόλα (θα χρειαστεί να κάνετε login ξανά μετά την αλλαγή του runlevel): # telinit 1 # telinit 3 14.2 Host Access Control 14.2 Έλεγχος πρόσβασης 14.2.1 iptables Το iptables είναι το πρόγραμμα που ρυθμίζει το φιλτράρισμα πακέτων για Linux 2.4 και πάνω. Ο πυρήνας 2.4 (2.4.5 για την ακρίβεια) προστέθηκε για πρώτη φορά ως επιλογή για το slackware στην έκδοση 8.0 και έγινε ο προεπιλεγμένος στην έκδοση 8.1. Αυτή η ενότητα καλύπτει μόνο τα βασικά για τη χρήση του και θα πρέπει να δείτε το http://www.netfilter.org/για περισσότερες λεπτομέρειες. Οι εντολές αυτές μπορούν να μπουν στο /etc/rc.d/rc.firewall, το οποίο θα πρέπει να γίνει εκτελέσιμο για να εφαρμοστούν οι κανόνες κατά την εκκίνηση. Προσέξτε όμως: λανθασμένες εντολές στο iptables μπορεί να σας κλειδώσουν έξω απο το ίδιο σας το μηχάνημα. Εκτός κι αν έχετε απόλυτη σιγουριά για τις ικανότητες σας, πάντα να βεβαιώνεστε ότι έχετε τοπική πρόσβαση στο μηχάνημα. Το πρώτο πράγμα που θα πρέπει να κάνουν οι περισσότεροι είναι να θέσουν προεπιλεγμένη πολιτική για κάθε εισερχόμενη κίνηση το DROP (απόρριψη). # iptables -P INPUT DROP # iptables -P FORWARD DROP Όταν απορρίψετε τα πάντα, μπορείτε να αρχίσετε να επιτρέπετε μερικά. Το πρώτο είναι να η κίνηση για
ήδη When everything is denied, you can start allowing things. The first thing to allow is any traffic for sessions which are already established: # iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT Για να μη δημιουργηθούν προβλήματα σε εφαρμογές που επικοινωνούν με την διέυθυνση loopback, συνήθως είναι καλό να προσθέσετε ένα κανόνα όπως: # iptables -A INPUT -s 127.0.0.0/8 -d 127.0.0.0/8 -i lo -j ACCEPT Αυτός ο κανόνας επιτρέπει όλη την κίνηση από και προς το 127.0.0.0/8 (127.0.0.0-127.255.255.255) στη διασύνδεση loopback (lo). Οταν δημιουργείτε κανόνες, είναι καλή ιδέα να είστε όσο πιο συγκεκριμένος γίνετε, και να επιβεβαιώνετε ότι οι κανόνες σας δεν επιτρέπουν από απροσεξία κάποια κακόβουλη ενέργεια. Κανόνες που επιτρέπουν πολύ λίγες ενέργειες σημαίνουν περισσότεροι κανόνες και περισσότερη πληκτρολόγηση. Το επόμενο πράγμα που θα κάνετε θα είναι να επιτρέψετε την πρόσβαση σε ορισμένες υπηρεσίες που εκτελούνται στο μηχάνημά σας. Αν, για παράδειγμα, θέλατε να εκτελείτε έναν web server στο μηχάνημά σας, θα χρησιμοποιούσατε έναν κανόνα όπως ο επόμενος: # iptables -A INPUT -p tcp --dport 80 -i ppp0 -j ACCEPT Αυτό θα επιτρέψει την πρόσβαση κάθε υπολογιστή στη θύρα 80 του υπολογιστή σας, μέσω της διασύνδεσης ppp0. Ίσως θέλετε να περιορίσετε την πρόσβαση σε αυτή την υπηρεσία, έτσι ώστε μόνο συγκεκριμένοι υπολογιστές να μπορούν να την χρησιμοποιήσουν. Αυτός ο κανόνας επιτρέπει την πρόσβαση στον web server σας μόνο απο την διεύθυνση 64.57.102.34 # iptables -A INPUT -p tcp -s 64.57.102.34 --dport 80 -i ppp0 -j ACCEPT Το να επιτρέψετε την κίνηση ICMP μπορεί να φανεί χρήσιμο, για διαγνωστικούς λόγους. Για να το κάνετε, θα μπορούσατε να χρησιμοποιήσετε ένα κανόνα σαν αυτόν: # iptables -A INPUT -p icmp -j ACCEPT Οι περισσότεροι θα θέλετε επίσης να ρυθμίσετε τη Μετάφραση Διευθύνσεων Δικτύου (Network Address Translation - NAT) στο μηχάνημα που εκτελεί καθήκοντα gateway, έτσι ώστε τα υπόλοιπα μηχανήματα στο δίκτυο να έχουν πρόσβαση στο Internet μέσω αυτού. Θα χρησιμοποιούστε τον ακόλουθο κανόνα για να το πετύχετε: # iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE Θα χρειαστείτε επίσησς να ενεργοποιήσετε την προώθηση IP (IP forwarding). Μπορείτε να το κάνετε προσωρινά, με την ακόλουθη εντολή: # echo 1 > /proc/sys/net/ipv4/ip_forward Για να ενεργοποιήσετε μόνιμα την προώθηση IP (πχ για να μείνει η αλλαγή μετά απο μια επανεκκίνηση), θα ανοίξετε το αρχείο /etc/rc.d/rc.inet2 με τον αγαπημένο σας επεξεργαστή κειμένου και θα αλλάξετε την ακόλουθη γραμμή: IPV4_FORWARD=0...σε αυτή:
IPV4_FORWARD=1 Για περισσότερες πληροφορίες πάνω στο NAT, ανατρέξτε στο NAT HOWTO. 14.2.2 tcpwrappers Το tcpwrappers ελέγχει τις υπηρεσίες σε επίπεδο εφαρμογής, και όχι σε επίπεδο IP. Αυτό μπορεί να παρέχει ένα επιπλέον στρώμα ασφάλειας σε περιπτώσεις που οι έλεγχοι σε επίπεδο IP δεν λειτουργούν σωστά. Για παράδειγμα, αν επαναμεταγλωττίσετε τον πυρήνα αλλά ξεχάσετε να συμπεριλάβετε υποστήριξη για το iptables, η προστασία σε επίπεδο IP θα αποτύχει αλλά to tcpwrappers θα συνεχίσει να συμβάλλει στην προστασία του συστήματός σας. Η πρόσβαση σε υπηρεσίες που προστατεύει το tcpwrappers μπορεί να ελεγχθεί μέσω των αρχείων /etc/hosts.allow και /etc/hosts.deny. Η πλειοψηφία των χρηστών θα έχει μόνο μια γραμμή στο δικό τους /etc/hosts.deny που από προεπιλογή απορρίπτει την πρόσβαση σε όλες τις υπηρεσίες. Αυτή η γραμμή θα είναι: ALL : ALL Όταν το κάνετε αυτό, μπορείτε να αρχίσετε να επιτρέπετε προσβαση σε υπηρεσίες για συγκεκριμένους υπολογιστές, τομείς, ή διευθύνσεις IP. Αυτό μπορεί να γίνει με το αρχείο /etc/hosts.allow σπου ακολουθεί την ίδια σύνταξη. Πολλοί θα ξεκινούσαν επιτρέποντας όλες τις συνδέσεις απο το localhost. Αυτό μπορει να γίνει ως εξής: ALL : 127.0.0.1 Για να επιτρέψετε την πρόσβαση στον SSHd από το 192.168.0.0/24, μπορείτε να χρησιμοποιήσετε οποιονδήποτε απο τους ακόλουθους κανόνες: sshd : 192.168.0.0/24 sshd : 192.168.0. Είναι επίσης δυνατό να περιορίσετε την πρόσβαση σε υπολογιστές που ανήκουν σε συγκεκριμένους τομείς. Αυτό μπορεί να γίνει με τον ακόλουθο κανόνα (προσέχτε ότι αυτό βασίζεται στις καταχωρήσεις αντίστροφου DNS, έτσι προτείνεται να μην χρησιμοποιείται για υπολογιστές συνδεδεμένους στο Internet) sshd :.slackware.com 14.3 Μείνετε συντονισμένοι 14.3.1 Η λίστα ηλεκτρονικού ταχυδρομείου slackware-security Όταν ένα πρόβλημα ασφαλείας επηρεάζει το Slackware, αποστέλλεται ένα μήνυμα ηλεκτρονικού ταχυδρομείου σε όλους τους εγγεγραμμένους στη λίστα slackware-security@slackware.com. Στέλνονται αναφορές για ευπάθειες σε οποιοδήποτε κομμάτι του Slackware, εκτός από το λογισμικό στο /extra ή
στο /pasture. Αυτές οι ανακοινώσεις ασφαλείας περιέχουνε λεπτομέρειες στο πως να προμηθευτείτε τις ανανεωμένες εκδόσεις των πακέτων για Slackware ή διορθώσεις, αν υπάρχουν. Το πως να γραφτείτε στις λίστες ηλεκτρονικού ταχυδρομείου του Slackware καλύπτεται στην ενότητα 2.2.2 14.3.2 Ο φάκελος /patches Όποτε βγάινουν ανανεωμένα πακέτα για μια έκδοση του Slackware (συνήως μόνο για να διορθώσουν ένα πρόβλημα σφαλείας, στην περίπτωση μιας έκδοσης που έχει ήδη κυκλοφορήσει), τοποθετούνται στο φάκελο /patches. To πλήρες μονοπάτι για αυτές τις διορθώσεις εξαρτάται απο το mirror που χρησιμοποιείτε, αλλά θα έχει την μορφή /path/to/slackware-x.x/patches/. Πριν εγκαταστήσετε αυτά τα πακέτα, είναι μια καλή ιδέα να επιβεβαιώσετε το md5sum του πακέτου. Το md5sum(1) είναι μια εντολή της γραμμής εντολών που υπολογίζει μια "μοναδική" μαθηματική τιμή hash του αρχείου. Αν έστω και ένα bit έχει αλλάξει, θα υπολογιστεί μια διαφορετική τιμή md5sum. % md5sum package-<ver>-<arch>-<rev>.tgz 6341417aa1c025448b53073a1f1d287d package-<ver>-<arch>-<rev>.tgz Θα πρέπει μετά να ελέγξετε αυτή την τιμή με την τιμή για το νέο πακέτο που βρίσκεται στο αρχείο CHECKSUMS.md5 στο φάκελο slackware-$version (επίσης στο φάκελο /patches για τις διορθώσεις) ή στο μήνυμα ηλεκτρονικού ταχυδρομείου της λίστας slackware-security. Αν έχετε ένα αρχείο που περιέχει τις τιμές md5sum, μπορείτε ναχρησιμοποιήσετε αυτό με την επιλογή -c στο md5sum. # md5sum -c CHECKSUMS.md5./ANNOUNCE.10_0: OK./BOOTING.TXT: OK./COPYING: OK./COPYRIGHT.TXT: OK./CRYPTO_NOTICE.TXT: OK./ChangeLog.txt: OK./FAQ.TXT: FAILED Όπως βλεπετε, όλα τα αρχεία που το md5sum αναγνωρίζει ως σωστά σημειώνονται με OK ενώ τα αρχεία στα οποία αποτυγχάνει σημειώνονται με FAILED. (Ναι, αυτό προσβάλει την εφυία σας. Γιατί με ανέχεστε;)