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
0680be2a38
commit
42d5911ebf
@ -4,7 +4,7 @@
|
||||
|
||||
## Task, Back Stack and Foreground Activities
|
||||
|
||||
U Androidu, **task** je u suštini skup aktivnosti sa kojima korisnici interaguju da bi završili određeni posao, organizovan unutar **back stack**. Ova stog organizuje aktivnosti na osnovu vremena kada su otvorene, pri čemu je najnovija aktivnost prikazana na vrhu kao **foreground activity**. U bilo kojem trenutku, samo je ova aktivnost vidljiva na ekranu, čineći je delom **foreground task**.
|
||||
U Androidu, **task** je suštinski skup aktivnosti sa kojima korisnici interaguju da bi završili određeni posao, organizovan unutar **back stack**. Ova stog organizuje aktivnosti na osnovu vremena kada su otvorene, pri čemu je najnovija aktivnost prikazana na vrhu kao **foreground activity**. U bilo kojem trenutku, samo je ova aktivnost vidljiva na ekranu, čineći je delom **foreground task**.
|
||||
|
||||
Evo brzog pregleda prelaza između aktivnosti:
|
||||
|
||||
@ -19,9 +19,9 @@ Evo brzog pregleda prelaza između aktivnosti:
|
||||
|
||||
## Task affinity attacks
|
||||
|
||||
`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**.
|
||||
`taskAffinity` govori Androidu kojoj zadatku 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**.
|
||||
|
||||
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.
|
||||
Ako napadač može da postavi zloćudnu aktivnost na **root** tog stoga, svaki put kada žrtva otvori legitimnu aplikaciju, zloćudni UI će biti prva stvar koju korisnik vidi – savršeno za phishing ili zlostavljanje zahteva za dozvolama.
|
||||
|
||||
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.
|
||||
|
||||
@ -39,7 +39,7 @@ android:launchMode="singleTask" >
|
||||
</intent-filter>
|
||||
</activity>
|
||||
```
|
||||
2. Zlonamerna aplikacija se pokreće jednom kako bi zadatak (sa lažnim afinitetom) postojao u nedavnim zadacima.
|
||||
2. Zloćudna 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.
|
||||
|
||||
@ -52,7 +52,7 @@ Ranljivost prijavljena u aplikaciji **Caller ID (caller.id.phone.number.block)**
|
||||
class HackActivity : AppCompatActivity() {
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
moveTaskToBack(true) // keep the task in recents but out of sight
|
||||
moveTaskToBack(true) // drži zadatak u nedavnim, ali van vidokruga
|
||||
}
|
||||
}
|
||||
```
|
||||
@ -67,29 +67,68 @@ android:taskAffinity="com.caller.id.phone.number.block" >
|
||||
</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.
|
||||
3. Čim korisnik instalira i otvori zloćudnu aplikaciju **jednom**, postoji zadatak čiji afinitet odgovara paketu žrtve (ali se nalazi u pozadini).
|
||||
4. Kada se pokrene prava Caller ID aplikacija, Android ponovo koristi taj zadatak i dovodi `HackActivity` u foreground → phishing prozor/zlostavljanje dozvola.
|
||||
|
||||
> 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.
|
||||
|
||||
---
|
||||
|
||||
### StrandHogg 2.0 (CVE-2020-0096) – Reflection-based task hijack
|
||||
|
||||
Googleova bezbednosna obaveštenja iz maja 2020. ispravila su napredniju varijantu nazvanu **StrandHogg 2.0**. Eksploatacija **ne oslanja se na `taskAffinity` uopšte**; umesto toga koristi *reflection* da dinamički umetne aktivnost napadača na vrh *svakog* aktivnog zadatka, potpuno zaobilazeći ograničenje “shared-UID” koje je uvedeno u Android 11.
|
||||
|
||||
Ključne tačke:
|
||||
|
||||
* Zloćudna aplikacija bez dozvola može, kada se otvori, iterirati kroz aktivne zadatke i pozvati skrivene API-je da **re-parent** svoju aktivnost u bilo koji zadatak.
|
||||
* Budući da se aktivnost umetne nakon vremena izvršavanja, ni `launchMode` ni statička analiza manifesta ne mogu unapred otkriti napad.
|
||||
* Ispravljeno vraćanjem provere u **Android 8.0/8.1/9** (maj 2020 SPL). **Android 10 i noviji nisu pogođeni.**
|
||||
|
||||
Otkrivanje na unapred ispravljenim uređajima može se izvršiti sa `adb shell dumpsys activity activities` i posmatranjem sumnjivih aktivnosti čije ime paketa se razlikuje od *afiniteta* zadatka.
|
||||
|
||||
Ublažavanje za starije uređaje je isto kao klasični hijacking zadataka **plus** verifikacija u vreme izvršavanja (npr. pozivajući [`ActivityManager#getRunningTasks`](https://developer.android.com/reference/android/app/ActivityManager#getRunningTasks(int)) i validirajući svoje ime paketa).
|
||||
|
||||
---
|
||||
|
||||
## 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.
|
||||
1. **Static review** – Preuzmite `AndroidManifest.xml` iz ciljanog APK-a i proverite da svaka `<activity>` (ili globalni `<application>` element) sadrži `android:taskAffinity=""` (prazno) **ili** prilagođenu vrednost. Alati kao što su:
|
||||
```bash
|
||||
# Using apkanalyzer (Android SDK)
|
||||
apkanalyzer manifest print app.apk | grep -i taskaffinity
|
||||
|
||||
# Using AXMLPrinter2
|
||||
java -jar AXMLPrinter2.jar AndroidManifest.xml | grep taskAffinity
|
||||
```
|
||||
2. **Dynamic review** – Na uređaju otvorite ciljan app i navedite zadatke:
|
||||
```bash
|
||||
adb shell dumpsys activity activities | grep -A3 "TASK" | grep -E "Root|affinity"
|
||||
```
|
||||
Zadatak čiji root afinitet odgovara paketu žrtve, ali čija gornja aktivnost pripada *drugom* paketu je crvena zastava.
|
||||
3. Napravite zloćudnu aplikaciju kao što je opisano iznad, ili koristite **[Drozer](https://github.com/WithSecureLabs/drozer)**:
|
||||
```bash
|
||||
drozer console connect
|
||||
run app.activity.start --component com.victim/.MainActivity --action android.intent.action.MAIN
|
||||
run app.activity.info com.victim
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 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.
|
||||
* Za visoko 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 ponašanja gde se zadaci po defaultu ne dele između paketa.
|
||||
* Ciljati **Android 12 (API 31) ili noviji** tako da obavezni atribut `android:exported` primorava programere da audituju svaku spolja dostupnu komponentu.
|
||||
* Razmotriti samoodbranu u vreme izvršavanja: povremeno upititi `ActivityTaskManager` da osigurate da se ime paketa vaše gornje aktivnosti poklapa sa vašim.
|
||||
|
||||
---
|
||||
|
||||
## Related UI-Hijacking techniques
|
||||
|
||||
Hijacking zadataka se često kombinuje sa ili zamenjuje **tapjacking** (obmana UI zasnovana na preklapanju). Istraživanje iz 2025. **TapTrap** pokazalo je da potpuno prozirne *animacije vođene* aktivnosti mogu zaobići ograničenja dodira preklapanja uvedena u Android 12–14 i još uvek prevariti korisnike da dodele opasne dozvole. Iako TapTrap nije strogo *task* hijacking, krajnji cilj (phishing klikovi) je identičan – tako da moderna ocenjivanja treba da provere obe površine napada.
|
||||
|
||||
---
|
||||
|
||||
@ -99,5 +138,7 @@ Programeri bi trebali:
|
||||
- [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)
|
||||
- [Promon – StrandHogg 2.0 (CVE-2020-0096) technical write-up](https://promon.io/resources/downloads/strandhogg-2-0-new-serious-android-vulnerability)
|
||||
- [USENIX 2025 – TapTrap: Animation-Driven Tapjacking on Android](https://www.usenix.org/conference/usenixsecurity25/presentation/beer)
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
Loading…
x
Reference in New Issue
Block a user