النقر للدفع

فئة OWASP: MASVS-PLATFORM: التفاعل مع النظام الأساسي

نظرة عامة

يُعدّ اختطاف النقرات في تطبيقات Android مكافئًا لثغرة تمويه النقر على الويب: إذ يخدع تطبيق ضار المستخدم ويحثّه على النقر على عنصر تحكّم ذي صلة بالأمان (مثل زر التأكيد وما إلى ذلك) عن طريق حجب واجهة المستخدم باستخدام طبقة متراكبة أو بطرق أخرى. في هذه الصفحة، نميّز بين نوعَين من الهجمات: الحجب الكامل والحجب الجزئي. في حالة الحجب الكامل، يضع المهاجم طبقة فوق منطقة اللمس، بينما في حالة الحجب الجزئي، تظل منطقة اللمس غير محجوبة.

التأثير

تُستخدَم هجمات النقر الخادع لخداع المستخدمين وحثّهم على تنفيذ إجراءات معيّنة. يعتمد التأثير على الإجراء الذي يستهدفه المهاجم.

المخاطرة: الانسداد الكامل

في حالة الحجب الكامل، يضع المهاجم طبقة فوق منطقة اللمس لاختطاف حدث اللمس:

صورة الإطباق الكامل

إجراءات التخفيف

يتم منع الانسداد الكامل من خلال ضبط View.setFilterTouchesWhenObscured(true) في الرمز. يؤدي ذلك إلى حظر اللمسات التي تم تمريرها بواسطة طبقة عرض. إذا كنت تفضّل استخدام أسلوب تعريفي، يمكنك أيضًا إضافة android:filterTouchesWhenObscured="true" في ملف التصميم لعنصر View الذي تريد حمايته.


المخاطرة: الانسداد الجزئي

في هجمات الحجب الجزئي، تظلّ منطقة اللمس غير محجوبة:

صورة الحجب الجزئي

إجراءات التخفيف

يمكنك الحدّ من الحجب الجزئي من خلال تجاهل أحداث اللمس التي تتضمّن العلامة FLAG_WINDOW_IS_PARTIALLY_OBSCURED يدويًا. لا تتوفّر أي إجراءات حماية تلقائية ضد هذا السيناريو.

‫Android 16 وaccessibilityDataSensitive: بدءًا من الإصدار Android 16 (المستوى 16 لواجهة برمجة التطبيقات) والإصدارات الأحدث، يمكن للمطوّرين استخدام العلامة accessibilityDataSensitive لحماية البيانات الحسّاسة بشكل أكبر من خدمات تسهيل الاستخدام الضارة التي لا تُعدّ أدوات شرعية لتسهيل الاستخدام. عند ضبط هذا العلامة على طرق العرض الحساسة (مثل شاشات تسجيل الدخول وشاشات تأكيد المعاملات)، فإنّها تمنع التطبيقات التي لديها إذن الوصول إلى المحتوى من قراءة البيانات الحساسة أو التفاعل معها، ما لم يتم الإعلان عنها على أنّها isA11yTool=true في بيانها. ويوفّر ذلك حماية أقوى على مستوى النظام ضد محاولات التجسس والهجمات التي تستهدف عمليات النقر، والتي تميّز سيناريوهات الحجب الجزئي. يمكن للمطوّرين غالبًا تفعيل accessibilityDataSensitive ضمنيًا من خلال تحديد android:filterTouchesWhenObscured="true" في ملفات التصميم.


المخاطر المحدّدة

يجمع هذا القسم المخاطر التي تتطلّب استراتيجيات تخفيف غير عادية أو التي تم تخفيفها على مستوى معيّن من حزمة SDK، وهي مدرَجة هنا من أجل الاكتمال.

المخاطرة: android.Manifest.permission.SYSTEM_ALERT_WINDOW

يسمح الإذن SYSTEM_ALERT_WINDOW لأحد التطبيقات بإنشاء نافذة تظهر فوق جميع التطبيقات.

إجراءات التخفيف

تتضمّن الإصدارات الأحدث من Android العديد من إجراءات التخفيف، بما في ذلك ما يلي:

  • في نظام التشغيل Android 6 (المستوى 23 من واجهة برمجة التطبيقات) والإصدارات الأحدث، على المستخدمين منح الإذن صراحةً للتطبيق بإنشاء نافذة متراكبة.
  • في نظام التشغيل Android 12 (المستوى 31 لواجهة برمجة التطبيقات) والإصدارات الأحدث، يمكن للتطبيقات تمرير true إلى Window.setHideOverlayWindows().

المخاطرة: إشعار مخصّص

يمكن للمهاجم استخدام Toast.setView() لتخصيص مظهر رسالة إشعار مؤقت. في نظام التشغيل Android 10 (المستوى 29 لواجهة برمجة التطبيقات) والإصدارات الأقدم، يمكن للتطبيقات الضارة عرض إشعارات من الخلفية.

إجراءات التخفيف

إذا كان التطبيق يستهدف الإصدار 11 من نظام التشغيل Android (المستوى 30 لواجهة برمجة التطبيقات) أو الإصدارات الأحدث، سيحظر النظام الإشعارات المخصّصة في الخلفية. ومع ذلك، يمكن تجنُّب هذا الإجراء الوقائي في بعض الحالات باستخدام Toast burst، حيث يضع المهاجم عدة إشعارات مؤقتة في قائمة الانتظار أثناء عمل التطبيق في المقدّمة، ويستمر إطلاقها حتى بعد انتقال التطبيق إلى الخلفية.

تمت معالجة الإشعارات المؤقتة في الخلفية وهجمات الإشعارات المؤقتة المتعددة بالكامل بدءًا من الإصدار 12 من نظام التشغيل Android (المستوى 31 من واجهة برمجة التطبيقات).


المخاطرة: شطيرة النشاط

إذا تمكّن تطبيق ضار من إقناع أحد المستخدمين بفتحه، سيظل بإمكانه تشغيل نشاط من تطبيق الضحية ثمّ تراكبه بنشاطه الخاص، ما يؤدّي إلى إنشاء تراكب نشاط وتنفيذ هجوم حجب جزئي.

إجراءات التخفيف

اطّلِع على إجراءات التخفيف العامة لحالات الحجب الجزئي. للحصول على دفاع شامل، تأكَّد من عدم تصدير الأنشطة التي لا تحتاج إلى تصديرها لمنع المهاجم من إدراجها بين أنشطة أخرى.


المراجع