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

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

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

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

شکل 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 حاوی اطلاعات بیشتری در مورد ماشین میزبان، از جمله تمام داده های جمع آوری شده توسط دستورات در جدول زیر است.

علاوه بر این تغییر پیکربندی، نمونه از کتابخانه ای برای فیلتر شبکه استفاده نمی کند ، اما یک کتابخانه خارجی. برای یافتن آن، درب پشتی سعی میکند با استفاده از AES-256-CBC هر فایل موجود در فهرست فعلی را با کلید رمزگشایی کند. gFjMXBgyXWULmVVVzyxy، پر شده با صفر. هر فایل رمزگشایی شده و به عنوان ذخیره می شود /tmp/storeو تلاشی برای بارگیری آن به عنوان یک کتابخانه با استفاده از تابع انجام می شود . هنگامی که تلاش برای رمزگشایی منجر به تماس موفقیت آمیز می شود 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 در سایر موارد اجرا شود. فایل معمولاً با استفاده از تابع مخفی می شود ، زمان آن با استفاده از دستور تغییر می کند touch –t با مقدار تصادفی
رمزگشایی رشته ها
مانند گزینه های قبلی، رشته ها با استفاده از AES-256-CBC (کلید هگزادسیمال: 9D7274AD7BCEF0DED29BDBB428C251DF8B350B92 پر شده با صفر، و IV پر شده با صفر) از طریق تابع . کلید نسبت به نسخه های قبلی تغییر کرده است، اما از آنجایی که گروه همچنان از همان الگوریتم رمزگذاری رشته استفاده می کند، رمزگشایی را می توان خودکار کرد. علاوه بر این پست، ما یک اسکریپت IDA را منتشر می کنیم که از Hex-Rays API برای رمزگشایی رشته های موجود در فایل باینری استفاده می کند. این اسکریپت ممکن است به تجزیه و تحلیل آینده OceanLotus و تجزیه و تحلیل نمونه های موجود که هنوز نتوانسته ایم به دست آوریم کمک کند. این اسکریپت بر اساس یک روش جهانی برای دریافت آرگومان های ارسال شده به یک تابع است. علاوه بر این، تخصیص پارامترها را جستجو می کند. می توان از این روش برای دریافت لیستی از آرگومان های تابع و سپس ارسال آن به callback استفاده مجدد کرد.
آشنایی با نمونه اولیه تابع رمزگشایی، اسکریپت همه ارجاعات متقابل به این تابع، همه آرگومان ها را پیدا می کند، سپس داده ها را رمزگشایی می کند و متن ساده را در داخل یک نظر در آدرس مرجع متقابل قرار می دهد. برای اینکه اسکریپت به درستی کار کند، باید روی الفبای سفارشی استفاده شده توسط تابع رمزگشایی base64 تنظیم شود و یک متغیر سراسری باید حاوی طول کلید تعریف شود (در این مورد یک DWORD، به شکل 4 مراجعه کنید).

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

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

شکل 6. تابع Xrefs برای f_decrypt
اسکریپت نهایی را می توان در این آدرس یافت .
نتیجه
همانطور که قبلا ذکر شد، OceanLotus به طور مداوم در حال بهبود و به روز رسانی جعبه ابزار خود است. این بار گروه سایبری این بدافزار را برای کار با کاربران مک بهبود بخشیده است. کد تغییر چندانی نکرده است، اما از آنجایی که بسیاری از کاربران مک محصولات امنیتی را نادیده می گیرند، محافظت از بدافزار در برابر شناسایی در درجه دوم اهمیت قرار دارد.
محصولات ESET از قبل این فایل را در زمان تحقیق شناسایی می کردند. از آنجایی که کتابخانه شبکه مورد استفاده برای ارتباطات C&C اکنون روی دیسک رمزگذاری شده است، پروتکل شبکه دقیق مورد استفاده مهاجمان هنوز مشخص نیست.
شاخص های سازش
شاخص های سازش و همچنین ویژگی های MITER ATT&CK نیز در دسترس هستند .
منبع: www.habr.com
