kiosterakis.gr +

ΕΝΗΜΕΡΩΣΗ-ΨΥΧΑΓΩΓΙΑ-ΕΚΠΑΙΔΕΥΣΗ

ΜΕ ΜΙΑ ΑΛΛΗ ΜΑΤΙΑ...

Τι είναι Heartbleed Bug...

Καρδιά
Την 1η Απριλίου 2014 συνέβη κάτι που δεν ήταν φάρσα. Ερευνητές ηλεκτρονικής ασφάλειας ανακάλυψαν ένα σοβαρό bug στο σύστημα κρυπτογράφησης που χρησιμοποιείται στα 2/3 ολόκληρου του Internet.

To heartbleed bug είναι ίσως το χειρότερο κενό ασφαλείας στην ιστορία του Internet. Λόγω αυτού, υπάρχει περίπτωση κάποιοι να έχουν ήδη πρόσβαση στους κωδικούς μας!

Το χρονικό μιας αδιανόητης αποκάλυψης

Ακουγόταν αδιανόητο αλλά δεν επρόκειτο διόλου για φάρσα. Οπως εξήγησε ο Νιλ Μέτα της Google στον Στίβεν Χένσον της OpenSSL.org, είχε ο ίδιος εντοπίσει το λάθος στο υποπρόγραμμα διαχείρισης επικοινωνίας της OpenSSL - ονόματι Heartbeat (Καρδιακός παλμός) - και ως τις 21 Μαρτίου 2014 δύο συνάδελφοί του είχαν καταφέρει να φτιάξουν ένα «μπάλωμα» που το διόρθωνε. Επειτα στις 31 Μαρτίου μια αμερικανική εταιρεία συμβούλων ασφάλειας - η CloudFlare - είχε βρει και διορθώσει το ίδιο λάθος, στον δικό της εξυπηρετητή... χωρίς να το κάνει θέμα. Και ύστερα, στις 3 Απριλίου 2014, μια φινλανδική εταιρεία ασφάλειας διαδικτυακού λογισμικού - η Codenomicon - έκανε την ίδια ανακάλυψη. Αλλά οι Φινλανδοί δεν το κράτησαν διόλου μυστικό: την ίδια ημέρα βάφτισαν το λάθος Heartbleed (Καρδιορραγία), σχεδίασαν ένα λογότυπο γι' αυτό, συνέταξαν μια λεπτομερή αναφορά του προβλήματος και την «αφισοκόλλησαν» σε ομώνυμη ιστοσελίδα που ανάρτησαν στο Διαδίκτυο (heartbleed.com). Οπως έγραψαν εκεί, οι προγραμματιστές της διαπίστωσαν ότι μπορούσαν μέσω του Heartbleed να κλέψουν όλα τα κλειδιά κρυπτογράφησης του ιστοτόπου της εταιρείας τους και να διαφύγουν απαρατήρητοι, χωρίς να αφήσουν το παραμικρό ίχνος.

Τέσσερις ημέρες μετά η OpenSSL διόρθωσε το λάθος της παρουσιάζοντας στις 7 Απριλίου 2014 την έκδοση OpenSSL 1.0.1g. Ομως ο συναγερμός παραχώρησε γρήγορα τη θέση του στον πανικό: Στις 8 Απριλίου, η Καναδική Εφορία (CRA) ανακάλυψε ότι μέσω του Heartbleed τής είχαν κλέψει τα στοιχεία ταυτοποίησης 900 πολιτών. Στις 10 Απριλίου η Cisco και η Juniper - δύο από τους μεγαλύτερους κατασκευαστές εξοπλισμού διαδικτύωσης - ανακοίνωσαν ότι τα προϊόντα τους είχαν μολυνθεί από το Heartbleed. Και ύστερα, την επόμενη ακριβώς ημέρα, το πρακτορείο ειδήσεων Bloomberg «έριξε τη βόμβα»: έγραψε ότι δύο στελέχη της Εθνικής Υπηρεσίας Ασφαλείας των ΗΠΑ (NSA) παραδέχτηκαν ανωνύμως ότι η υπηρεσία τους γνώριζε το πρόβλημα από... διετίας, αλλά δεν το αποκάλυψε διότι προτίμησε να το εκμεταλλευτεί προς άγραν μυστικών από το Διαδίκτυο!

Ο κίνδυνος της «ανοιχτής καρδιάς»

Η μία των πρώτων επιχειρήσεων που ανακάλυψαν το Heartbleed, η αμερικανική Cloudflare, έβαλε τους προγραμματιστές της να διαπιστώσουν κατά πόσον μέσω του «λάθους» μπορούσε ένας χάκερ να υποκλέψει το κρυπτογραφημένο κλειδί που διασφαλίζει την επικοινωνία χρηστών - εξυπηρετητών. Αν συνέβαινε αυτό, τότε ο χάκερ θα μπορούσε να στήσει έναν ψευδο-ιστότοπο που θα παρέκαμπτε τον έλεγχο ασφαλείας ή να αποκρυπτογραφήσει την επικοινωνία άλλων χρηστών με τον συγκεκριμένο εξυπηρετητή - τωρινή ή και του παρελθόντος. Οι προγραμματιστές της Cloudflare προσπάθησαν μάταια επί δύο εβδομάδες να κάνουν την υποκλοπή. Τότε, στις 11 Απριλίου 2014, η Cloudflare προκάλεσε την κρυπτογραφική κοινότητα του Διαδικτύου να επιτεθεί σε έναν εξυπηρετητή της που έτρεχε την «αιμορραγούσα» έκδοση του OpenSSL. Εντός μίας μόνον ημέρας είδαν να συμβαίνει το καταπληκτικό: Πρώτος έκλεψε το κλειδί ο Ρώσος Φεντόρ Ιντούτνι, έπειτα ο Φινλανδός Ιλκα Ματίλα, έπειτα ο κινέζος διδακτορικός φοιτητής του Κέιμπριτζ Ρούμπιν Ξου και ύστερα ο βρετανός ερευνητής ασφάλειας υπολογιστών Μπεν Μέρφι. Αποδεδειγμένα λοιπόν το 66% του Διαδικτύου που «έτρεχε» το ίδιο λογισμικό κρυπτογράφησης μπορούσε να θεωρηθεί ξεκλείδωτο.

Μια παρήγορη σκέψη θα ήταν ότι την υποκλοπή του κλειδιού κατόρθωσαν τέσσερις «πρωταθλητές», υπερ-ταλαντούχοι νέοι ταγμένοι μόνο στην ασφάλεια του Διαδικτύου. Ομως η πραγματικότητα διέλυσε γρήγορα τέτοιες αυταπάτες: μία μόλις ημέρα μετά τη δημοσιοποίηση της ύπαρξης του Heartbleed, το αμερικανικό Πανεπιστήμιο του Μίσιγκαν διαπίστωσε έντρομο ότι υπολογιστής από την Κίνα του είχε επιτεθεί ακριβώς μέσω αυτής της οδού. Ακολούθησαν 41 όμοιες επιθέσεις στον ίδιο εξυπηρετητή, με τις μισές να προέρχονται από την Κίνα. Αντίστοιχη επίθεση δέχθηκε το δίκτυο της Yahoo, η οποία συνειδητοποίησε ότι είχε χάσει αρκετά δεδομένα χρηστών της προτού προλάβει να «μπαλώσει» το λογισμικό της. Εκτοτε, πολλές επιχειρήσεις ακούστηκε ότι έπεσαν θύματα εκβιασμού από χάκερ που κατείχαν δεδομένα τους, αλλά σχεδόν όλες απέφυγαν να το καταγγείλουν στην αστυνομία για να μη χάσουν την αξιοπιστία ή και την πελατεία τους.

Κρυπτογράφηση δεδομένων και OpenSSL

Για την κρυπτογράφηση δεδομένων το Transport Layer Security (TLS) είναι το κύριο πρωτόκολλο κρυπτογράφησης που χρησιμοποιείται στο Internet.

Με απλά λόγια, το TLS και ο προκάτοχός του, SSL (Secure Socket Layer), είναι ο λόγος που μπορούμε να χρησιμοποιήσουμε password οπουδήποτε στο Internet.

Χωρίς αυτή την κρυπτογράφηση, όποτε γράφαμε τον κωδικό για να μπούμε στο λογαριασμό του email, του facebook ή οποιονδήποτε άλλο, θα ήταν πολύ απλό για κάποιον τρίτο να διαβάσει τον κωδικό κατά τη μεταφορά του στο Internet.

Εξίσου απλό θα ήταν σε μια τρίτη σελίδα να παριστάνει πως είναι το Facebook, το Gmail, το Yahoo, με στόχο να κλέψει τον κωδικό μας.

Όταν μπαίνουμε σε οποιαδήποτε από τις παραπάνω σελίδες, παρατηρούμε πως ξεκινούν με https:// και έχουν ένα λουκέτο. Αυτή είναι η πιστοποίηση πως η σελίδα είναι ασφαλής και πως είναι αυτή που λέει πως είναι, άρα μπορούμε να βάλουμε τον κωδικό μας.

Τι είναι το OpenSSL

To OpenSSL είναι ουσιαστικά μια υλοποίηση ανοιχτού κώδικα του πρωτοκόλλου TLS/SSL, και είναι διαθέσιμο δωρεάν.

Το OpenSSL είναι η κατεξοχήν επιλογή στους Web Servers ανοιχτού κώδικα, όπως ο Apache και ο nginx, που χρησιμοποιούνται στο 66% των server στο Internet.

Σε αυτόν τον κώδικα του OpenSSL, υπάρχει το κενό ασφαλείας που ονομάστηκε heartbleed bug. Μάλιστα, υπάρχει από το Δεκέμβριο του 2011, και ανακαλύφθηκε μόλις την 1η Απριλίου 2014.

Το heartbleed δεν είναι κάποιο πρόβλημα του πρωτοκόλλου TLS/SSL, των αλγορίθμων κρυπτογράφησης που εφαρμόζονται, ούτε καν της θεωρητικής λειτουργίας του OpenSSL.

Το heartbleed bug, πολύ απλά, είναι ένα ανόητο προγραμματιστικό λάθος.

Από το Heartbeat στο Heartbleed

Όταν ένας server και ο υπολογιστής μας είναι έτοιμοι να δημιουργήσουν μια ασφαλή σύνδεση μεταξύ τους, εφαρμόζουν μια διαδικασία που ονομάζεται heartbeat (κυριολεκτικά: χτύπος καρδιάς).

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

Το heartbeat είναι μία εξαιρετικά απλή διαδικασία, που γίνεται εκατοντάδες εκατομμύρια φορές κάθε μέρα, σε ολόκληρο τον κόσμο. Και μία λάθος γραμμή κώδικα σε αρκετές εκδόσεις του OpenSSL, μήκους μόλις 24ων χαρακτήρων, έχει καταφέρει να πανικοβάλει ολόκληρο το Internet.

Η γραμμή είναι αυτή:

memcpy(bp, pl, payload);

Το heartbleed bug, απλά και κατανοητά

Στην ενότητα αυτή θα εξηγήσουμε όσο πιο απλά γίνεται το πρόβλημα που δημιουργεί η παραπάνω εντολή, το οποίο ονομάστηκε heartbleed.

Η εντολή memcpy είναι μια εντολή που αντιγράφει δεδομένα (από το "memory copy"). Έχει τρεις παραμέτρους που χρειάζεται για να λειτουργήσει:

  1. To bp περιγράφει σε ποια θέση μνήμης του Server θα γραφτούν τα δεδομένα του heartbeat.
  2. Το pl περιγράφει που βρίσκονται τα δεδομένα του heartbeat στον δικό μας υπολογιστή.
  3. Το payload είναι ένας αριθμός που δείχνει πόσο μέγεθος έχουν τα δεδομένα του heartbeat.

Με αυτή την εντολή, ο υπολογιστής μας ουσιαστικά λέει στο Server το εξής:

"Έχω τα δεδομένα για το heartbeat στη θέση pl. Έχουν μέγεθος payload. Σου τα στέλνω στη θέση bp στη μνήμη σου, φρόντισε να έχεις χώρο αρκετό για να χωρέσει το payload. Μόλις λάβεις τα δεδομένα, μου τα επιστρέφεις όπως είναι, για να ξέρω πως είναι εντάξει η σύνδεση."

Εδώ είναι σημαντικό να κατανοήσουμε το εξής: Η μνήμη RAM σε έναν υπολογιστή ή ένα server που λειτουργεί, δεν είναι ποτέ εντελώς άδεια.

Τα δεδομένα που επεξεργάζεται ο υπολογιστής γράφονται στη μνήμη. Όταν όμως ο υπολογιστής τελειώσει με αυτά, τα δεδομένα δεν σβήνονται.

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

Στην ιδανική λειτουργία της εντολής memcpy, αν ο υπολογιστής μας έχει δημιουργήσει ένα heartbeat 10ΚΒ, και δηλώνει πως το payload είναι 10KB.

Η εντολή παίρνει τα 10KB από τη θέση pl του υπολογιστή μας και τα βάζει μέσω δικτύου στη θέση bp του server, η οποία έχει χώρο ακριβώς 10KB (payload).

Ό,τι δεδομένα υπήρχαν πριν στη θέση bp διαγράφονται από τα δεδομένα του heartbeat.

Ύστερα ο server, με τη σειρά του, στέλνει τα δεδομένα του heartbeat πίσω στον υπολογιστή μας, και όλα λειτουργούν όπως πρέπει.

Τι γίνεται όμως αν το Payload λέει ψέματα;

Ας πούμε πως ένας hacker ρυθμίζει τον υπολογιστή του να στείλει ένα μηδενικό heartbeat, αλλά το Payload λέει πως είναι 64KB.

Ο Server θα ετοιμάσει ένα χώρο 64KB στη μνήμη του, στον οποίο θα υπάρχουν ήδη από πριν δεδομένα προς διαγραφή.

Όμως, επειδή το heartbeat έχει μηδενικά δεδομένα, τα άχρηστα δεδομένα στη RAM του Server δεν διαγράφονται.

Το χειρότερο; Ο server, για να επιβεβαιώσει τη σύνδεση, θα επιστρέψει 64KB στον υπολογιστή του hacker, όσα νομίζει πως έλαβε, με το περιεχόμενο της δικής του μνήμης.

Τι μπορεί να περιέχουν αυτά τα δεδομένα;

Μπορεί να μην περιέχουν τίποτα χρήσιμο, να είναι απλά σκουπίδια.

Μπορεί όμως να περιέχουν το username και το password του τελευταίου πελάτη που συνδέθηκε. Να περιέχουν email και προσωπικά μηνύματα. Να περιέχουν μέχρι και το κρυφό κλειδί της κρυπτογράφησης, που θα έδινε στον hacker τη δυνατότητα να βλέπει όλα τα δεδομένα που διακινούνται μέσω της "ασφαλούς" σύνδεσης!

Το χειρότερο;

Ακόμα κι αν το πρώτο πειραγμένο heartbeat δεν επιστρέψει κάτι χρήσιμο, κανείς δεν εμποδίζει τον hacker να στείλει 100, 1.000, 10.000 μηδενικά heartbeat, μέχρι τα δεδομένα που θα λάβει από τον server να είναι αυτά που χρειάζεται.

Και, από τη στιγμή που η συνεχής ανταλλαγή δεδομένων είναι φυσιολογική στα πλαίσια του heartbeat, δεν υπάρχει κανένας τρόπος για το διαχειριστή του server να γνωρίζει αν κάποιος εκμεταλλεύτηκε το heartbleed ή όχι.

Για να το καταλάβετε πιο παραστατικά, δείτε την παρακάτω εικόνα:

Παραστατική εξήγηση... 

Επίσης δείτε την καταπληκτική οπτική εξήγηση του κόμικ XKCD:

Η οπτική εξήγηση του κόμικ XKCD 

Τι σημαίνει το Heartbleed bug για εμάς

Ορισμένες από τις μεγαλύτερες ιστοσελίδες του διαδικτύου χρησιμοποιούσαν server με εκδόσεις OpenSSL που ήταν ευάλωτες στο heartbleed bug.

Αναφερόμαστε σε κολοσσούς όπως η Google (Gmail, YouTube, Google+), το Facebook, το Yahoo, το Tumbl, το Imgur και δεκάδες άλλες ιστοσελίδες στις οποίες είναι πιθανό να έχουμε λογαριασμούς.

To Mashable.com έχει δημοσιεύσει μια αναλυτική λίστα με τα σημαντικότερα Site που είχαν το heartbleed bug και το αν το έχουν διορθώσει ακόμα ή όχι.

Αυτό που πρέπει να κάνουμε, το ταχύτερο δυνατόν, είναι να αλλάξουμε το password μας σε οποιοδήποτε από τα παραπάνω sites είναι επιβεβαιωμένο πως ήταν ευάλωτο στο heartbleed και έχει κλείσει το κενό ασφαλείας.

Είναι βέβαιο πως κάποιος έχει αποκτήσει πρόσβαση στους κωδικούς μας;

Η απάντηση είναι πως είναι αδύνατον να γνωρίζουμε, καθώς οι επιθέσεις που εκμεταλλεύονταν το heartbleed bug δεν αφήνουν ίχνη.

Σε κάθε περίπτωση, η αλλαγή password είναι ένα απαραίτητο προληπτικό μέτρο.

ΠΗΓΗ:

  • http://www.pcsteps.gr/21364-%CF%84%CE%B9-%CE%B5%CE%AF%CE%BD%CE%B1%CE%B9-%CF%84%CE%BF-heartbleed-bug
  • tovima.gr