Tapjacking

Категория OWASP: MASVS-PLATFORM: взаимодействие с платформой

Обзор

Кража нажатий – это аналог кражи кликов для приложений 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) полностью устранены уязвимости, связанные с фоновыми всплывающими уведомлениями и атаками с их использованием.


Риск: активность между приемами пищи

Если вредоносному приложению удается убедить пользователя открыть его, оно все равно может запустить действие из приложения-жертвы, а затем наложить на него свое собственное действие, образуя сэндвич действий и создавая атаку с частичным перекрытием.

Предотвращение атак

Ознакомьтесь с общими рекомендациями по устранению частичного перекрытия. Для углубленной защиты не экспортируйте действия, которые не нужно экспортировать, чтобы злоумышленник не мог поместить их между другими действиями.


Ресурсы