diff --git a/src/mobile-pentesting/android-app-pentesting/android-task-hijacking.md b/src/mobile-pentesting/android-app-pentesting/android-task-hijacking.md index a14b6dd96..3f7284030 100644 --- a/src/mobile-pentesting/android-app-pentesting/android-task-hijacking.md +++ b/src/mobile-pentesting/android-app-pentesting/android-task-hijacking.md @@ -4,50 +4,100 @@ ## Taak, Terug Stapel en Voorgrond Aktiwiteite -In Android is 'n **taak** basies 'n stel aktiwiteite waarmee gebruikers interaksie het om 'n spesifieke werk te voltooi, georganiseer binne 'n **terug stapel**. Hierdie stapel orden aktiwiteite gebaseer op wanneer hulle geopen is, met die mees onlangse aktiwiteit wat boaan vertoon word as die **voorgrond aktiwiteit**. Op enige oomblik is slegs hierdie aktiwiteit sigbaar op die skerm, wat dit deel van die **voorgrond taak** maak. +In Android is 'n **taak** basies 'n stel aktiwiteite waarmee gebruikers interaksie het om 'n spesifieke werk te voltooi, georganiseer binne 'n **terug stapel**. Hierdie stapel orden aktiwiteite op grond van wanneer hulle geopen is, met die mees onlangse aktiwiteit wat boaan vertoon word as die **voorgrond aktiwiteit**. Op enige oomblik is slegs hierdie aktiwiteit sigbaar op die skerm, wat dit deel van die **voorgrond taak** maak. Hier is 'n vinnige uiteensetting van aktiwiteit oorgange: - **Aktiwiteit 1** begin as die enigste aktiwiteit in die voorgrond. - Die bekendstelling van **Aktiwiteit 2** druk **Aktiwiteit 1** na die terug stapel, wat **Aktiwiteit 2** na die voorgrond bring. -- Die begin van **Aktiwiteit 3** beweeg **Aktiwiteit 1** en **Aktiwiteit 2** verder terug in die stapel, met **Aktiwiteit 3** nou voor. +- Die begin van **Aktiwiteit 3** skuif **Aktiwiteit 1** en **Aktiwiteit 2** verder terug in die stapel, met **Aktiwiteit 3** nou voor. - Die sluiting van **Aktiwiteit 3** bring **Aktiwiteit 2** terug na die voorgrond, wat Android se gestroomlynde taak navigasiemeganisme demonstreer. ![https://developer.android.com/images/fundamentals/diagram_backstack.png](<../../images/image (698).png>) -## Taak affiniteit aanval +--- -### Oorsig van Taak Affiniteit en Begin Modusse +## Taak affiniteit aanvalle -In Android toepassings spesifiseer **taak affiniteit** 'n aktiwiteit se verkiesde taak, wat tipies ooreenstem met die app se pakketnaam. Hierdie opstelling is noodsaaklik om 'n bewys-van-konsep (PoC) app te skep om die aanval te demonstreer. +`taskAffinity` vertel Android watter taak 'n `Aktiwiteit` *verkies* om aan te behoort. Wanneer twee aktiwiteite dieselfde affiniteit deel, **is Android toegelaat om hulle binne dieselfde terug-stapel te meng, selfs al kom hulle van verskillende APK's**. -### Begin Modusse +As 'n aanvaller 'n kwaadwillige aktiwiteit aan die **wortel** van daardie stapel kan plaas, sal elke keer wanneer die slagoffer die wettige toepassing oopmaak, die kwaadwillige UI die eerste ding wees wat die gebruiker sien – perfek vir phishing of misbruik van toestemmingsversoeke. -Die `launchMode` attribuut rig die hantering van aktiwiteit instansies binne take. Die **singleTask** modus is van kardinale belang vir hierdie aanval, wat drie scenario's bepaal gebaseer op die bestaande aktiwiteit instansies en taak affiniteit ooreenkomste. Die uitbuiting hang af van die vermoë van 'n aanvaller se app om die teiken app se taak affiniteit na te boots, wat die Android stelsel mislei om die aanvaller se app te begin in plaas van die bedoelde teiken. +Die aanvaloppervlak is breër as wat baie ontwikkelaars dink omdat **elke aktiwiteit outomaties 'n affiniteit erf gelyk aan die toepassingspakketnaam** (tenzij die ontwikkelaar `android:taskAffinity=""` stel). Daarom *doen niks* reeds die app oop vir taak hijacking op Android weergawes voor 11. -### Gedetailleerde Aanval Stappe +### Klassieke "singleTask / StrandHogg" scenario -1. **Kwaadwillige App Installasie**: Die slagoffer installeer die aanvaller se app op hul toestel. -2. **Begin Aktivering**: Die slagoffer open eers die kwaadwillige app, wat die toestel vir die aanval voorberei. -3. **Teiken App Begin Poging**: Die slagoffer probeer om die teiken app te open. -4. **Hijack Uitvoering**: Op 'n sekere punt probeer die app om die **singleTask** weergawe te open. Vanweë die ooreenstemmende taak affiniteit, word die kwaadwillige app begin in plaas van die teiken app. -5. **Bedrog**: Die kwaadwillige app bied 'n vals aanmeldskerm aan wat die teiken app naboots, wat die gebruiker mislei om sensitiewe inligting in te voer. +1. Die aanvaller verklaar 'n aktiwiteit met: +```xml + + + + + + +``` +2. Die kwaadwillige app word een keer begin sodat die taak (met die vervalste affiniteit) in onlangse take bestaan. +3. Wanneer die gebruiker later die werklike toepassing oopmaak, vind Android daar is reeds 'n taak waarvan die **wortel affiniteit ooreenstem met die pakket** en bring net daardie taak na die voorgrond. +4. Die aanvaller se UI word eerste vertoon. -> [!TIP] -> Let daarop dat vir hierdie aanval om te werk, die kwesbare weergawe **nie na true geexporteer hoef te word nie** en dit hoef ook nie die Hoof aktiwiteit te wees nie. +### Standaard–Affiniteit (geen `singleTask`) variasie – Caller ID gevalstudie -Vir 'n praktiese implementering van hierdie aanval, verwys na die Taak Hijacking Strandhogg repository op GitHub: [Task Hijacking Strandhogg](https://github.com/az0mb13/Task_Hijacking_Strandhogg). +Die kwesbaarheid wat in die **Caller ID (caller.id.phone.number.block)** toepassing gerapporteer is, toon dat die aanval *ook* teen die standaard `standaard` bekendstellingsmodus werk: -### Voorkoming Maatreëls +1. Aanvaller toepassing skep 'n vals wortel aktiwiteit en verberg onmiddellik: +```kotlin +class HackActivity : AppCompatActivity() { +override fun onCreate(savedInstanceState: Bundle?) { +super.onCreate(savedInstanceState) +moveTaskToBack(true) // hou die taak in onlangse maar uit sig +} +} +``` +2. Die manifest hoef net die slagoffer pakket in `taskAffinity` te kopieer: +```xml + + + + + + +``` +3. Sodra die gebruiker die kwaadwillige app **een keer** installeer en oopmaak, bestaan 'n taak waarvan die affiniteit gelyk is aan die slagoffer pakket (maar sit in die agtergrond). +4. Wanneer die werklike Caller ID toepassing bekendgestel word, hergebruik Android daardie taak en bring `HackActivity` na die voorgrond → phishing venster/toestemming misbruik. -Om sulke aanvalle te voorkom, kan ontwikkelaars: -- Stel **`**taskAffinity`** van die **singleTask** weergawe op 'n leë string (`android:taskAffinity=""`) -- Kies die **`singleInstance`** beginmodus, wat verseker dat hul app van ander geïsoleer is. -- Pas die **`onBackPressed()`** funksie aan wat addisionele beskerming teen taak hijacking bied. +> LET WEL: Begin met **Android 11 (API 30)** plaas die stelsel *nie* twee pakkette wat nie deel is van dieselfde UID nie in dieselfde taak nie, wat hierdie spesifieke variasie verminder. Ouers weergawes bly kwesbaar. -## **Verwysings** +--- -- [**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) +## Opsporing & Exploitatie kontrolelys + +1. Trek `AndroidManifest.xml` van die teiken APK en kontroleer dat elke `` (of die globale `` element) `android:taskAffinity=""` (leeg) **of** 'n aangepaste waarde bevat. +2. As nie, maak 'n kwaadwillige app: +- `android:taskAffinity` = slagoffer pakketnaam. +- Verskaf 'n `MAIN/LAUNCHER` intent sodat die gebruiker dit een keer kan oopmaak. +- Opsioneel roep `moveTaskToBack(true)` aan om onmiddellik te verberg. +3. Laat die slagoffer hul wettige toepassing oopmaak → hijack. + +## Versagting + +Ontwikkelaars moet: + +* Duidelik `android:taskAffinity=""` op die `` vlak stel (aanbeveel) **of** elke aktiwiteit 'n unieke, private affiniteit gee. +* Vir hoogs sensitiewe skerms, kombineer die bogenoemde met `android:launchMode="singleInstance"` of moderne [`setLaunchMode`](https://developer.android.com/reference/android/content/pm/ActivityInfo#launchMode) beskermings. +* Opgradeer die app se `targetSdkVersion` en handhaaf **Android 11** gedragsveranderinge waar take nie standaard oor pakkette gedeel word nie. + +--- + +## Verwysings + +- [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}}