img

نحوه وارد کردن کدهای مخرب در اپلیکیشن ها توسط هکرها

/
/
/

دی کامپایل و اشکال زدایی اپلیکیشن های اندروید مهارت های ضروری برای مقابله با کدهای مخرب در دستگاه های می باشند.

اندروید محیطی بسیار خطرناک است. زمانی که شما اپلیکیشنی را از Google Play Store دریافت می کنید، ممکن است اپلیکیشن مخرب بوده و تاثیری منفی بر روی گوشی هوشمند شما داشته باشد. بدین دلیل، قصد داریم شما را با چند ترفند آشنا سازیم. اپلیکیشن های اندروید اغلب در جاوا نوشته می شوند. برخی از آنها ممکن است کتابخانه های محلی (.so) داشته و قابل اجرا (ELF) نیز باشند. فایل APK در اصل یک فایل ZIP است که حاوی DEX بوده و توسط موتورهای اجرایی Dalvik یا ART اجرا می شود. در درون فایل های APK مجموعه ای از فایل های دیگر نظیر bitmap، XML GUI و … نیز وجود دارد. کد DEX را می توان با استفاده از ابزارها کدباز قالب بندی نموده و به smali دست یافت. اشکال زدایی smali بسیار ساده تر از کدمحلی می باشد. اگرچه برخی اوقات می توان کد جاوای یک اپلیکیشن را دی کامپایل نمود، اما استفاده از smali بهتر می باشد. کد Smali را می توان تغییر داده و به منظور بررسی به فرمت APK تبدیل نمود. شما همچنین می توانید آن را اشکال زدایی نیز نمایید. این راهنما شما را با موارد خطرناک مهندسی معکوس اندروید و همچنین اشکال زدایی smali آشنا می کند. با ما همراه باشید.

 

نحوه وارد کردن کدهای مخرب در اپلیکیشن ها توسط هکرهایک فایل APK را دی کامپایل کرده و تغییر دهید

دی کامپایل کردن یک فایل APK بسیار آسان می باشد. اولین APK خود را از (hello-world.apk) دریافت کرده و آن را با استفاده از Apktool دی کامپایل کنید:

apktool.sh d hello-world.apk.

علاوه بر نمایش Smali کد DEX، شما تمام فایل های موجود در APK را نیز خواهید داشت. قبل از بررسی کد smali، شما به نام بسته اپلیکیشن و فعالیت اصلی آن نیاز دارید. با استفاده از نام بسته، شما موقعیت قرارگیری کد Smali را تشخیص داده و با تشخیص فعالیت نیز می توانید نقطه آغاز را بررسی کنید. هر دو مورد را می توانید از طریق فایل AndroidManifest.xml به دست آورید. همانطور که مشخص است، نام بسته org.helloworld می باشد، بنابراین شما تشخیص می دهید که کد smali در مسیر smali/org/helloworld قرار دارد. فعالیت اصلی آن نیز org.helloworld.MainActivity می باشد، بنابراین برخی از فایل ها در این مسیر با نام MainActivity*.smali خواهد بود.

با استفاده از Vim، فایل MainActivity$1.smali را باز کنید. این روند بسیار آسان است.

Wget http://codetastrophe.com/smali.vim

را اجرا کرده و سپس این فایل را در مسیر Vim کپی کنید (برای مثال، این مسیر در Vim 7.4 به صورت

/usr/share/vim/vim74/syntax

خواهد بود. اکنون شما می توانید با اجرای syntax=smali به smali دسترسی داشته باشید.
زمانی را برای خواندن کد سپری کنید. اگر به خواندن این کدها عادت کنید، خواندن آنها امری بسیار آسان خواهد بود. برای مثال، کد را تا زمان پیدا کردن روش onClick بررسی کنید. در این نقطه یک رشته را می توان به آسان پیدا کرد:

const-string v0, “Replace with your own action.

اکنون این اپلیکیشن را بر روی Android VM نصب کرده و آن را اجرا کنید:

adb connect YOUR_VM_IP; adb install hello-world.apk.

مشاهده خواهید کرد که به محض لمس آیکون پاکت نامه، رشته ظاهر خواهد شد. به Vim باز گردید. اکنون بررسی کد smali که مسئولیت ایجاد SnackBar را بر عهده دارد، آسان تر شده و می توانید ویژگی های آن را تنظیم نموده و سپس روش show() را اجرا کرد و آن را بر روی صفحه مشاهده کنید:

.method public onClick(Landroid/view/View;)V
(…)
const-string v0, «Replace with your own
action»
invoke-virtual {v0}, Landroid/support/
design/widget/Snackbar;->show()V
.end method

 

از اینجا می توانید رشته را به کد دیگری جایگزین کرده و یا از ظاهر شدن SnackBar جلوگیری کنید. شما همچنین می توانید روش ها یا کدهای جدیدی را به روش های پیشین بیافزایید. تنها چیزی که شما نیاز دارید، اندکی اطلاعات در مورد smali و ابزاری نظیر Apktool می باشد که شما را به ری کامپایل و بسته بندی مجدد کل APK قادر می سازد.
اگر به یک APK اصل دسترسی داشته باشید، کد آن را تغییر داده و سپس مجددا بسته بندی کنید، زیرا شما کد اصلی توسعه دهنده را در اختیار ندارید. اگر نسخه اندروید شما به موارد MasterKey آسیب پذیر نباشد، مشکلی پیش نخواهد آمد. اندروید به هیچ عنوان به Certificate Authorities اهمیتی نداده و صرفا به مجوز ورود توجه می کند و در صورت نداشتن مجوز، اجازه نصب نمی دهد. بنابراین، ایده دانلود WhatsApp و افزودن کدهای مخرب به آن و همچنین ترغیب افراد به دانلود آن را فراموش کنید. زیرا اگر آنها پیشتر WhatsApp را نصب کرده باشند، این اقدام امکان پذیر نخواهد بود. اما لحظه ای فکر کنید. اگر فرد پیشتر WhatsApp را نصب نکرده باشد، چه اتفاقی رخ می دهد؟ این دقیقا نقطه ای است که اندروید مارکت های نامطمئن به میدان می آیند. افراد اغلب اپلیکیشن های قانونی را دریافت کرده، آنها را دی کامپایل کرده و کد Smali آنها را بعد از افزودن رفتارهای مخرب در این مارکت ها آپلود می کنند. Signature تطابقی نخواهد داشت، اما اگر کاربر «منابع ناشناخته» را در تنظیمات فعال کرده باشد، اپلیکیشن به راحتی نصب خواهد شد.
بیایید اندکی این موضوع را تمرین کنیم: با استفاده از Vim، رشته را با مورد دیگری جایگزین کرده و سپس APK را با Apktool ری کامپایل نموده و مجددا بسته بندی کنید:

apktool.sh b hello-world-smali.

از آنجایی که شما به کد اصلی توسعه دهنده دسترسی ندارید، شما با رمز شخصی خود وارد این APK می شوید این بدین معناست که اندروید این ناهماهنگی را تشخیص داده و در نتیجه مانع نصب خواهد شد. این روش را امتحان کنید. اگر قصد ندارید یک keystore جدید ایجاد کنید، می توانید آن را از طریق (new_kstore) دریافت کرده و وارد APK ایجاد شده شوید. در صورت درخواست رمزعبور از عبارت lud.org استفاده کنید:

jarsigner-sigalg Sha1withRSA –digestalg SHA1 –keystore new_kstore hello-world/dist/hello-world.apk key0.

اکنون آن را نصب کنید:

adb install –r hello-world/dist/hello-world.apk.

شما با خطای زیر مواجه خواهید شد:

INSTALL_FAILED_UPDATE_INCOMPATIBLE.

اکنون مجددا این فرایند را تکرار کنید، اما این بار فایل را با رمز شخصی خود وارد کنید (رمز را می توانید از android_kstore دریافت نمایید). این بار اپلیکیشن با موفقیت نصب می شود. زمانی که صحبت از بدافزارهای اندروید به میان می آید، پیگیری یک توسعه دهنده به واسطه مجوز ورود ممکن می باشد. زمانی که یک اپلیکیشن مخرب شناسایی می شود، سایر اپلیکیشن های دارای همان مجوز نیز می توانند خطرناک باشند. شما می توانید با استفاده از keytool utility اطلاعاتی در مورد مجوز ورود کسب کنید:

keytool -list -printcert -jarile helloworld.
apk\
|grep «SHA1»|awk ‹{print $2}›|tr -d «:»
۱D9CC9C5C4EA92CD16F44777A
۵۱۶۲CF5AB2D196D

 

با اجرای فرمان پیشین، شما اثرانگشت SHA-1 را برای مجوز دریافت می کنید. سپس شما می توانید این اثرانگشت را در مجموعه های عمومی بدافزار گزارش شده نظیر Koodous مشاهده کنید. به وب سایت

https://koodous.com

مراجعه کرده و از جستجوی پیشرفته استفاده کنید. این عبارت را در قسمت Apks تایپ کنید:

۹C5C4EA92CD16F44777A
۵۱۶۲CF5AB2D196D.

چند APK نشان داده می شوند؟

 

نحوه وارد کردن کدهای مخرب در اپلیکیشن ها توسط هکرها

 

وارد کردن کدهای مخرب در یک APK قانونی

تصویر کنید افرادی تصمیم گرفته اند رفتارهای مخربی را به این اپلیکیشن قانونی اضافه کنند. آنها اپلیکیشن را مجددا بسته بندی نموده و در مارکت اندروید آپلود کرده اند. برخی اوقات آنها نمونه ای از اپلیکیشن را به شما می دهند تا شما آن را ارزیابی کنید. آن را از hello-world-trojanized.apk دریافت کنید. شما می توانید اپلیکیشن را به VirusTotla (www.virustotal.com) آپلود کرده و آن را بررسی نمایید. دو آنتی ویروس آن را به عنوان ELF: Exploit-P[Trj] تشخیص می دهند. آنتی ویروس سوم نیز یک آسیب پذیری دیگری را نشان می دهد که CVE-2016-5195.A نام دارد. این CVE باید برای شما آشنا باشد: این ویروس Dirty COW نام دارد. با بررسی اطلاعات ویروس در VirusTotal مشاهده می کنید که این ویروس مخرب بر روی ساختار x86 تاثیر دارد: assets/dirtycow.
ظاهرا، این اپلیکیشن به گونه ای تغییر داده شده است که از باگ Dirty COW استفاده کند. آن را با استفاده از Apktool دی کامپایل کرده و به دنبال رشته «dirtycow» در کد باشید:

grep –R “dirtycow” *.

این ساختار یک خروجی در فایل MainActiviry.smali ایجاد می کند. آن را با Vim باز کرده و به دنبال روش onCreate() باشید. این بار، مجموعه ای از دستورالعمل های Smali وجود دارد. اگر آنها را به دقت مطالعه کنید، باید بتوانید برخی از کدهای مخرب را در مسیر اجرا پیدا کنید. بیایید اقدام این اپلیکیشن مخرب را بررسی کنیم. اسنپ شات VM قبل از اجرای اپلیکیشن را فراموش نکنید. Org.helloworld را از VM حذف کرده و این نسخه را نصب کنید:

adb uninstall org. helloworld; adb install hello-world-trojanized.apk.

سپس اپلیکیشن را در Android 5.1 VM اجرا کنید. اجرای آن اندکی طول خواهد کشید. بعد از آن، همه چیز عادی خواهد بود: شما می توان همان اقدام را با اپلیکیشن org.helloworld نیز انجام دهید. با این حال، باگ Dirty COW به طور موفقیت آمیز اجرا شده است.
در کد smali، یک رشته وجود دارد که به فایلی خاص در Android VM اشاره دارد: /system/xbin/librank (خط ۲۶۴). این رشته در فضای سفیدی قرار دارد و اگر مسیر اجرای کد را دنبال کنید، مشاهده خواهید کرد که این رشته در ساخت StringBuilder نقش دارد و این نشان می دهد که برخی از رشته های مختلف پی در پی آمده و سپس به عنوان یک پارامتر به روش Runtime.Exec() (خط ۲۷۴) منتقل می شوند. Dirtycow ELF به منظور بازنویسی /system/xbin/librank با یک دارایی دیگر (run-as) در خط ۱۰۰ اجرا می شود. سعی کنید این فایل را از یک adb اجرا کنید:

adb shell /ystem/xbin/librank.

شما به یک هسته دست خواهید یافت.
تحلیل اپلیکیشن HelloWorld آسان می باشد، زیرا اندازه بسیار کوچکی دارد. زمانی که با اپلیکیشن های واقعی سر و کار داشته باشید، شما به کمک بیشتری نیاز خواهید داشت. علاوه بر ابزارهای عادی از جمله

Androguard (http://bit.ly/androguard)

، چارچوبی به نام MARA نیز وجود دارد که می تواند اقدامات متعددی برای شما انجام دهد که از جمله این اقدامات می توان به مهندسی معکوس، ابهام زدایی (توسط سرویس آنلاین Apk Deguard) و … اشاره کرد. یک اپلیکیشن مشهور اندرویدی به نام

Happy Chick (www.happychick.hk)

وجود دارد. این اپلیکیشن بر روی کنسول های بازی اندرویدی نظیر JXD S7800b نیز عرضه می شود. آن را دانلود کنید تا ببنییم MARA چه اطلاعاتی در مورد آن دارد:

./mara.sh –s happychick.apk.

کل فرایند چند لحظه طول می کشد، بنابراین اندکی صبور باشید. زمانی که در مورد ابهام زدایی از شما سوالی پرسیده می شود: عبارت «no» را تایپ کنید. Apk Deguard فقط فایل هایی با حجم ۱۹ مگابایت را دریافت می کند. زمانی که در مورد ایجاد نمودار جریان نیز سوالی پرسیده شد، عبارت “no” را تایپ کنید. نتایج و تمام فایل های واسطه در data/happychick.apk ذخیره خواهند شد.
زمانی که بررسی تمام شد، به

data/happychick.apk/analysis/static/malicious_activity

مراجعه کنید. در اینجا MARA تمام موارد مضر یا مشکوک را ذخیره کرده است. این بخش را بررسی کرده و نتیجه گیری کنید: Happy Chick اندکی مشکوک به نظر می رسد، این طور نیست؟ به VirusTotal رفته و شرایط را بررسی کنید. شما می توانید هش SHA-256 را برای APK دانلود شده را از طریق sha256sum happychick.apk محاسبه نموده و سپس از این هش برای بررسی نمونه در سربرگ Search استفاده کنید. در طی نگارش این مقاله، شش آنتی ویروس قادر به پیدا کردن رفتارهای مشکوک شدند که از جمله آنها می توان به Dowgin اشاره کرد (به http://bit.ly/AndroidDowgin مراجعه کنید). همین اقدام را در طی جستجوی اثرانگشت مجوز SHA-1 خاص در Koodous انجام دهید. آیا مشاهده کردید که تمام اپلیکیشن ها از یک مجوز استفاده می کنند؟

 

نحوه وارد کردن کدهای مخرب در اپلیکیشن ها توسط هکرهااشکال زدایی smali

LeakerLocker یکی از جدیدترین بدافزارها می باشد که قبل از اجرا به بررسی برخی از ویژگی ها می پردازد (http://bit.ly/LUDLeakerLocker). از این طریق، توسعه دهنده ها اطمینان حاصل می کنند که بررسی آن در Sandbox یا محیط های مجازی اندکی دشوارتر خواهد بود. LeakerLocker وجود حداقل ۱۰ مخاطب در گوشی و همچنین ۳ تماس در گزارشات را بررسی می کند. این بررسی ها را می توان با مهندسی معکوس اپلیکیشن و کد Smali آن مشاهده نمود. البته، آنها را می توان به آسانی تغییر داد. اشکال زدایی Smali می تواند در زمینه این مشکلات کمک کند. اگرچه به خاطر داشته باشید که بسیاری از بدافزارها ممکن است با تکنیک های اشکال زدایی عرضه شوند.
اسنپ شات پیشین خود را در Android VM بازیابی کرده و آخرین نسخه از اپلیکیشن HelloWorld را از hello-world-trojanized-nfc.apk دریافت کنید. آن را با استفاده از adb نصب کرده و اجرا نمایید. اگر /system/xbin/librank را اجرا کنید، هیچ مشکلی ایجاد نخواهد شد. ظاهرا، این اپلیکیشن باگ خود را اجرا نکرده است. بیایید به بررسی دلیل این امر بپردازیم. IntelliJ IDEA و پلاگین smalidea را دانلود کرده و نصب کنید. سپس، اپلیکیشن را دی کامپایل کنید:

apktool.sh d hello-world-trojanized-nfc.apk.

قبل از اشکال زدایی یک اپلیکیشن، بهتر است نمودار جریان کنترل آن را ایجاد کنید.
از دستورالعمل ها برای ایجاد محیط اشکال زدایی استفاده کنید. سپس به تنظیمات Android VM مراجعه کرده و HelloWorld را به عنوان اپلیکیشن قابل اشکال زدایی انتخاب کنید. فعالسازی گزینه Wait for Debugger را فراموش نکنید. در نهایت، اپلیکیشن را اجرا کرده و سپس به IntelliJ IDEA بازگردید. با دوبار کلیک در سمت چپ، یک نقطه شکست در روش onCreate() در فایل MainActivity.smali ایجاد کنید.
اکنون شما آماده هستید: از Run/Debug استفاده کرده و گزینه Remote را که پیشتر ایجاد نمودید را انتخاب کنید. اجرا در روش onCreate() متوقف خواهد شد. پایین آمده و کد if-eqz v20. :cond_0 را پیدا کنید. این کد بدین معنا می باشد: اگر میزان v20 برابر ۰ باشد، به cond_0 منتقل شوید، در غیر این صورت، دستورالعمل بعدی را اجرا کنید. اگر کد را تا رسیدن به :cond_0 دنبال کنید، مشاهده خواهید کرد که مرحله ایجاد مشکل رد شده است. اپلیکیشن یک بررسی انجام می دهد و اگر ارزیابی آن برابر ۰ باشد، ایجاد مشکل را رد خواهد کرد. یک نقطه شکست در if-eqz v20, :cond_0 ایجاد کرده و اجرا را با کلیک بر روی Resume Program ادامه دهید. همچنین می توانید دکمه F9 را برای ادامه فشار دهید. دو سطر بالاتر، فراخوانی با عنوان hasSystemFeature() وجود دارد که مقدار ثبت شده در v1 به آن ارسال شده و این مقدار از v20 کپی شده بود (خط های ۱-۲):

۱ const-string v20, «android.hardware.nfc»
۲ move-object/from16 v1, v20
۳ invoke-virtual {v0,v1}, Landroid/content/pm
PackageManager;- >hasSystemFeatureLjava/lang
String;)Z
۴ move-result v20
۵ if-eqz v20, :cond_0

بنابراین، اپلیکیشن قابلیت NFC (خط سوم) را بررسی می کند: اگر دستگاه به این قابلیت مجهز نباشد، اشکال ایجاد نخواهد شد (خط پنجم). اکنون اشکال زدا را از Android VM جدا کرده و از Vim برای ویرایش فایل MainActivity.smali استفاده کنید. به دنبال روش onCreate() بوده و سپس خطی که در آن پرش شرطی ارزیابی شده است را پیدا کنید. If-eqz را با مخالف آن (if-nez) جایگزین کنید. فایل را ذخیره کرده و سپس از Apktool برای ری کامپایل و بسته بندی مجدد Apk استفاده کنید: apktool.sh b helloworld-trojanized-nfc. به هیچ عنوان jarsign نمودن مجدد آن را فراموش نکرده و سپس آن را بر روی Android VM نصب کنید (در ابتدا، نسخه پیشین را از نصب خارج کنید، زیرا شما به رمز شخصی توسعه دهنده اصلی دسترسی ندارید). گزینه Wait for Debugger را در Android VM غیرفعال کرده و اپلیکیشن جدید را یکبار دیگر اجرا کنید. این بار اشکال رد نشده و /system/xbin/librank با run-as بازنویسی می شود.
قبل از اشکال زدایی اپلیکیشن، ایده خوبی است که نمودار جریان کنترل را ایجاد کنید. این نمودار شما را به بررسی شرایط قادر ساخته و در نتیجه می توانید به راحتی نقطه آغاز بررسی را انتخاب کنید. در چارچوب MARA، ابزاری به نام Smali-CFG وجود دارد که کاملا در پایتون نوشته شده است، مسیر را را MARA_framework/tools/samli-CGF تغییر دهید. به منظور ایجاد CFG برای فایل MainACtivity.smali، متن Flow.py را بدین صورت اجرا کنید:

Python ./Flow.py –c /path/to/MainActivity.

این فرمان فایل جدیدی به نام _flow.png ایجاد خواهد کرد که حاوی CFG برای کد smali خواهد بود. آن را باز کرده و سعی کنید نشانگر های سبز و قرمز را پیدا کنید. نشانگرهای سبز به منطله پرش های شرطی تبدیل شده به TRUE و نشانگرهای قرمز به منزله پرش های شرطی تبدیل شده به FALSE می باشند. تشخیص ساختارهای Try-catch در نمودار آسان می باشد: کد موجود در براکت try با استفاده از نشانگرهای آبی و کد موجود در براکت های catch نیز با استفاده از نشانگرهای نارنجی ارجاع داده شده اند. با استفاده از این CFG، شما می توانید برخی از بخشهای جالب موجود در کد smali را پیدا کرده و سپس با تعیین نقاط شکست بر روی آنها، روند را ادامه دهید. به خاطر داشته باشید که ایجاد CGF ها برای دسته های بزرگ به زمان بیشتری نیاز خواهد داشت.

نظر بدهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

It is main inner container footer text