نگاهی به حملات وب ویو در اندروید

اجرای بدافزارهای مالی بر علیه دستگاه‌های اندروید

هکرها معمولاً از بدافزارهای مالی برای کلاهبرداری در حملات تحت وب استفاده می‌کنند. اجرای این رویکرد در دنیای بدافزارهای مالی مبتنی بر اندروید یک روند جدید و نو است. بدافزارهای اقتصادی در اندروید عموماً از تکنیک‌های پوشش جهت سرقت اعتبارنامه‌های کاربران سوءاستفاده می‌کنند.

محققان مرکز Trusteer بخش امنیت آی‌بی‌ام در سال 2022 روند جدیدی را در بدافزارهای مالی دستگاه‌های همراه مشاهده کردند که دستگاه‌های اندروید را هدف گرفته و جایگزین روش‌های قدیمی شده است. این حملات جدید از تاکتیک‌های کارآمد قدیمی استفاده می‌کنند که برای اندروید تنظیم شدند. این حملات توسط IBM Trusteer، حملات وب ویوی موبایل نامگذاری شده چون مسیر مورد استفاده برای اجرای حمله، قسمت وب ویو (WebView) است نه نرم‌افزار مرورگر.

دو مورد از کارآمدترین تکنیک‌های این حمله عبارتند از:

در ادامه هر یک از تکنیک‌های بالا را مورد بررسی قرار می‌دهیم.

حمله تزریق وب چیست؟

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

مثلاً کد جاوااسکریپتی که توسط بدافزار تزریق شده، می‌تواند داده‌ها را از یک فرم HTML که کاربر پر کرده، استخراج کند. بدافزار می‌تواند با این روش، اعتبارنامه‌های کاربری، شماره کارت بانکی، کد CVV2 و سایر اطلاعات را استخراج کند. سپس می‌توان این داده‌ها را به سرور فرماندهی و کنترل گرداننده بدافزار فرستاد. مثال رایج دیگر از حمله تزریق وب، دستکاری علائم بصری یک سایت است. می‌توان از این حمله برای درج فیلدهای جدید جهت سرقت اطلاعات هویتی که توسط سرویس اصلی درخواست نشده استفاده کرد. حتی می‌توان این حمله را جهت حذف فیلدهای موجود اجرا کرده و مانع از مشاهده هشدارهای امنیتی توسط کاربران شد. بدافزارها از این حمله برای انجام کلاهبرداری روی دستگاه (ODF[1]) با تغییر گیرنده وجه تراکنش شروع شده توسط قربانی هم استفاده می‌کنند و حساب مدنظرشان را به عنوان گیرنده وجه تنظیم می‌کنند.

شکل 1 – مثالی از یک کد جاوااسکریپت تزریق شده. تزریق این کد منجر به ایجاد یک فرم لاگین جعلی به سایت یک فروشگاه اینترنتی می‌شود. در سمت چپ محتوای جعلی و سمت راست محتوای HTML اصلی را مشاهده می‌کنید.

 

شکل 2 – نتیجه کد جاوااسکریپت تزریق شده: یک فرم لاگین جعلی به سایت فروشگاه اینترنتی (سمت چپ) در مقابل سایت اصلی (سمت راست).

 

با توجه به این قابلیت‌ها، تکنیک تزریق وب بین بدافزارهای اقتصادی کامپیوتری بسیار رایج است مثل نسخه Zeus Sphinx، IcedID و TrickBot.

چرا هیچ‌گونه حمله تزریق وبی برای دستگاه‌های موبایل وجود ندارد؟

با وجود ترویج اجرای حملات تزریق وب در بین بدافزارهای اقتصادی کامپیوتری، برای موبایل این طور نیست و بدافزارهای مالی در اندروید معمولاً از تکنیک پوشش و اخیراً هم از تکنیک‌های دسترسی از راه دور (یا RAT) جهت سرقت اعتبارنامه‌های قربانیان استفاده می‌کنند.

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

سندباکس اندروید

در مجموع، در سیستم‌عامل اندروید، به هر برنامه کاربردی نصب شده، یک شناسه کاربری لینوکس (UID[2]) مجزا اختصاص داده می‌شود. اندروید از این UID برای تنظیم سندباکس برنامه‌های کاربردی در سطح هسته سیستم‌عامل استفاده می‌کند. تفکیک پردازش‌ها توسط هسته، از تزریق کد توسط برنامه‌های کاربردی به درون یکدیگر، دسترسی آنها به فایل‌ها و منابع یکدیگر و دستکاری کدهای یکدیگر جلوگیری می‌کند. با توجه به وجود این سندباکس، بدافزارهای موبایل توانایی تزریق کد در اپلیکیشن مرورگر مثل گوگل کروم را ندارند و نمی‌توانند کدها را در نرم‌افزار بانکداری واقعی تزریق کنند. بنابراین، بدافزار اندروید نمی‌تواند حملات تزریق وب کلاسیک را روی اندروید اجرا کند.

شکل 3 – مثالی که UID سه پردازش در حال اجرا روی یک دستگاه را نشان می‌دهد: یک اپلیکیشن بانکداری، یک بدافزار و یک مرورگر کروم.

آشنایی با حمله تزریق وب ویو

وب ویوی اندروید

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

بر اساس تحلیل‌های IBM Trusteer، بدافزار برای دستکاری یک سایت بانکداری نقش اپلیکیشن بانکداری را بازی کرده و یک وب ویو اجرا می‌کند که یک URL سالم از بانک را بارگذاری می‌کند. سپس بدافزار، کد جاوااسکریپت لازم برای حمله را به وب ویوی خودش تزریق می‌کند و از آن برای تفسیر متون وارد شده توسط قربانی به فیلدهای HTML مثل نام کاربری و رمزعبور قربانی استفاده می‌کند.

در شکل زیر، جریان کلی حمله را مشاهده می‌کنید:

شکل 4 – جریان حمله تزریق وب ویو

* اسمیشینگ یا فیشینگ پیامکی، یک پیامک موبایل حاوی لینک برای دانلود بدافزار یا سر زدن به یک سایت مخرب از طریق فیشینگ است.

بدافزار چگونه می‌تواند کد خودش را در قسمت وب ویو تزریق کند؟

آشنایی با رابط جاوااسکریپت اندروید

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

در بدافزار تحلیل شده توسط Trusteer، نام توابع رابط جاوااسکریپت اندروید قابل مشاهده است: sendCerd، closeFrom و sendBalance. وقتی کاربر، نام کاربری و رمز عبور خودش را وارد کند، بدافزار مقادیر را با استفاده از تابع جی‌کوئری val() استخراج کرده و اطلاعات را برای مرکز فرماندهی و کنترل ارسال می‌کند. این کد می‌تواند مقادیر را از فیلدهای متنی در HTML که کاربر پر کرده، به دست آورد از جمله فیلدهایی با ویژگی type=”Password”.

مهاجم برای تحقق اهداف جذاب خود، موجودی حساب قربانیان را در نظر می‌گیرد. Time out کد بازیابی موجودی حساب، 3 ثانیه است.

شکل 5 – کد جاوااسکریپت بدافزار
شکل 6 – بدافزار مربوط به رابط جاوااسکریپت از سمت اندروید

 

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

تنظیمات وب ویو

برای تزریق کد جاوااسکریپت، بدافزار تنظیمات وب ویو را در حالت setJavaScriptEnabled قرار داده و setDomStorageEnabled را روی true تنظیم می‌کند.

شکل 7 – تنظیمات وب ویوی بدافزار. به استفاده از یک عامل یا نماینده کاربر(user-agent) ثابت در دستگاه سامسونگ دقت کنید (SM-A205U).

تزریق جاوااسکریپت

پس از تنظیم جاوااسکریپت اندروید و وب ویو، بدافزار می‌تواند کد جاوااسکریپت را با تابع loadUrl() در وب ویوی خودش تزریق کند. در بدافزار تحلیل شده توسط Trusteer، جاوااسکریپت، در مبنای 64 (Base64) کدگذاری شده است. با نگاهی به سورس صفحه تزریق شده مشاهده می‌شود که کد تزریق شده برای انسان قابل خواندن نیست اما از آنجا که فقط در مبنای 64 کدگذاری شده، امکان کدگشایی آسان آن وجود دارد.

مقایسه حمله وب ویو با حمله پوشش

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

یکی دیگر از مزایای این روش این است که این حمله نسبت به حمله پوشش (که معمولاً حداقل نیازمند دسترسی به android.permission.SYSTEM_ALERT_WINDOW است) به دسترسی‌های کمتری نیاز دارد. در واقع، حمله وب ویو فقط به مجوز android.permission.INTERNET نیاز دارد. استفاده از این مجوز بسیار رایج است در نتیجه شک و تردید کمتری ایجاد می‌کند.

پیش از این هم بدافزارهای موبایلی از تکنیک تزریق وب ویو استفاده کرده‌اند اما اولین بار است که محققان آی‌بی‌ام متوجه شده‌اند که یک بدافزار مالی از آن سوءاستفاده می‌کند. تزریق وب ویو تنها تکنیک حمله وب شناسایی شده توسط محققان آی‌بی‌ام نیست که بدافزارهای مالی اندروید مورد سوءاستفاده قرار می‌دهند.

حمله سرقت کوکی چیست؟

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

این حمله اخیراً بین بدافزارهای اقتصادی موبایل محبوبیت زیادی کسب کرده از جمله MailBot، FluBot، SharkBot و Hydra نسخه جدیدتر BianLian.

مراحل حمله سرقت کوکی

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

BianLian یک بدافزار مالی با قابلیت‌های پوشش و همچنین RAT است. محققان IBM Trusteer بدافزار BianLian که به آن Hydra هم گفته می‌شود را تحلیل کرده‌اند. در شکل 9 جریان کلی و پیاده‌سازی حمله سرقت کوکی در BianLian تجزیه شده است.

شکل 9 – جریان حمله سرقت کوکی

 

بدافزار یک نمونه CookieManager ایجاد کرده و سپس از متد getCookie() ایجاد شده با URL سالم بارگذاری شده برای دریافت کوکی، استفاده می‌شود.

شکل 10 – تابع سرقت کوکی BianLian

 

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

شکل 11 – فهرست پیکربندی سرقت کوکی در BianLian

 

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

ویژگی setMixedContentMode در وب ویوی بدافزار بنحوی تنظیم می‌شود تا محتوا را از هر منبع دیگری بارگذاری کند حتی اگر این منبع امن نباشد. تنظیم ویژگی setCacheMode آن نیز به گونه‌ای است که محتوا را از کش بارگذاری نکند و از خود شبکه لود کند. سپس بدافزار منتظر می‌ماند تا کاربر وارد سرویس شود (لاگین) و با بررسی URL بارگذاری شده با متد onPageFinished مطمئن می‌شود که قربانی با موفقیت وارد حساب خودش شده و پس از آن با استفاده از کوکی منیجر، کوکی نشست را به دست می‌آورد.

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

مجوزهای کمتر، شک و تردید کمتر

حمله سرقت کوکی هم مثل تزریق وب ویو فقط نیاز به مجوز android.permission.INTERNET دارد. دقت کنید که حتی اگر سایتی از HTTPS استفاده کند، بدافزار همچنان می‌تواند با تکنیک ذکر شده، مقدار کوکی را تفسیر کند.

جمع‌بندی

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

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

از آنجا که این تکنیک به مجوزهای دسترسی کمی نیاز داشته و پیاده‌سازی آن برای هر شخصی که با حملات وب کامپیوتر آشنا باشد راحت است، کارشناسان IBM Trusteer ا نتظار دارند که در آینده حملات وب ویو در اندروید بسیار متداول شوند.

[1] on-device fraud

[2] Linux user ID

منبع: securityintelligence 

خروج از نسخه موبایل