Αναφορά σχετικά με τον συμβιβασμό του αποθετηρίου git και της βάσης χρηστών του έργου PHP

Δημοσιεύτηκαν τα πρώτα αποτελέσματα της ανάλυσης ενός περιστατικού που σχετίζεται με τον εντοπισμό δύο κακόβουλων δεσμεύσεων στο αποθετήριο Git ενός έργου PHP με ενεργοποιημένη μια κερκόπορτα κατά την αποστολή αιτήματος με μια ειδικά σχεδιασμένη κεφαλίδα User Agent. Κατά τη μελέτη των ιχνών των δραστηριοτήτων των επιτιθέμενων, συνήχθη το συμπέρασμα ότι ο ίδιος ο διακομιστής git.php.net, στον οποίο βρισκόταν το αποθετήριο git, δεν είχε παραβιαστεί, αλλά η βάση δεδομένων με τους λογαριασμούς των προγραμματιστών του έργου παραβιάστηκε .

Είναι πιθανό ότι οι εισβολείς μπόρεσαν να πραγματοποιήσουν λήψη της βάσης δεδομένων χρήστη που είναι αποθηκευμένη στο DBMS στον διακομιστή master.php.net. Τα περιεχόμενα του master.php.net έχουν ήδη μετεγκατασταθεί στον νέο διακομιστή main.php.net που έχει εγκατασταθεί από την αρχή. Όλοι οι κωδικοί πρόσβασης προγραμματιστή που χρησιμοποιήθηκαν για την πρόσβαση στην υποδομή php.net επαναφέρθηκαν και η διαδικασία αλλαγής τους ξεκίνησε μέσω μιας ειδικής φόρμας ανάκτησης κωδικού πρόσβασης. Τα αποθετήρια git.php.net και svn.php.net παραμένουν μόνο για ανάγνωση (η ανάπτυξη έχει μεταφερθεί στο GitHub).

Μετά την ανακάλυψη του πρώτου κακόβουλου commit που έγινε μέσω του λογαριασμού του Rasmus Lerdorf, του ιδρυτή της PHP, υποτέθηκε ότι ο λογαριασμός του είχε παραβιαστεί και ο Nikita Popov, ένας από τους βασικούς προγραμματιστές της PHP, απέσυρε τις αλλαγές και απέκλεισε τα δικαιώματα δέσμευσης για ο προβληματικός λογαριασμός. Μετά από κάποιο χρονικό διάστημα, συνειδητοποιήθηκε ότι ο αποκλεισμός δεν είχε νόημα, καθώς χωρίς επαλήθευση δεσμεύσεων με χρήση ψηφιακής υπογραφής, οποιοσδήποτε συμμετέχων με πρόσβαση στο αποθετήριο php-src θα μπορούσε να κάνει μια αλλαγή αντικαθιστώντας ένα πλασματικό όνομα συγγραφέα.

Στη συνέχεια, οι επιτιθέμενοι έστειλαν ένα κακόβουλο commit εκ μέρους του ίδιου του Nikita. Αναλύοντας τα αρχεία καταγραφής της υπηρεσίας gitolite, που χρησιμοποιείται για την οργάνωση της πρόσβασης στα αποθετήρια, έγινε προσπάθεια να προσδιοριστεί ο συμμετέχων που πραγματοποίησε τις αλλαγές. Παρά τη συμπερίληψη της λογιστικής για όλες τις δεσμεύσεις, δεν υπήρχαν καταχωρήσεις στο αρχείο καταγραφής για δύο κακόβουλες αλλαγές. Έγινε σαφές ότι υπήρξε συμβιβασμός της υποδομής, αφού προστέθηκαν απευθείας commit, παρακάμπτοντας τη σύνδεση μέσω gitolite.

Ο διακομιστής git.php.net απενεργοποιήθηκε αμέσως και το κύριο αποθετήριο μεταφέρθηκε στο GitHub. Βιαστικά, ξεχάστηκε ότι για να αποκτήσετε πρόσβαση στο αποθετήριο, εκτός από το SSH χρησιμοποιώντας το gitolite, υπήρχε μια άλλη είσοδος που σας επέτρεπε να στείλετε δεσμεύσεις μέσω HTTPS. Σε αυτήν την περίπτωση, το git-http-backend χρησιμοποιήθηκε για την αλληλεπίδραση με το Git και ο έλεγχος ταυτότητας πραγματοποιήθηκε χρησιμοποιώντας τον διακομιστή HTTP Apache2, ο οποίος επαλήθευε τα διαπιστευτήρια αποκτώντας πρόσβαση στη βάση δεδομένων που φιλοξενείται στο DBMS στον διακομιστή master.php.net. Η είσοδος επιτρεπόταν όχι μόνο με κλειδιά, αλλά και με κανονικό κωδικό πρόσβασης. Η ανάλυση των αρχείων καταγραφής διακομιστή http επιβεβαίωσε ότι προστέθηκαν κακόβουλες αλλαγές μέσω HTTPS.

Κατά τη μελέτη των αρχείων καταγραφής, αποκαλύφθηκε ότι οι εισβολείς δεν συνδέθηκαν την πρώτη φορά, αλλά αρχικά προσπάθησαν να βρουν το όνομα του λογαριασμού, αλλά αφού το αναγνώρισαν, μπήκαν στην πρώτη προσπάθεια, δηλ. γνώριζαν εκ των προτέρων τους κωδικούς πρόσβασης του Rasmus και του Nikita, αλλά δεν γνώριζαν τα στοιχεία σύνδεσής τους. Εάν οι εισβολείς κατάφεραν να αποκτήσουν πρόσβαση στο DBMS, δεν είναι σαφές γιατί δεν χρησιμοποίησαν αμέσως τη σωστή σύνδεση που καθορίζεται εκεί. Αυτή η διαφορά δεν έχει λάβει ακόμη αξιόπιστη εξήγηση. Το χακάρισμα του master.php.net θεωρείται το πιο πιθανό σενάριο, καθώς αυτός ο διακομιστής χρησιμοποιούσε πολύ παλιό κώδικα και ένα ξεπερασμένο λειτουργικό σύστημα, το οποίο δεν είχε ενημερωθεί για μεγάλο χρονικό διάστημα και είχε μη διορθωμένα τρωτά σημεία.

Οι ενέργειες που έγιναν περιλαμβάνουν την επανεγκατάσταση του περιβάλλοντος διακομιστή master.php.net και τη μεταφορά σεναρίων στη νέα έκδοση της PHP 8. Ο κώδικας για την εργασία με το DBMS έχει τροποποιηθεί ώστε να χρησιμοποιεί παραμετροποιημένα ερωτήματα που περιπλέκουν την αντικατάσταση του κώδικα SQL. Ο αλγόριθμος bcrypt χρησιμοποιείται για την αποθήκευση των κατακερματισμών κωδικών πρόσβασης στη βάση δεδομένων (προηγουμένως, οι κωδικοί πρόσβασης αποθηκεύονταν χρησιμοποιώντας έναν αναξιόπιστο κατακερματισμό MD5). Οι υπάρχοντες κωδικοί πρόσβασης επαναφέρονται και θα σας ζητηθεί να ορίσετε νέο κωδικό πρόσβασης μέσω της φόρμας ανάκτησης κωδικού πρόσβασης. Δεδομένου ότι η πρόσβαση στα αποθετήρια git.php.net και svn.php.net μέσω HTTPS ήταν συνδεδεμένη με hashes MD5, αποφασίστηκε να αφεθούν τα git.php.net και svn.php.net σε λειτουργία μόνο για ανάγνωση και επίσης να μετακινηθούν όλα εναπομείνασες σε αυτούς αποθετήρια επέκτασης PECL στο GitHub, παρόμοια με το κύριο αποθετήριο PHP.

Πηγή: opennet.ru

Προσθέστε ένα σχόλιο