Tapjacking

Categoría de OWASP: MASVS-PLATFORM: Interacción con la plataforma

Descripción general

Tapjacking es el equivalente de la app para Android de la vulnerabilidad web "captura de clic": una app maliciosa que engaña al usuario para que haga clic en un control relevante de seguridad (botón de confirmación, etc.) ocultando la IU con una superposición o por otros medios. En esta página, diferenciamos dos variantes de ataque: oclusión completa y parcial. En oclusión completa, el atacante superpone el área táctil, mientras que en la oclusión parcial, el área táctil permanece despejada.

Impacto

En los ataques de tapjacking, se engaña al usuario para que realice determinadas acciones. El impacto depende de la acción que el atacante tenga como objetivo.

Riesgo: Oclusión completa

En oclusión completa, el atacante superpone el área táctil para interceptar el evento táctil:

Imagen de oclusión completa

Mitigaciones

Para evitar la oclusión completa, configura View.setFilterTouchesWhenObscured(true) en el código. Esto bloquea los toques que pasa una superposición. Si prefieres un enfoque declarativo, también puedes agregar android:filterTouchesWhenObscured="true" en el archivo de diseño del objeto View que deseas proteger.


Riesgo: Oclusión parcial

En los ataques de oclusión parcial, el área táctil permanece despejada:

Imagen de oclusión parcial

Mitigaciones

Para mitigar la oclusión parcial, se ignoran de forma manual los eventos táctiles que tienen la marca FLAG_WINDOW_IS_PARTIALLY_OBSCURED. No hay protecciones predeterminadas ante esta situación.

Posible advertencia: Esta mitigación puede interferir con las apps benignas. En algunos casos, no es posible implementar esta corrección, ya que podría afectar de manera negativa la experiencia del usuario cuando una aplicación benigna causa la oclusión parcial.


Riesgos específicos

En esta sección, se recopilan los riesgos que requieren estrategias de mitigación no estándar o que se mitigaron en cierto nivel de SDK y están aquí para lograr una integridad.

Riesgo: android.Manifest.permission.SYSTEM_ALERT_WINDOW

El permiso SYSTEM_ALERT_WINDOW hace posible que una app cree una ventana que se muestre sobre todas las apps.

Mitigaciones

Las versiones más recientes de Android incorporaron varias mitigaciones, incluidas las siguientes:

  • En Android 6 (nivel de API 23) y versiones posteriores, los usuarios deben otorgar explícitamente el permiso para que la app cree una ventana superpuesta.
  • En Android 12 (nivel de API 31) y versiones posteriores, las apps pueden pasar true a Window.setHideOverlayWindows().

Riesgo: Aviso personalizado

Un atacante puede usar Toast.setView() para personalizar la apariencia de un mensaje de aviso. En Android 10 (nivel de API 29) y versiones anteriores, las apps maliciosas podrían iniciar estos avisos desde el segundo plano.

Mitigaciones

Si una app se orienta a Android 11 (nivel de API 30) o versiones posteriores, el sistema bloquea los avisos personalizados en segundo plano. Sin embargo, esta mitigación se puede evadir en algunas circunstancias con la ráfaga de avisos, en la que el atacante pone en cola múltiples avisos en primer plano, y se siguen ejecutando incluso después de que una app se va al segundo plano.

A partir de Android 12 (nivel de API 31), los ataques de ráfaga de avisos y avisos en segundo plano se mitigan por completo.


Riesgo: Sándwich de actividad

Si una app maliciosa logra convencer a un usuario de que la abra, aún puede iniciar una actividad desde la app víctima y, luego, superponerla con su propia actividad, lo que forma un sándwich de actividad y crea un ataque de oclusión parcial.

Mitigaciones

Consulta las mitigaciones generales de una oclusión parcial. Para la defensa en profundidad, asegúrate de no exportar actividades que no necesiten exportarse para evitar que un atacante las haga sándwiches.


Recursos