Exploit.Win32.CVE-2024-3094

شرح کلی

نوع: Backdoor

درجه تخریب: بالا

میزان شیوع: متوسط

آسیب‌پذیری (Vulnerability) چیست؟

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

بدافزار درب پشتی (Backdoor) چیست؟

بدافزارهای درب‌پشتی برنامه‌هایی هستند که امکان دور زدن مکانیزم‌های امنیتی یک سیستم را به هکرها داده و منابع مختلفی از آن سیستم را از راه مربوطه در اختیار نفوذگران قرار می‌دهند. هکرها می‌توانند با استفاده از این روش، بدون نیاز به اعتبارسنجی وارد سیستم مورد نظر شده و نگرانی از تغییر نام کاربری و گذر واژه نداشته باشند. بدافزارهای درب‌پشتی انواع مختلفی دارند که هکرها بنابر اهداف خود از نفوذ به منابع یک سیستم از آنها استفاده می‌کنند.

بدافزار Exploit.Win32.CVE-2024-3094 چیست؟

xz-utils (یا LZMA Utils سابق) مجموعه نرم‌افزار رایگانی از ابزارهای خط فرمان برای سیستم‌عامل‌های شبه یونیکس و ویندوز است که فشرده‌سازی داده‌ها را فراهم می‌کند. در 29 مارس 2024، یک درب‌پشتی (Backdoor) در نسخه‌های 5.6.0 و 5.6.1 از این مجموعه نر‌م‌افزار شناسایی شد. این درب‌پشتی که با شناسه CVE-2024-3094 و امتیاز  10.0 :CVSS شناسایی می‌شود، در یک کتابخانه با نام liblzma قرار دارد و امکان دسترسی از راه دور غیر مجاز را برای نفوذگر فراهم می‌کند.

این آسیب‌پذیری بر سیستم‌هایی با توزیع‌های لینوکس Debian و RPM مبتنی بر معماری x86-64 تأثیر می‌گذارد.

توضیحات فنی

در نتیجه آلودگی و دستکاری‌های ایجاد شده در کد منبع نسخه‌های 5.6.0 و 5.6.1، فایل Library ایجاد شده آلوده به درب‌پشتی شده است. به طور کلی محتوای رمزگذاری شده و در ادامه محتوای درب پشتی در دو فایل با نام‌های زیر و در مسیر tests/files از کد منبع پنهان شده‌اند:

bad-3-corrupt_lzma2.xz

good-large_compressed.lzma

روال اجرای اسکریپت‌های کد منبع و در نهایت ایجاد کتابخانه آلوده به شکل زیر است:

  1. اسکریپت مخرب build-to-host.m4 در طول فرآیند ساخت کتابخانه اجرا می‌شود و فایل bad-3-corrupt_lzma2.xz  را رمزگشایی می‌کند.
  2. در نتیجه رمزگشایی فایل bad-3-corrupt_lzma2.xz یک اسکریپت bash به دست می‌آید که فرآیند رمزگشایی پیچیده‌تری را روی فایل  good-large_compressed.lzma انجام می‌دهد و آن را به اسکریپت دیگری تبدیل می‌کند.

    اسکریپت bash ایجاد شده در نتیجه رمزگشایی فایل bad-3-corrupt_lzma2.xz
    تصویر ۱- اسکریپت bash ایجاد شده در نتیجه رمزگشایی فایل bad-3-corrupt_lzma2.xz

  3. اسکریپت نهایی یک شی مشترک با نام liblzma_la-crc64-fast.o  را استخراج می‌کند که به فرآیند کامپایل liblzma افزوده می‌شود.

مراحل ذکر شده منجر به ایجاد یک کتابخانه liblzma تغییر یافته می‌شود که می‌تواند توسط هر نرم‌افزار مرتبط با این کتابخانه استفاده شود.

علائم آلودگی

🔴 وجود یکی از نسخه‌های 5.6.0 و 5.6.1 از xz-utils نشان‌دهنده آلوده بودن سیستم به این درب‌پشتی است. برای اطلاع از نسخه xz-utils نصب شده بر روی سیستم خود می‌توانید دستور زیر را  اجرا کنید:

xz –V

یا

xz –version

شرح عملکرد

sshd یا SSH daemon بخشی از suite OpenSSH، برنامه سمت سرور است که به اتصالات SSH ورودی از کلاینت‌ها گوش می‌دهد. کد مخربی که در فرآیند ساخت liblzma درج شده است، SSH (sshd) را تحت تأثیر قرار می‌دهد و به مهاجم با کلید خصوصی Ed448 اجازه می‌دهد تا دسترسی غیرمجاز به سیستم داشته باشد.

در ادامه توضیحی از نحوه عملکرد کد تزریق شده در کتابخانه liblzma ارائه شده است:

1️⃣ یکی از تکنیک‌های اصلی که توسط این درب‌پشتی برای به دست آوردن کنترل اولیه در طول اجرا مورد استفاده قرار می‌گیرد، ویژگی IFUNC است. ویژگی (IFUNC (Indirect Function در کامپایلر GCC به توسعه‌دهندگان این امکان را می‌دهد که چندین نسخه از یک تابع را ایجاد کنند که توسط resolver و بر اساس معیارهای مختلف، مانند نوع پردازنده، در زمان اجرا انتخاب می‌شوند.

این تکنیک توسط مهاجم به این صورت مورد سوءاستفاده قرار می‌گیرد که فرمان‌های resolverهای ifunc، که توابع crc32_resolve و crc64_resolve هستند، طوری تنظیم ‌شود تا تابع get_cpuid_ مخرب را فراخوانی کنند. این تابع  داخل کد کتابخانه تزریق شده است . درب‌پشتی از این مکانیزم برای رهگیری یا hook اجرا، سوءاستفاده می‌کند.

در تصاویر زیر کدهای مربوط به توابع تزریق شده در کتابخانه liblzma و سلسله مراتب فراخوانی آن‌ها قابل مشاهده است:

محتوای تابع crc64_resolve که تابع get_cpuid را فراخوانی می‌کند

تصویر 2 – محتوای تابع crc64_resolve که تابع get_cpuid  را فراخوانی می‌کند

 

محتوای تابع فراخوانی شده در get_cpuid

تصویر 3 – محتوای تابع فراخوانی شده در get_cpuid

 

محتوای تابع مخرب تزریق شده در liblzma

تصویر 4 – محتوای تابع مخرب تزریق شده در liblzma

 

2️⃣ این درب‌پشتی، جهت رهگیری فراخوانی تابع RSA_public_decrypt در فرآیند SSH daemon (sshd) طراحی شده است. به این صورت که Call‌های تابع RSA_public_decrypt  را رهگیری یا اصطلاحا hook می‌کند. این تابع معمولاً برای رمزگشایی داده‌های رمزگذاری‌ شده با کلید عمومی RSA و به عنوان بخشی از فرآیند تأیید امضا در ارتباطات امن استفاده می‌شود.

3️⃣ سپس امضای میزبان را با استفاده از یک کلید ثابت Ed448 تأیید می‌کند. تأیید موفقیت‌آمیز امضا نشان می‌دهد که ارتباط از طرف مهاجمی است که کلید خصوصی را در اختیار دارد.

4️⃣ پس از تأیید امضا، درب‌پشتی، کدهای مخرب ارسال شده توسط نفوذگر  را با ارسال آنها به تابع ()system اجرا می‌کند. این دسترسی به مهاجم اجازه می‌دهد تا اجرای کد از راه دور  را بر روی سیستم آلوده انجام دهد.

لازم به ذکر است که کدهای درب‌پشتی ایجاد شده قبل از شروع فعالیت خود در سیستم هدف  وجود نیازمندی‌هایی  را بررسی می‌کنند. این بررسی‌ها  اغلب برای جلوگیری از دیباگ و تحلیل کد درب‌پشتی است.

لیست نیازمندی‌های بدافزار:

  • متغیر محیطی TERM تنظیم نشده باشد. (برای جلوگیری از اجرا در یک نشست ترمینال تعاملی یا در یک محیط sandbox)
  • مقدار [0]argv باید /usr/sbin/sshd باشد که نشان‌دهنده در حال اجرا بودن sshd است.
  • LD_DEBUG و LD_PROFILE تنظیم نشده باشند.
  • LANG باید تنظیم شده باشد. (این متغیر محیطی تنظیمات پیش‌فرض نشست کاربر را مشخص می‌کند که شامل زبان، Character Encoding و دیگر تنظیمات مربوط به زبان است.)
  • وجود برخی از ابزارهای Debug، مانند rr و gdb بررسی می‌شود.

روش مقابله و پاک‌سازی سیستم

آنتی‌ویروس پادویش، فایل‌های مربوط به این درب‌پشتی را شناسایی می‌کند. ازاین‌رو، جهت پیشگیری از آلودگی به این بدافزار پیشنهاد می‌شود با نصب پادویش از ورود بدافزار به سیستم خود جلوگیری کنید.