یک کمپین پیشرفته در زنجیره تأمین (Supply-chain) اکوسیستم npm شناسایی شده است که طی آن ۱۰ بسته (Package) مخرب JavaScript با میلیونها lượt دانلود، موفق شدند مکانیزمهای حفاظتی اسکریپتهای چرخه حیات (Lifecycle-script) را دور بزنند.
تغییر استراتژی: از زمان نصب به زمان اجرا
برخلاف حملات رایج npm که بر روی هوکهای preinstall، install یا postinstall متکی هستند، این عملیات بر روی بستهای به نام indexed-btree متمرکز است که از کتابخانه قانونی sorted-btree تقلید میکند. مهاجمان کد مخرب را در متد BTree.prototype.set() جاسازی کردهاند؛ متدی که در جریان اجرای عادی برنامه فراخوانی میشود. این رویکرد باعث میشود بسته در هنگام نصب کاملاً بیخطر به نظر برسد و سیستمهای نظارتی npm v12 که نیاز به تأیید صریح برای اسکریپتهای وابستگی دارند، را دور بزند.
مکانیزم فعالسازی و استخراج دادهها
بدافزار تنها زمانی فعال میشود که تابع set() با مقدار کلید 100 فراخوانی شود. پس از آن، یک لودر مبهمسازی شده (Obfuscated) به نام sharedLoad.min.js در یک پروسه مجزای Node.js اجرا میگردد. این لودر ابتدا اثرانگشت (Fingerprinting) سیستم قربانی شامل معماری سیستمعامل، نام میزبان، اطلاعات CPU و حافظه را جمعآوری کرده و سپس دادهها را از طریق زیرساختهای Slack و Telegram خارج میکند.
استفاده نوآورانه از Smart Contract برای C2
یکی از پیچیدگیهای این حمله، استفاده از یک قرارداد هوشمند (Smart Contract) در شبکه تست Ethereum Sepolia به عنوان مکانیزم فرماندهی و کنترل (C2) است. به جای ارتباط با یک دامنه یا IP ثابت، ایمپلنت با فراخوانی توابع getter و setter قرارداد هوشمند، بهروزرسانیهای زیرساختی و دادههای Payload را دریافت میکند. این روش باعث میشود حذف زیرساخت توسط تحلیلگران دشوار شود، زیرا مهاجمان میتوانند از طریق تراکنشهای On-chain، قربانیان را به زیرساختهای جدید هدایت کنند.
جزئیات فنی رمزنگاری و پاکسازی
لودر از تبادل کلید Diffie-Hellman با منحنی بیضوی X25519 برای تولید یک کلید AES استفاده میکند تا قطعات رمزگذاری شده Payload را که روی بلاکچین ذخیره شدهاند، رمزگشایی و بازسازی کند. همچنین، این بدافزار دارای قابلیت پاکسازی (Cleanup) است تا پس از اجرا، فایلهای خود و تریگرهای Prototype را حذف کرده و شواهد جرمشناختی (Forensic evidence) را به حداقل برساند.
بستههای شناسایی شده و توصیهها
علاوه بر indexed-btree، نه بسته دیگر از جمله btree-core (با بیش از ۱.۹ میلیون دانلود)، ordered-kv-index و btree-lru-cache نیز در این عملیات نقش داشتند. شرکت Snyk شدت خطر این آسیبپذیری را 9.3 (Critical) ارزیابی کرده است.
توصیههای امنیتی برای سازمانها:
- در صورت نصب هر یک از این بستهها، محیطهای توسعه و Build را Compromised تلقی کنید.
- تمامی Credentialها، توکنهای API، کلیدهای SSH و متغیرهای CI/CD را سریعاً تغییر دهید (Rotate).
- اتصالات خروجی به شبکه Ethereum Sepolia، Slack و Telegram را بررسی کنید.
- پایش رفتار در زمان اجرا (Runtime Behavior Monitoring) را جایگزین اعتماد به نبود اسکریپتهای نصب کنید.