- مهاجمان میتوانند از کنسول اسکریپت 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، ابزاری است که به مدیران و کاربران مجاز اجازه میدهد تا اسکریپتهای Groovy را مستقیماً بر روی سرور Jenkins اجرا کنند. این کنسول، اسکریپتهایی را با سطح دسترسی Jenkins اجرا میکند و به آن مجوزهای بالاتری اعطا مینماید. Jenkins از اسکریپت نویسی توسط زبان Groovy پشتیبانی میکند.
در حالی که دسترسی به کنسول اسکریپت Jenkins معمولاً فقط به کاربران احراز هویت شده با مجوزهای admin داده میشود، اما نمونههای Jenkins با پیکربندی نادرست میتوانند به طور ناخواسته script / سرور را از طریق اینترنت در دسترس قرار دهند و آن را برای سوء استفاده توسط مهاجمانی که به دنبال اجرای دستورات خطرناک هستند، آماده کنند.
زمانی که مکانیزم احراز هویت به درستی تنظیم نشده باشد میتواند به طور بالقوه منجر به نمونه های آسیب پذیر Jenkins شود. چنانچه گزینه ” Sign Up ” یا ” Registration ” فعال باشند، دسترسی به Jenkins و script / نیز میتواند منجر به حمله RCE گردد. از این رو، حفاظت مناسب از این اینترفیس ضروری است.
متأسفانه، برخی از استقرارهای Jenkins که توسط اینترنت قابل دسترس میباشند به اشتباه پیکربندی شدهاند که آنها را در برابر سوء استفاده آسیب پذیر میکند. یک جستجوی سریع در Shodan تعداد سرورهای Jenkins را نشان میدهد که توسط اینترنت قابل دسترس میباشند.
ما مشاهده کردیم که اگر یک مهاجم بتواند به کنسول اسکریپت Jenkins دسترسی داشته باشد، آنگاه خواهد توانست اسکریپتهای مخرب را برای استخراج ارز دیجیتال اجرا کند. شکل 3، پیلود مخرب رمزگذاری شدهای را نشان میدهد که محققان ترند میکرو در طول تجزیه و تحلیل خود مشاهده کردند.
همانطور که در تصویر مشاهده میشود، مهاجم از پیکربندی نادرست پلاگین Groovy جنکینز برای اجرای رشته کدگذاری شده با Base64، که در واقع یک اسکریپت مخرب است، سوء استفاده میکند. تحلیل این اسکریپت به شرح زیر است:
ابتدا، این اسکریپت بررسی میکند که آیا BusyBox اجرا میشود یا خیر، که در صورت مثبت بودن پاسخ، از اسکریپت خارج میشود.
این اسکریپت تابعی به نام svalid() دارد که مکانهای دارای مجوزهای قابل نوشتن را بررسی میکند:
این تابع (svalid())، یک آرگومان میپذیرد و یک اسکریپت shell موقت به نام vinars در دایرکتوری مشخص شده ایجاد میکند. این اسکریپت به سادگی ” ginerd” را بر روی کنسول چاپ میکند. تابع svalid() بیشتر برای اجرای یک اسکریپت ساده در یک مکان مشخص شده به صورت پویا استفاده میشود.
اسکریپت vinars تضمین میکند که دارای منابع سیستمی کافی برای انجام موثر ماینینگ (مشابه سایر ماینرهای ارزهای دیجیتال) است. اسکریپت برای انجام این کار، فرآیندهایی را بررسی میکند که بیش از 90 درصد از منابع CPU را مصرف میکنند، سپس این فرآیندها را از خاتمه میدهد (kill میکند). علاوه بر این، اسکریپت تمام فرآیندهای متوقف شده را نیز خاتمه میدهد.
در مرحله بعد، مهاجم مکان هایی را جستجو میکند که ماینر را میتوان دانلود و اجرا کرد. مهاجم ابتدا بررسی میکند که آیا کاربر فعلی میتواند ماینر را تحت دایرکتوری dev/shm/ و با استفاده از تابع svalid () بنویسد و اجرا کند یا خیر. چنانچه تابع وضعیت خروج غیر صفر را بازگرداند (که نشان میدهد دایرکتوری قابل نوشتن و اجرا نیست)، سپس دایرکتوریهای دیگری به جز /proc و /sys را جستجو میکند.
اگر یک دایرکتوری مطلوب امکان یافتن نداشته باشد، از /tmp برای عملیات استفاده میکند و یک دایرکتوری فرعی به نام duet ایجاد میکند و حداکثر مجوز را به آن اختصاص میدهد (777).
مهاجم در بخش بعدی، ابتدا بررسی میکند که آیا باینری cryptominer (کریپتوماینر) در دایرکتوری وجود دارد یا خیر. چنانچه این باینری وجود نداشته باشد، آن را دانلود میکند. مهاجم برای بررسی وجود باینری مخرب، اسکریپت هش SHA256 را بررسی میکند.
اگر این دستور، کد وضعیت شکست (failure ) را بازگرداند، اسکریپت اقدام به دانلود باینری مخرب، یک فایل tar رمزگذاری شده به نام فایل “cex” از https[:]//berrystore[.]me میکند و از wget برای دانلود باینری استفاده خواهد کرد.
چنانچه wget نتواند فایل را دانلود کند، از گزینه s_client در OpenSSL برای دانلود باینری استفاده میشود که توسط SSL/TLS به یک میزبان راه دور متصل میگردد.
این دستور یک درخواست HTTPS GET را به سرور ارسال میکند، سپس پاسخ سرور را بازیابی میکند و ۲,۴۸۱,۰۰۸ بایت آخر را از جریان ورودی استخراج میکند. بایتهای استخراج شده سپس در فایل “cex” ذخیره میشوند.
OpenSSL به عنوان یک فایل tar رمزگذاری شده با AES-256، بیشتر برای رمزگشایی استفاده میشود. هش SHA256 برای استخراج کلید از رمز عبور استفاده میگردد در حالی که AES-256 برای رمزگشایی استفاده میشود.
پس از رمزگشایی، tar برای فشرده سازی فایل کاربرد دارد و پس از آن فایل “cex” اصلی حذف میشود و مجوز اجرایی به فایلی که قبلا در این اسکریپت با دستور “sha256sum app” تایید شده است، اختصاص مییابد.
برای اطمینان از اینکه miner persistent ، cron job و systemd-run همراه با تداوم دسترسی اجرا میشوند، ابزار flock system تایید میکند که تنها یک نمونه از ماینر در هر زمان در حال اجرا است.
سخن پایانی
قابلیت های قوی نرم افزار Jenkins آن را به ابزاری ضروری برای توسعه نرم افزار مدرن تبدیل کرده است. با این حال، این قابلیتها میتوانند خطرات قابلتوجهی را نیز در صورت پیکربندی نادرست یا داشتن آسیب پذیری به دنبال داشته باشند.
اطمینان از پیکربندی مناسب، احراز هویت و مجوزدهی قوی، ممیزی منظم و محدود ساختن دسترسی به اینترنت در سرورهای Jenkins ، همگی گامهای حیاتی برای سازمانها هستند تا احتمال تبدیل شدن نمونههای Jenkins خود به بردار حمله را به میزان قابل توجهی کاهش دهند و از محیطهای توسعه خود (کنسول اسکریپت Jenkins) در برابر سوء استفاده محافظت کنند.
IoC
IoCهای مربوطه را میتوانید از اینجا مشاهده کنید.
[1] continuous integration and continuous delivery