شیگنی اخیراً الگوی نگرانکنندهای را در چشمانداز حملات زنجیره تأمین نرمافزار در سال ۲۰۲۵ مشاهده کرده است.، که در دو مدیر بسته محبوب ظاهر میشود: PyPI و npmبه عنوان بخشی از تلاشهای مداوم ما در زمینه اطلاعات تهدید،هشدار زودهنگام بدافزار Xygeni (MEW) این ابزار یک نمونه متمایز اما از نظر روششناختی مشابه از یک بسته مخرب که قبلاً در رجیستری دیگری آپلود شده بود را شناسایی کرد. این مورد نشان میدهد که چگونه بازیگران تهدید در حال تکامل و استفاده مجدد از تکنیکهای حمله در سراسر اکوسیستمها، به ویژه از طریق بستههای مخرب پایتون و بستههای مخرب npm، که خطر نفوذ بستههای مخرب به زنجیرههای تأمین متنباز را افزایش میدهد.
MEW از Xygeni: کشف شباهتها
ابزار MEW شرکت Xygeni برای شناسایی و علامتگذاری بستههای مخرب، به ویژه آنهایی که به حملات زنجیره تأمین نرمافزار در سال ۲۰۲۵ مرتبط هستند، به محض انتشار در رجیستریهای متنباز ساخته شده است. این ابزار با تجزیه و تحلیل بستههای جدید برای یافتن رفتارهای مشکوک کار میکند.
در این مورد، دو مورد را شناسایی کرد بستههای مخرب پایتون (graphalgo روی PyPI) و بستههای مخرب npm (express-cookie-parser روی npm).
بستههای مخرب پایتون و npm در حملات زنجیره تأمین نرمافزار (۲۰۲۵)
بیایید ویژگیهای مشترکی را که باعث ایجاد هشدارهای ما شدهاند، بررسی کنیم:
جعلی
هر دوی آنها سعی کردند بستههای محبوب موجود را جعل کنند.
- گرافالگو (پایپیآی): "بسته پایتون برای ایجاد و دستکاری نمودارها و شبکهها."آپلود شده توسط کاربری به نام «لاری تک» در ۱۳ ژوئن ۲۰۲۵، این بسته خود را به عنوان یک جایگزین PyPi برای پروژه اصلی و غیر مخرب graphalgo معرفی کرد، که بعداً به graphdict تغییر نام داد.
- اکسپرس-کوکی-تجزیهکننده (npm)این بسته از بستهی معروف cookie-parser تقلید کرده و حتی آن را به صورت معکوس نیز پیادهسازی کرده است. README.md. چنین جعل هویتی یک تاکتیک کلاسیک برای افزایش اعتماد موجود است.
مبهمسازی به عنوان اولین خط دفاعی
هر دو بسته، کد مخرب خود را در فایلهای اصلی مبهمسازی کردند. گرافالگو، کد مبهمسازی شده در داخل پیدا شد /utils/load_libraries.py. در شرایطی که تجزیهگر کوکی اکسپرس, cookie-loader.min.js حاوی بار دادهی مبهمسازیشده بود.
این لایه اولیه مبهمسازی معمولاً برای جلوگیری از بازرسیهای تصادفی و تحلیلهای ایستا استفاده میشود. مبهمسازی نسبتاً ساده بود: فشردهسازی مکرر ZLib به همراه کدگذاری Base64. این نوع مبهمسازی به وضوح نشان میدهد که نرمافزار در تلاش است رفتار خود را پنهان کند. این امر در کنار سایر شواهد، به Xygeni MEW اجازه داد تا بستهها را به عنوان بدافزار بالقوه طبقهبندی کند. در طول مرحله تأیید، بررسیکنندگان ما به سرعت یک اسکریپت رفع مبهمسازی آماده کردند که مرحله آشکار مخرب دراپر را آشکار کرد.
تحویل محموله چند مرحلهای و یک نقطه مبدا مشترک
هر دو بسته به عنوان بسته اولیه عمل میکردند.قطره چکان«و زمینه را برای بار دادهی اصلی آماده کرد.» آنها یک «عامل خارجی مشترک» را به اشتراک گذاشتند.دانهآدرس فایل:https://raw.githubusercontent.com/johns92/blog_app/refs/heads/main/server/.env.example
این فایل سید خارجی یکسان، شاخص قوی از یک عامل تهدید مشترک است. جالب توجه است که محتوای این فایل سید، متغیرهای محیطی سادهای (مثلاً JWT_SECRET، PORT) به نظر میرسد که به طور بالقوه بازرسی را به عملکرد واقعی آن گمراه میکند.
وضوح پویای C2 با DGA
یک تاکتیک پیچیده مشاهده شده در این بستههای مخرب، استفاده از الگوریتم تولید دامنه (DGA) برای حل پویای سرور فرماندهی و کنترل (C2) است. این تکنیک که اغلب در حملات زنجیره تأمین نرمافزار پیشرفته در سال 2025 مشاهده میشود، به یک هش SHA256 مشتق شده از محتوای فایل سید، همراه با سایر مقادیر کدگذاری شده، متکی است. با انجام این کار، زیرساخت C2 مرتباً تغییر میکند و باعث میشود لیست سیاه سنتی بسیار کمتر مؤثر باشد. در این مورد، نوع npm از مقدار ثابتی استفاده کرد. 496AAC7E به عنوان بخشی از منطق DGA آن.
ایجاد پشتکار
هر دو مهاجم به دنبال ایجاد حضور پایدار در سیستمهای آسیبدیده بودند. استراتژی آنها شامل حذف یک فایل بود، startup.py (برای PyPi) یا startup.js (برای npm)، در دایرکتوریهای مشترک دادههای کاربر گوگل کروم در سیستمعاملهای مختلف (ویندوز، لینوکس، macOS).
پاکسازی پس از اجرا
برای به حداقل رساندن ردپاها، هر دو اسکریپت مخرب عملیات پاکسازی انجام دادند. این شامل حذف فایلهای اولیهی دراپر آنها (load_libraries.py, cookie-loader.min.js) و تغییر فایلهای بستهی قانونی (__init__.py, index.js) برای حذف ارجاعات به اجزایی که اکنون حذف شدهاند.
نشانههای نفوذ در بستههای مخرب پایتون و npm
- بسته PyPI: graphalgo (منتشر شده توسط larrytech، ۱۳ ژوئن ۲۰۲۵)
- بسته npm: express-cookie-parser (به طور خاص نسخه ۱.۴.۱۲)
- دسترسی به URL بذر مشترک:
https://raw.githubusercontent.com/johns92/blog_app/refs/heads/main/server/.env.example
- نامهای فایل ماندگار:
startup.py(پایتون)startup.js(جاوا اسکریپت) - مسیرهای پایدار مشترک (وابسته به سیستم عامل): درون دایرکتوریهای دادههای کاربر گوگل کروم (مثلاً،
AppData\Local\Google\Chrome\UserData\Scripts\در ویندوز،~/.config/google-chrome/Scripts/در لینوکس و غیره).
چگونه در سال ۲۰۲۵ در برابر بستههای مخرب در حملات زنجیره تأمین نرمافزاری دفاع کنیم؟
یک رویکرد پیشنهادی برای توسعهدهندگان
این حادثه به عنوان یک مطالعه موردی ارزشمند در چشمانداز تهدید در حال تحول حملات زنجیره تأمین نرمافزار در سال ۲۰۲۵ عمل میکند. این نشان میدهد که چگونه بستههای مخرب پایتون و بستههای مخرب npm میتوانند به اکوسیستمهای قابل اعتماد نفوذ کنند و اغلب تا زمانی که خیلی دیر شده است، از تشخیص فرار کنند. به همین دلیل است که تشخیص زودهنگام، ابزار هوشمند و بهداشت پیشگیرانه سیستم اکنون بخشهای ضروری هر گردش کار امن DevOps هستند. به توسعهدهندگان توصیه میشود موارد زیر را در نظر بگیرند:
بررسی وابستگی
اگر پروژههای شما شامل موارد زیر بودهاند گرافالگو or تجزیهگر کوکی اکسپرس، عاقلانه است که حذف آنها را ادامه دهیم.
- برای پایپیآی:
pip uninstall graphalgo - برای npm:
npm uninstall express-cookie-parser
بهداشت سیستم
انجام یک اسکن جامع سیستم را در نظر بگیرید. همچنین توصیه میشود مسیرهای رایج دایرکتوری دادههای کاربر Chrome را به صورت دستی برای هرگونه مورد غیرمنتظره بررسی کنید. startup.py or startup.js فایل های.
اقدامات امنیتی پیشگیرانه
- وابستگیهای جدید را ارزیابی کنید: روالی برای ارزیابی کامل بستههای جدید قبل از ادغام، با تمرکز بر بستههای ناشران ناآشنا، ایجاد کنید.
- ادغام ابزارهای امنیتیابزارهایی مانند MEW از Xygeni، به همراه سایر ابزارهای تحلیل ترکیب نرمافزار (SCA) راهحلها، میتوانند با شناسایی رفتارها و آسیبپذیریهای مشکوک، یک لایه دفاعی حیاتی ایجاد کنند.
- کمترین امتیاز: اجرای محیطهای توسعه با اصل حداقل امتیاز میتواند به محدود کردن تأثیر بالقوه یک نفوذ کمک کند.
- آگاهی شبکهنظارت بر ترافیک شبکه خروجی برای اتصالات غیرمعمول، گاهی اوقات میتواند ارتباطات C2 تولید شده توسط DGA را آشکار کند.
اجزای کلیدی load_libraries.py (از گرافالگو)
download_remote_content(): دریافت فایلها از URL های مشخص شده را مدیریت میکند.run_process()اسکریپتهای پایتون خارجی را به صورت جداگانه اجرا میکند و برای حفظ امنیت، خروجی را حذف میکند.get_output_file_path(): مکان ایدهآل سیستم برای فایل startup.py دائمی را تعیین میکند.remove_self()پاکسازی پس از اجرا از فایلهای مخرب اولیه و تغییرات بسته را هماهنگ میکند.simple_shift_encrypt()/simple_shift_decrypt()توابع رمزنگاری سفارشی برای پنهان کردن کانالهای ارتباطی، که برای پیادهسازی DGA بسیار مهم هستند.load_libraries(): تابع مرکزی که کل فرآیند چند مرحلهای را از دانلود اولیه تا اجرای نهایی و پاکسازی payload هماهنگ میکند.
عواقب بعدی
همانند سایر بستههای بالقوه مخرب شناساییشده توسط MEW، فایروال وابستگی بلافاصله از کاربرانی که این بستههای مخرب را در وابستگیهای خود قرار میدادند، محافظت کرد. پس از تأیید، ما رویههای اطلاعرسانی را برای هر دو رجیستری دنبال کردیم که پس از بررسی، هر دو بسته را حذف کردیم.





