Κυριακή 2 Μαρτίου 2014

Gotofail, το bug της Apple που θα συζητιέται για καιρό

Ήταν backdoor ή όχι; Ήταν προγραμματιστικό λάθος ή το "χέρι" κάποιας μυστικής υπηρεσίας; Όποια και αν είναι η ιστορία πίσω από το σοβαρό αυτό bug στον κώδικα της Apple, ένα είναι το γεγονός: Θα συζητιέται για πολύ καιρό.

Όλα ξεκίνησαν στις 21 Φεβρουαρίου, όταν η Apple έβγαλε μια ενημέρωση για το iOS (το λειτουργικό σύστημα των iPhone, iPad, iPod). Μία μέρα μετά ο Adam Langley1 αποκάλυπτε τον κώδικα που διόρθωνε αυτή η ενημέρωση. Ο κώδικας ήταν ο παρακάτω:

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

Ας προσέξουμε λίγο τον κώδικα. Στην γραμμή 4 δημιουργεί μια μεταβλητή με όνομα err. Στις γραμμές 8 και 10 γεμίζει στην ουσία μια στοίβα και τον πραγματικό έλεγχο της υπογραφής τον κάνει στην γραμμή 13. Μέχρι και πριν την γραμμή 13 η μεταβλητή err που δημιουργήθηκε στην γραμμή 4, έχει την τιμή 0 που σημαίνει "όλα καλά". Στην γραμμή 13 λοιπόν αν η υπογραφή δεν επαληθευτεί, η err αποκτάει  μια άλλη τιμή και ο κώδικα "πηδάει" στη γραμμή 19 όπου και επιστρέφει την τιμή της μεταβλητής err. Με μια προσεχτική ματιά όμως θα διαπιστώσετε πως ο κώδικας δεν θα φτάσει ποτέ στην γραμμή 13. Αυτό οφείλετε στην εντολή που υπάρχει στην γραμμή 12. Αυτή η εντολή παρόλο που έχει κενό μπροστά της δεν ανήκει στο if της γραμμής 10 αλλά είναι μια εντολή που εκτελείται πάντα. Η εντολή αυτή κάνει τον κώδικα να πηδήξει στην γραμμή 19 και να επιστρέψει την τιμή της err η οποία όμως είναι 0! Αυτό που συμβαίνει δηλαδή είναι πως ποτέ δεν γίνεται έλεγχος της υπογραφής οπότε οποιοσδήποτε τρίτος μπορεί να "παρέμβει" και να υποκλέψει μια φαινομενικά ασφαλή επικοινωνία, χωρίς ο χρήστης να καταλάβει κάτι!

Το δυσάρεστο ήταν πως το σφάλμα αυτό επηρέαζε και το λειτουργικό σύστημα των υπολογιστών της Apple. Παρόλα αυτά η ενημέρωση για τους υπολογιστές άργησε μερικές μέρες αφήνοντας εκτεθειμένους χιλιάδες χρήστες.

Το bug αυτό, που θα μείνει στην ιστορία ως Gotofail bug, ξεσήκωσε πολλές συζητήσεις από το πώς πρέπει να γράφουμε κώδικα, μέχρι θεωρίες συνωμοσίας για το πώς  βρέθηκε το επιπλέον goto σε εκείνη την γραμμή.

Παραπομπές

  1. A. Langley, "Apple's SSL/TLS bug," Φεβ. 2014, [Online], Τελευταία πρόσβαση 3 Μαρ. 2014

Δεν υπάρχουν σχόλια:

Δημοσίευση σχολίου