חטיפת ברגים

קטגוריית OWASP:‏ MASVS-PLATFORM: Platform Interaction

סקירה כללית

חטיפת קליקים היא המקבילה באפליקציות ל-Android לפרצת האבטחה של חטיפת קליקים באינטרנט: אפליקציה זדונית מטעה את המשתמש וגורמת לו ללחוץ על פקד שקשור לאבטחה (כפתור אישור וכו') על ידי הסתרת ממשק המשתמש באמצעות שכבת-על או באמצעים אחרים. בדף הזה אנחנו מבדילים בין שתי גרסאות של התקפה: הסתרה מלאה והסתרה חלקית. בהסתרה מלאה, התוקף מכסה את אזור המגע, ואילו בהסתרה חלקית, אזור המגע נשאר גלוי.

השפעה

מתקפות של חטיפת קליקים משמשות כדי להטעות משתמשים ולגרום להם לבצע פעולות מסוימות. ההשפעה תלויה בפעולה שהתוקף מנסה לבצע.

סיכון: הסתרה מלאה

בהסתרה מלאה, התוקף מכסה את אזור המגע כדי לחטוף את אירוע המגע:

תמונה של חסימה מלאה

השבתה זמנית של אותות אכיפה

כדי למנוע הסתרה מלאה, צריך להגדיר את View.setFilterTouchesWhenObscured(true) בקוד. ההגדרה הזו חוסמת נגיעות שמועברות על ידי שכבת-על. אם אתם מעדיפים גישה הצהרתית, אתם יכולים גם להוסיף את android:filterTouchesWhenObscured="true" בקובץ הפריסה של האובייקט View שאתם רוצים להגן עליו.


סיכון: חסימה חלקית

בהתקפות של הסתרה חלקית, אזור המגע נשאר גלוי:

תמונה של הסתרה חלקית

השבתה זמנית של אותות אכיפה

כדי לצמצם את ההשפעה של הסתרה חלקית, אפשר להתעלם באופן ידני מאירועי מגע עם הדגל FLAG_WINDOW_IS_PARTIALLY_OBSCURED. אין אמצעי הגנה שמוגדרים כברירת מחדל מפני התרחיש הזה.

‫Android 14 ו-accessibilityDataSensitive: ב-Android 14 (רמת API ‏34) ומעלה, אתם יכולים להשתמש בדגל accessibilityDataSensitive כדי להגן על נתונים רגישים מפני שירותי נגישות זדוניים. כשמגדירים את הדגל הזה בתצוגות רגישות, כמו מסכי התחברות או אישור עסקה, רק שירותים שמצהירים על android:isAccessibilityTool="true" יכולים לקרוא את נתוני התצוגה או לבצע בה פעולות נגישות. ב-Android מגרסה 16 (רמת API‏ 36) ומעלה, accessibilityDataSensitive חוסם גם תנועות מגע מדומות שמוזרקות באמצעות AccessibilityService.dispatchGesture על ידי שירותים שלא מצהירים על android:isAccessibilityTool="true". כך המערכת מספקת הגנה ברמת המערכת מפני האזנות סתר ומתקפות החדרת קוד, שמאפיינות תרחישים של הסתרה חלקית. אפשר להפעיל את accessibilityDataSensitive באופן משתמע על ידי ציון android:filterTouchesWhenObscured="true" בקובצי הפריסה.


סיכונים ספציפיים

בקטע הזה מפורטים סיכונים שדורשים אסטרטגיות לא סטנדרטיות לצמצום סיכונים, או סיכונים שצומצמו ברמת SDK מסוימת ומופיעים כאן כדי שהרשימה תהיה מלאה.

סיכון: android.Manifest.permission.SYSTEM_ALERT_WINDOW

ההרשאה SYSTEM_ALERT_WINDOW מאפשרת לאפליקציה ליצור חלון שמוצג מעל כל האפליקציות.

השבתה זמנית של אותות אכיפה

בגרסאות חדשות יותר של Android יש כמה אמצעי הגנה, כולל:

  • ב-Android 6 (רמת API 23) ומעלה, המשתמשים צריכים לתת לאפליקציה הרשאה מפורשת ליצור חלון שכבת-על.
  • ב-Android 12 (רמת API‏ 31) ומעלה, אפליקציות יכולות להעביר את true אל Window.setHideOverlayWindows().

סיכון: הודעה קצרה בהתאמה אישית

תוקף יכול להשתמש ב-Toast.setView() כדי להתאים אישית את המראה של הודעת טוסט. ב-Android 10 (רמת API‏ 29) ומטה, אפליקציות זדוניות יכולות להפעיל הודעות קצרות כאלה מהרקע.

השבתה זמנית של אותות אכיפה

אם האפליקציה מטרגטת ל-Android 11 (רמת API‏ 30) ומעלה, המערכת חוסמת הודעות טוסט מותאמות אישית ברקע. עם זאת, בנסיבות מסוימות אפשר לעקוף את ההגנה הזו באמצעות התפרצות של הודעות קופצות, שבה התוקף מוסיף כמה הודעות קופצות לתור כשהאפליקציה פועלת בחזית, והן ממשיכות להופיע גם אחרי שהאפליקציה עוברת לרקע.

החל מ-Android 12 (רמת API‏ 31), יש הגנה מלאה מפני התקפות של הודעות קופצות ברקע והתקפות של הודעות קופצות מרובות.


סיכון: פעילות סנדוויץ'

אם אפליקציה זדונית מצליחה לשכנע משתמש לפתוח אותה, היא עדיין יכולה להפעיל פעילות מהאפליקציה של הקורבן, ואז להציג מעליה שכבה עם פעילות משלה. כך נוצר סנדוויץ' של פעילויות ומתבצעת מתקפת חסימה חלקית.

השבתה זמנית של אותות אכיפה

השבתה זמנית של אותות אכיפה כלליים במקרה של הסתרה חלקית. כדי להגן על האפליקציה לעומק, חשוב לוודא שאתם לא מייצאים פעילויות שלא צריך לייצא, כדי למנוע מתוקפים להכניס אותן בין פעילויות אחרות.


משאבים