Jump to content



  • astrolabos
    astrolabos

    Ανίχνευση κακόβουλων πακέτων στο PyPI: Κακόβουλο πακέτο στο PyPI χρησιμοποιεί τεχνικές phishing για να κρύψει την κακόβουλη πρόθεσή του

      Η CloudGuard Spectralops εντόπισε έναν κακόβουλο λογαριασμό phishing στο PyPI, το κορυφαίο ευρετήριο πακέτων Python

    Το PyPI (Python Package Index) είναι το επίσημο αρχείο πακέτων λογισμικού για τη γλώσσα προγραμματισμού Python. Πρόκειται για μια κεντρική πλατφόρμα όπου οι προγραμματιστές της Python μπορούν να βρίσκουν, να εγκαθιστούν και να μοιράζονται πακέτα Python ανοικτού κώδικα. Το PyPI λειτουργεί από το Python Software Foundation (PSF) και είναι προσβάσιμο μέσω του προγράμματος εγκατάστασης πακέτων pip, το οποίο περιλαμβάνεται στις περισσότερες εγκαταστάσεις της Python. Οι χρήστες μπορούν να αναζητήσουν πακέτα με βάση το όνομα ή τη λέξη-κλειδί και μπορούν να κατεβάσουν και να εγκαταστήσουν πακέτα με μία μόνο εντολή. Το PyPI φιλοξενεί χιλιάδες πακέτα Python ανοικτού κώδικα, που κυμαίνονται από βιβλιοθήκες για επιστημονικούς υπολογισμούς και ανάλυση δεδομένων, μέχρι πλαίσια για ανάπτυξη ιστοσελίδων και μηχανική μάθηση. Οποιοσδήποτε μπορεί να ανεβάσει ένα πακέτο στο PyPI, αρκεί να πληροί ορισμένες απαιτήσεις και κατευθυντήριες γραμμές που έχουν τεθεί από το PSF. Το PyPI έχει γίνει ένα βασικό εργαλείο για την κοινότητα της Python, επιτρέποντας στους προγραμματιστές να ανακαλύπτουν και να χρησιμοποιούν εύκολα πακέτα τρίτων και ενθαρρύνει τη συνεργασία και την ανταλλαγή μεταξύ των προγραμματιστών Python παγκοσμίως. Πολλά δημοφιλή πλαίσια και εργαλεία Python, όπως το Django, το Flask και το Pandas, είναι διαθέσιμα στο PyPI, μαζί με ένα τεράστιο φάσμα άλλων πακέτων για διάφορους σκοπούς, καθιστώντας το έναν κρίσιμο πόρο για τους προγραμματιστές στο οικοσύστημα της Python.
     

    Η Επίθεση

    Είναι σημαντικό να σημειωθεί ότι οι κακόβουλοι δράστες δεν περιμένουν, και βλέπουμε συνεχώς νέες τεχνικές και στρατηγικές με τις οποίες προσπαθούν να κρύψουν την κακόβουλη πρόθεσή τους (από τη χρήση Στεγανογραφίας, μέχρι κρυπτο-πειρατές που καταλαμβάνουν το σύστημα εγκατάστασης για να εξορύξουν κρυπτογραφικό νόμισμα για το κέρδος τους). Τα κακόβουλα πακέτα που εντοπίσαμε καταδεικνύουν πως το phishing είναι ένα ακόμη εργαλείο που χρησιμοποιούν οι επιτιθέμενοι για να κρύψουν την πρόθεσή τους. Χρησιμοποιώντας τα μοντέλα μηχανικής μάθησης που διαθέτουμε, καταφέραμε να εντοπίσουμε αυτά τα κακόβουλα πακέτα στο PyPI. Ενώ προσποιούνταν ότι είναι βοηθητικά προγράμματα που σχετίζονται με το async-io, αυτά τα πακέτα αποδείχθηκαν κακόβουλοι παράγοντες- κατέβαζαν και εκτελούσαν κρυφά συγκεκαλυμμένο κώδικα ως μέρος της διαδικασίας εγκατάστασής τους. Επιπλέον, ο επιτιθέμενος δημοσίευσε μερικές εκδόσεις του ίδιου πακέτου με μικρές τροποποιήσεις, πιθανώς επαναλαμβάνοντας προς μια έκδοση που θα είναι λιγότερο ορατή σε όσους κυνηγούν κακόβουλα πακέτα στο PyPI. Πολλές λεπτομέρειες για τα πακέτα που εντοπίστηκαν είναι μπροστά.

    Η Επίθεση σε λεπτομέρεια

    Το πρώτο πακέτο που τράβηξε την προσοχή μας ήταν το  aiotoolsbox; Ενώ φαινόταν καλοήθες με την πρώτη ματιά, αποδείχθηκε ότι ήταν ένα ακριβές αντίγραφο του νόμιμου πακέτου  aiotools. Είναι σημαντικό να σημειωθεί ότι ενώ το typosquating (η χρήση ονομάτων πακέτων που μοιάζουν με δημοφιλή καλοήθη πακέτα προκειμένου να ξεγελάσουν τους χρήστες και να εγκαταστήσουν τα κακόβουλα) είναι μια αρκετά συνηθισμένη επίθεση στον κόσμο της εφοδιαστικής αλυσίδας, το ταυτόσημο αντίγραφο του καλοήθους πακέτου είναι μια λιγότερο συνηθισμένη πρακτική (για τις περισσότερες περιπτώσεις αρκεί η μίμηση του ονόματος του πακέτου) και είναι γενικά κάτι που βλέπουμε περισσότερο στον κόσμο του phishing. Μια τέτοια προσπάθεια μπορεί να υποδηλώνει μια πιο εξελιγμένη εκστρατεία, λαμβάνοντας υπόψη ότι οι εγκαταστάτες ενδέχεται να ρίχνουν μια δεύτερη ματιά στα πακέτα που πρόκειται να εγκαταστήσουν (είναι ενδιαφέρον ότι παρόμοια κακόβουλη εκστρατεία είχε εντοπιστεί στο παρελθόν από τα μοντέλα μηχανικής μάθησης που διαθέτουμε).  
     

    Εικόνα1.png Εικόνα2.png

    Το καλοήθες πακέτο aiotools δίπλα στο κακόβουλο aiotoolsbox

     

    Κοιτάζοντας τα μεταδεδομένα των πακέτων, και τα δύο έχουν τον ίδιο συγγραφέα ενώ έχουν διαφορετικό συντηρητή. Βασιζόμενοι στο γεγονός ότι σύμφωνα με το πρωτόκολλο δημοσίευσης των πακέτων PyPI τα πεδία του συγγραφέα είναι ελεύθερου κειμένου ενώ ο συντηρητής είναι ένας πιστοποιημένος χρήστης, ο επιτιθέμενος μπορούσε εύκολα να μιμηθεί το πεδίο του συγγραφέα ενώ για τα πεδία του συντηρητή έπρεπε να βασιστεί σε κάτι άλλο. 

     Εικόνα3.pngΕικόνα4.png

    Το καλοήθες πακέτο aiotools τα στοιχεία των συνεισφερόντων δίπλα στο κακόβουλο aiotoolsbox

     

    Σύμφωνα με τα στοιχεία του συντηρητή του aiotoolsbox, είναι συνεργάτες του PyPI από το 2019. Δεδομένου του γεγονότος ότι τα δύο μόνο πακέτα που έχουν δημοσιεύτηκαν πρόσφατα, είναι δίκαιο να υποθέσουμε ότι αυτός ο λογαριασμός παραβιάστηκε πρόσφατα.

     

    Εικόνα5.png

    aiotoolsbox PyPI σελίδα maintainer

     

    Εξετάζοντας τον κώδικα εγκατάστασης του aiotoolsbox περιλαμβάνει ένα παράξενο κομμάτι που ως μέρος της διαδικασίας εγκατάστασης, κατεβάζει ένα zip από το διαδίκτυο, το εξάγει, το εκτελεί και τελικά διαγράφει το περιεχόμενό του.

     

    Εικόνα6.png

    aiotoolsbox setup.py code

     

    Το πρώτο ενδιαφέρον σημείο εδώ είναι το γεγονός ότι το zip κατεβαίνει από έναν διακομιστή που υποτίθεται ότι είναι ο 'files.pythonhosted.org'. Αυτό αποδεικνύεται ότι είναι το δεύτερο επίπεδο phishing της επίθεσης, καθώς ο διακομιστής προσπαθεί να κρυφτεί ως ο επίσημος ιστότοπος φιλοξενίας πακέτων PyPI.

     

    Εικόνα7.png

     

    Εικόνα8.png

    To καλοήθες files.pythonhosted.org δίπλα στον κακόβουλο διακομιστή aiotoolsbox που χρησιμοποιείται

     

    Ένα άλλο ενδιαφέρον σημείο είναι το όνομα του αρχείου που κατεβάζετε, το οποίο αντιστοιχεί στη χρησιμοποιούμενη έκδοση της python, δηλαδή για παράδειγμα κάποιος που χρησιμοποιεί python 3.9 θα λάβει ένα zip με το όνομα 39.zip. Αυτό φαίνεται να είναι ένα άλλο επίπεδο συσκοτίσεως του phishing, κάνοντας τον κοινό χρήστη να υποθέσει ότι πρόκειται για κάτι νόμιμο που βλέπει, πιθανώς κάποιο είδος εσωτερικής ροής του pip.
     

    Εξετάζοντας το zip που κατέβηκε, συμπεριέλαβε έναν κώδικα με pyArmor, ο οποίος καθιστά δύσκολο να κατανοήσουμε σαφώς την κακόβουλη πρόθεσή του. Παρ' όλα αυτά, κοιτάζοντας τα ονόματα των αρχείων που κατεβάστηκαν, είναι δίκαιο να υποθέσουμε ότι το πακέτο είναι ένας κλέφτης PII, που σκοπεύει να συλλέξει και να κλέψει τα μυστικά του εγκαταστάτη. Δεδομένου του γεγονότος ότι αυτό το zip κατέβηκε κρυφά κατά τη διάρκεια της διαδικασίας εγκατάστασης, μπορούμε να συμπεράνουμε ότι δεν πρόκειται για μια καλοήθη περίπτωση. 
     

    Εικόνα9.png

    Τα downloaded zip περιεχόμενα

     

    Εικόνα10.png

    Το main.py entry script περιεχόμενο

     

    Επανεξετάζοντας τη δομή του πακέτου aiotoolsbox, εκτός από το setup.py που αναφέρθηκε, τα υπόλοιπα αρχεία φαίνεται να προέρχονται από το καλοήθες πακέτο aiotools, κάνοντας τον κοινό χρήστη να λαμβάνει τις βασικές λειτουργίες που αναζητούσε, χωρίς να γνωρίζει ότι μόλις εγκατέστησε ένα κακόβουλο πακέτο. 

     

    Εικόνα11.png Εικόνα12.png

    Η καλοήθης δομή αρχείων aiotools δίπλα στο κακόβουλο aiotoolsbox

     

    Ψάχνοντας για τις προηγούμενες εκδόσεις του aiotoolsbox μπορούμε να παρατηρήσουμε με ενδιαφέρον ότι ανέβηκε μερικές φορές με διαφορετικές εκδόσεις (πρώτα 1.4.7 και μόνο μετά 1.4.5 και 1.4.6).

     

    Εικόνα13.png

    Αναζήτηση για προηγούμενες κυκλοφορίες aiotoolsbox

     

    Εξετάζοντας τη διαφορά μεταξύ αυτών των εκδόσεων αποδείχθηκε ότι είχαν την ίδια δομή, ενώ η μόνη διαφορά ήταν στο αρχείο setup.py και πιο συγκεκριμένα στην IP του διακομιστή που χρησιμοποιούν. Ελέγχοντας τα στοιχεία της IP η αρχική έκδοση ήταν μια ρωσική IP ενώ η μεταγενέστερη ήταν από τη Γερμανία. Πιθανώς και πάλι ένα άλλο επίπεδο συσκοτισμού, θεωρώντας ότι μια ρωσική IP θα είναι πιο ανησυχητική από μια γερμανική. 
     

    Εικόνα14.png Εικόνα15.png

    πρόσφατη έκδοση (1.4.6) aiotoolsbox έναντι της προηγούμενης (1.4.7)

     

    Εικόνα16.png

     

    Εικόνα17.png

    Η πιο πρόσφατη (1.4.6) IP σε χρήση σε σχέση με την προηγούμενη (1.4.7)


    Τέλος, εξετάζοντας το άλλο πακέτο του λογαριασμού - το async-proxy, στο αρχείο setup.py αναφέρει το aiotoolsbox ως τη μόνη του απαίτηση, κάνοντας όποιον το εγκαταστήσει να εγκαταστήσει και το κακόβουλο aiotoolsbox

     

    Εικόνα18.png

    async-proxy setup.py code

      

     

    Disclosure

    Αποκαλύψαμε τον λογαριασμό στο PyPI και αμέσως μετά τα αναφερόμενα πακέτα αφαιρέθηκαν από την ομάδα του PyPI.

     

    Πως αποτρέπει αυτόν τον κίνδυνο το CloudGuard Spectral

    Με τις επιθέσεις στην αλυσίδα εφοδιασμού να αυξάνονται ολοένα και περισσότερο, είναι απαραίτητο να διασφαλιστείτε επαληθεύοντας όλα τα συστατικά του λογισμικού που χρησιμοποιείτε, ιδίως εκείνα που δεν έχουν αναπτυχθεί από εσάς. Στην Check Point, η αποστολή μας είναι να οικοδομήσουμε μια ασφαλή διαδικασία ανάπτυξης, εξοπλίζοντας τους προγραμματιστές με τα κατάλληλα εργαλεία για να το πετύχουμε αυτό. Για να καταπολεμήσουμε τα κακόβουλα πακέτα που οδηγούν σε κινδύνους στην αλυσίδα εφοδιασμού, παρακολουθούμε επαγρυπνώντας το PyPI και το NPM για κακόβουλες οντότητες. Μετά τον εντοπισμό τους, ενημερώνουμε το NPM, προτρέποντας την άμεση αφαίρεσή τους. Αξιοποιώντας το CloudGuard Spectral, μπορείτε να παραμείνετε ασφαλείς και σε εγρήγορση, επιτρέποντάς σας να εντοπίζετε γρήγορα κακόβουλους φορείς.
     


×
×
  • Δημιουργία...

Important Information

Ο ιστότοπος theLab.gr χρησιμοποιεί cookies για να διασφαλίσει την καλύτερη εμπειρία σας κατά την περιήγηση. Μπορείτε να προσαρμόσετε τις ρυθμίσεις των cookies σας , διαφορετικά θα υποθέσουμε ότι είστε εντάξει για να συνεχίσετε.