Η Παρασκευή, 10 Δεκεμβρίου 2021, θα μείνει χαραγμένη στη μνήμη όλων ασχολούνται με θέματα πληροφορικής (είτε πιο γενικά, είτε αρκετά πιο εξειδικευμένα), καθώς είναι η μέρα που πλέον έχει χαρακτηριστεί ως η «η ημέρα που το internet πήρε φωτιά». Ο λόγος δεν είναι, όπως ενδεχόμενα θα περίμεναν οι περισσότεροι, κάποια ευπάθεια (vulnerability) στο δημοφιλές κρυπτοσύστημα δημοσίου κλειδιού (public key cryptosystem) RSA (το όνομα προέρχεται από τα αρχικά των δημιουργών του Ron Rivest, Adi Shamir και Leonard Adleman), αλλά μια ευπάθεια σε ένα σύστημα που οι περισσότεροι που δεν ασχολούνται με τη δημοφιλή γλώσσα προγραμματισμού Java, δεν είχαν ακούσει μέχρι τότε, το log4j (logging for Java) στην έκδοση 2.
Η διαδικασία της καταγραφής (=logging) είναι εξαιρετικά σημαντική, ειδικά στον ευρύτερο τομέα της πληροφορικής. Η καταγραφή επιτρέπει την – σε πραγματικό χρόνο – παρακολούθηση του υπολογιστικού συστήματος, ώστε να διαπιστωθεί η σωστή και εντός παραμέτρων λειτουργία του, να διαπιστωθούν τυχόν σφάλματα, ακόμα και κακόβουλες ενέργειες [για παράδειγμα, αποτυχημένες προσπάθειες πρόσβασης μπορεί να είναι ένδειξη μιας brute force attack – επίθεση «ωμής βίας», ή ότι απλά κάποιος χρήστης έχει ξεχάσει τον κωδικό πρόσβασης (password)].
Ειδικότερα όταν μιλάμε για γλώσσες προγραμματισμού η καταγραφή (=logging) γεγονότων και δεδομένων είναι εξαιρετικά σημαντική και ένα ισχυρό εργαλείο για την κατανόηση του πως εκτελείται το πρόγραμμα σε πραγματικό χρόνο και αν η συμπεριφορά του είναι η επιθυμητή και εντός των σχεδιαστικών παραμέτρων. Τα αρχεία καταγραφής (=logs) μπορούν επίσης να αποθηκευτούν ώστε να είναι διαθέσιμα για ανάλυση σε μεταγενέστερο χρόνο. Ένα από τα πλέον δημοφιλή «πλαίσια καταγραφής» (logging frameworks) είναι και το log4j2 (αν και το log4j2 είναι το πλέον δημοφιλές, δεν είναι το μόνο, καθώς υπάρχει το Logback, αλλά και το SLF4J το οποίο θεωρείτε ο απόγονος του log4j2).
Το log4j δεν είναι ένα καινούργιο. Στην πραγματικότητα η αρχική κυκλοφορία του έγινε στις 8 Ιανουαρίου 2001, δηλαδή 20 χρόνια πριν! Είναι μέρος των Apache Logging Services, οι οποίες με τη σειρά τους είναι μέρος του Apache Software Foundation (και όχι Apachi!) Το τελευταίο είναι ένας αμερικάνικος μη-κερδοσκοπικός οργανισμός ο οποίος έχει σαν σκοπό να υποστηρίξει έναν αριθμό από open source software projects (έργα λογισμικού ανοιχτού κώδικα).
Ως open source καλούμε κάθε έργο του οποίο ο πηγαίος κώδικας (source code) είναι διαθέσιμος προς όλους, χωρίς περιορισμούς (δλδ, κάποιος άλλος μπορεί να τον τροποποιήσει, ή και να τον επαναδιαθέσει, ακόμα και επί πληρωμή). Ένα από τα πλέον δημοφιλή έργα ανοιχτού κώδικα είναι το Linux! Αυτό πολύ απλά σημαίνει ότι ένα open source project συνήθως δημιουργείτε και τηρείται από μια μικρή ομάδα ανθρώπων, οι οποίοι συνήθως δεν λαμβάνουν καμία αμοιβή για το έργο τους.
Τί συνέβη λοιπόν;
Την Πέμπτη, 09 Δεκ 2021, ένας ανώνυμος χρήστης υπό το όνομα P0rZ9, δημοσιεύει στη δημοφιλή πλατφόρμα Twitter, ένα άρθρο, στο οποίο αναφέρει ότι έχει ανακαλύψει μια ευπάθεια στο δημοφιλές logging framework log4j και μάλιστα στο tweet του έχει συμπεριλάβει και ένα link προς μια σελίδα στο GitHub (το GitHub είναι μια εταιρεία παροχής υπηρεσιών internet hosting οι οποίες είναι προσανατολισμένες στην ανάπτυξη λογισμικού και στον έλεγχο των εκδόσεων (version control) χρησιμοποιώντας το πρόγραμμα Git) στην οποία αναφέρεται το “Proof of Concept”, μια απόδειξη/επιβεβαίωση των ισχυρισμών του.
Σχεδόν αμέσως, πάροχοι υπηρεσιών κυβερνο-ασφαλείας ανά τον κόσμο, διαπιστώνουν σαρώσεις δικτύων από κακόβουλους χρήστες και οντότητες, οι οποίες έχουν σαν σκοπό να διαπιστώσουν αν οι «στόχοι» είναι ευπαθείς στη συγκεκριμένη τρωτότητα. Επιπλέον διαπιστώνεται και εκμετάλλευση της συγκεκριμένης ευπάθειας, με την εγκατάσταση λογισμικού «εξόρυξης» κρυπτο-νομισμάτων, εγκατάστασης malware το οποίο υποστηρίζει συγκεκριμένα τα botnet (botnet: ένα δίκτυο υπολογιστών – zombie οι οποίοι «υπακούν» όχι στις εντολές του νόμιμου κατόχου, αλλά τρίτης – κακόβουλης – οντότητας) Mirai και Muhstik, αλλά και Cobalt Strike beacons (τα τελευταία επιτρέπουν την πλήρη εκμετάλλευση των δυνατοτήτων που προσφέρει η πλατφόρμα Cobalt Strike).
Πριν συνεχίσουμε ας δούμε λίγο τη σύνδεση κακόβουλου χρήστη – απειλής – ευπάθειας – ρίσκου. Μια απειλή (threat) δεν σημαίνει απαραίτητα ότι κάποιος θα πρέπει να ανησυχήσει. Υπάρχουν διαφορετικά επίπεδα απειλών, και γενικά η απειλή, αφορά στον πιθανό κίνδυνο. Από την άλλη μια ευπάθεια (vulnerability) είναι μια αδυναμία ή αστοχία στο σύστημα, την οποία μπορεί να εκμεταλλευτεί (exploit) ένας κακόβουλος χρήστης (threat agent).
Για παράδειγμα η πιθανότητα (=threat) να χτυπηθεί κάποιος από κεραυνό είναι πάνω από 1 στο εκατομμύριο, αλλά το να περπατάει κάποιος κρατώντας μια μεταλλική ομπρέλα στην καταιγίδα δημιουργεί μια ευπάθεια, η οποία μειώνει την ασφάλεια όλου του «συστήματος», την οποία μπορεί να «εκμεταλλευτεί» ο κακόβουλος χρήστης, στην περίπτωσή μας, ο κεραυνός!
Οι ευπάθειες αντιμετωπίζονται με ένα ή περισσότερα αντίμετρα ή μέτρα ασφαλείας (π.χ. κρατώντας μια ξύλινη ομπρέλα!) Αρχικά δεν υπήρχε η βεβαιότητα για το επίπεδο της συγκεκριμένης απειλής, ή για την ευκολία με την οποία θα μπορούσε κάποιος να την εκμεταλλευτεί.
Η -άσχημη- επιβεβαίωση ήρθε την Παρασκευή, 10 Δεκέμβρη 2021, όπου και η συγκεκριμένη ευπάθεια γίνεται και επίσημα γνωστή (υπάρχει μια συγκεκριμένη διαδικασία αναφοράς, καταχώρισης, και συνεχούς παρακολούθησης, η οποία ξεφεύγει από τους σκοπούς του παρόντος άρθρου, ας πούμε ότι κάθε ευπάθεια λαμβάνει ένα μοναδικό αριθμό και ένα συγκεκριμένο «σκορ», το οποίο αντιστοιχεί στο πόσο κρίσιμη θεωρείται, βάσει συγκεκριμένου αλγόριθμου που λαμβάνει υπόψη του πολλαπλούς παράγοντες).
Η ευπάθεια λαμβάνει τον κωδικό CVE-2021-44228 και «σκορ» 10.0 – CRITICAL (σημειώνεται ότι 10.0 είναι το μέγιστο που μπορεί να δοθεί και είναι και εξαιρετικά δύσκολο να δοθεί). Τί σημαίνει όμως βαθμολογία 10.0; Πολύ απλά ότι η συγκεκριμένη ευπάθεια…
– Εξαιρετικά μεγάλο αριθμό εμπλεκομένων. Σημειώνεται ότι η Java είναι η πλέον δημοφιλής αντικειμενοστραφείς γλώσσες προγραμματισμού, και βρίσκεται σχεδόν παντού! Όπως διαφημίζεται, πάνω από 2,5 δισεκατομμύρια συσκευές χρησιμοποιούν Java, χωρίς να υπολογίζονται τα προγράμματα. Αυτό σημαίνει ότι η επιφάνεια επίθεσης είναι πρακτικά τεράστια! Εκτός από τις καθαυτό Apache εφαρμογές (όπως το Struts, Solr, Flink, κλπ.) ένα πλήθος εφαρμογών, όπως Elastic, Kafka, Minecraft:Java Edition, υπηρεσίες νέφους, όπως η Amazon, Apple iCloud, και πλήθος άλλων πιθανών να είναι ευπαθή στη συγκεκριμένη τρωτότητα.
– Ευκολία στην εκμετάλλευσή της. Για να εκμεταλλευτεί (exploit) κάποιος τη συγκεκριμένη ευπάθεια δεν απαιτούνται ιδιαίτερες γνώσεις ή εξοπλισμός. Επαρκεί μια απλή γραμμή συγκεκριμένου κώδικα και κάποιος κακόβουλος χρήστης μπορεί να την εκμεταλλευτεί (έχουν αναφερθεί περιπτώσεις που κάποιος χρήστης σε δημοφιλή πλατφόρμα gaming άλλαξε το όνομά του στον κώδικα της ευπάθειας και η «επίθεση» ήταν επιτυχής!). Επιπρόσθετα δεν απαιτούνται εξειδικευμένες γνώσεις προγραμματισμού.
– Επίπτωση στο πληροφοριακό σύστημα. Η συγκεκριμένη ευπάθεια οδηγεί σε Remote Code Execution. Το τελευταίο σημαίνει ότι κάποιος τρίτος (κακόβουλος χρήστης) έχει πρόσβαση σε κάποιο υπολογιστικό σύστημα, χωρίς να απαιτείται η φυσική πρόσβαση στο τελευταίο, και έχει τη δυνατότητα να προχωρεί σε αλλαγές σε αυτό, δηλαδή να τρέξει κάποιο πρόγραμμα ή κώδικα, χωρίς ο νόμιμος ιδιοκτήτης του υπολογιστικού συστήματος να έχει επίγνωση για αυτές τις αλλαγές ή να τις έχει εξουσιοδοτήσει. Πολύ απλά ο κακόβουλος χρήστης αποκτά πλήρη και καθολικό έλεγχο επί του πληροφοριακού συστήματος.
Πέρα από τα παραπάνω η ευπάθεια χαρακτηρίστηκε και ως 0-day, καθώς τη στιγμή της δημοσίευσής της δεν υπήρχε κάποιο μέτρο ασφαλείας το οποίο να οδηγούσε στην μείωση της αποτελεσματικότητάς της, ή την εξάλειψή της! Σημειώνεται ότι ακόμα και συστήματα που δεν είναι «εκτεθειμένα» στο internet (internet facing systems) είναι ευπαθή στη συγκεκριμένη τρωτότητα!
Είναι ακριβώς έτσι; ΟΧΙ
Στην πραγματικότητα η ευπάθεια υπήρχε ήδη από το 2013! Η ύπαρξή της διαπιστώθηκε από τους ερευνητές της Alibaba Cloud Security Team, οι οποίοι και ενημέρωσαν επίσημα την Apache στις 24 Νοεμβρίου 2021. Η τελευταία, στις 25 Νοεμβρίου 2021, αποδέχθηκε την αναφορά, ζήτησε τη δέσμευση του κωδικού παρακολούθησης (CVE) και ξεκίνησε τις διαδικασίες για να δημιουργήσει ένα «μέτρο ασφαλείας», ουσιαστικά μια καινούργια έκδοση του log4j2.
Το πως, γιατί, και από ποιόν έγινε γνωστή ευρέως η συγκεκριμένη ευπάθεια, πριν ετοιμαστεί το κατάλληλο μέτρο ασφαλείας, δεν είναι ακόμα γνωστό, δεν είναι όμως η πρώτη περίπτωση που γίνεται κάτι τέτοιο όμως. Σε κάθε περίπτωση η Apache εξέδωσε τις απαραίτητες οδηγίες προσωρινής αντιμετώπισης, και στις 10 Δεκεμβρίου 2021, παρουσιάστηκε η έκδοση 2.15.0 του log4j2 με την οποία αντιμετωπιζόταν η συγκεκριμένη ευπάθεια.
Πως λειτουργεί;
Όπως αναφέραμε το log4j2 επιτρέπει την καταγραφή διαφόρων δεδομένων σχετικών με την συμπεριφορά και απόδοση μιας εφαρμογής. Ένα από τα χαρακτηριστικά που υποστηρίζει το log4j2 εξ ορισμού είναι και το “Message Lookup Substitution”, το οποίο επιτρέπει συγκεκριμένες γραμμές κώδικα (strings) να αντικαθίστανται – κατά τη στιγμή της καταχώρισής τους – από άλλες, οι οποίες έχουν δημιουργηθεί με δυναμικό τρόπο.
Για παράδειγμα η καταχώριση του Running ${java:runtime} θα εμφανίσει το Running Java version x.x.x_xx. Μια από τις μεθόδους αναζήτησης είναι το Java Naming and Directory Interface (JNDI), το οποίο επιτρέπει την αναζήτηση στοιχείων Java κατά την εκτέλεση του προγράμματος, δοθέντος της «διαδρομής» που βρίσκονται αυτά τα στοιχεία. Ένας τρόπος για να βρεθεί αυτή η διαδρομή είναι μέσω του Lightweight Directory Access Protocol ή LDAP (δεν ανήκει στην Java!) το όποιο μπορεί να ανασύρει στοιχεία για μια συγκεκριμένη κλάση Java είτε τοπικά είτε από τον κατάλληλο server οπουδήποτε στο internet!
Κατά την εκτέλεση της διαδικασίας η εκτέλεση του κώδικα που βρίσκεται ενσωματωμένος μπορεί να λάβει χώρα, χωρίς να είναι δυνατός ο περιορισμός του! Αυτό πρακτικά σημαίνει ότι κάθε σημείο από τον κώδικα καταχώρισης μπορεί να ελεγχθεί από κάποιο κακόβουλο χρήστη, ο οποίος με αυτόν τον τρόπο θα μπορεί να εκτελέσει οποιαδήποτε εντολή θέλει!
Το παρακάτω σχήμα, το οποίο δημιούργησε η Computer Emergency Response Team της Ελβετικής Κυβέρνησης, εξηγεί τη σχετική διαδικασία:
Source: https://www.govcert.ch/blog/zero-day-exploit-targeting-popular-java-library-log4j/
Εφόσον υπάρχει νέα έκδοση έχουμε τελειώσει, σωστά; Η απάντηση είναι ένα βροντερό ΟΧΙ, και αυτό για δύο λόγους.
Δυστυχώς, η πρώτη έκδοση – η 2.15.0, διαπιστώθηκε ότι δεν ήταν πλήρης, και σε συγκεκριμένες περιπτώσεις θα μπορούσε κάποιος κακόβουλος χρήστης να εκτελέσει μια Denial of Service (DoS) επίθεση, καθιστώντας το σύστημα άχρηστο. Η νέα ευπάθεια κωδικοποιήθηκε ως CVΕ-2021-45046, και αντιμετωπίστηκε με την έκδοση 2.16.0. Ούτε αυτό όμως ήταν αρκετό και μια νέα ευπάθεια (κωδικοποίηση CVΕ-2021-45105) ήρθε να προστεθεί σε σύντομο χρονικό διάστημα.
Πλέον (σ.σ. 19 Δεκεμβρίου 2021) η τρέχουσα και – θεωρητικά – ασφαλής έκδοση του log4j2 είναι η 2.17.0. Πρακτικά αυτό σημαίνει ότι τα πληροφοριακά συστήματα θα έπρεπε να αναβαθμιστούν εντός χρονικού διαστήματος λιγότερο των 10 ημερών (όχι εργάσιμων!), όχι μια, αλλά δύο φορές. Σημειώνεται ότι, ακόμα και η μικρότερη αλλαγή σε ένα σύστημα, μπορεί να οδηγήσει σε μη επιθυμητή συμπεριφορά και σε πολλαπλά προβλήματα, και για αυτό οι αναβαθμίσεις (είτε είναι λογισμικού είτε αφορούν σε υλικό) προγραμματίζονται με ιδιαίτερη προσοχή.
Ο δεύτερος λόγος είναι η έκταση και η ευκολία εκμετάλλευσης της αρχικής ευπάθειας. Το παλαιότερο πειστήριο που υπάρχει για εκμετάλλευση της συγκεκριμένης ευπάθειας έχει καταγραφεί στις 01 Δεκεμβρίου 2021, από την Cloudflare. Αυτό όμως δεν σημαίνει ότι κακόβουλοι χρήστες δεν έχουν εκμεταλλευτεί τη συγκεκριμένη ευπάθεια πριν από την 01 Δεκεμβρίου 2021 (υπενθυμίζουμε ότι – τεχνικά – θα μπορούσαν να την εκμεταλλεύονται ήδη από το 2013, ενώ ήδη από το 2016, μια ομάδα ερευνητών είχε παρουσιάσει τη δυνατότητα χειραγώγησης του συνδυασμού JNDI/LDAP στο BlackHat USA, το οποίο θεωρείται το κορυφαίο συνέδριο παγκοσμίως για τους επαγγελματίες στην κυβερνο-ασφάλεια και όχι μόνο.
Σε κάθε περίπτωση αυτό σημαίνει ότι υπάρχει ένα χρονικό διάστημα 8 με 9 ημερών δυνητικής εκμετάλλευσης, χωρίς όμως αυτό να σημαίνει ότι η εκμετάλλευση έλαβε χώρα. Ένας επιπλέον παράγοντας είναι η έκταση των εφαρμογών, συστημάτων και συσκευών οι οποίες είναι δυνητικά ευπαθείς. Ακόμα και αν κάποιος δεν χρησιμοποιεί άμεσα το log4j2 μπορεί να χρησιμοποιεί κάποιο πρόγραμμα τρίτου κατασκευαστή, ο οποίος το χρησιμοποιεί. Κατ’ αυτό τον τρόπο γίνεται και αυτός ευάλωτος, και μάλιστα χωρίς να το γνωρίζει.
Δυο είναι οι βασικές ερωτήσεις που γίνονται όταν προσπαθούμε να προστατεύσουμε ένα οποιοδήποτε σύστημα (ακόμα και το σπίτι μας). Τί έχουμε, και πόσο σημαντικό/πολύτιμο είναι. Δυστυχώς στην περίπτωση των υπολογιστικών συστημάτων η απάντηση στις δυο αυτές ερωτήσεις δεν είναι πάντα εύκολη. Πολλοί οργανισμοί έχουν μια – περίπου – ιδέα για το τι ακριβώς χρησιμοποιούν και πόσο σημαντικό είναι.
Υπό αυτό το πρίσμα η καταγραφή και εν συνεχεία αναβάθμιση όλων αυτών των συστημάτων μπορεί να πάρει αρκετό χρονικό διάστημα. Αν κατά τη διάρκεια αυτού του χρονικού διαστήματος, δεν ληφθούν κατάλληλα μέτρα (όπως για παράδειγμα ανανέωση των «υπογραφών» ή/και των κανόνων στα firewall) τότε ο οργανισμός θα παραμείνει εκτεθειμένος.
Και τώρα;
Ακόμα και αν δεν υπάρξει επιπρόσθετη τρωτότητα (το log4j2 είναι πλέον «στο μικροσκόπιο» και πολύ ερευνητές – αλλά και κακόβουλοι χρήστες – έχουν στρέψει την προσοχή τους σε αυτό) δεν υπάρχει καμία διαβεβαίωση ότι κακόβουλος κώδικας δεν έχει «περάσει» στα υπολογιστικά συστήματα και περιμένει «εν υπνώσει» την κατάλληλη στιγμή για να δράσει. Κρυφά κανάλια μπορεί να έχουν ήδη δημιουργηθεί από τους κακόβουλους χρήστες, τα οποία για να ανακαλυφθούν απαιτούν χρόνο και προσπάθεια. Δεν αποκλείεται στο μέλλον να δούμε μια έξαρση διαφόρων τύπων επιθέσεων, οι οποίες να είναι και απόλυτα επιτυχημένες.
Κλείνοντας, θα πρέπει να σημειωθεί ότι στα θετικά θα πρέπει να κρατήσουμε την ταχύτητα με την οποία έδρασε η διεθνής «κοινότητα» κυβερνοασφάλειας (αν και διαπιστώθηκε ότι από κάποιο σημείο και μετά η πολλαπλή πληροφόρηση μάλλον περιέπλεξε την κατάσταση παρά βοήθησε) από τη στιγμή που η συγκεκριμένη ευπάθεια έγινε γνωστή, αλλά και στο ότι οι οργανισμοί διαπίστωσαν -με τον άσχημο τρόπο είναι η αλήθεια- την αξία του asset inventory!
Πηγή: defence-point.gr