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

9 KiB

Android Task Hijacking

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

Encontre vulnerabilidades que são mais importantes para que você possa corrigi-las mais rapidamente. O Intruder rastreia sua superfície de ataque, executa varreduras proativas de ameaças, encontra problemas em toda a sua pilha de tecnologia, desde APIs até aplicativos da web e sistemas em nuvem. Experimente gratuitamente hoje.

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


Tarefa, Back Stack e Atividades em Primeiro Plano

Uma tarefa é uma coleção de atividades com as quais os usuários interagem ao realizar um determinado trabalho. As atividades são organizadas em uma pilha - o back stack - na ordem em que cada atividade é aberta.

A atividade que está exibida na tela é chamada de atividade em primeiro plano e sua tarefa é chamada de tarefa em primeiro plano. Em um determinado momento, apenas uma tarefa em primeiro plano é visível na tela.

Aqui está um fluxo de atividade simples:

  • Há apenas a Atividade 1 em primeiro plano.
  • A Atividade 2 é iniciada, o que empurra a Atividade 1 para o Back Stack. Agora a Atividade 2 está em primeiro plano.
  • A Atividade 3 é iniciada, o que empurra tanto a Atividade 1 quanto a 2 para o Back Stack.
  • Agora, quando a Atividade 3 é fechada, a atividade anterior, ou seja, 2, é trazida automaticamente para o primeiro plano. É assim que a navegação de tarefas funciona no Android.

Multitarefa no Android - Uma Tarefa

Uma tarefa é composta por várias atividades

Multitarefa no Android - Várias Tarefas

O Android geralmente gerencia várias tarefas

Controles de Tarefa

Ataque de afinidade de tarefa

Afinidade de tarefa e Modos de Inicialização

Afinidade de tarefa é um atributo definido em cada tag <activity> no arquivo AndroidManifest.xml. Ele descreve a qual tarefa uma atividade prefere se juntar.
Por padrão, cada atividade tem a mesma afinidade que o nome do pacote.

Vamos usar isso ao criar nosso aplicativo PoC.

<activity android:taskAffinity=""/>

Modos de lançamento permitem definir como uma nova instância de uma atividade está associada à tarefa atual. O atributo launchMode especifica uma instrução sobre como a atividade deve ser lançada em uma tarefa.
Existem quatro modos de lançamento diferentes:

  1. padrão (Padrão)
  2. singleTop
  3. singleTask
  4. singleInstance

Quando o launchMode é definido como singleTask, o sistema Android avalia três possibilidades e uma delas é a razão pela qual nosso ataque é possível. Aqui estão elas -

  • Se a instância da atividade já existe:
    O Android retoma a instância existente em vez de criar uma nova. Isso significa que há no máximo uma instância de atividade no sistema sob este modo.
  • Se for necessário criar uma nova instância da atividade:
    O Serviço de Gerenciador de Atividades (AMS) seleciona uma tarefa para hospedar a nova instância criada encontrando uma tarefa "correspondente" em todas as tarefas existentes. Uma atividade "corresponde" a uma tarefa se elas têm a mesma afinidade de tarefa. Esta é a razão pela qual podemos especificar a mesma afinidade de tarefa do aplicativo vulnerável em nosso aplicativo de malware/atacante para que ele seja lançado em sua tarefa em vez de criar sua própria.
  • Sem encontrar uma tarefa "correspondente":
    O AMS cria uma nova tarefa e torna a nova instância da atividade a atividade raiz da tarefa recém-criada.

Ataque

A vítima precisa ter o aplicativo malicioso instalado em seu dispositivo. Em seguida, ele precisa abri-lo antes de abrir o aplicativo vulnerável. Então, quando o aplicativo vulnerável é aberto, o aplicativo malicioso será aberto em seu lugar. Se este aplicativo malicioso apresentar o mesmo login que o aplicativo vulnerável, o usuário não terá meios de saber que está inserindo suas credenciais em um aplicativo malicioso.

Você pode encontrar um ataque implementado aqui: https://github.com/az0mb13/Task_Hijacking_Strandhogg

Prevenindo o sequestro de tarefas

Definir taskAffinity="" pode ser uma solução rápida para esse problema. O modo de lançamento também pode ser definido como singleInstance se o aplicativo não quiser que outras atividades se juntem às tarefas a que pertence. Uma função personalizada onBackPressed() também pode ser adicionada para substituir o comportamento padrão.

Referências

Encontre vulnerabilidades que são mais importantes para que você possa corrigi-las mais rapidamente. O Intruder rastreia sua superfície de ataque, executa varreduras proativas de ameaças, encontra problemas em toda a sua pilha de tecnologia, desde APIs até aplicativos da web e sistemas em nuvem. Experimente gratuitamente hoje.

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

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