package.json - package-lock.json - typosquatting

Ένα τυπογραφικό λάθος στο package.json Αφήνει ένα παρόμοιο πακέτο να θέσει σε κίνδυνο το Pipeline

Ένα λάθος ενός χαρακτήρα που προκάλεσε κακόβουλο λογισμικό

Ξεκίνησε με ένα τυπογραφικό λάθος. Κάπου μέσα στη μαζική αύξηση των νέων χαρακτηριστικών και των συγχωνεύσεων δημοσίων σχέσεων, κάποιος πληκτρολόγησε @utils_core αντί του @utils-core μέσα στο πακέτο.jsonΑυτό το απόκομμα ενός χαρακτήρα δεν έφερε σφάλμα. Αντίθετα, εισήγαγε αθόρυβα ένα κακόβουλο πακέτο που μοιάζει με αυτό κατά τη διάρκεια του επόμενου CI/CD εκτέλεση, αξιοποιώντας την εμπιστοσύνη στις καρφιτσωμένες εκδόσεις και τον αυτοματισμό. Καλώς ορίσατε στον κόσμο του typosquatting σε ανοιχτό κώδικα.

Typosquatting: Το Διάνυσμα Επίθεσης που Ευδοκιμεί στο Ανθρώπινο Λάθος

Το Typosquatting είναι ακριβώς αυτό που ακούγεται: κακόβουλοι παράγοντες καταγράφουν πακέτα με ονόματα σχεδόν πανομοιότυπα με τα νόμιμα. Σε γρήγορα εξελισσόμενα περιβάλλοντα, αυτό λειτουργεί επειδή οι προγραμματιστές εμπιστεύονται ότι οι πακέτο.json και pack-lock.json αντικατοπτρίζουν αυτό που περιμένουν. Έναν χαρακτήρα εκτός; Θα μπορούσε κάλλιστα να είναι αόρατο σε μια διαφορά δημοσίων σχέσεων.

NPM έχει ιστορικό εκμετάλλευσης μέσω τυπογραφικών καταλήψεων. Πακέτα όπως σταυροειδής περιβάλλων αντί του διασταυρούμενο περιβάλλον or ροή συμβάντων Τα backdoors έχουν ήδη δείξει πόσο αποτελεσματικά μπορούν να είναι αυτά τα παρόμοια. Αυτά τα ψεύτικα πακέτα συχνά περνούν από αξιολογήσεις απλώς επειδή φαίνονται σωστά και δεν εμφανίζουν άμεσα σφάλματα χρόνου εκτέλεσης.

Οι συνήθεις παγίδες περιλαμβάνουν:

  • Παύλα vs υπογράμμιση: lπυρήνας odash vs lodash_core
  • Πληθυντικοί: ζητήσει vs αιτήματα
  • Αντικαταστημένοι χαρακτήρες: εξπρές αντί του ρητή

Όπου το package-lock.json γίνεται τυφλό σημείο

Ο προγραμματιστής διορθώνει το τυπογραφικό του λάθος. Ή έτσι νομίζουν. Αλλά μέχρι τώρα, pack-lock.json έχει ήδη κλειδώσει το πακέτο του εισβολέα. Και εδώ κρύβεται ο πραγματικός κίνδυνος.

Σε αντίθεση με πακέτο.json, το οποίο επεξεργάζεται χειροκίνητα και ελέγχεται περισσότερο, pack-lock.json δημιουργείται αυτόματα από NPMΩς αποτέλεσμα, συχνά αντιμετωπίζεται σαν τυπικότητα, παραλείπεται ή απλώς προσεγγίζεται επιγραμματικά. pull request κριτικές. Δεν είναι ασυνήθιστο για τις ομάδες να το χαρακτηρίζουν ως «πολύ θορυβώδες» ή να το εμπιστεύονται έμμεσα χωρίς να το εξετάσουν σε βάθος.

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

Για να γίνουν τα πράγματα χειρότερα, η καρφίτσα έκδοσης, η οποία υποτίθεται ότι διασφαλίζει τη συνέπεια, μπορεί να αποβεί μπούμερανγκ. Οι εισβολείς μπορούν να μετατρέψουν το ψεύτικο πακέτο τους σε έκδοση πανομοιότυπη με το νόμιμο. Εάν το CI/CD Εάν το σύστημα εμπιστεύεται τυφλά τις καρφιτσωμένες εκδόσεις, δεν θα ανιχνεύσει ότι εγκαθιστά ένα πακέτο με γνωστό και καλό αριθμό έκδοσης, αλλά από διαφορετική, κακόβουλη πηγή.

Αυτή η σιωπηλή επιμονή είναι που κάνει pack-lock.json τόσο επικίνδυνο. Ναι, διασφαλίζει ντετερμινιστικές κατασκευές, αλλά εγγυάται επίσης ότι ένα κακό πακέτο παραμένει εκτός αν εντοπιστεί και καθαριστεί χειροκίνητα.

CI/CD: Πού χτυπάει το κακόβουλο λογισμικό – package.json

Σε ένα τυπικό CI/CD pipeline, το κακόβουλο πακέτο δεν χρειάζεται να περιμένει μέχρι το χρόνο εκτέλεσης. Επιλύεται και ενεργοποιείται πολύ νωρίτερα στη ροή:

Ανάλυση εξάρτησης
The pipeline τραβάει τις ακριβείς εκδόσεις εξάρτησης από το package-lock.json, που περιλαμβάνει πλέον το συσκευασία με typosquat λόγω τυπογραφικού λάθους πακέτο.json.

Φάση εγκατάστασης
Κατά τη διάρκεια του npm ci, εγκαθίστανται όλες οι εξαρτήσεις, συμπεριλαμβανομένης της κακόβουλης. Δεν υπάρχουν προειδοποιήσεις, δεν υπάρχουν μηνύματα, μόνο σιωπηλή εγκατάσταση.

Εκτέλεση σεναρίου μετά την εγκατάσταση
Το πακέτο που μοιάζει με αυτό περιλαμβάνει ένα σενάριο μετά την εγκατάσταση που εκτελείται αυτόματα μόλις ολοκληρωθεί η εγκατάσταση. Εδώ συμβαίνει η παραβίαση.

Παράδειγμα ψευδοκώδικα:

Περιγραφή ψευδοκώδικα:
Κατά τη φάση εγκατάστασης, εάν υπάρχει το άγκιστρο κύκλου ζωής μετά την εγκατάσταση, το ψεύτικο πακέτο ενεργοποιεί την κρυφή λογική του—συχνά πριν καν εκτελεστούν οι κατασκευές ή οι δοκιμές. Αυτό μπορεί να περιλαμβάνει την υποβολή εξωτερικών αιτημάτων, την εισαγωγή backdoors ή άλλες μη εξουσιοδοτημένες ενέργειες.

⚠️ Προειδοποίηση: Αυτός ο ψευδοκώδικας προορίζεται μόνο για επίδειξη και δεν πρέπει να χρησιμοποιείται σε πραγματικά περιβάλλοντα.

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

Εντοπίζοντας τη διαφορά πριν να είναι πολύ αργά

Ένα συνηθισμένο λάθος: η υπόθεση πακέτο.json λέει όλη την ιστορία. Δεν το κάνει. Η πραγματική δύναμη βρίσκεται στον συνδυασμό των πακέτο.json + πακέτο-κλειδώματος.json.

Δείτε τι πρέπει να αναζητήσετε:

  • Μήπως η pack-lock.json περιλαμβάνουν μη αναμενόμενα πακέτα;
  • Υπάρχουν εξαρτήσεις που προέρχονται από άγνωστα μητρώα ή έχουν περίεργα πεδία εφαρμογής;
  • Είναι οι αριθμοί έκδοσης υπερβολικά συγκεκριμένοι ή δεν είναι ευθυγραμμισμένοι;

Χρησιμοποιήστε εργαλεία CLI όπως:

  • έλεγχος npm για να επισημάνετε γνωστά προβλήματα
  • npm ls για να δείτε το πλήρες δέντρο εξαρτήσεων
  • Diff για να συγκρίνετε εκδόσεις μεταξύ πακέτο.json και pack-lock.json

Σκληρύνετε το δικό σας Pipeline: Άμυνες που λειτουργούν

Για να αμυνθείτε ενάντια στην καταπάτηση τυπογραφικών ...

  • Επιβολή περιορισμών πεδίου εφαρμογής σε πακέτο.json.
  • Προσθήκη προ-συγχώνευσης hooks για την επικύρωση εξαρτήσεων και την επαλήθευση τους.
  • Χρήση npm ci για να αποφευχθεί η ακούσια απόκλιση έκδοσης.
  • Τακτική σάρωση pack-lock.json για ανωμαλίες.

Και το πιο σημαντικό: αντιμετωπίστε τις μη επαληθευμένες καταχωρήσεις στο pack-lock.json ως πιθανούς κινδύνους. Κάθε commit θα πρέπει να αντιμετωπίζεται ως σημείο ελέγχου της εφοδιαστικής αλυσίδας.

Αυτοματοποιημένη ανίχνευση: Πώς βοηθούν εργαλεία όπως το Xygeni

Αν και δεν είναι μια πανάκεια, αυτοματοποιημένα εργαλεία όπως Ξυγένη παίζουν κρίσιμο ρόλο στη μείωση του παράγοντα ανθρώπινου σφάλματος στον οποίο ευδοκιμεί το typosquatting. Το Xygeni ενσωματώνεται απευθείας στη ροή εργασίας DevOps, προσθέτοντας ένα επίπεδο προστασίας σε πραγματικό χρόνο από την παραβίαση εξαρτήσεων πριν καν φτάσει στην εκτέλεση.

Δείτε πώς βοηθάει το Xygeni:

  • Ανίχνευση ύποπτου ονόματος πακέτου:
    Χρησιμοποιεί έξυπνες ευρετικές μεθόδους για την ανίχνευση μοτίβων typosquatting σε πακέτο.json, αναζητώντας μικρές παραλλαγές σε γνωστά ονόματα πακέτων (όπως προσθήκη υπογραμμών, μεταθέσεων ή αντικαταστάσεων γραμμάτων).
  • Άγνωστη επαλήθευση κατακερματισμού:
    Συγκρίνει το hash κάθε εξάρτησης στο pack-lock.json σε μια βάση δεδομένων με γνωστά καλά αντικείμενα από αξιόπιστα μητρώα. Ακόμα κι αν το όνομα και η έκδοση ενός πακέτου φαίνονται καλά, μια αναντιστοιχία κατακερματισμού εγείρει μια κόκκινη σημαία.
  • Αποκλεισμός πριν από την κατασκευή:
    Αναχαιτίζει και μπλοκάρει την εγκατάσταση τυχόν μη επαληθευμένων ή ύποπτων πακέτων πριν φτάσουν στις φάσεις εγκατάστασης ή μετά την εγκατάσταση στο CI/CD pipeline.
  • Ανάλυση Γραφήματος Εξάρτησης:
    Ελέγχει συνεχώς το πλήρες δέντρο εξαρτήσεων για έμμεσες προσπάθειες τυπογραφικής παράβασης ή κακόβουλες μεταβατικές εξαρτήσεις.
  • Ειδοποιήσεις και αναφορές:
    Παρέχει λεπτομερείς, εφαρμόσιμες ειδοποιήσεις, που δείχνουν τι επισημάνθηκε, γιατί και από πού προήλθε στην αλυσίδα εξαρτήσεων.

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

Ένας Χαρακτήρας. Πραγματικές Συνέπειες.

Αυτό δεν ήταν εξωτικό Zero-DayΉταν τυπογραφικό λάθος. Ένας χαρακτήρας που δεν ήταν σωστά τοποθετημένος στο πακέτο.json, σιωπηλά ενισχυμένο από pack-lock.jsonκαι το κακόβουλο λογισμικό αποστέλλεται αυτόματα κατά τη διάρκεια μιας ρουτίνας CI/CD τρέξιμο.

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

  • Αυτοματοποιημένη σάρωση για να εντοπίσετε ύποπτα ονόματα και εκδόσεις πακέτων πριν από την εγκατάσταση.
  • Έλεγχος κλειδώματος αρχείου για την ανίχνευση μη ελεγμένων ή μη αναμενόμενων καταχωρίσεων pack-lock.json.
  • Ευρετικές μέθοδοι επαλήθευσης ονόματος για να επισημάνετε σχεδόν ταιριάσματα με αξιόπιστα πακέτα.

Ένας χαρακτήρας ήταν αρκετός. Οι σωστοί έλεγχοι θα το είχαν σταματήσει πριν σε αγγίξει. pipelineΗ εμπιστοσύνη δεν είναι αρκετή. Στα σύγχρονα DevSecOps, επαληθεύετε τα πάντα ή τα διακινδυνεύετε όλα.

εργαλεία-ανάλυσης-σύνθεσης-λογισμικού-sca
Ιεράρχηση, αποκατάσταση και ασφάλεια των κινδύνων λογισμικού σας
Αποκτήστε τον Δωρεάν Λογαριασμό σας.
Δεν απαιτείται πιστωτική κάρτα.

Ασφαλίστε την ανάπτυξη και την παράδοση λογισμικού σας

με το Xygeni Product Suite