یک بسته مخرب در مخزن npm با نام indexed-btree شناسایی شده است که با تقلید از بسته قانونی sorted-btree، تلاش کرده تا رفتارهای مخرب خود را در کد زمان اجرا (Runtime) پنهان کند. این رویکرد نشاندهنده تغییر استراتژی مهاجمان در پاسخ به کنترلهای امنیتی جدید در اکوسیستم npm است.
تغییر متد اجرای کد: از Lifecycle Scripts به Runtime
در حملات رایج زنجیره تأمین (Supply Chain)، بدافزارها معمولاً از اسکریپتهای preinstall یا postinstall برای اجرای خودکار کدها در هنگام نصب استفاده میکنند. با این حال، نسخه ۱۲ npm تغییراتی را برای جلوگیری از اجرای خودکار این اسکریپتها معرفی کرد. در پاسخ به این محدودیت، بسته indexed-btree هیچ وابستگی به این اسکریپتها ندارد و کد مخرب خود را مستقیماً در توابع کاربردی کتابخانه جایگذاری کرده است.
در این مورد خاص، لودر بدافزار در متد BTree.prototype.set() پنهان شده بود که پس از فراخوانی، یک فایل جاوااسکریپت به نام sharedLoad.min.js را اجرا میکند. این فایل حاوی مرحله اول بدافزار است که به صورت Obfuscated (مبهمسازی شده) طراحی شده است.
تحلیل فنی زنجیره عفونت و تکنیک EtherHiding
بدافزار مذکور پس از اجرا، مراحل زیر را طی میکند:
- Fingerprinting: جمعآوری اطلاعات سیستم میزبان و ارسال آنها به یک کانال Slack و بات تلگرام.
- EtherHiding: استفاده از تکنیک پنهانسازی داده در بلاکچین برای دریافت قطعات رمزگذاری شده مرحله دوم (Payload) از یک Smart Contract در شبکه تست Sepolia.
- Reconstruction: ترکیب قطعات دریافتی برای تشکیل بدافزار نهایی و اجرای آن.
- Anti-Forensics: حذف آثار مخرب و پاکسازی تریگرها از کد بسته برای جلوگیری از شناسایی.
ارتباط با عملیات PolinRider و تهدیدات گستردهتر
گزارشها حاکی از آن است که این فعالیتها بخشی از یک کمپین گستردهتر است. برای مثال، گروه PolinRider (مرتبط با کره شمالی) نیز از روشهای مشابه برای نفوذ به حسابهای توسعهدهندگان و تزریق کد در مخازن Git استفاده میکند. این مهاجمان با بازنویسی تاریخچه Git و استفاده از ابزارهایی مانند NullReceiver، سعی میکنند زنجیره عفونت را از طریق محیطهای IDE (مانند VS Code) یا توابع سیستمی مانند shell_exec() در PHP فعال کنند.
توصیههای امنیتی برای مدیران SOC و مهندسان امنیت
این حملات ثابت میکنند که کنترلهای امنیتی تنها باعث تغییر رفتار مهاجم میشوند و نه حذف تهدید. برای مقابله با این رویکردها، توصیههای زیر ارائه میشود:
- تحلیل رفتاری زمان اجرا (Runtime Behavior Analysis): اکتفا به اسکنهای زمان نصب (Install-time scanning) کافی نیست و باید رفتار اپلیکیشن در حین اجرا مانیتور شود.
- کنترلهای لایهای (Layered Controls): پیادهسازی مکانیزمهای شناسایی قبل از نصب، حین اجرا و پس از استقرار.
- پایش مخازن کد: بررسی دقیق تغییرات در مخازن Git و احراز هویت چندعاملی برای حسابهای توسعهدهندگان جهت جلوگیری از Compromise شدن اکانتها.