Ασφάλεια στο ελεύθερο λογισμικό και στις σύγχρονες διανομές linux

Αφορμή για το παρακάτω κείμενο αποτέλεσε η συμμετοχή μου σε ένα σεμινάριο ασφάλειας υπολογιστικών συστημάτων και δικτύων που διοργάνωσε η περιφέρεια δυτικής Ελλάδας σε συνεργασία με το ΕΑΙΤΥ. Όπως αναφέρεται και στην ιστοσελίδα του σεμιναρίου, στόχος του είναι η ενημέρωση των Μικρομεσαίων Επιχειρήσεων σε θέματα αναγνώρισης των επιθέσεων και των προβλημάτων που παρουσιάζονται σε ένα σύστημα που είναι διασυνδεδεμένο στο διαδίκτυο και των βασικών κανόνων για την αντιμετώπιση των προβλημάτων αυτών, αν και στα έδρανα βρίσκονταν και αρκετοί φοιτήτές του τμήματος Μηχανικών Η/Υ. Κοιτώντας το πρόγραμμα του σεμιναρίου και παρακολουθώντας τις διαλέξεις, παρατήρησα ότι αν και η αναφορά σε δικτυακές υπηρεσίες, servers κλπ ήταν συχνή, τα εργαλεία και οι πρακτικές που παρουσιάζονταν ήταν αποκλειστικά προσανατολισμένες σε διαχείριση και προστασία συστημάτων windows. Το unix/linux απουσίαζε εντελώς.

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

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

Ελεύθερο Λογισμικό / Λογισμικό Ανοικτού Κώδικα

Ασφάλεια μέσω της διαφάνειας

Εμπιστοσύνη στην κοινότητα

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

Λιγότερα σφάλματα και κενά ασφαλείας

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

“given enough eyeballs, all bugs are shallow” (Linus’s law)

Τα σφάλματα δεν αποκρύπτονται. Διορθώνονται γρήγορα.

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

“Είναι απλά ουτοπικό να βασίζεις στη μυστικότητα την ασφάλεια του λογισμικού ηλ. υπολογιστών. Μπορεί να καταφέρεις να κρατήσεις τον τρόπο λειτουργίας ενός προγράμματος μακρυά από τα μάτια του κοινού, αλλά μπορείς να αποτρέψεις την εφαρμογή αντίστροφης μηχανικής πάνω σε αυτό από τους αντιπάλους σου; Πιθανότατα όχι.” (Whitfield Diffie, co-inventor of public-key cryptography)

Σύγχρονες διανομές Linux

Ασφάλεια μέσω διαφάνειας

  • Ανοικτός κώδικας

Ασφάλεια μέσω σχεδιασμού

  • Αρχιτεκτονική Unix
  • Προστασία μνήμης διεργασιών
  • Προσωπικοί λογαριασμοί χρηστών
  • Προσωπικοί χώροι αποθήκευσης αρχείων
  • Προσωπικές ρυθμίσεις εφαρμογών
  • Άδειες πρόσβασης αρχείων
  • Αρθρωτός σχεδιασμός
  • Firewall στον πυρήνα
  • Chroot/Sandbox

Ασφάλεια μέσω της ποικιλομορφίας

  • Ποικιλία διανομών
  • Χρήση πολλαπλών προγραμμάτων για την ίδια εργασία
  • Ποικιλία τρόπων ρύθμισης και παραμετροποίησης

Ασφάλεια μέσω κρυπτογραφίας

  • Ευαίσθητα δεδομένα κρυπτογραφούνται
  • Υποστήριξη κρυπτογραφημένων συστημάτων αρχείων
  • ssh για ασφαλή απομακρυσμένη πρόσβαση
  • scp/sftp για ασφαλή μεταφορά αρχείων
  • Αυτόματος έλεγχος ψηφιακών υπογραφών md5sum κατά τη λήψη ενημερώσεων ή νέου λογισμικού από τα αποθετήρια της διανομής

Ασφάλεια μέσω των χρηστών

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

Ασφάλεια μέσω χαμηλού κόστους κτήσης και συντήρησης

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

Βασικές πρακτικές προστασίας ενός συστήματος Linux

Το Linux (ως ένα UNIX λειτουργικό σύστημα) δεν μπορεί να προσβληθεί από ιούς με τον ίδιο τρόπο που προσβάλλεται ένα Dos/Windows σύστημα. Στο UNIX, οι μηχανισμοί ασφάλειας αποτελούν βασικό στοιχείο του λειτουργικού συστήματος (πχ. οι απλοί χρήστες δεν έχουν δικαίωμα να γράφουν ελεύθερα σε όλες τις περιοχές του σκληρού δίσκου ή να εκτελούν κάποιες εφαρμογές και εντολές). Κακόβουλο λογισμικό (ιοί, worms, trojan horses) για UNIX υπάρχει, αλλά δεν αποτελεί (μέχρι σήμερα τουλάχιστον) πραγματικό πρόβλημα για οικιακούς χρήστες.

Για να προστατευτείτε αρκεί να ακολουθείτε κάποιους βασικούς κανόνες ασφάλειας:

  • Χρησιμοποιείτε ισχυρούς κωδικούς πρόσβασης. Μην χρησιμοποιείτε τον ίδιο κωδικό για πρόσβαση σε πολλούς λογαριασμούς/συστήματα/υπηρεσίες. Αλλάζετε συχνά τον κωδικό σας.
  • Μην τρέχετε εφαρμογές και προγράμματα με δικαιώματα υπερχρήστη (root/sudo) αν δεν είναι απαραίτητο. Να συνδέεστε με τον λογαριασμό απλού χρήστη για καθημερινή χρήση.
  • Εγκαθιστάτε πακέτα λογισμικού μόνο από έμπιστες πηγές.
  • Ελέγχετε τις PGP υπογραφές όταν κατεβάζετε πακέτα από εναλλακτικές τοποθεσίες (mirrors).
  • Εάν δεν ξέρετε τι κάνει ένα εκτελέσιμο αρχείο, ή δεν εμπιστεύεστε την πηγή προέλευσής του, αποφύγετε να το εκτελέσετε ή εκτελέστε το σε κάποιον δοκιμαστικό λογαριασμό με περιορισμένα δικαιώματα και όχι με δικαιώματα υπερχρήστη (root/sudo).
  • Διατηρείτε το σύστημά σας ενημερωμένο.
  • Χρησιμοποιείτε το firewall του πυρήνα (iptables).
  • Μην τρέχετε και μην κάνετε πρόσβασιμες από το διαδίκτυο υπηρεσίες (services) που δεν είναι απαραίτητες.
  • Χρησιμοποιείτε κρυπτογραφημένα πρωτόκολλα για απομακρυσμένη πρόσβαση και μεταφορά αρχείων (ssh, https, sftp).

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

Και μην ξεχνάτε:

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

The only secure computer is one that’s unplugged, locked in a safe, and buried 20 feet under the ground in a secret location…and i’m not even too sure about that one — Dennis Huges, FBI.

Σχετικές πηγές:

http://www.linuxsecurity.com/
http://www.linuxtopia.org/LinuxSecurity/
http://www.nic.com/~dave/SecurityAdminGuide/SecurityAdminGuide.html
http://www.itc.virginia.edu/unixsys/sec/

Συζητώντας και διαβάζοντας για το Ελεύθερο Λογισμικό

Καθώς οι εξελίξεις γύρω από το ελεύθερο λογισμικό, τα ανοικτά πρότυπα και τις διανομές linux γίνονται όλο και πιο ραγδαίες και οι όροι αυτοί ακούγονται όλο και πιο συχνά από τα μέσα ενημέρωσης και τους ειδικούς του χώρου της πληροφορικής, όλο και πιο συχνά βρίσκομαι στη θέση να προσπαθώ να εξηγήσω σε φίλους και γνωστούς που έχουν από μεγάλη έως ελάχιστη επαφή και γνώση του χώρου της πληροφορικής, διάφορες πτυχές των χαρακτηριστικών του ελεύθερου λογισμικού, των μεθόδων ανάπτυξης και εμπορευματικής αξιοποίησής του, της φιλοσοφίας και της πολιτικής που το διέπουν και πηγάζουν από αυτό και των κινήτρων για υιοθέτησή του ή μη. Ίσως και εγώ επιδιώκω την εμπλοκή μου σε συζητήσεις πάνω σε αυτά τα θέματα. Η χρόνια ενασχόλησή μου με τον χώρο του ελεύθερου λογισμικού (αν θυμάμαι καλά το 1998-99 πήρα στα χέρια μου το πρώτο cd linux από το υπολογιστικό της σχολής μου – στιγμή που άλλαξε για πάντα τη σχέση μου με και την οπτική μου για στους υπολογιστές – ) και ο ενθουσιασμός μου για τις εξελλίξεις που συμβαίνουν σε αυτόν προκαλούν πολύ συχνά μακροσκελείς συζητήσεις με ανθρώπους του χώρου, αλλά και με απλούς ελάχιστα εξοικιωμένους χρήστες υπολογιστών, που μπορούν να κρατήσουν ώρες και να περάσουν από ή να καταλήξουν σε παθιασμένες αντιπαραθέσεις (έχω χάσει – ή κερδίσει – πολλά απογεύματα και βράδια συζητώντας για ελεύθερο λογισμικό).

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

  • “Και ποιος ελέγχει και διασφαλίζει την ποιότητα του παραγώμενου ελεύθερου λογισμικού; Μόνο μια εταιρία μπορεί να κάνει κάτι τέτοιο!”
  • “Πως είναι δυνατόν κάτι που παράγεται από χομπίστες και όχι από μια οργανωμένη εταιρική δομή να είναι χρήσιμο και ποιοτικό; Οι μεγάλες εταιρίες έχουν τα χρήματα και συγκεντρώνουν όλα τα μεγάλα μυαλά του χώρου. Πως είναι δυνατόν μια ομάδα που δεν έχει στόχο το κέρδος και δεν διαθέτει τους πόρους να φτιάξει κάτι το ίδιο καλό ή καλύτερο;”
  • “Γιατί κάποιος να αναμειχθεί στην ανάπτυξη ελεύθερου λογισμικού ή να εκδώσει τη δουλειά του ως ελεύθερο λογισμικό, ενώ θα μπορούσε να την καρπωθεί κλείνοντας την, πατεντάροντας την και πουλώντας την πολύ ακριβά;”
  • “Αν δώσω τον κώδικά μου κάτω από άδεια ελεύθερου λογισμικού θα μπορούν να βγάλουν λεφτά από αυτόν ακόμα και οι ανταγωνιστές μου, χωρίς εγώ να πληρώνομαι γι’ αυτό. Δεν με εκμεταλλεύονται έτσι; Δεν καταλαβαίνω γιατί κάποιος να κάνει κάτι τέτοιο… Μα**ας είναι;”
  • “Πως βγάζουν λεφτά οι εταιρίες ελεύθερου λογισμικού; Ποιος πληρώνει τους προγραμματιστές για τον ελεύθερο κώδικα που γράφουν και γιατί;”
  • “Και τι κάνουν οι μεγάλες παραδοσιακές εταιρίες λογισμικού; Δεν μπορεί να το αφήσουν έτσι. Αργά ή γρήγορα θα βρουν τον τρόπο να το καταπνίξουν ή να το εκφυλίσουν.”
  • “Μπορεί υπάρχει το linux και το openoffice, αλλά για εξειδικευμένες λειτουργίες που χρειάζομαι δεν πρόκειται ποτέ να γραφτούν ελεύθερα προγράμματα. Τα κλειστά προγράμματα που τις παρέχουν παράγονται από μια – δυο εταιρίες σε όλο τον κόσμο που είναι και κορυφαίες, έχουν στοχευμένο κοινό το οποίο δεν χρειάζεται κάτι παραπάνω από αυτά που προσφέρουν, και συνεπώς κανένας δεν θα ασχοληθεί να αναπτύξει εναλλακτικά ελεύθερα προγράμματα, ενώ αν κάποιοι το κάνουν έχουν μηδενική πιθανότητα να φτάσουν και να χτυπήσουν τις εδραιωμένες στο χώρο εταιρίες. Συνεπώς γιατί να χάσω το χρόνο μου ασχολούμενος με το ελεύθερο λογισμικό αφού πάντα θα χρειάζομαι κλειστές εφαρμογές που τρέχουν σε κλειστά λειτουργικά συστήματα;”

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

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

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