تزریق JavaScript در WebView

نوعی کلاه‌برداری جدید در بازار اندروید درحال گسترش است که در آن افراد سودجو با ساخت اپلیکیشن‌های شبیه اپلیکیشن رسمی، یا با ساخت اپلیکیشن‌هایی که کارایی‌هایی دارند، اما برای مثال کاربر را برای حذف تبلیغات یا امکانات بیشتر از کاربر پول درخواست می‌کنند (و حتی بعد از پرداخت آن امکانات را به کاربر می‌دهند). این افراد برای پرداخت کاربر را به صفحه‌ی پرداخت بانکی می‌برند و برای مثال کاربر می‌بیند که ۲۰ هزار تومان باید پرداخت کند، اما پس از پرداخت، از حساب کاربر ۲۰۰ هزار تومان کسر می‌شود!

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

شاید تعجب کنید که چقدر بر خلاف همیشه کتابی نوشتم 😅 علتش اینه که این گزارش رو به توصیه یکی از استادام اول داده بودم به یه جایی… 🙊 منتها گفتن خودمون می‌دونستیم، بعد هم هیچ کجا ازش هیچی نگفتن 🤷‍ نمیدونم چی بگم، به هر حال دارم اینجا می‌نویسمش بلاخره!

حدود ۳ یا ۴ ماه پیش بود که ایمیل عجیبی گرفتم از جایی به اسم CiviCERT که گفته بودن بهم که اپ‌های اندرویدت رو دارن دستکاری می‌کنن و… در جریانی؟ من به خاطر بلاگ کلا اسپم زیاد می‌گیرم، جواب ندادم گفتم چرت و پرته لابد، بعد یه مدت بندگان خدا دوباره ایمیل دادن که: ایمیل قبلی رو گرفتی؟ 😅 یکم نگران شدم ولی بازم جواب ندادم، تا اینکه یه روز توی توییتر مسیج گرفتم از طرف کاربر هوشمند که در جریانی چنین اتفاقی داره میوفته؟ اینجا بود که یکم دیدم نه مثل اینکه جدیه!

ایمیل‌ها رو جواب دادم، و معلوم شد که یه شباهت اسمی بوده 🙂 از یه سوال StackOverflow که راجع به یکی از اپ‌های تحت تاثیر قرار گرفته بوده، به اسم من رسیده بودن، که خب اون اکانت واسه من نبود! 😅 ولی جالب بود این همه شباهت! و خب همین مساله باعث شد منم به گزارششون کمک کنم، چون دیدم مساله جالبه!

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

خب بریم سراغ اینکه داستان چیه اصلا.

شرح مختصر اتفاق و آسیب

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

در اندروید، برنامه‌نویس وقتی صفحه‌ی را در WebView باز می‌کند، می‌تواند با استفاده از متد onPageFinished از اتمام بارگزاری صفحه مطلع شود و پس از بارگزاری در صفحه‌ی html مورد نظر با استفاده از متد evaluateJavascript شئ WebView و با استفاده از کد جاوااسکریپت، صفحه‌ی بارگزاری شده را دستکاری کرده و یا هر کار دیگری که بتوان با تزریق جاوااسکریپت به صفحه انجام داد را انجام دهد.

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

روش جلوگیری و پیشگیری

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

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

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

اطلاعات تکمیلی

راجع به برنامه‌هایی که از این در حال کار هستند در این لینک قابل رویت هستند، همچنین یک ویدئوی نمونه که با کمک CiviCERT که پیگیر این نوع از حمله در ایران بود تهیه شده است.

4 دیدگاه در “تزریق JavaScript در WebView”

  1. سلام آقای مولایی
    من خیلی به کامپیوتر و کدنویسی و امنیت شبکه و … اینها علاقه دارم
    الان واقعا سردرگم هستم نمیدونم باید از چی شروع کنم
    اگه ممکنه راهنماییم کنید که از چ زبانی شروع کنم ؟ با چ کتابی؟ لینوکس یا ویندوز ؟
    ممنون

    1. من نظرم اینه که لینوکس رو شروع کن و کلا کار کن باهاش، نه اینکه بری دنبال کالی و… یکم که راه افتادی برو سراغ lpic و… برای شبکه من چون خودم تخصصی ندارم نظری هم ندارم، برای کدنویسی هم اگه تاحالا کار نکردی برای شروع و مبانی از c و c++ شروع کن، خیلی هم نمیخواد پیش بری توشون، در حد مبانی کافیه،‌بعد چون بقیه زبانا شبیه C هستن اکثرشون، راحت می‌تونی سوئیچ کنی به چیزی که نیازته

دیدگاهتان را بنویسید

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