آنالیز بدافزار فیشینگ اندرویدی

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

اسم پکیج این بدافزار اندرویدی، com.behsazaan.mobilebank می‌باشد با checksum:

SHA1: 82EFE2D990C7F5D72264A198AA8CC0BBFF705089

که شامل:

  • صفحه phishing که اطلاعات بانکی کاربر را به سرقت می‌برد.
  • keylogger که می‌تواند تمام ورودی‌هایی که کاربر در تلفن‌همراه خود وارد می‌کند را ذخیره کرده و به سمت مهاجم ارسال کند. ( به عنوان مثال می‌تواند همه‌ی حروفی که با کیبرد تایپ می‌شود را ذخیره کند و توسط این تکنیک به رمزعبورهای کاربر در اپهای مختلف دسترسی پیدا کند)
  • دسترسی به پیامک‌ها
  • دسترسی به مخاطبین
  • دسترسی به محل ذخیره فایلها
  • اجازه نصب اپلیکیشن در تلفن‌همراه کاربر

ابزارهای آزمایشگاه

  • genymotion: مجازی‌ساز اندروید
  • jadx: تحلیل ایستا
  • Frida/RMS: تحلیل پویا
  • wireshark/Burpsuite: تحلیل ترافیک
  • apk studio: برای تغییر کد و خروجی apk گرفتن به سادگی
  • Time

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

حال به بررسی قدم به قدم این اپلیکیشن میپردازیم و آن را نصب و اجرا می‌کنیم:

بررسی permissionها

SYSTEM_ALERT_WINDOW: با این دسترسی میتوان اپ را بر روی بقیه‌ی اپهای نصب شده در تلفن همراه نمایش داد بدون اینکه کاربر متوجه آن شود. تکنیکی که توسط اکثر بدافزار‌های اندرویدی به منظور نمایش تبلیغ، click-jacking، phishing scam و
گاهی نیز توسط باج‌افزارهای اندرویدی به منظور از کار انداختن رابط کاربری برای افراد غیرفنی به کار برده می‌شود.

PACKAGE_USAGE_STATS: دسترسی به کلیه آمار و ارقام مربوط به استفاده از سایر اپ‌های نصب شده در تلفن همراه که به عنوان نمونه می‌توانید به آدرس زیر مراجعه کنید:

برای اطلاعات بیشتر به اینجا مراجعه کنید.


BIND_ACCESSIBILITY_SERVICE: زیباترین دسترسی توی اندروید که منبع اصلی اندروید اینطور توصیفش می‌کنه:

Accessibility services should only be used to assist users with disabilities in using Android devices and apps

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

که همه‌چیزهایی که یک key-logger احتیاج داره رو بهش میده:

و به راحتی یک سرویس در بکگراند اجرا شده و همه اتفاقات را در یک فایل ذخیره کرده و در وقت مناسب به سمت مهاجم ارسال می‌کند:

و در آخر هم دسترسی‌های خیلی معمول که توسط هر بدافزاری گرفته می‌شود که این بدافزار هم از این قاعده مستثنی نیست:

READ_CONTACTS: خواندن همه‌ی مخاطبین

و ارسالش برای سرور مهاجم به آدرس baseUrl/Cn.php

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

READ_SMS: خواندن پیامک‌ها
نحوه استفاده این دسترسی اندکی هوشمندانه‌تر نسبت به قبلیاس. یک سرویس به اسم rest وجود داره که همه‌ی مسئولیتهای مربوط به بده بستون‌های بین اپ و  C&C سرور متعلق به ایشونه. حالا به دو صورت ویژگی‌های این سرویس فعال میشه:

با استفاده از broadcastReceiverی که تعریف شده، اگر تلفن روشن شود (action.BOOT_COMPLETED)، یا یک پیامک دریافت شود (Telephony.SMS_RECEIVED)، این سرویس فعال می‌شود.
مورد اول که از کدهاش واضحه که برای اینه که همیشه در سیستم در حال اجرا باشه حتی اگر گوشی ریستارت شد.
اما مورد دوم وقتی فعال میشه که یک پیامک به کاربر ارسال بشه و اندروید با این جریانات broadcastReceiver میتونه متوجه بشه و یک کار خاصی در اون موقع انجام بده. که توی مورد خاص وقتی پیامک دریافت میشه بلافاصله محتویات پیام و جزئیاتش به سرور ارسال میشه:

که در ادامه میخوایم راجع به اون Amirs هم صحبت کنیم، صبور باشید.

خلاصه وقتی پیامک اومد این تیکه از کد میاد پیامک به همراه داستانایی که میتونید ببینید میفرسته سمت سرور. جالبه که الان میتونه همه پیامکهای کاربر رو بخونه اما هیچ‌جایی از کد این کار رو نکرده و فقط به پیامک هایی که جدید برای کاربر میاد علاقه نشون داده. اگر ما از کمترین میزان هوش برخوردار باشیم سریعا متوجه میشیم که این هدفش خوندن رمزپویاس و یا دسترسی به ۲FA Authentication که دنبال اینه  بتونه قبل از کاربر لاگین کنه

READ_EXTERNAL_STORAGE: برای درک بهتر و آشنایی با انواع ذخیره در محل حافظه اندروید اینجا را ببینید. بدون این دسترسی هم میتوان در محل حافظه داخلی مخصوص اپ عملیات خواندن/نوشتن را انجام داد اما اگر بخواهیم به پوشه هایی مثل DCIM، Movies،Download و … دسترسی داشته باشیم حتما باید در  runtime این دسترسی از کاربر گرفته شود.

فعال شدن بدافزار روی تلفن‌ هدف

وقتی کاربر سعی دارد وارد حساب کاربری خود شود و دکمه‌ی ورود را می‌زند اطلاعات زیر به سمت سرور ارسال می‌شود:

"\n\t\t New Target V3.2 \n\t\t----------------------\n\t\t|-Phone Number : 09121111111\n\t\t|-UserName : 111111111111\n\t\t|-Password : 222222222222\n\t\t|-First Serial : a267b161c7b192\n\t\t|-Three Serial : 000000000000000\n\t\t|-Four Serial : 89014103211118510720\n\t\t------Mellat-----\n\t\t"

که سریال هایی داره میفرسته مربوط به device id میشه که یک مقدار یکتا در هر تلفن‌همراه می‌باشد.

پنهان شدن آیکن

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


توسط کد زیر که در اینجا توضیح داده شده است اپ می‌تواند آیکن خود را مخفی کند:

جلوگیری از حذف اپ توسط کاربر

در سیستم عامل اندروید می‌توان به اپ‌های در حال اجرا دسترسی داشت. از طرفی com.android.packageinstaller اپی که توسط آن میتوان اپ‌های نصب شده را حذف/نصب کرد. با توجه به این فرضیات نحوه عملکرد بدافزار را هنگام حذف آن مشاهده کنید:

در اینجا یک سرویس تحت عنوان detector در سیستم اجرا شده است و هروقت که کاربر برای حذف اقدام کند کد زیر اجرا می‌شود:

حال هروقت یکی از activityهای این اپ به اسم UninstallerActivity اجرا شود( همان که در فیلم دیدیم ) یک intent اجرا کرده و کاربر را از اپ مربوط به حذف بدافزار خارج می‌کند.

اما برای حذف برنامه، ابتدا باید سرویس های مربوط به اپ را بست و سپس اقدام به حذف بدافزار از روی تلفن همراه کرد. ( force stop که در فیلم مشاهده نمودید )

رمزنگاری

در اپ ‌های اندرویدی معمولا برای پنهان سازی credentials که به صورت استاتیک به سادگی قابل تحلیل نباشند، stringهای حیاتی را به صورت رمز شده ذخیره می‌کنند و آنها را در runtime رمزگشایی می‌کنند. مهمترین استفاده از رمزنگاری در این بدافزار به منظور پنهان سازی Proxy-Authorization که یک http header است به کار گرفته می‌شود.
به منظور ساختن این header، در ابتدا محتویات فایل‌های زیر که در اپ از ابتدا وجود‌ داشته‌اند خوانده می‌شود:

با ترکیب های مختلفی از این رشته‌ها، رشته ای ساخته شده و در نهایت با AES، رمزگشایی می‌شود.

کتابخانه‌های استفاده شده

برای درخواست‌های http از ترکیب ۴ کلاینت استفاده شده است:

  • OkHttp: کتابخانه معروف برای ارسال درخواست HTTP
  • Retrofit: یک کتابخانه معروف روی Okhttp که استفاده از آن را ساده تر می‌کند.
  • Aghajari.retrofit: کلاینت شخصی سازی شده روی retrofit
  • Tamic.Novate: یک کلاینت غیرمعمول (که کمتر در سایر اپلیکیشن ها دیده شده) همانند retrofit روی OkHttp نوشته شده است.

به اقتضای کاربرد از هرکدام از آنها استفاده می‌کند (شاید هم برای گمراه کردن آنالیزور) ولی در اکثر مواقع از Tamic بهره می‌گیرد.

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

تحلیل ترافیک

همه درخواست‌ها به https://ns1-torproxy.xyz فرستاده و path های زیر استفاده می‌شود:

و اینکه با IP ایران ns1-torproxy.xyz باز نمیشه و اما بدافزار چطوری داره با سرور اصلی ارتباط برقرار میکنه:


لیست IPهایی که پروکسی میکنه هم چون هنوز در حال کاره و قصد ما آجر کردن نون بقیه نیست  سانسور شدش رو میذارم:

روی اکثرش با اسکن nmap این بدست اومد:

۸۰۸۰/tcp open  http-proxy

برخی سوالات

یکسری سوال اینجا مطرح میشه:
۱. چرا این اپ با B4A توسعه داده شده وقتی توی داستانهای malware development کلی میشه از کدهای آماده به زبانهای java/kotlin/c استفاده کرد؟

۲. چرا شخص توسعه‌دهنده اسم و رسم خودشو روی در و دیوار کدها نوشته ؟‌ هم توی endpoint ها اسمشو نوشته هم توی پکیجی که برای کلاینت http استفاده میکنه فراوان amir aghajari رو نوشته.

۳. چرا وقتی میتونه همه پیامک هارو بخونه و بفرسته برا مهاجم فقط میره سراغ پیامک جدیدی که اومده؟

۴. با IP ایران Url باز نمیشه و خود اپ با پروکسی‌ای که داره درخواست‌ها رو میفرسته. تهیه ۳۳ تا سرور میتونه کار یک شخص برای لذت بردن و اذیت کردن بقیه باشه؟

۵. چرا یکسری دسترسی‌هایی میگیره که ازشون استفاده‌ای نمیکنه؟‌

۶. هدف افراد سازمانی بودند یا شخصی؟

۷. هدف در طولانی مدت کاربرد داشتند یا دسترسی سریع به اطلاعات در اولویت بوده؟

۸. هدف از قبل مشخص بوده یا اینکه هرکس بدافزار را نصب کرد یک هدف عالی برای نفوذ بیشتر است؟

انسان سنتی خود را پیچیده و جهان را ساده میبیند !

5 دیدگاه روشن آنالیز بدافزار فیشینگ اندرویدی

دیدگاه خود را بنویسید:

آدرس ایمیل شما نمایش داده نخواهد شد.

فوتر سایت