خانه » سوء استفاده هکرها از کنسول اسکریپت Jenkins برای حملات استخراج ارز دیجیتال

سوء استفاده هکرها از کنسول اسکریپت Jenkins برای حملات استخراج ارز دیجیتال

توسط Vulnerbyte
کنسول اسکریپت Jenkins
  • مهاجمان می‌توانند از کنسول اسکریپت Jenkins (جنکینز) برای اجرای اسکریپتهای مخرب Groovy سوء استفاده کنند که منجر به فعالیت‌های مجرمانه سایبری مانند استقرار ماینرهای ارزهای دیجیتال می‌شود.
  • پیکربندی‌های اشتباه مانند تنظیم نادرست مکانیزم‌های احراز هویت، می‌تواند endpointها را در معرض نفوذ مهاجمان قرار ‌دهد. این باگ می‌تواند منجر به اجرای کد از راه دور (RCE) و سوء استفاده توسط هکرها شود.
  • مهاجمان می‌توانند از آسیب‌پذیری‌های Jenkins برای اجرای اسکریپت‌هایی استفاده کنند که می‌توانند یک باینری ماینر را دانلود و اجرا کنند و با استفاده از cron jobs و برنامه‌های کاربردی systemd-run تداوم دسترسی خود را تضمین کنند.

 

Jenkins چیست؟

Jenkins (جنکینز) یک راه حل منبع باز است که یکپارچه سازی مداوم و تحویل پیوسته (CI/CD[1]) نرم افزار را امکان پذیر میسازد و امکان خودکارسازی مراحل مختلف توسعه نرم افزار مانند مراحل تست، ساخت و استقرار را فراهم می‌کند.

Jenkins یک بستر بنا شده بر خدمات سروری است که بر روی کانتینرهای سرورلت مانند آپاچی تامکت اجرا می‌شود. این نرم افزار از ابزارهای کنترل نسخه یا منبع از جمله AccuRev، CVS، Subversion، Git، Mercurial، Perforce، ClearCase و RTC پشتیبانی می‌کند و می‌تواند پروژه‌های Apache Ant، ​​Apache Maven و sbt و همچنین اسکریپت‌های shell دلخواه و دستورات batch ویندوز را اجرا کند.

در حالی که Jenkins مزایای زیادی به کاربران ارائه می‌دهد، می‌تواند به‌عنوان یک بردار حمله توسط هکرها نیز استفاده شود. هکرها می‌توانند از سرورهای دارای پیکربندی نادرست و نسخه‌های آسیب پذیر به منظور استقرار بکدورها و ماینرهای  ارز دیجیتال و همچنین جمع‌آوری اطلاعات حساس سوء استفاده کنند.

ما در این مقاله با استناد به گزارش ترندمیکرو به بررسی چگونگی سوء استفاده از  کنسول اسکریپت Jenkins برای حملات استخراج ارز دیجیتال خواهیم پرداخت.

 

جزییات فنی نفوذ به کنسول اسکریپت Jenkins

کنسول اسکریپت Jenkins
شکل ۱. زنجیره نفوذ به کنسول اسکریپت Jenkins

کنسول اسکریپت Jenkins، ابزاری است که به مدیران و کاربران مجاز اجازه می‌دهد تا اسکریپت‌های Groovy را مستقیماً بر روی سرور Jenkins اجرا کنند. این کنسول، اسکریپت‌هایی را با سطح دسترسی Jenkins اجرا می‌کند و به آن مجوزهای بالاتری اعطا می‌نماید. Jenkins از اسکریپت نویسی توسط زبان Groovy پشتیبانی می‌کند.

در حالی که دسترسی به کنسول اسکریپت Jenkins معمولاً فقط به کاربران احراز هویت شده با مجوزهای admin داده می‌شود، اما نمونه‌های Jenkins با پیکربندی نادرست می‌توانند به طور ناخواسته script / سرور را از طریق اینترنت در دسترس قرار دهند و آن را برای سوء استفاده توسط مهاجمانی که به دنبال اجرای دستورات خطرناک هستند، آماده کنند.

زمانی که مکانیزم احراز هویت به درستی تنظیم نشده باشد می‌تواند به طور بالقوه منجر به نمونه های آسیب پذیر Jenkins شود. چنانچه گزینه ” Sign Up ” یا ” Registration ” فعال باشند، دسترسی به Jenkins و script / نیز می‌تواند منجر به حمله RCE گردد. از این رو، حفاظت مناسب از این اینترفیس ضروری است.

 متأسفانه، برخی از استقرارهای Jenkins که توسط اینترنت قابل دسترس می‌باشند به اشتباه پیکربندی شده‌اند که آنها را در برابر سوء استفاده آسیب پذیر می‌کند. یک جستجوی سریع در Shodan تعداد سرورهای Jenkins را نشان می‌دهد که توسط اینترنت قابل دسترس می‌باشند.

شکل ۲. نتایج جستجوی Shodan در سرورهای Jenkins قابل دسترس

ما مشاهده کردیم که اگر یک مهاجم بتواند به کنسول اسکریپت Jenkins دسترسی داشته باشد، آنگاه خواهد توانست اسکریپت‌های مخرب را برای استخراج ارز دیجیتال اجرا کند. شکل 3، پیلود مخرب رمزگذاری شده‌ای را نشان می‌دهد که محققان ترند میکرو در طول تجزیه و تحلیل خود مشاهده کردند.

جنکینز
شکل ۳. درخواست پیلود مخرب

همانطور که در تصویر مشاهده می‌شود، مهاجم از پیکربندی نادرست پلاگین Groovy جنکینز برای اجرای رشته کدگذاری شده با Base64، که در واقع یک اسکریپت مخرب است، سوء استفاده می‌کند. تحلیل این اسکریپت به شرح زیر است:

ابتدا، این اسکریپت بررسی می‌کند که آیا BusyBox اجرا می‌شود یا خیر، که در صورت مثبت بودن پاسخ، از اسکریپت خارج می‌شود.

شرایط بررسی BusyBox
شکل ۴. شرایط بررسی BusyBox

این اسکریپت تابعی به نام svalid()  دارد که مکان‌های دارای مجوزهای قابل نوشتن را بررسی می‌کند:

کنسول اسکریپت Jenkins
شکل ۵. عملکرد بررسی مجوزهای نوشتن

این تابع (svalid())، یک آرگومان می‌پذیرد و یک اسکریپت shell موقت به نام vinars در دایرکتوری مشخص شده ایجاد می‌کند. این اسکریپت به سادگی ” ginerd” را بر روی کنسول چاپ می‌کند. تابع svalid()  بیشتر برای اجرای یک اسکریپت ساده در یک مکان مشخص شده به صورت پویا استفاده می‌شود.

اسکریپت vinars تضمین می‌کند که دارای منابع سیستمی کافی برای انجام موثر ماینینگ (مشابه سایر ماینرهای ارزهای دیجیتال) است. اسکریپت برای انجام این کار، فرآیندهایی را بررسی می‌کند که بیش از 90 درصد از منابع CPU را مصرف می‌کنند، سپس این فرآیندها را از خاتمه میدهد (kill می‌کند). علاوه بر این، اسکریپت تمام فرآیندهای متوقف شده را نیز خاتمه می‌دهد.

اسکریپت vinars
شکل ۶. خاتمه فرآیند

در مرحله بعد، مهاجم مکان هایی را جستجو می‌کند که ماینر را می‌توان دانلود و اجرا کرد. مهاجم ابتدا بررسی می‌کند که آیا کاربر فعلی می‌تواند ماینر را تحت دایرکتوری dev/shm/ و با استفاده از تابع svalid ()  بنویسد و اجرا کند یا خیر. چنانچه تابع وضعیت خروج غیر صفر را بازگرداند (که نشان می‌دهد دایرکتوری قابل نوشتن و اجرا نیست)، سپس دایرکتوری‌های دیگری به جز /proc و /sys را جستجو می‌کند.

تابع svalid ()
شکل ۷. جستجوی دایرکتوری‌های قابل نوشتن و اجرا

اگر یک دایرکتوری مطلوب امکان یافتن نداشته باشد، از /tmp برای عملیات استفاده می‌کند و یک دایرکتوری فرعی به نام duet ایجاد می‌کند و حداکثر مجوز را به آن اختصاص می‌دهد (777).

کنسول اسکریپت Jenkins
شکل ۸. تنظیم "tmp/" به عنوان دایرکتوری عملیاتی

مهاجم در بخش بعدی، ابتدا بررسی می‌کند که آیا باینری cryptominer (کریپتوماینر) در دایرکتوری وجود دارد یا خیر. چنانچه این باینری وجود نداشته باشد، آن را دانلود میکند. مهاجم برای بررسی وجود باینری مخرب، اسکریپت هش SHA256 را بررسی می‌کند.

اگر این دستور، کد وضعیت شکست (failure ) را بازگرداند، اسکریپت اقدام به دانلود باینری مخرب، یک فایل tar رمزگذاری شده به نام فایل “cex” از https[:]//berrystore[.]me می‌کند و از wget برای دانلود باینری استفاده خواهد کرد.

چنانچه wget نتواند فایل را دانلود کند، از گزینه s_client در OpenSSL  برای دانلود باینری استفاده می‌شود که توسط SSL/TLS به یک میزبان راه دور متصل می‌گردد.

استفاده از گزینه s_client در OpenSSL برای دانلود باینری
شکل ۹. استفاده از گزینه s_client در OpenSSL برای دانلود باینری

این دستور یک درخواست HTTPS GET را به سرور ارسال می‌کند، سپس پاسخ سرور را بازیابی می‌کند و ۲,۴۸۱,۰۰۸ بایت آخر را از جریان ورودی استخراج می‌کند. بایت‌های استخراج شده سپس در فایل “cex” ذخیره می‌شوند.

OpenSSL به عنوان یک فایل tar رمزگذاری شده با AES-256، بیشتر برای رمزگشایی استفاده می‌شود. هش SHA256 برای استخراج کلید از رمز عبور استفاده می‌گردد در حالی که AES-256 برای رمزگشایی استفاده می‌شود.

پس از رمزگشایی، tar برای فشرده سازی فایل کاربرد دارد و پس از آن فایل “cex” اصلی حذف می‌شود و مجوز اجرایی به فایلی که قبلا در این اسکریپت با دستور “sha256sum app” تایید شده است، اختصاص می‌یابد.

فعالیت رمزگشایی و فشرده سازی فایل
شکل ۱۰. فعالیت رمزگشایی و فشرده سازی فایل

برای اطمینان از اینکه miner persistent ، cron job و systemd-run همراه با تداوم دسترسی اجرا می‌شوند، ابزار flock system تایید می‌کند که تنها یک نمونه از ماینر در هر زمان در حال اجرا است.

کنسول اسکریپت Jenkins
شکل ۱۱. ورودی cron job

 

سخن پایانی

قابلیت های قوی نرم افزار Jenkins آن را به ابزاری ضروری برای توسعه نرم افزار مدرن تبدیل کرده است. با این حال، این قابلیت‌ها می‌توانند خطرات قابل‌توجهی را نیز در صورت پیکربندی نادرست یا داشتن آسیب پذیری به دنبال داشته باشند.

اطمینان از پیکربندی مناسب، احراز هویت و مجوزدهی قوی، ممیزی منظم و محدود ساختن دسترسی به اینترنت در سرورهای Jenkins ، همگی گام‌های حیاتی برای سازمان‌ها هستند تا احتمال تبدیل شدن نمونه‌های Jenkins خود به بردار حمله را به میزان قابل توجهی کاهش دهند و از محیط‌های توسعه خود (کنسول اسکریپت Jenkins) در برابر سوء استفاده محافظت کنند.

 

IoC

IoCهای مربوطه را می‌توانید از اینجا مشاهده کنید.

 

[1] continuous integration and continuous delivery

 

منبع

همچنین ممکن است دوست داشته باشید

پیام بگذارید

تعریف نشده است