روابط عمومی شرکت ایدکو (توزیعکنندهی محصولات کسپرسکی در ایران)؛ یک ماه پیش پی بردیم یک سری اپ کرکشده در وبسایتهای دزدی دست به دست میشوند و با پروکسی تروجان آلوده شدند. عاملین این آلودگی اپهای از پیشکرکشده را از نو در قالب فایلهای PKG با پروکسی تروجان جاسازشده و اسکریپت پسانصب که آلودگی را شروع میکند بستهبندی کردهاند. اخیراً به خانواده بدافزار جدید و ناشناختهای هم برخوردیم که روی نرمافزارهای کرکشده کار میکنند. این تهدید بسیار قویتر از نصب سرور پروکسی غیرمجاز بوده است.
مرحله اول: اپ Activator
نمونههایی که ما پیدا کردیم میتوانند با موفقیت روی macOS Ventura 13.6 و نسخههای جدیدتر اجرا شوند، که نشان میدهد اپراتورها فقط کاربران نسخههای سیستم عامل جدیدتر را در پردازندههای اینتل و دستگاههای سیلیکونی اپل هدف قرار میدهند. تصاویر دیسک در معرض خطر شامل برنامهای به نام Activator و برنامهای است که کاربر به دنبال نصب آن است. با باز کردن/نصب تصویر، پنجرهای با دستورالعمل نصب ظاهر میشود. این دستورالعمل به کاربر میگوید که برنامه را در Applications/ / کپی و سپس Activator را اجرا کند. دومی نسبتاً ساده به نظر میرسد: فقط یک دکمه PATCH که هنگام کلیک کردن، یک اعلان رمز عبور را نمایش میدهد.
نگاهی دقیقتر باعث برملاشدن واقعیت جالبی شد: برنامه موجود در فولدر Resources به نوعی حاوی یک نصبکننده Python 3.9.6 و یک فایل Mach-O اضافی با ابزار نام بود. فایل اصلی Fat Mach-O، که به طور واضح GUI نامیده میشود، در اصل دکمه PATCH را پیادهسازی میکند که با کلیک روی آن دو رویداد راهاندازی میشود:
نصبکننده پایتون در فهرست فایل موقت کپی شد: /tmp/
ابزار قابل اجرا در فولدر منابع با امتیازات ادمین اجرا شد. برای فعال کردن این کار، Activator از تابع منسوخ شده AuthorizationExecuteWithPrivileges استفاده کرد که پنجره ای را با نوتیف رمز عبور مدیر نمایش داد. پس از اجرا، ابزار سیستم را برای یک کپی نصب شده از پایتون 3 بررسی کرد و اگر پیدا نشد، آن چیزی را که قبلاً در tmp/ / کپی کرده بود، نصب کرد. سپس، برنامه دانلود شده را "پچ" کرد: ابزار 16 بایت اول فایل اجرایی اصلاحشده را با دنبالهای که داخل Activator کدگذاری شده بود مقایسه و در صورت تطابق آنها را حذف کرد. این اپ به طور شگفتانگیزی شروع به کار کرد کرد و به نظر آمد کرک شده است. ترفند این بود که عاملین مخرب نسخههای از قبل کرکشده اپ را برداشته و به ابتدای فایل قابلاجرا چندتایی بایت اضافه کرده بودند. در نتیجه کاربر نمیتوانست Activator را غیرفعال کند.
مرحله دوم: دانلودر
یک "پچ" کامل، لود اصلی را با نمونهای به دنبال یافتن اسکریپت رمزگذاریشده در c2 خود آغاز کرد. این برنامه URL C2 را با ردیف کردن کلمات از دو لیست کد سخت و اضافه کردن یک رشته تصادفی از پنج حرف به عنوان نام دامنه سطح سوم به دست آورد. با این URL، نمونه درخواستی به سرور DNS به عنوان تلاشی برای دریافت رکورد TXT برای دامنه ارسال کرد. این روشی نسبتاً جالب و غیرمعمول برای تماس با یک سرور فرمان و کنترل و پنهان کردن فعالیت در داخل ترافیک بود، و دانلود payload را تضمین میکرد، زیرا پیام پاسخ از سرور DNS میآمد. رکوردهای TXT میتواند حاوی جزئیات دامنههای متفرقهای باشد که ممکن است برنامه به آن نیاز داشته باشد، بنابراین درخواستی مانند آن به خودی خود کاملاً عادی به نظر میرسد.
ما هر ترکیب ممکنی از کلمات کدگذاریشده را امتحان کردیم، که برای هر نمونهای که مطالعه کردیم یکسان بود، تا فقط یک نام دامنه کاربردی پیدا کنیم: imohub[.]net. نام دامنه دقیق سطح سوم تا زمانی که بخشی از درخواست بود بیربط بود. پاسخ سرور DNS شامل سه رکورد TXT میشد که برنامه بعداً آنها را پردازش کرد تا یک پیام کامل را جمعآوری کند. هر رکوردی یک قطعه سایفرتکست (یا متن رمز) رمزگذاریشده با Base64 بود که بایت اولش شامل رشته عدد بود که در طول اسمبلی حذف شده بود. این سایفرتکست در حالت CBC با AES رمزگذاریشده بود. پیام رمزگشاییشده حاوی اسکریپت پیتون بود.
قبل از اجرای اسکریپت، ابزار مراحل زیر را طی کرد:
- محاسبه هش اسکریپت و بررسی اینکه قبلاً راهاندازی نشده باشد. برای انجام این کار، متغیرهای محیطی را برای کلید lastExecutedScriptHash جستجو و اگر آنجا بود، هش را با داده های ذخیره شده در زیر کلید مقایسه میکرد. اگر هش ها مطابقت داشتند، اسکریپت را راهاندازی نمیکرد. اگر هشها متفاوت بودند، ابزار اسکریپت را اجرا و هش را در متغیر جایگزین مینمود. اگر متغیرهای محیطی حاوی کلید نبودند، ابزار یکی را ایجاد و هش اسکریپت فعلی را در آن ذخیره میکرد.
- جایگزینی «-g-»در لینک داخل اسکریپت با یک دنباله تصادفی از 64 کاراکتر که شبیه یک هش است.
- نوشتن یک اسکریپت در /var/root/Library/Caches/<uuid>.py که هر ده ثانیه تمام فرآیندهای NotificationCenter را از بین میبرد.
- نوشتن دو عاملی که اسکریپتها را در ریبوت به طور خودکار راه اندازی میکنند در /Library/LaunchAgents/launched.<uuid>..
- همانطور که از اسکریپت رمزگشایی شده میبینید، هر 30 ثانیه به apple-health[.]org مراجعه کرده و سعی میکند اسکریپت را دانلود و اجرا کند. به اسکریپت 14400 ثانیه زمان داده شد تا اجرا شود و پس از آن فرآیند از بین رفت و نسخه جدیدی از اسکریپت دانلود شد.
مرحله سوم: بکدر
اولش فکر میکردیم اسکریپت پیتون دانلودشده منسوخ شده چون سرور apple-health[.]org C2 به درخواستهای ما پاسخ نمیداد اما بعد از مدتی تصمیم گرفتیم پیلودی را در قالب اسکریپت پیتون دیگری بدست آوریم. و در نهایت اهداف عاملین بدافزار مشخص شد: کارکرد اصلی اسکریپت اجرای فرمانهای دلخواهی بود که از سرور دریافت کرده بود. با قضاوت کد پردازشگر فرمان اینها در قالب اسکریپتهای پیتون بعدی که با Base64 رمزگذاری شده بودند آمدند.
علاوه بر اجرای دستورات، اسکریپت اطلاعات زیر را برداشت و به سرور ارسال کرد:
- نسخه سیستم عامل
- فهرست دایرکتوریهای داخل /کاربران/
- فیلد خالی av احتمالاً با اطلاعاتی در مورد وجود برنامههای ضد بدافزار در نسخههای بعدی پر می شود.
- لیست برنامههای نصبشده
- نوع CPU
- آدرس IP خارجی
- فیلد خالی ver که احتمالاً برای ارسال اطلاعات در مورد نسخه بار استفاده میشود
در زمان بررسی ما، سرور به طور مشخص هیچ فرمانی را برنگرداند و بعداً به طور کلی پاسخ نداد. بنابراین، اسکریپت مرحله سوم پیتون را دوباره دانلود کردیم و تازه آنجا بود که متوجه شدیم نسخه جدید حاوی تغییراتی است. به طور خاص، توسعه دهندگان "متاداده" ذخیره شده در ابتدای برنامه و حاوی آدرس IP سرور C2 و نام دامنه، و GUID برنامه و نسخه را تغییر داده بودند. ظاهراً به محض تغییر آدرس IP سرور، که تقریباً هر 10 تا 20 دقیقه یکبار اتفاق میافتد، اینها بهطور خودکار در داخل اسکریپت بهروزرسانی میشوند. همچنین بهروزرسانیهایی برای کد عملکردی وجود داشت که باید توسط انسان ساخته میشد. این نشان داد کمپین بدافزار هنوز در حال انجام است. دستوراتی که ما سعی داشتیم از سرور دریافت کنیم ممکن است هنوز نوشته نشده باشند.
مرحله چهارم: سارقین کهنهکار کریپتو
علاوه بر ویژگیهای ذکر شده، اسکریپت حاوی دو تابع قابل توجه دیگر نیز بود: check_exodus_and_hash() و check_btccore_and_hash().
هر دو دارای دامنه apple-analyser[.]com بودند که به عنوان میزبان برای بارهای بیشتر خدمت میکرد. این دو عملکرد یک هدف مشابه داشتند: بررسی اینکه آیا دستگاه دارای یک برنامه کیف پول رمزنگاری مربوطه است یا خیر، و اگر چنین است با برنامه دانلود شده از apple-analyser[.]com جایگزین شود. علاوه بر برنامه، سرور همچنین یک نسخه تمیز از فریمورک Electron را برای راهاندازی نسخه جدید Exodus و همچنین Exodus.scpt ذخیره میکند و فقط برای اجرای Shell زیر مورد نیاز است.
اینکه آیا اپراتورهای بدافزار واقعاً آنقدر مهربان بودند که به قربانیان خود در به روزرسانی کیفپول خود به عنوان غرامت کمک کنند؟ افسوس که چنین نبود: هر دو کیفپولها آلودگیشان ثابتشده بود. عاملین مخرب Exodus را با جاسازی برنامه فکری خود در ابتدای برنامه آلوده کرده بودند: فایل main/index.js که اولین فایلی بود هنگام راه اندازی برنامه شروع شد. کد موجود در اسکرینشات به ما میگوید برنامه با نام 334b4425988b47a5b67c92518f9815c6 مقداری داده را به کانال ارسال کرده است که متعاقباً به 22[.]imohub[.]workers[.]dev رفت. خوب، تنها کاری که ما باید انجام میدادیم این بود که قطعه دقیق کدی را که دادهها را ارسال میکرد، پیدا کنیم، و این…drumroll… wallet/index.js بود. از آنجایی که کد هیچ دستکاریای نداشت، ما به آن قالببندی مناسب دادیم و بررسی کردیم که ببینیم آنجا داشته چه اتفاقی میافتاده. عوامل مخرب به کنترلکننده باز کردن قفل کیف پول تماسی با تابعی اضافه کرده بودند که به سادگی یک عبارت اولیه وارد شده را از طریق کانال به C2 ارسال میکرد. هیچ ویژگی جدید دیگری وجود نداشت.
Bitcoin-Qt نه یک فایل جاوا اسکریپت که یک Mach-O تمام عیار بود. همانطور که کد C2 را از Exodus جستجو میکردیم، متوجه شدیم بیت کوین-Qt شیوه عمل مشابهی دارد: این برنامه رمز باز کردن قفل کیفپول را به همراه کیفپول، نام آن و موجودی آن سرقت کرده بود. بنابراین حتی در نبود فرمانهای دریافتی از جانب C2 این برنامه همچنان قادر خواهد بود با سرقت کریپتووالتهای کاربران خسارت جبرانناپذیری برایشان در پی داشته باشد.
نتیجهگیری
اپهای کرکشده که پیشتر در موردشان گفتیم یکی از آسانترین راهها برای عاملین مخرب برای دسترسی پیدا کردن به کامپیوتر کاربران هستند. برای بالا بردن مزیت برای خودشان، آنها مجبورند پسورد بخواهند که معمولاً در طول نصب نرمافزار کاربر شک نخواهد کرد. با این حال برخی چیزها که نویسندگان کمپین بدافزار بدان برخوردند مانند قرار دادن اسکریپت پیتون داخل رکورد txt دامنه روی سرور DNS شدیداً مبتکرانه بود. اسکریپت سپس به عاملین استارتآپ اضافه شده بود تا در لوپی نامنتها پیبود مرحله بعدی را اجرا کند که همین باعث میشد مهاجمین آپدیت به ماشین آلوده برسانند. پیلود نهایی، بکدری بود که میتوانست هر اسکریپتی را با مزیتهای ادمین اجرا و اپهای کریپتووالت Exodus و Bitcoin نصبشده روی دستگاه را با نسخههای آلودهای که فازهای محرمانه ریکاوری را موقع باز شدن قفل والت سرقت کرده بودند جایگزین کند.
منبع: کسپرسکی آنلاین (ایدکو)
کسپرسکی اسم یکی از بزرگترین شرکتهای امنیتی و سازنده آنتی ویروس است که برخی از کاربران اشتباهاً این شرکت و محصولات آنتی ویروس آن را با عناوینی نظیر کسپرسکای،کاسپرسکی، کسپراسکای، کسپراسکای، و یا کاسپراسکای نیز میشناسد. همچنین لازم به ذکر است مدیرعامل این شرکت نیز یوجین کسپرسکی نام دارد.