در دنیای توسعه نرمافزار، امنیت زنجیره تأمین به یکی از مهمترین لایههای دفاعی تبدیل شده است؛ زیرا حتی کوچکترین وابستگی نرمافزاری (dependency) میتواند به نقطه ورود مهاجمان برای اجرای یک حمله زنجیره تأمین تبدیل شود. در همین راستا، پژوهشگران امنیتی مجموعهای از پکیجهای مخرب npm را شناسایی کردهاند که با جعل هویت ابزارهای معتبر توسعه، بخشی از یک زنجیره پیچیده حمله زنجیره تأمین را تشکیل میدهند. هدف نهایی این پکیجها استقرار یک تروجان دسترسی از راه دور ویندوزی (Windows RAT) روی سیستم توسعهدهندگان است.
بررسی پکیجهای مخرب npm
بر اساس گزارش پژوهشگران امنیتی شرکت JFrog، مهاجمان با استفاده از حساب کاربری abdrizak طی ماه گذشته سه پکیج مخرب منتشر کردهاند که هرکدام بخشی از زنجیره اجرای این حمله زنجیره تأمین را تشکیل میدهند:
- aes-decode-runner-pro با 145 دانلود
- postcss-minify-selector با 256 دانلود
- postcss-minify-selector-parser با 615 دانلود
دو پکیج «aes-decode-runner-pro» و «postcss-minify-selector-parser» خود را بهعنوان ابزارهای چندلایه رمزگذاری و رمزگشایی مبتنی بر AES و همچنین کدکهای سفارشی (custom codec) معرفی میکنند، در حالی که در عمل به کتابخانه معتبر postcss-selector-parser وابسته هستند.
نکته مهم این است که «postcss-minify-selector-parser» در واقع به کتابخانه معتبر postcss-selector-parser اشاره دارد؛ یکی از پکیجهای بسیار پرکاربرد در اکوسیستم npm که با بیش از 127 میلیون دانلود هفتگی، جایگاه قابل توجهی در میان توسعهدهندگان دارد.
با وجود تفاوت در نامگذاری و عملکرد ظاهری، در تمامی این سناریوها پکیجهای مخرب npm نقش یک لایه اولیه آلودگی را ایفا میکنند و در نهایت، زنجیره حمله بدون توجه به اینکه کدام پکیج نصب شده باشد، به استقرار یک بدافزار یکسان روی سیستمهای ویندوزی ختم میشود.
عملکرد پکیجهای آلوده در حمله زنجیره تأمین
این پکیجهای مخرب npm به یک دراپر جاوااسکریپت (JavaScript dropper) مجهز هستند که یک اسکریپت پاورشل (PowerShell) با نام settings.ps1 را روی دیسک سیستم قربانی ایجاد کرده و سپس آن را اجرا میکند.
در ادامه، این اسکریپت پاورشل نقش یک ماژول دانلود را ایفا میکند و یک پیلود مرحله بعد را از یک سرور خارجی با آدرس nvidiadriver[.]net دریافت میکند؛ این فرآیند با استفاده از ابزار curl.exe انجام میشود.
پیلود دریافتشده بهصورت یک فایل آرشیو ZIP است که از داخل آن یک اسکریپت Visual Basic (VBS) با نام update.vbs استخراج شده و توسط wscript.exe اجرا میشود.
همچنین در این فایل ZIP، یک محیط اجرای پایتون (Python)، یک لودر پایتونی با نام loader.py و چندین ماژول افزونه پایتون با پسوند *.pyd نیز قرار دارد که با استفاده از ابزار Nuitka کامپایل شدهاند.
اسکریپت VBS وظیفه راهاندازی محیط پایتون روی سیستم آلوده را بر عهده دارد و سپس اسکریپت loader.py را اجرا میکند؛ این فایل در ادامه منطق اصلی بدافزار (malware core logic) را فعال میکند. این روند نمونهای از یک حمله زنجیره تأمین چندمرحلهای است.
در این مرحله، تروجان دسترسی از راه دور (RAT) قابلیتهای خود را آغاز کرده و میتواند اطلاعات سیستم میزبان را جمعآوری کند، اعتبارنامههای ذخیرهشده در گوگل کروم را استخراج نماید، دادههای مربوط به افزونههای کروم را سرقت کند، دستورات شل (shell commands) را اجرا کرده و همچنین امکان دانلود و آپلود فایلها را از طریق سرور فرماندهی و کنترل (C2) با آدرس 95.216.92[.]207:8080 فراهم کند.
ماژولهای پایتون و ساختار اجرای RAT
قابلیتهای این RAT از طریق مجموعهای از ماژولهای افزونه بومی پایتون پیادهسازی شدهاند:
- pyd شامل مقادیر ثابت، شناسه دستورات، آدرس C2 و نام کلیدهای رجیستری است.
- pyd وظیفه مدیریت تبادل بستههای HTTP با سرور C2را بر عهده دارد.
- pydمکانیزم اصلی هماهنگی و اجرای تروجان را کنترل میکند.
- pyd وظیفه پروفایلسازی سیستم میزبان (host profiling) ، بررسی ماشین مجازی (VM)، انتقال فایل (file transfer) و اجرای دستورات شل را بر عهده دارد.
- pyd مسئول سرقت اعتبارنامههای گوگل کروم و دادههای افزونهها است و همچنین با دور زدن مکانیزم رمزگذاری وابسته به اپلیکیشن (ABE) اقدام به استخراج اطلاعات میکند.
- pyd بهعنوان ابزارهای کمکی برای مدیریت آرشیوهای tar و gzip عمل میکند.
شرکت JFrog در اینباره اعلام کرده است: «این مورد نشان میدهد که چگونه یک پکیج کوچک شبیه به تجزیهگر (parser) میتواند یک پیلود چندمرحلهای ویندوزی را در خود پنهان کند، در حالی که در ظاهر بهعنوان بخشی از ابزارهای معتبر توسعه و ساخت (build tooling) با استفاده گسترده هفتگی به نظر میرسد.»
این شرکت در ادامه تأکید کرد: «برای تیمهای دفاع امنیتی، مهمترین نکته این است که وابستگیهای ساخت با نامها و ظاهر مشابه ابزارهای معتبر را نباید صرفاً یک شباهت اسمی یا نویز در نامگذاری تلقی کرد؛ بلکه باید آنها را بهعنوان مسیرهای بالقوه توزیع بدافزار در نظر گرفت.»
گسترش حملات در اکوسیستم npm و TypeScript با کمپینهای جدید بدافزاری
شناسایی این حمله زنجیره تأمین همزمان با کشف سه کمپین مخرب دیگر در اکوسیستم npm و TypeScript انجام شده است. در این میان، پکیجهای مخرب npm همچنان بهعنوان یکی از اصلیترین ابزارهای انتشار بدافزار در این اکوسیستم مورد استفاده قرار میگیرند.
پکیج apintergrationpost و توزیع RAT لینوکسی MYRA:
یک پکیج مخرب با نام apintergrationpost بدافزار کامل و پیشرفتهای با نام MYRA (Linux Remote Access Trojan) را ارائه میدهد، در حالی که خود را بهعنوان یک کلاینت یکپارچهسازی Node.js برای انجام آزمونهای مجاز Red Team معرفی میکند.
طبق گزارش SafeDep، این پکیج در زمان نصب اقدام به انجام موارد زیر میکند:
- کامپایل یک روتکیت بومی C (native C rootkit)
- ایجاد سه مکانیزم مستقل پایداری (persistence)
- پنهانسازی خود بهعنوان یک سرویسsystemd
- پشتیبانی از اجرای بدون فایل (fileless)
- ارائه دسترسی شل تعاملی همراه با استریم لایو صفحه
پکیج @withgoogle/stitch-sdk و سرقت اعتبارنامهها:
پکیج مخرب دیگری با نام @withgoogle/stitch-sdk با جعل هویت ابزار طراحی هوش مصنوعی Stitch متعلق به گوگل منتشر شده است. این پکیج قابلیت سرقت اعتبارنامههای توسعهدهندگان را از منابع مختلف دارد، از جمله:
- Claude Code
- فایلهای git config
- فایل ~/.git-credentials
- کلیدهای SSH
- GitHub CLI
- پیکربندی ~/.npmrc و ~/.docker/config.json
سپس دادههای جمعآوریشده به یک دامنه تحت کنترل مهاجم با آدرس stitch-production[.]org/api/v1 ارسال میشوند.
کمپین پنجگانه npm و انتشار دراپر ویندوزی:
در یک کمپین جداگانه، مجموعهای از پنج پکیج شامل procwire ، routecraft، endpointmap، bytecraft و staticlayer شناسایی شدهاند که یک دراپر باینری (dropper binary) را روی سیستمهای ویندوزی دانلود کرده و در زمان اجرای دستور npm install اجرا میکنند.
در این زنجیره:
- پکیج routecraft وابسته به procwire است.
- پکیج procwire نیز به endpointmap و bytecraft وابستگی دارد.
- پکیج staticlayer بهگونهای طراحی شده که در سمت سرور اجرا شده و فایلهای مخرب را به کلاینتی ارسال میکند که عامل کاربری(User-Agent) دقیق دراپر را شبیهسازی میکند
این کمپینها نشان میدهند که مهاجمان با استفاده از زنجیرههای وابستگی پیچیده، جعل هویت ابزارهای معتبر و اجرای مستقیم در فرآیند نصب، توانستهاند حملات خود را در اکوسیستمهای توسعه مدرن گسترش دهند. به کاربرانی که هر یک از این پکیجها را نصب کردهاند توصیه میشود در اسرع وقت آنها را حذف کنند، سپس هرگونه آرتیفکت باقیمانده را پاکسازی کرده و در نهایت اعتبارنامههای خود را تغییر دهند.
حمله زنجیره تأمین با سوءاستفاده از بلاکچین
همچنین پژوهشگران از شناسایی یک حمله زنجیره تأمین مستقل خبر دادهاند که ابزار gonex-AI/Understand-Anything را هدف قرار داده است؛ ابزاری که مهاجمان از آن برای توزیع یک پیلود مخرب سوءاستفاده کردهاند.
در این سناریو، بدافزار ابتدا به یکی از سه سرور C2 از پیش تعیینشده متصل میشود و سپس یک شناسه مرتبط با کمپین حمله (campaign identifier) را از سیستم قربانی استخراج میکند. در ادامه، یک کلاینت بات (bot client) دانلودشده را با استفاده از رمزگشایی XOR پردازش و اجرا میکند.
در مرحله بعد، بدافزار بهصورت مستقل دستور مرحله دوم را از یک آدرس در بلاکچین Tron بازیابی میکند؛ جایی که آخرین تراکنش ثبتشده شامل یک هش تراکنش BSC است که پیلود فعال را در خود جای داده است.
شرکت SafeDep در تحلیل این حمله زنجیره تأمین اعلام کرده است که مهاجمان سه تکنیک شناختهشده اما مؤثر را بهصورت همزمان به کار گرفتهاند؛ ترکیبی که در کنار هم میتواند یک شکاف جدی در سامانههای شناسایی امنیتی ایجاد کند.
در این روش، ابتدا یک توضیح جعلی و مفصل برای درخواست Pull Request (PR) همراه با نتایج ساختگی آزمونها ارائه میشود. سپس پیلود مخرب در فایل تغییرات کد (diff) و داخل فضای خالی افقی (horizontal whitespace) پنهان میشود و در نهایت، از یک ساختار دو مرحلهای C2 استفاده شده که در آن، مرحله دوم از زیرساخت بلاکچین عمومی بهعنوان یک کانال یکبار-نوشتنی، چندبار-خواندنی (write-once, read-anywhere relay) برای انتقال دستورات بهره میگیرد.
کمپین PolinRider؛ عملیات منتسب به کره شمالی
در کنار این حمله، پژوهشگران به یک عملیات مستقل منتسب به کرهشمالی با نام PolinRider نیز اشاره کردهاند؛ عملیاتی که با هدف نفوذ به زنجیره تأمین نرمافزار، اقدام به تزریق جاوااسکریپت مبهمسازیشده (obfuscated JavaScript) در فایلهای پیکربندی توسعهدهندگان کرده است.
بر اساس گزارشهای امنیتی، این حمله زنجیره تأمین در حدود دو هزار مخزن گیتهاب آلوده مشاهده شده و در نهایت منجر به توزیع یک بدافزار شناختهشده با نام BeaverTail (دانلود کننده و سرقتکننده اطلاعات) شده است؛ بدافزاری که مسیر را برای استقرار بکدور InvisibleFerret هموار میکند.