mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/mobile-pentesting/android-app-pentesting/android-task-h
This commit is contained in:
parent
bbea031157
commit
21016a3db3
@ -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.
|
||||
|
||||
.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 Default–Affinity (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}}
|
||||
|
Loading…
x
Reference in New Issue
Block a user