روابط عمومی شرکت ایدکو (توزیعکنندهی محصولات کسپرسکی در ایران)؛ شامگاه ۱۵ سپتامبر، حملهای جدید علیه پرکاربردترین رجیستری مؤلفههای جاوااسکریپت — یعنی npm — آغاز شد. تعدادی از پکیجها، از جمله پکیجهایی با میلیونها بار دانلود هفتگی، به کدی مخرب که وظیفهاش سرقت توکنها و کلیدهای احراز هویت است آلوده شدند. ویژگی قابلتوجه این بدافزار، قابلیت انتشار خودکار آن است؛ بهگونهای که میتواند سایر پکیجهای npm را نیز آلوده کند. یکی از پکیجهای آلودهشده، پکیج محبوب @ctrl/tinycolor است. به گفتهی شرکت Aikido Security، نزدیک به ۱۵۰ پکیج مورد نفوذ قرار گرفتهاند — از جمله پکیجهای متعلق به شرکت Crowdstrike.
روش انتشار
در حال حاضر، نحوهی آلودگی اولیه و «نقطهی شروع» مشخص نیست. از آنجا که الگوی این حمله شباهت زیادی به رخداد اخیر موسوم به s1ngularity دارد، احتمال میرود که پای فیشینگ هم در میان باشد. با این حال، زنجیرهی بعدیِ آلودگی بهصورت زیر است:
- کد مخرب بهشکل یک اسکریپت post-installation در فایل bundle.js به پکیجهای آلودهشده اضافه میشود. وقتی کاربر پکیج آلوده را نصب میکند، این اسکریپت اجرا میشود. برخلاف رخداد قبلی، این اسکریپت بهصورت بیناپلتفرمی طراحی شده و در محیطهای *nix و ویندوز اجرا میشود.
- اسکریپت، نسخهی مناسب سیستمعامل از ابزار مشروع TruffleHog را دانلود میکند. این ابزار، رشتههای با «آنتروپی» بالا را مانند کلیدهای رمزنگاری، توکنهای API و اطلاعات حساس دیگررا در فایلهای لوکال و مخازن در دسترس شناسایی میکند.
- علاوه بر استفاده از TruffleHog، اسکریپت از طریق بررسی متغیرهای محیطی مانند GITHUB_TOKEN، NPM_TOKEN، AWS_ACCESS_KEY_ID و AWS_SECRET_ACCESS_KEY، توکنهای فعال را پیدا کرده و از طریق APIهای GitHub و npm آنها را اعتبارسنجی میکند.
- در ادامه، اسکریپت اقدام به آلودهسازی سایر پکیجهای npm میکند که کاربر قربانی به آنها دسترسی انتشاردارد. برای این کار، نسخهی فعلی پکیج از npm دریافت میشود، نسخهی فرعیآن یک واحد افزایش مییابد، اسکریپت postinstall به آن اضافه و نسخهی جدید آلوده مجدداً در npm منتشر میشود.
- سپس، مخازنکاربر قربانی بهعنوان «عمومی»علامتگذاری میشوند که خود یک نشت اطلاعات جداگانه و مهم بهحساب میآید.
انتشار دادههای سرقتشده
اطلاعات جمعآوریشده از دو روش همزمان استخراج میشود:
- از طریق مخزن GitHub: بدافزار، یک مخزن عمومی با نام Shai-Hulud را بهنمایندگی از کاربر قربانی و با استفاده از توکن GitHub او ایجاد میکند. سپس، فایل JSON حاوی اطلاعات سرقتشده و دادههای سیستمی در این مخزن آپلود میشود.
- از طریق GitHub Actions: اسکریپت، یک ورکفلو جدید با نام github/workflows/shai-hulud-workflow.yml ایجاد میکند که اطلاعات جمعآوریشده را بهشکل JSON رمزگذاری کرده و به سرور webhook[.]site متعلق به مهاجم ارسال میکند.
واکنش به رخداد
آلودگی پکیج tinycolor و دهها پکیج دیگر در شب ۱۵ تا ۱۶ سپتامبر شناسایی شد. تا صبح روز بعد، مدیریت npm فرآیند پاکسازی را آغاز کرد و نسخههای آلوده به نسخههای سالم بازگردانده شدند. در تاریخچهی npm، نسخهی آلوده قابلمشاهده نیست، اما اسناد GitHub وجود آن را تأیید میکنند. با توجه به اینکه در زمان نگارش این گزارش طی پنج ساعت گذشته اعلان جدیدی منتشر نشده، میتوان گفت که این حملهی گسترده تا حدی مهار شده است. با این حال، از آنجا که با یک کرمروبهرو هستیم، امکان تکرار مجدد آن وجود دارد — مگر اینکه npm بهطور کامل جلوی انتشار فایلهای مخرب را بگیرد.
راهکارهای امنیتی
کاربرانی که پکیجهای آلوده را دانلود کردهاند، باید فوراً اقدامات زیر را انجام دهند:
- بازگرداندن بستهها به نسخههای امن و پاکسازی کش npm؛
- بررسی خطوط CI/CD و رایانههای توسعهدهندگان برای یافتن تغییرات غیرمجاز؛
- تحلیل لاگها برای شناسایی دسترسیهای مشکوک به npm publish;
- تعویض همهی کلیدها و توکنهای مربوط به NPM، GitHub، AWS، GCP و Azure که در محیط آلوده قابلدسترس بودهاند.
راهکارهای امنیتیکسپرسکیاین تهدید را با عنوان Worm.Script.Shulud.* شناسایی میکنند. فهرست کامل پکیجهای آلوده در GitHub در دسترس است.
کسپرسکی آنلاین (ایدکو)
کسپرسکی اسم یکی از بزرگترین شرکتهای امنیتی و سازنده آنتی ویروس است که برخی از کاربران اشتباهاً این شرکت و محصولات آنتی ویروس آن را با عناوینی نظیر کسپرسکای،کاسپرسکی، کسپراسکای، کسپراسکای، و یا کاسپراسکای نیز میشناسد. همچنین لازم به ذکر است مدیرعامل این شرکت نیز یوجین کسپرسکی نام دارد.
[1]MPC Shadowing
[2]Rug Pull