Πίνακας περιεχομένων[Κρύβω][Προβολή]
Το Log4Shell, μια ευπάθεια στο Διαδίκτυο, επηρέασε πρόσφατα εκατομμύρια μηχανήματα. Το Log4j, ένα σκοτεινό αλλά σχεδόν πανταχού παρόν κομμάτι λογισμικού, το προκαλεί.
Το Log4j χρησιμοποιείται για την καταγραφή όλων των ενεργειών που συμβαίνουν στο παρασκήνιο σε διάφορα συστήματα υπολογιστών.
Βασίζεται σε μια βιβλιοθήκη καταγραφής ανοιχτού κώδικα που χρησιμοποιείται από επιχειρήσεις και ακόμη και κυβερνητικούς οργανισμούς στις περισσότερες εφαρμογές.
Όντας ένα από τα χειρότερα κενά ασφάλειας στον κυβερνοχώρο που έχουν αποκαλυφθεί ποτέ, είναι σημαντικό να προστατεύσετε τα συστήματά σας από αυτήν την ευπάθεια. Αλλά πως?
Ας εξερευνήσουμε λεπτομερώς την ευπάθεια Log4j και όλες τις πιθανές λύσεις επιδιόρθωσης για αυτήν.
Τι είναι το Log4j;
Το Log4j είναι ένα ανοικτού κώδικα πλαίσιο καταγραφής που επιτρέπει στους προγραμματιστές λογισμικού να καταγράφουν διαφορετικά δεδομένα στις εφαρμογές τους. Είναι ένα στοιχείο του έργου Apache Logging Services, το οποίο εκτελείται από το Apache Software Foundation.
Εκατοντάδες ιστότοποι και εφαρμογές χρησιμοποιούν το Log4j για να εκτελέσουν κρίσιμες λειτουργίες, όπως η καταγραφή δεδομένων για εντοπισμό σφαλμάτων και άλλες χρήσεις.
Όταν εισάγετε ή κάνετε κλικ σε έναν κακό διαδικτυακό σύνδεσμο και λαμβάνετε μια ειδοποίηση σφάλματος 404, αυτό είναι ένα συχνό παράδειγμα του Log4j στην εργασία. Ο διακομιστής ιστού που εκτελεί τον τομέα του συνδέσμου Ιστού στον οποίο προσπαθήσατε να αποκτήσετε πρόσβαση σάς ενημερώνει ότι δεν υπάρχει τέτοια ιστοσελίδα. Καταγράφει επίσης το συμβάν στο Log4j για τους διαχειριστές συστήματος του διακομιστή.
Σε όλα τα προγράμματα λογισμικού, χρησιμοποιούνται παρόμοια διαγνωστικά σήματα. Στο διαδικτυακό παιχνίδι Minecraft, για παράδειγμα, ο διακομιστής χρησιμοποιεί το Log4j για να καταγράφει τη δραστηριότητα, όπως τη συνολική χρησιμοποιούμενη μνήμη RAM και τις οδηγίες χρήστη που αποστέλλονται στην κονσόλα.
Πώς εμφανίζεται η ευπάθεια;
Οι αναζητήσεις είναι μια νέα δυνατότητα που εισήχθη στο Log4j 2.0, η οποία βοηθά στην ενσωμάτωση πρόσθετων πληροφοριών σε καταχωρίσεις ημερολογίου. Μία από αυτές τις αναζητήσεις είναι η αναζήτηση JNDI (Java Naming and Directory Interface), η οποία είναι ένα Java API για επικοινωνία με μια υπηρεσία καταλόγου.
Χρησιμοποιώντας αυτήν την προσέγγιση, τα εσωτερικά αναγνωριστικά χρηστών μπορούν να αντιστοιχιστούν σε πραγματικά ονόματα χρηστών. Αυτό το ερώτημα εκθέτει την ευπάθεια RCE που ανακαλύφθηκε πρόσφατα, καθώς ένας από τους τύπους δεδομένων που παρέχονται από τον διακομιστή LDAP είναι ένα URI που δείχνει σε μια κλάση Java, η οποία στη συνέχεια φορτώνεται στη μνήμη και εκτελείται από την παρουσία Log4j.
Λόγω μιας αδυναμίας στην επικύρωση εισόδου της βιβλιοθήκης Log4j, είναι δυνατή η εισαγωγή ενός αυθαίρετου διακομιστή LDAP από μια μη αξιόπιστη πηγή. Επειδή οι προγραμματιστές υποθέτουν ότι τα δεδομένα που αποστέλλονται στα αρχεία καταγραφής θα αντιμετωπίζονται ως απλό κείμενο, δεν πραγματοποιείται επιπλέον επικύρωση εισόδου και η εισαγωγή επικίνδυνων στοιχείων χρήστη εισέρχεται στα αρχεία καταγραφής.
Μια δήλωση καταγραφής μπορεί να μοιάζει με αυτό:
Ένας κακόβουλος χρήστης θα εισαγάγει τώρα μια αναζήτηση JNDI που αναφέρεται σε έναν απατεώνα διακομιστή LDAP σε μια παράμετρο URL. Η αναζήτηση JNDI θα είναι η εξής:
Στη συνέχεια, η βιβλιοθήκη Log4j συνομιλεί με αυτόν τον διακομιστή LDAP στο attacker.com για να λάβει πληροφορίες καταλόγου, συμπεριλαμβανομένων τιμών για το Java Factory και το Java Codebase.
Αυτές οι δύο τιμές περιλαμβάνουν την κλάση Java του εισβολέα, η οποία στη συνέχεια φορτώνεται στη μνήμη και εκτελείται από την παρουσία Log4j, ολοκληρώνοντας την εκτέλεση του κώδικα.
Ποιος κινδυνεύει;
Η ευπάθεια Log4j είναι απίστευτα ευρεία, επηρεάζοντας τις επιχειρηματικές εφαρμογές, τις ενσωματωμένες συσκευές και τα υποσυστήματα τους. Οι εφαρμογές που επηρεάζονται περιλαμβάνουν το Cisco Webex, το Minecraft και το FileZilla FTP.
Ωστόσο, αυτό δεν είναι σε καμία περίπτωση μια ολόκληρη λίστα. Το ελάττωμα επηρεάζει ακόμη και την αποστολή ελικόπτερου Ingenuity Mars 2020, η οποία χρησιμοποιεί το Apache Log4j για την καταγραφή συμβάντων.
Η κοινότητα ασφαλείας έχει συντάξει ένα λίστα ευάλωτων συστημάτων. Είναι σημαντικό να σημειωθεί ότι αυτές οι λίστες ενημερώνονται συνεχώς, επομένως εάν ένα συγκεκριμένο πρόγραμμα ή σύστημα δεν εμφανίζεται, μην υποθέσετε ότι δεν επηρεάζεται.
Η έκθεση σε αυτήν την ευπάθεια είναι αρκετά πιθανή, ακόμα και αν είναι συγκεκριμένη τεχνολογική στοίβα δεν εφαρμόζει Java, τα στελέχη ασφαλείας θα πρέπει να αναμένουν από κρίσιμα συστήματα προμηθευτών, προμηθευτές SaaS, παρόχους φιλοξενίας cloud και παρόχους διακομιστών ιστού να το κάνουν.
Πώς να ελέγξετε για ευπάθεια Log4j;
Το πρώτο βήμα είναι να προσδιοριστεί εάν έχει ήδη συμβεί μια επίθεση. Μπορείτε να το κάνετε ελέγχοντας τα αρχεία καταγραφής συστήματος για τμήματα ωφέλιμου φορτίου RCE.
Εάν μια αναζήτηση όρων όπως "jndi", "ldap" ή "$::" αποφέρει αρχεία καταγραφής, οι ερευνητές ασφαλείας θα πρέπει να διερευνήσουν περαιτέρω για να δουν εάν επρόκειτο για νόμιμη επίθεση ή απλώς δακτυλικό αποτύπωμα.
Ανακαλύφθηκαν πολλές επιθέσεις στη φύση που δεν παρέδωσαν κανένα επιβλαβές ωφέλιμο φορτίο. Ωστόσο, πραγματοποιήθηκαν από ειδικούς ασφαλείας για να προσδιοριστεί πόσες εφαρμογές ήταν ευάλωτες σε αυτήν την επίθεση.
Το επόμενο βήμα είναι να χρησιμοποιήσετε τη βιβλιοθήκη Log4j για να αναγνωρίσετε όλα τα έργα. Εάν χρησιμοποιούνται εκδόσεις μεταξύ 2.0-beta9 και 2.14.1, το έργο μπορεί να είναι ευαίσθητο.
Δεδομένης της δυσκολίας να προσδιοριστεί πού υπάρχει αυτή η ευπάθεια, μπορεί να είναι προτιμότερο να υποθέσουμε ότι το έργο είναι ευαίσθητο και ότι η ενημέρωση της βιβλιοθήκης είναι η καλύτερη πορεία δράσης για την εξάλειψη του κινδύνου εκτέλεσης κώδικα.
Το έργο δεν είναι ευάλωτο εάν η χρησιμοποιούμενη έκδοση είναι μικρότερη από 2.0-beta 9, αν και η βιβλιοθήκη Log4j θα πρέπει να αναβαθμιστεί, επειδή οι εκδόσεις στην περιοχή 1.x είναι παλιές και δεν λαμβάνουν πλέον ενημερώσεις.
Εάν ανακαλυφθεί ένα ευαίσθητο έργο, συνιστάται να ελεγχθεί για να διαπιστωθεί εάν οποιαδήποτε πληροφορία που καταγράφεται χρησιμοποιώντας το Log4j περιέχει πληροφορίες που μπορεί να αλλάξει ο χρήστης. Οι διευθύνσεις URL, οι παράμετροι αιτημάτων, οι κεφαλίδες και τα cookie είναι παραδείγματα αυτών των δεδομένων. Εάν ένα από αυτά καταγραφεί, το έργο βρίσκεται σε κίνδυνο.
Αυτή η γνώση μπορεί να σας βοηθήσει να εμβαθύνετε στα αρχεία καταγραφής του συστήματος και να προσδιορίσετε εάν η εφαρμογή Ιστού σας έχει ήδη δεχτεί επίθεση.
Υπάρχουν δωρεάν διαδικτυακά εργαλεία που μπορούν να εντοπίσουν εάν μια εφαρμογή Ιστού είναι ευάλωτη. Ένα από αυτά τα προγράμματα είναι Κυνηγός Log4Shell. Είναι ανοιχτού κώδικα και είναι διαθέσιμο στο GitHub.
Εάν ανακαλυφθεί μια ευάλωτη περιοχή κώδικα στην ηλεκτρονική εφαρμογή, το ωφέλιμο φορτίο που παρέχεται από το αποκαλυπτόμενο εργαλείο μπορεί να χρησιμοποιηθεί για την έγχυσή του στην εφαρμογή Ιστού. Το εργαλείο δοκιμών θα αποκάλυπτε τις συνδέσεις που έγιναν μεταξύ της εφαρμογής Ιστού και του διακομιστή LDAP τους, εάν γινόταν εκμετάλλευση της ευπάθειας.
Λύσεις για τη διόρθωση ευπάθειας Log4j
Το πρώτο βήμα είναι να ενημερώσετε το Log4j, το οποίο μπορείτε να κάνετε χρησιμοποιώντας τους κανονικούς διαχειριστές πακέτων ή κατεβάζοντάς το απευθείας από αυτό σελίδα.
Είναι επίσης δυνατό να μειωθεί η εκμεταλλευσιμότητα της ευπάθειας ορίζοντας τη μεταβλητή περιβάλλοντος FORMAT MSG NO LOOKUPS σε true. Αυτό το αντίμετρο, ωστόσο, ισχύει μόνο για εκδόσεις Log4j μεγαλύτερες ή ίσες με 2.10.
Ας εξετάσουμε τώρα εναλλακτικές επιλογές.
1. Λύσεις για την έκδοση Log4j 2.17.0
Συνιστάται οπωσδήποτε να χρησιμοποιήσετε το Log4j έκδοση 2.15.0 για προστασία από το Log4Shell, ωστόσο, εάν αυτό δεν είναι δυνατό, υπάρχουν διαθέσιμες άλλες λύσεις.
Εκδόσεις 2.7.0 και νεότερες του Log4j: Είναι εφικτή η προστασία από οποιαδήποτε επίθεση αλλάζοντας τη μορφή των συμβάντων που θα καταγραφούν χρησιμοποιώντας τη σύνταξη % m nolookups για τα δεδομένα που παρέχονται από τον χρήστη. Αυτή η ενημέρωση απαιτεί επεξεργασία του αρχείου διαμόρφωσης Log4j για τη δημιουργία μιας νέας έκδοσης του προγράμματος. Ως αποτέλεσμα, πριν από την ανάπτυξη αυτής της νέας έκδοσης, τα στάδια τεχνικής και λειτουργικής επικύρωσης πρέπει να επαναληφθούν.
Log4j εκδόσεις 2.10.0 και νεότερες: Είναι επίσης δυνατή η προστασία από οποιαδήποτε επίθεση ορίζοντας την παράμετρο διαμόρφωσης log4j2.formatMsgNoLookups σε true, για παράδειγμα, κατά την εκκίνηση της εικονικής μηχανής Java με την επιλογή -Dlog4j2. formatMsgNoLookups = true, Μια άλλη επιλογή είναι να αφαιρέσετε την κλάση JndiLookup από το όρισμα classpath, το οποίο θα αφαιρέσει το κύριο διάνυσμα επίθεσης (οι ερευνητές δεν αποκλείουν την πιθανότητα ενός άλλου διανύσματος επίθεσης).
Το Amazon Web Services παρέχει ένα hotpatch που «θα πρέπει να χρησιμοποιηθεί με δική σας ευθύνη». Άλλες «τεχνικές», όπως το Logout4Shell, το οποίο «χρησιμοποιεί αυτήν την ευπάθεια εναντίον του», έχουν δημοσιευτεί. Ο εμπειρογνώμονας ασφαλείας αμφισβητεί τη νομιμότητα αυτής της κίνησης, η οποία περιλαμβάνει «χακάρισμα ενός μηχανήματος για να το διορθώσει».
2. Το πρόβλημα επιλύθηκε στο Log4j v2.17.0.
Για εκδόσεις μεγαλύτερες από 2.10: Το Log4j2.formatMsgNoLookups θα πρέπει να οριστεί σε true.
Για εκδόσεις 2.0 έως 2.10.0: Εκτελέστε την ακόλουθη εντολή για να καταργήσετε την κλάση LDAP από το Log4j.
Το Log4j2.formatMsgNoLookups θα πρέπει να οριστεί σε true στις ρυθμίσεις συστήματος.
Μετριασμός στο JVM
Ο μετριασμός με τις παραμέτρους JVM δεν αποτελεί πλέον επιλογή. Άλλες μέθοδοι μετριασμού συνεχίζουν να είναι επιτυχείς. Αν είναι δυνατόν, αναβαθμίστε στην έκδοση Log4j 2.17.0. Υπάρχει ένας οδηγός μετεγκατάστασης διαθέσιμος για το Log4j v1.
Εάν δεν είναι δυνατή μια ενημέρωση, βεβαιωθείτε ότι τα στοιχεία της πλευράς του πελάτη και του διακομιστή έχουν το σύνολο ιδιοτήτων -Dlog4j2.formatMsgNoLookups = true system.
Λάβετε υπόψη ότι το Log4j v1 έχει φτάσει στο τέλος της ζωής του (EOL) και δεν θα λαμβάνει πλέον διορθώσεις σφαλμάτων. Άλλοι φορείς RCE είναι επίσης ευαίσθητοι στο Log4j v1. Ως εκ τούτου, σας προτρέπουμε να κάνετε αναβάθμιση σε Log4j 2.17.0 το συντομότερο δυνατό.
3. Μέτρα μετριασμού
Τα τρέχοντα exploit δεν μπορούν να λειτουργήσουν ακόμη και αν το Log4j είναι ευαίσθητο σε ορισμένες περιπτώσεις, όπως εάν ο κεντρικός υπολογιστής εκτελεί μια έκδοση Java υψηλότερη από 6u212, 7u202, 8u192 ή 11.0.2.
Αυτό οφείλεται στην καλύτερη προστασία απομακρυσμένης φόρτωσης κλάσης Java Naming and Directory Interface (JNDI) στις τρέχουσες εκδόσεις, η οποία είναι απαραίτητη για τη λειτουργία της επίθεσης.
Επιπλέον, με εκδόσεις Log4j μεγαλύτερες από 2.10, το πρόβλημα μπορεί να αποφευχθεί ορίζοντας την τιμή συστήματος formatMsgNoLookups σε true, παρέχοντας το όρισμα JVM -Dlog4j2.formatMsgNoLookups = true ή διαγράφοντας την κλάση JndiLookup από τη διαδρομή κλάσης.
Εν τω μεταξύ, μέχρι να επιδιορθωθούν οι ευάλωτες περιπτώσεις, η ευπάθεια μπορεί να αντιμετωπιστεί χρησιμοποιώντας τις παρακάτω τεχνικές:
- Ορίστε την ιδιότητα συστήματος log4j2.formatMsgNoLookups σε true για >=2.10.
- Ορίστε την επιλογή περιβάλλοντος LOG4J FORMAT MSG NO LOOKUPS σε true για >=2.10.
- Καταργήστε το JndiLookup.class από το classpath για 2.0-beta9 έως 2.10.0: zip -q -d log4j-core-*.jar org/apache/logging/log4j/core/lookup/JndiLookup.class
Μια συνιστώμενη βέλτιστη πρακτική είναι ο περιορισμός της κυκλοφορίας εξόδου στο Διαδίκτυο μόνο στις κατάλληλες θύρες.
Αν και οι περισσότερες επιθέσεις στο πεδίο παραδίδονται μέσω HTTP, η ευπάθεια μπορεί να γίνει αντικείμενο εκμετάλλευσης μέσω οποιουδήποτε πρωτοκόλλου που καταγράφει δεδομένα εισόδου χρήστη χρησιμοποιώντας το Log4j.
Ωστόσο, η ενημέρωση στο log4j 2.17.0 είναι η καλύτερη λύση γιατί κάποιος μπορεί να ανακαλύψει μια πρόσθετη προσέγγιση στο ζήτημα. Επιπλέον, πολλοί εκδότες και κατασκευαστές έχουν ανακοινώσει βελτιώσεις στις υπηρεσίες ή τις εφαρμογές τους.
4. Ενημερωμένη έκδοση κώδικα ευπάθειας Log4Shell
Το Log4j είναι πανταχού παρόν, ειδικά τώρα που γίνεται εκμετάλλευση της ευπάθειας. Συνοψίζοντας, το μόνο που χρειάζεται να κάνετε είναι να συμπεριλάβετε τους ακόλουθους χαρακτήρες στα αρχεία καταγραφής που επιθεωρούνται από το Log4j.
Και αυτό θα κατεβάσει και θα εκτελέσει το αρχείο Java που βρίσκεται στο τέλος της διεύθυνσης URL. Είναι τόσο απλό όσο και δραματικό.
Όπως γνωρίζετε, είναι σημαντικό να αναβαθμίσετε το log4j στην έκδοση >= 2.17.0 για να διορθώσετε αυτήν την ευπάθεια Log4Shell (CVE-2021-44228).
Εάν αυτό δεν είναι δυνατό:
Για εφαρμογές που χρησιμοποιούν τις εκδόσεις 4 και μεταγενέστερες της βιβλιοθήκης Log2.10.0j, είναι επίσης δυνατή η προστασία από οποιαδήποτε επίθεση ορίζοντας την παράμετρο διαμόρφωσης log4j2.formatMsgNoLookups σε true, για παράδειγμα, ενώ ξεκινάτε την εικονική μηχανή Java με την επιλογή -Dlog4j2.formatMsgNoLookups = true.
Μια άλλη επιλογή είναι να διαγράψετε την κλάση JndiLookup από το όρισμα classpath, το οποίο θα αφαιρέσει το κύριο διάνυσμα επίθεσης (οι ερευνητές δεν αποκλείουν την ύπαρξη άλλου διανύσματος επίθεσης).
Note
Οι οργανισμοί που διστάζουν ή δεν επιθυμούν να κάνουν προσαρμογές σε ευαίσθητα συστήματα (ή που επιθυμούν να εγκαταστήσουν επιπλέον μέτρα προστασίας) θα πρέπει να σκεφτούν:
- Βεβαιωθείτε ότι όλη η κίνηση δρομολογείται μέσω ενός iSensor/WAF/IPS. Αυτό μπορεί να εμποδίσει την επίθεση να αποκτήσει πρόσβαση στο σύστημα.
- Περιορισμός του όγκου της επισκεψιμότητας που μπορεί να φτάσει στο ευαίσθητο σύστημα Εάν το σύστημα δεν χρειάζεται να είναι συνδεδεμένο στο διαδίκτυο, περιορίστε την πρόσβαση σε βασικά και αξιόπιστα IPS και εύρη.
- Μείωση της εξουσιοδοτημένης εξερχόμενης κίνησης του κεντρικού υπολογιστή. Επειδή αυτή η επίθεση λειτουργεί με σύνδεση σε έναν αδίστακτο διακομιστή, όλες οι περιττές διευθύνσεις IP και οι θύρες θα πρέπει να αποκλειστούν σε ένα τείχος προστασίας.
- Εάν η υπηρεσία δεν απαιτείται πλέον, θα πρέπει να απενεργοποιηθεί μέχρι να είναι έτοιμη μια επιδιόρθωση.
Συμπέρασμα
Τα ελαττώματα του Log4j συγκλόνισαν την κοινότητά μας και μας υπενθύμισαν σε όλους πόσο εξαρτημένοι είμαστε στο λογισμικό ανοιχτού κώδικα.
Το Log4j είναι μοναδικό. Δεν είναι ούτε λειτουργικό σύστημα, ούτε πρόγραμμα περιήγησης, ούτε λογισμικό. Μάλλον, είναι αυτό που οι προγραμματιστές αναφέρουν ως βιβλιοθήκη, πακέτο ή λειτουργική μονάδα κώδικα. Απλώς εξυπηρετεί έναν σκοπό, δηλαδή τη διατήρηση αρχείου για το τι συμβαίνει σε έναν διακομιστή.
Οι άνθρωποι που γράφουν κώδικα προτιμούν να επικεντρώνονται σε αυτό που κάνει το λογισμικό τους ξεχωριστό. Δεν ενδιαφέρονται να ανακαλύψουν ξανά τον τροχό. Ως αποτέλεσμα, βασίζονται σε μια πληθώρα υπαρχουσών βιβλιοθηκών κώδικα, όπως το Log4j.
Η ενότητα Log4j προέρχεται από το Apache, το πιο ευρέως χρησιμοποιούμενο λογισμικό διακομιστή ιστού. Αυτός είναι ο λόγος για τον οποίο μπορεί να ανακαλυφθεί σε εκατομμύρια διακομιστές. Ως εκ τούτου, αυξάνονται οι απειλές για την ασφάλεια.
Ελπίζω οι παραπάνω λύσεις να σας βοηθήσουν να διατηρήσετε τις συσκευές σας ασφαλείς.
Μείνετε συντονισμένοι στο HashDork για περισσότερες χρήσιμες πληροφορίες από τον κόσμο της τεχνολογίας.
Αφήστε μια απάντηση