hacktricks/mobile-pentesting/android-app-pentesting/android-task-hijacking.md

8.9 KiB

Secuestro de Tareas en Android

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥

Encuentra las vulnerabilidades que más importan para que puedas solucionarlas más rápido. Intruder rastrea tu superficie de ataque, realiza escaneos proactivos de amenazas, encuentra problemas en toda tu pila tecnológica, desde APIs hasta aplicaciones web y sistemas en la nube. Pruébalo gratis hoy.

{% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}


Tarea, Pila de Actividades y Actividades en Primer Plano

Una tarea es una colección de actividades con las que los usuarios interactúan al realizar un trabajo específico. Las actividades se organizan en una pila (la pila de atrás) en el orden en que se abre cada actividad.

La actividad que se muestra en la pantalla se llama actividad en primer plano y su tarea se llama tarea en primer plano. En un momento dado, solo una tarea en primer plano es visible en la pantalla.

Este es un flujo de actividad simple:

  • Solo hay Activity 1 en primer plano.
  • Se inicia Activity 2, que empuja Activity 1 a la Pila de Atrás. Ahora Activity 2 está en primer plano.
  • Se inicia Activity 3, que empuja tanto Activity 1 como 2 a la Pila de Atrás.
  • Ahora, cuando se cierra Activity 3, la actividad anterior, es decir, 2, se trae automáticamente al primer plano. Así es como funciona la navegación de tareas en Android.

Multitarea en Android - Una Tarea

Una tarea está compuesta por varias actividades.

Multitarea en Android - Varias Tareas

Android generalmente administra varias tareas.

Controles de Tareas

Ataque de Afinidad de Tareas

Afinidad de Tareas y Modos de Lanzamiento

La afinidad de tareas es un atributo que se define en cada etiqueta <activity> en el archivo AndroidManifest.xml. Describe a qué tarea prefiere un Activity unirse.
De forma predeterminada, cada actividad tiene la misma afinidad que el nombre del paquete.

Utilizaremos esto al crear nuestra aplicación PoC.

<activity android:taskAffinity=""/>

Modos de lanzamiento te permiten definir cómo se asocia una nueva instancia de una actividad con la tarea actual. El atributo launchMode especifica una instrucción sobre cómo se debe lanzar la actividad en una tarea.
Hay cuatro modos de lanzamiento diferentes:

  1. estándar (por defecto)
  2. singleTop
  3. singleTask
  4. singleInstance

Cuando el launchMode se establece en singleTask, el sistema Android evalúa tres posibilidades y una de ellas es la razón por la cual nuestro ataque es posible. Aquí están:

  • Si la instancia de la actividad ya existe:
    Android reanuda la instancia existente en lugar de crear una nueva. Esto significa que hay como máximo una instancia de actividad en el sistema bajo este modo.
  • Si es necesario crear una nueva instancia de actividad:
    El Servicio de Administrador de Actividades (AMS) selecciona una tarea para alojar la instancia recién creada encontrando una tarea "coincidente" en todas las tareas existentes. Una actividad "coincide" con una tarea si tienen la misma afinidad de tarea. Esta es la razón por la cual podemos especificar la misma afinidad de tarea que la aplicación vulnerable en nuestra aplicación de malware/atacante para que se lance en su tarea en lugar de crear la suya propia.
  • Sin encontrar una tarea "coincidente":
    El AMS crea una nueva tarea y convierte la nueva instancia de actividad en la actividad raíz de la tarea recién creada.

Ataque

La víctima necesita tener la aplicación maliciosa instalada en su dispositivo. Luego, necesita abrirla antes de abrir la aplicación vulnerable. Entonces, cuando se abre la aplicación vulnerable, se abrirá en su lugar la aplicación maliciosa. Si esta aplicación maliciosa presenta el mismo inicio de sesión que la aplicación vulnerable, el usuario no tendrá forma de saber que está ingresando sus credenciales en una aplicación maliciosa.

Puedes encontrar un ataque implementado aquí: https://github.com/az0mb13/Task_Hijacking_Strandhogg

Prevención del secuestro de tareas

Establecer taskAffinity="" puede ser una solución rápida para este problema. El modo de lanzamiento también se puede establecer en singleInstance si la aplicación no desea que otras actividades se unan a las tareas a las que pertenece. También se puede agregar una función personalizada onBackPressed() para anular el comportamiento predeterminado.

Referencias

Encuentra las vulnerabilidades que más importan para que puedas solucionarlas más rápido. Intruder rastrea tu superficie de ataque, realiza escaneos de amenazas proactivas, encuentra problemas en toda tu infraestructura tecnológica, desde APIs hasta aplicaciones web y sistemas en la nube. Pruébalo gratis hoy.

{% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥