آنالیز بدافزار Lu0Bot

آنالیز بدافزار Lu0Bot

تاریخ ایجاد

 1    آنالیز پیکربندی بدافزار Lu0Bot
بدافزار Lu0Bot که در زبان node.js نوشته شده است، در ابتدا صرفأ رباتی جهت حمله انکار‌سرویس توزیع‌شده بنظر می‌آمد و انتظار می‌رفت بواسطه محدودیت‌های ذاتی node.js چندان توانمند نباشد اما قابلیت‌های چشمگیری دارد و می‌تواند با اجرای یک فرآیند مبهم‌سازی چند لایه مبتنی بر پلتفرم، اهدافش را به طور جدی تهدید ‌کند. 
گفتنی‌ است حمله انکار سرویس توزیع شده تلاشی مخرب جهت ایجاد اختلال در ترافیک عادی یک سرور، سرویس یا شبکه هدفمند است که با روانه‌سازی سیل ترافیک غیرعادی اینترنت به سمت یک سرور و زیرساخت‌های آن ایجاد اختلال می‌کند.

Lu0Bot1

شکل 1: نماد بدافزار Lu0Bot
 

با توجه به گستردگی توضیحات، در دو بخش مختلف به آنالیز این بدافزار می‌پردازیم:

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

1-1    بخش اول: آنالیز قسمت‌های اصلی
محتوای نمونه‌ مورد بررسی در یک فایل با پسوند SFX ذخیره شده بود که با هریک از ابزارهای آرشیو محتوا قابل بازگشایی‌ست.
 

Lu0Bot2

شکل 2: محتوای فایل اصلی
 

این فایل شامل یک فایل bat، چهار فایل eqnyiodbs.dat، یک فایل lknidtnqmg.dat و یک فایل gyvdcniwvlu.dat است که در ادامه به بررسی آن‌ها پرداخته خواهد شد.

1-1-1    فایل .bat 
پسوند .bat، اغلب برای فایل‌های batch استفاده می‌شود که این فایل‌ها یک سری دستورات جهت اجرا در خط‌فرمان سیستم‌عامل را شامل می‌شوند.
 

Lu0Bot3

شکل 3: محتوای فایل bat
 

خط ابتدایی، یک کامنت مبهم است.
خط دوم، محتوای چند فایل را در fjlpexyjauf.exe که یک مفسر node است، قرار می‌دهد.
در خط آخر، مفسر یک فایل حاوی محتوای بایتی به همراه یک عدد دریافت می‌کند که به عنوان کلید رمزنگاری برای فایل بایتی عمل می‌کند.

1-1-2    فایل‌های eqnyiodbs.dat
فایل dat، فایل‌ داده‌ای‌است که محتوی آن داده‌های دودویی می‌باشد.

Lu0Bot4

شکل 4: محتوای فایل‌های eqnyiodbs.dat
 

این فایل به چند بلوک تقسیم شده  ات تا با ترکیب آن‌ها،‌ مفسر node ساخته شود.

1-1-3    فایل lknidtnqmg.dat
 

Lu0Bot5

شکل 5: محتوای فایل lknidtnqmg.dat
 

این فایل را بایت‌هایی که با الگوی Base64 رمزنگاری شده‌اند تشکیل می‌دهند که احتمالأ بعدأ با عددی که به عنوان ورودی دریافت می‌شود رمزگشایی می‌شود.

1-1-4    فایل gyvdcniwvlu.dat
این فایل به عنوان یک درایور جهت اجرای برنامه های ۳۲ بیتی برروی سیستم‌های ۶۴x عمل می‌کند.

1-2     بخش دوم: آنالیز یک نمونه‌ی واقعی
در این بخش، آنالیز یک نمونه‌ی واقعی بدافزار که در بستر Any.Run که یک بستر آمایش و تحلیل بدافزار‌ها می‌باشد، انجام شده‌است. این نمونه، با یک سرور (command-and-control)C2‌ که ابزاری برای رصد حملات سایبری‌است، تعامل می‌کند.

1-2-1    روند پردازش و فعالیت
 

Lu0Bot6

شکل 6: درخت پردازش
 

همانطور که در تصویر فوق مشاهده می‌شود، پردازش با خواندن فایل bat‌ که قبلا به آن اشاره شد آغاز شده که منجر به فراخوانی فایل اجرایی مفسر Node‌ می شود. این فایل، به عنوان ورودی کد جاوا اسکریپت رمزنگاری‌شده‌ را دریافت کرده و سپس این کد، داده مورد نیاز سیستم -ازجمله اطلاعات مربوط به محل اجرای پردازه‌ها- را از طریق اجرای فایل WMIC.exe(Windows Management Instrumentation Command line) جمع‌آوری می‌کند.

Lu0Bot7

شکل 7: WMIC.exe
 

در ادامه مشخص شد که فایل مفسر در پوشه startup سیستم کپی می‌شود تا بدافزار بتواند حتی پس از restart‌ نیز به حیات و فعالیت خود ادامه دهد.
 

Lu0Bot8

شکل 8: مسیر startUp
 

1-2-2    شبکه و ترافیک
یک ویژگی منحصر بفرد این بدافزار، شیوه‌ای است که برای مونتاژ دامنه‌ها اتخاذ کرده‌است. دامنه، از قسمت‌های مختلفی ساخته شده و سپس به شکل یک کمیت واحد در کد جاوا اسکریپت قرار می‌گیرد.
 

Lu0Bot9

شکل 9: درخواست‌های  DNS
 

بدافزار مذکور درواقع، از دامنه‌هایی که به صورت تصادفی تولید می‌کند، جهت ایجاد سیل درخواست‌های DNS در راستای حمله‌ی انکار رویس استفاده می‌کند.

1-3    تجزیه و تحلیل فنی بدافزار Lu0Bot با استفاده از دی ‌اسمبلر و دیباگر

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

  • آرشیو sfx را باز می‌کنیم.
  • دستوری برای ترکیب فایل‌های اولیه و رسیدن به فایل مفسر Node.js اجرا می‌کنیم.
  • فایل fjlpexyjauf.exe را در دیباگر ۳۲بیتی اجرا کرده و کد بدست‌آمده را در خط‌فرمان وارد می‌کنیم.
  • نقطه‌ی شروع اجرای کد جاوا اسکریپتی را پیدا می‌کنیم.
  •  کد را در حافظه مستقر کرده و اسکریپت را ذخیره می‌کنیم.

1-3-1    آنالیز کد جاوا اسکریپت
کد اولیه‌ جاوا اسکریپت که با آن مواجه می‌شویم، شدیدأ مبهم‌سازی و ناخوانا شده است.
 

Lu0Bot10

شکل 10: کد اولیه‌ی جاوا اسکریپت
 

با حذف بایت‌های اضافی و استفاده از یک رفع‌ابهام‌کننده‌ی جاوااسکریپت، به کد واضح‌تری می‌رسیم:
 

Lu0Bot11

شکل 11: نتیجه عملیات رفع ابهام
 

مطابق شماره‌های اشاره شده در شکل:
1.    کد، با آرایه‌‌اي شامل رشته‌های رمزنگاری شده 
2.    بلافاصله، آرایه دستخوش تغییر شده و المان‌های خاصی به انتهای آرایه منتقل می‌شوند.
3.    سپس از یک تابع جهت رمزگشایی از رشته‌های آرایه استفاده می‌شود. ابتدا از یک فرم جایگزین base64(AltBase64) استفاده کرده، پس از آن از URLencode-decode، و نهایتا الگوی RC4 را اعمال می‌کند.
تابع با دو متغیر فراخوانی می‌شود که یکی المانی از آرایه است و دیگری کلید RC4 
در نهایت با اجرای یک اسکریپت خاص، از کد رفع ابهام می‌کنیم و نتیجه به این شکل می‌شود:
 

Lu0Bot12

شکل 12: پس از رفع ابهام کد


به این صورت، قسمتی از کد که مسئول مونتاژ دامنه‌ها بود کشف می‌شود:
 

Lu0Bot13

شکل 13: مونتاژ دامنه‌ها


1-3-2    دیباگ کردن کد جاوا اسکریپت
برای دیباگ، breakpoint‌ را روی “var” قرار داده و خروجی هر خط را رصد می‌کنیم.
مشخص می‌شود که تابع اول، ginf، اطلاعات سیستم را جمع‌آوری می‌کند و آرایه‌ای متشکل از ۱۵ المان که جزئیات سیستم را دربرمیگیرد، تولید می‌کند.
 

Lu0Bot14

شکل 14: brekpoint و ginf
 

Lu0Bot15

شکل 15:آرایه محتوی خروجی تابع ginf


تابع بعدی که hwco است، آرایه خروجی ginf را به عنوان ورودی دریافت کرده و خروجی‌اش، آخرین بخش تشکیل دهنده دامنه تا نقطه خواهد بود. این خروجی در حقیقت همان اطلاعات سیستم است که به صورت hash رمز شده‌اند.
 

Lu0Bot16

شکل 16: hwco
 

Lu0Bot17

شکل 17: رشته خروجی تابع hwco


سپس پورت، شماره و قسمت دامنه بعد از نقطه از آرایه acc  استخراج می‌شوند.
 

Lu0Bot18

شکل 18: استخراج المان‌های دامنه از آرایه acc


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

Lu0Bot19

شکل 19: انتخاب دامنه، بخش بعد از نقطه
 

پس از انجام چندین عملیات دیگر، دامنه کامل مونتاژ شده و تمام عناصر مورد نیاز در یک شی JSON قرار می‌گیرند:
 

Lu0Bot20

شکل 20: قسمت‌های تشکیل دهنده دامنه


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

1-4    تشخیص Lu0Bot
در پژوهش انجام شده، اشاره شده که می‌توان از قوانین YARA و SIGMA جهت نوشتن ابزارهایی برای تشخیص این بدافزار کمک گرفت.
قوانین اشاره شده، الگوهای تشخیص بدافزار هستند که تشخیص حملات هدفمند و تهدیدهای امنیتی مبتنی بر فضای سامانه مورد نظر قابل تغییر و تطبیق هستند.

2    جمع بندی 
Lu0Bot، یک بدافزار غیرمعمول است که کد Node.js‌ و جاوا اسکریپت را با هم ترکیب کرده‌است. دارای ساختار منحصر بفرد تشکیل دامنه است و از روش‌های متنوعی جهت رمزنگاری رشته‌ها استفاده می‌کند.
اگرچه هم‌اکنون از فعالیت سطح پایینی برخوردار است، اما می‌تواند درصورتی که سرورهای C2 به شکل فعال پاسخگو باشند، تهدیدی جدی به حساب بیاید.
می‌توان با استفاده از ابزارها و بسترهایی همچون بستر Any.Run برای تشخیص و آنالیز فوری بدافزارها کمک گرفت و از امنیت سامانه‌های سازمانی محافظت کرد.

منابع:


[1]https://thehackernews.com/2023/10/analysis-and-config-extraction-of.html 
[2]https://any.run/cybersecurity-blog/lu0bot-analysis/?utm_source=hacker_news&utm_medium=article&utm_c…