روابط عمومی شرکت ایدکو (توزیعکنندهی محصولات کسپرسکی در ایران)؛ سازندگان برنامههای گسترده بدافزاری اغلب ابزارهای مختلفی را به کار میبندند که شناسایی کُد و تحلیل آن را کُند میکند و بدافزار اندرویدی هم از این قاعده مستثنی نیست. به عنوان مثال، دراپرهایی مانند Badpack و Hqwar که طراحی شدند برای مخفیانه ارسال کردنِ بانکرها تروجان یا جاسوسافزار به اسمارتفونها بین عوامل مخرب که به دستگاههای موبایل حمله میکنند بسیار محبوبند. جالب است بدانید این اواخر بانکر جدیدی را به نام SoumniBot کشف کردیم که کاربران کرهای را هدف قرار داده و به رویکرد غیرقراردادیاش برای دور زدن تحلیل و شناسایی معروف است (این رویکرد، همان مبهمسازی مانیفست اندروید است).
مبهمسازی SoumniBot: اکسپلویت باگها در روند استخراج و تجزیه مانیفست اندروید
هر فایل APK یک آرشیو ZIP با AndroidManifest.xml در پوشه اصلی است. این فایل حاوی اطلاعاتی در مورد اجزای اعلام شده، مجوزها و سایر دادههای برنامه است و به سیستم عامل کمک میکند تا اطلاعات مربوط به نقاط ورودی برنامههای مختلف را بازیابی کند. درست مانند سیستم عامل، تحلیلگر با بازرسی مانیفست برای یافتن نقاط ورودی کلید کار را میزند، جایی که تجزیه و تحلیل کد باید شروع شود. این احتمالاً همان چیزی است که توسعهدهندگان SoumniBot را بر آن داشت تا در مورد اجرای روال تجزیه و استخراج مانیفست تحقیق کنند، جایی که آنها چندین فرصت جالب برای مبهم کردن APKها پیدا کردند.
تکنیک اول: مقدار روش فشردهسازی نامعتبر است
این یک تکنیک نسبتاً شناخته شده است که توسط انواع مختلف بدافزار از جمله SoumniBot استفاده میشود و به نحوه باز کردن مانیفستها مرتبط است. در کتابخانه libziparchive، تابع unarchiving استاندارد تنها دو مقدار روش فشردهسازی را در سرآیند رکورد مجاز میسازد: 0x0000 (ذخیره شده به صورت فشرده نشده) и 0x0008 (دیفلیتشده[1])، یا در غیر این صورت خطا میدهد. با این حال، به جای استفاده از این تابع، توسعهدهندگان اندروید سناریوی جایگزینی را انتخاب کردند که در آن مقدار فیلد روش فشردهسازی اشتباه تأیید شده است.
اگر تجزیهکننده APK با هر مقدار روش فشردهسازی به جز x0008 (DEFLATED) 0 در APK برای ورودی AndroidManifest.xml برخورد کند، دادهها را فشرده نشده در نظر میگیرد. این به توسعه دهندگان برنامه اجازه میدهد تا هر مقداری به جز 8 را در روش فشردهسازی قرار دهند و دادههای فشردهنشده بنویسند. اگرچه هر بستهبندیکنندهای که اعتبارسنجی روش فشردهسازی را به درستی پیادهسازی کند، مانیفست مانند آن را نامعتبر در نظر میگیرد، تجزیهکننده APK Android آن را به درستی تشخیص و به برنامه اجازه نصب میدهد.
تکنیک دوم: سایز نامعتبر مانیفست
اجازه دهید از فایل 0318b7b906e9a34427bf6bbcf64b6fc8 به عنوان مثال برای بررسی ماهیت این تکنیک استفاده کنیم. هدر ورودی AndroidManifest.xml در بایگانی ZIP اندازه فایل مانیفست را بیان میکند. اگر ورودی غیر فشرده ذخیره شود، بدون تغییر از بایگانی کپی میشود، حتی اگر اندازه آن اشتباه ذکر شده باشد. تجزیهکننده مانیفست هر پوششی را نادیده میگیرد، یعنی اطلاعاتی که به دنبال بار بارگذاری میآید که با مانیفست ارتباطی ندارد. بدافزار از این مزیت استفاده میکند: اندازه مانیفست بایگانیشده در آن از اندازه واقعی آن بیشتر میشود، که منجر به همپوشانی شده و برخی از محتوای بایگانی به مانیفست بستهنشده اضافه میشود. تجزیهکنندههای مانیفست دقیقتر نمیتوانند فایلی مانند آن را بخوانند، این درحالیست که تجزیهکننده Android مانیفست نامعتبر را بدون هیچ خطایی مدیریت میکند.
توجه داشته باشید اگرچه دستگاههای زنده این فایلها را معتبر تفسیر میکنند، اما apkanalyzer، ابزار رسمی خود گوگل برای تجزیه و تحلیل APKهای مونتاژ شده، نمیتواند آنها را مدیریت کند. بر این اساس به گوگل اطلاع دادهایم.
تکنیک سوم: نامهای بلند فضای نام[2]
خانواده بدافزار SoumniBot، برای مثال فایل fa8b1592c9cda268d8affb6bceb7a120 نیز از این تکنیک استفاده کرده است. مانیفست شامل رشتههای بسیار طولانی است که به عنوان نام فضاهای نام XML استفاده میشود. مانیفستهایی که حاوی رشتههای این چنینی هستند، هم برای انسانها و هم برای برنامهها غیرقابل خواندن میشوند، در حالیکه دومی ممکن است نتواند حافظه کافی برای پردازش آنها اختصاص دهد. تجزیه کننده مانیفست در خود سیستم عامل به طور کامل فضاهای نام را نادیده میگیرد، بنابراین مانیفست بدون خطا مدیریت میشود.
پشت این مبهمسازی چیست؟ کارکرد SoumniBot
هنگام شروع، برنامه یک پیکربندی با دو پارامتر mainsite и mqtt را از سرور درخواست میکند که آدرس آن یک ثابت کدگذاری شده است. هر دو پارامتر آدرسهای سرور هستند که بدافزار برای عملکرد صحیح به آنها نیاز دارد. سرور سایت اصلی دادههای جمع آوری شده را دریافت و mqtt قابلیت پیامرسانی MQTT را برای دریافت دستورات فراهم میکند. اگر سرور منبع به دلایلی این پارامترها را ارائه نکرده باشد، برنامه از آدرسهای پیش فرض که در کد نیز ذخیره شدهاند استفاده میکند.پس از درخواست پارامترها، برنامه یک سرویس مخرب را راه اندازی میکند. اگر به دلایلی نتواند شروع شود یا متوقف شود، هر 16 دقیقه یک تلاش جدید انجام میشود. هنگامی که برای اولین بار اجرا میشود، تروجان آیکون برنامه را پنهان میکند تا حذف پیچیده شود و سپس شروع به آپلود داده ها در پس زمینه از دستگاه قربانی به سایت اصلی هر 15 ثانیه میکند. این دادهها شامل آدرس IP، کشور استنباط شده از آن، لیست مخاطبین و حسابها، پیام های SMS و MMS و شناسه قربانی است که با کمک کتابخانه Trustdevice-Android ایجاد شده است. تروجان همچنین مشترک پیامهایی از سرور MQTT میشود تا دستورات شرح داده شده در زیر را دریافت کند.
#
|
شرح
|
پارامترها
|
0
|
اطلاعات مربوط به دستگاه آلوده را ارسال میکند: شماره تلفن، شرکت مخابراتی و غیره، و نسخه تروجان، و به دنبال آن همه پیامکهای اس ام اس قربانی، مخاطبین، حسابها، عکسها، فیلمها و گواهیهای دیجیتال بانکداری آنلاین.
|
-
|
1
|
لیست کانتکت قربانی را ارسال میکند
|
-
|
2
|
روی دستگاه قربانی، کانتکترا پاک میکند
|
داده: نام مخاطبی که باید حذف شود
|
3
|
پیامهای اساماس و اماماس قربانی را ارسال میکند
|
-
|
4
|
یک دستور اشکالزدایی احتمالاً با ارسال گزارش تماس در نسخه جدید جایگزین میشود.
|
-
|
5
|
عکسها و ویدیوهای قربانی را ارسال میکند
|
-
|
8
|
مسیج اساماس را ارسال میکند
|
داده: شناسهای که بدافزار از آن برای دریافت پیام جهت ارسال استفاده میکند. تروجان شناسه را به سایت اصلی میفرستد و در عوض متن پیام را دریافت میکند.
|
24
|
اپهای نصبشده را ارسال میکند
|
-
|
30
|
روی دستگاه، کانتکت جدید اضافه میکند
|
نام: نام تماس؛ phoneNum: شماره تلفن
|
41
|
سطوح ولوم رینگتن را دریافت میکند
|
-
|
42
|
حالت بیصدا را روشن و خاموش میکند
|
داده: یک پرچم برای روشن کردن حالت بی صدا روی 1 و برای خاموش کردن آن روی 0 تنظیم شده است
|
99
|
در واکنش به درخواست پینگ MQTT مسیج پانگ ارسال میکند
|
-
|
100
|
حالت دیباگ را روشن میکند
|
-
|
101
|
حالت دیباگ را خاموش میکند
|
-
|
فرمان با عدد 0 قابل ذکر است. از جمله موارد دیگر، رسانههای ذخیرهسازی خارجی را برای فایلهای .key و .der جستجو میکند که حاوی مسیرهای /NPKI/yessign هستند.
اگر اپ فایلهایی از این شکل پیدا کند، دایرکتوری را –جایی که آنها در آرشیو زیپ قرار دارند- کپی کرده و به سرور C&C ارسال میکند. این فایلها گواهیهای دیجیتال هستند که بانکهای کرهای برای کلاینتهای خود صادر میکنند. اینها برای ورود به سرویسهای آنلاین بانکداری یا تأیید تراکنشهای بانکی استفاده میشوند. این تکنیک برای بدافزار بانکدار اندرویدی کاملاً غیرمعول است. راهکارهای امنیتی کسپرسکی باوجود اینکه تکنیکهای مبهمسازی SoumniBot پیچیده است اما آن را شناسایی میکند و حکم Trojan-Banker.AndroidOS.SoumniBot را بدان نسبت میدهد.
جمعبندی
سازندگان بدافزار دوست دارند تعداد دستگاههایی را که آلوده میکنند بدون اینکه جلب توجه کنند افزایش دهند. این آنها را ترغیب میکند که راههای جدید پیچیدهتر کردن شناسایی را کشف کنند. توسعهدهندگان SoumniBot متأسفانه به دلیل اعتبارسنجیهای ناکافی و ساده در کد تجزیهکننده مانیفست اندروید، توانستهاند به این موفقیت دست یابند. ما جزئیات تکنیکهای این تروجان را شرح دادیم تا محققین جهان از تاکتیکها آگاه باشند و بدانند در آینده کدام نوع بدافزارها ممکن است از آنها وام بگیرند. جدا از مبهمسازی غیرقراردادی، SoumniBot مشهور به سرقت کلیدهای بانکداری آنلاین کره است که ما به ندرت در بانکرهای اندرویدی آن را مشاهده کردیم. این قابلیت به عاملین شرور اجازه میدهد تا کیفپول قربانی را خالی کنند و متودهای احراز هویت را که بانکها استفاده میکنند دور بزنند. برای جلوگیری از این اتفاقات، توصیه میکنیم از راهکار امنیتی مطمئنی روی اسمارتفون خود استفاده کنید تا تروجان شناسایی شده و علیرغم همه ترفندها جلوی نصب شدنش گرفته شود.
[1]یک الگوریتم فشرده سازی بدون از بین رفتن اطلاعات با استفادهی ترکیبی از دو الگوریتم هافمن و LZ77 می باشد
[2]یک مجموعه نماد میباشد که از آن برای سازمان دادن به انواع متفاوت شیء استفاده میشود، هدف آن است که این اشیا بتوانند توسط نام ارجاع شوند.
منبع: کسپرسکی آنلاین (ایدکو)
کسپرسکی اسم یکی از بزرگترین شرکتهای امنیتی و سازنده آنتی ویروس است که برخی از کاربران اشتباهاً این شرکت و محصولات آنتی ویروس آن را با عناوینی نظیر کسپرسکای،کاسپرسکی، کسپراسکای، کسپراسکای، و یا کاسپراسکای نیز میشناسد. همچنین لازم به ذکر است مدیرعامل این شرکت نیز یوجین کسپرسکی نام دارد.