8.9 KiB
Secuestro de Tareas en Android
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- ¿Trabajas en una empresa de ciberseguridad? ¿Quieres ver tu empresa anunciada en HackTricks? ¿O quieres tener acceso a la última versión de PEASS o descargar HackTricks en PDF? ¡Consulta los PLANES DE SUSCRIPCIÓN!
- Descubre The PEASS Family, nuestra colección exclusiva de NFTs
- Obtén el swag oficial de PEASS y HackTricks
- Únete al 💬 grupo de Discord o al grupo de Telegram o sígueme en Twitter 🐦@carlospolopm.
- Comparte tus trucos de hacking enviando PRs al repositorio de hacktricks y al repositorio de hacktricks-cloud.
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:
- estándar (por defecto)
- singleTop
- singleTask
- 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
- https://blog.dixitaditya.com/android-task-hijacking/
- https://blog.takemyhand.xyz/2021/02/android-task-hijacking-with.html
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 🎥
- ¿Trabajas en una empresa de ciberseguridad? ¿Quieres ver tu empresa anunciada en HackTricks? ¿O quieres tener acceso a la última versión de PEASS o descargar HackTricks en PDF? ¡Consulta los PLANES DE SUSCRIPCIÓN!
- Descubre The PEASS Family, nuestra colección exclusiva de NFTs
- Obtén el swag oficial de PEASS y HackTricks
- Únete al 💬 grupo de Discord o al grupo de Telegram o sígueme en Twitter 🐦@carlospolopm.
- Comparte tus trucos de hacking enviando PR al repositorio de hacktricks y al repositorio de hacktricks-cloud.