OceanLotus: به‌روزرسانی بدافزار برای macOS

در مارس 2019، نمونه جدیدی از بدافزار macOS از گروه سایبری OceanLotus در VirusTotal، یک سرویس اسکن آنلاین محبوب، آپلود شد. فایل اجرایی Backdoor مانند نسخه قبلی بدافزار macOS که ما مورد مطالعه قرار دادیم دارای قابلیت‌های مشابهی است، اما ساختار آن تغییر کرده و شناسایی آن دشوارتر شده است. متأسفانه، ما نتوانستیم قطره چکانی مرتبط با این نمونه را پیدا کنیم، بنابراین هنوز ناقل عفونت را نمی دانیم.

اخیرا منتشر کردیم پست در مورد OceanLotus و اینکه چگونه اپراتورها سعی در ارائه پایداری، سرعت بخشیدن به اجرای کد و به حداقل رساندن ردپا در سیستم های ویندوز دارند. همچنین مشخص است که این گروه سایبری یک جزء برای macOS نیز دارد. این پست به جزئیات تغییرات جدیدترین نسخه بدافزار برای macOS در مقایسه با نسخه قبلی (توسط Trend Micro توضیح داده شده استو همچنین توضیح می دهد که چگونه می توانید رمزگشایی رشته ها را در طول تجزیه و تحلیل با استفاده از IDA Hex-Rays API خودکار کنید.

OceanLotus: به‌روزرسانی بدافزار برای macOS

تحلیل

سه بخش بعدی تجزیه و تحلیل یک نمونه با هش SHA-1 را توصیف می کند E615632C9998E4D3E5ACD8851864ED09B02C77D2. فایل نامیده می شود چراغ قوه، محصولات آنتی ویروس ESET آن را به عنوان OSX/OceanLotus.D شناسایی می کنند.

ضد اشکال زدایی و محافظت از جعبه سند

مانند همه باینری‌های macOS OceanLotus، نمونه با UPX بسته‌بندی می‌شود، اما اکثر ابزارهای شناسایی بسته‌کننده آن را به این صورت تشخیص نمی‌دهند. این احتمالاً به این دلیل است که آنها عمدتاً حاوی یک امضا هستند که به وجود رشته "UPX" وابسته است، علاوه بر این، امضاهای Mach-O کمتر رایج هستند و اغلب به روز نمی شوند. این ویژگی تشخیص استاتیک را دشوار می کند. جالب اینجاست که پس از باز کردن بسته بندی، نقطه ورود در ابتدای بخش است __cfstring در بخش .TEXT. این بخش دارای ویژگی های پرچم است که در تصویر زیر نشان داده شده است.

OceanLotus: به‌روزرسانی بدافزار برای macOS
شکل 1. ویژگی های بخش MACH-O __cfstring

همانطور که در شکل 2 نشان داده شده است، مکان کد در بخش است __cfstring به شما اجازه می دهد تا با نمایش کد به صورت رشته، برخی از ابزارهای جداسازی قطعات را فریب دهید.

OceanLotus: به‌روزرسانی بدافزار برای macOS
شکل 2. کد درب پشتی شناسایی شده توسط IDA به عنوان داده

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

- سعی می‌کند هر اشکال‌زدایی را که تماس می‌گیرد، باز کند ptrace с PT_DENY_ATTACH به عنوان پارامتر درخواست
- باز بودن برخی از پورت های انحصاری را با فراخوانی یک تابع بررسی می کند task_get_exception_ports
- همانطور که در شکل زیر نشان داده شده است، با بررسی وجود پرچم بررسی می کند که آیا دیباگر متصل است یا خیر P_TRACED در روند فعلی

OceanLotus: به‌روزرسانی بدافزار برای macOS
شکل 3. بررسی اتصال دیباگر با استفاده از تابع sysctl

اگر نگهبان وجود یک دیباگر را تشخیص دهد، تابع فراخوانی می شود exit. علاوه بر این، نمونه با اجرای دو دستور محیط را بررسی می کند:

ioreg -l | grep -e "Manufacturer" и sysctl hw.model

سپس نمونه مقدار بازگشتی را در برابر لیست کدگذاری شده ای از رشته ها از سیستم های مجازی سازی شناخته شده بررسی می کند: Acle, آموزش VMware, مجازی یا موازی. در نهایت، دستور بعدی بررسی می‌کند که آیا دستگاه یکی از «MBP»، «MBA»، «MB»، «MM»، «IM»، «MP» و «XS» است. اینها کدهای مدل سیستم هستند، به عنوان مثال، "MBP" به معنای MacBook Pro، "MBA" به معنای MacBook Air و غیره است.

system_profiler SPHardwareDataType 2>/dev/null | awk '/Boot ROM Version/ {split($0, line, ":");printf("%s", line[2]);}

اضافات اصلی

در حالی که دستورات درب پشتی از زمان تحقیقات Trend Micro تغییر نکرده است، ما متوجه چند تغییر دیگر شدیم. سرورهای C&C مورد استفاده در این نمونه نسبتاً جدید هستند و در تاریخ 22.10.2018/XNUMX/XNUMX ایجاد شدند.

- daff.faybilodeau[.]com
- sarc.onteagleroad[.]com
- au.charlineopkesston[.]com

URL منبع تغییر کرده است /dp/B074WC4NHW/ref=gbps_img_m-9_62c3_750e6b35.
اولین بسته ارسال شده به سرور C&C حاوی اطلاعات بیشتری در مورد ماشین میزبان، از جمله تمام داده های جمع آوری شده توسط دستورات در جدول زیر است.

OceanLotus: به‌روزرسانی بدافزار برای macOS

علاوه بر این تغییر پیکربندی، نمونه از کتابخانه ای برای فیلتر شبکه استفاده نمی کند کتابخانه، اما یک کتابخانه خارجی. برای یافتن آن، درب پشتی سعی می‌کند با استفاده از AES-256-CBC هر فایل موجود در فهرست فعلی را با کلید رمزگشایی کند. gFjMXBgyXWULmVVVzyxy، پر شده با صفر. هر فایل رمزگشایی شده و به عنوان ذخیره می شود /tmp/storeو تلاشی برای بارگیری آن به عنوان یک کتابخانه با استفاده از تابع انجام می شود dlopen. هنگامی که تلاش برای رمزگشایی منجر به تماس موفقیت آمیز می شود dlopen، درب پشتی توابع صادر شده را استخراج می کند Boriry и ChadylonV، که ظاهراً مسئول ارتباط شبکه با سرور هستند. ما قطره چکان یا فایل های دیگری را از محل اصلی نمونه نداریم، بنابراین نمی توانیم این کتابخانه را تجزیه کنیم. علاوه بر این، از آنجایی که مؤلفه رمزگذاری شده است، یک قانون YARA مبتنی بر این رشته ها با فایل موجود در دیسک مطابقت نخواهد داشت.

همانطور که در مقاله بالا توضیح داده شد، ایجاد می کند شناسه مشتری. این شناسه هش MD5 مقدار بازگشتی یکی از دستورات زیر است:

- ioreg -rd1 -c IOPlatformExpertDevice | awk '/IOPlatformSerialNumber/ { split($0, line, """); printf("%s", line[4]); }'
- ioreg -rd1 -c IOPlatformExpertDevice | awk '/IOPlatformUUID/ { split($0, line, """); printf("%s", line[4]); }'
- ifconfig en0 | awk '/ether /{print $2}' (دریافت آدرس MAC)
- تیم ناشناس ("x1ex72x0a")، که در نمونه های قبلی استفاده شده است

قبل از هش کردن، یک "0" یا "1" به مقدار بازگشتی اضافه می شود تا امتیازات ریشه را نشان دهد. این شناسه مشتری ذخیره شده در /Library/Storage/File System/HFS/25cf5d02-e50b-4288-870a-528d56c3cf6e/pivtoken.appex، اگر کد به صورت root یا در ~/Library/SmartCardsServices/Technology/PlugIns/drivers/snippets.ecgML در سایر موارد اجرا شود. فایل معمولاً با استفاده از تابع مخفی می شود _chflags، زمان آن با استفاده از دستور تغییر می کند touch –t با مقدار تصادفی

رمزگشایی رشته ها

مانند گزینه های قبلی، رشته ها با استفاده از AES-256-CBC (کلید هگزادسیمال: 9D7274AD7BCEF0DED29BDBB428C251DF8B350B92 پر شده با صفر، و IV پر شده با صفر) از طریق تابع CCCcrypt. کلید نسبت به نسخه های قبلی تغییر کرده است، اما از آنجایی که گروه همچنان از همان الگوریتم رمزگذاری رشته استفاده می کند، رمزگشایی را می توان خودکار کرد. علاوه بر این پست، ما یک اسکریپت IDA را منتشر می کنیم که از Hex-Rays API برای رمزگشایی رشته های موجود در فایل باینری استفاده می کند. این اسکریپت ممکن است به تجزیه و تحلیل آینده OceanLotus و تجزیه و تحلیل نمونه های موجود که هنوز نتوانسته ایم به دست آوریم کمک کند. این اسکریپت بر اساس یک روش جهانی برای دریافت آرگومان های ارسال شده به یک تابع است. علاوه بر این، تخصیص پارامترها را جستجو می کند. می توان از این روش برای دریافت لیستی از آرگومان های تابع و سپس ارسال آن به callback استفاده مجدد کرد.

آشنایی با نمونه اولیه تابع رمزگشایی، اسکریپت همه ارجاعات متقابل به این تابع، همه آرگومان ها را پیدا می کند، سپس داده ها را رمزگشایی می کند و متن ساده را در داخل یک نظر در آدرس مرجع متقابل قرار می دهد. برای اینکه اسکریپت به درستی کار کند، باید روی الفبای سفارشی استفاده شده توسط تابع رمزگشایی base64 تنظیم شود و یک متغیر سراسری باید حاوی طول کلید تعریف شود (در این مورد یک DWORD، به شکل 4 مراجعه کنید).

OceanLotus: به‌روزرسانی بدافزار برای macOS
شکل 4. تعریف متغیر جهانی key_len

در پنجره Function، می‌توانید روی تابع رمزگشایی کلیک راست کرده و روی «Extract and Decrypt arguments» کلیک کنید. اسکریپت باید خطوط رمزگشایی شده را در نظرات قرار دهد، همانطور که در شکل 5 نشان داده شده است.

OceanLotus: به‌روزرسانی بدافزار برای macOS
شکل 5. متن رمزگشایی شده در نظرات قرار داده شده است

به این ترتیب رشته های رمزگشایی شده به راحتی در پنجره IDA کنار هم قرار می گیرند xrefs برای این تابع همانطور که در شکل 6 نشان داده شده است.

OceanLotus: به‌روزرسانی بدافزار برای macOS
شکل 6. تابع Xrefs برای f_decrypt

اسکریپت نهایی را می توان در این آدرس یافت مخزن Github.

نتیجه

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

محصولات ESET از قبل این فایل را در زمان تحقیق شناسایی می کردند. از آنجایی که کتابخانه شبکه مورد استفاده برای ارتباطات C&C اکنون روی دیسک رمزگذاری شده است، پروتکل شبکه دقیق مورد استفاده مهاجمان هنوز مشخص نیست.

شاخص های سازش

شاخص های سازش و همچنین ویژگی های MITER ATT&CK نیز در دسترس هستند GitHub.

منبع: www.habr.com

اضافه کردن نظر