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 d818bc664..b3d3f2a1a 100644 --- a/src/mobile-pentesting/android-app-pentesting/android-task-hijacking.md +++ b/src/mobile-pentesting/android-app-pentesting/android-task-hijacking.md @@ -11,7 +11,7 @@ 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 task. +- Zatvaranje **Activity 3** vraća **Activity 2** nazad u foreground, prikazujući Androidov pojednostavljeni mehanizam navigacije kroz zadatke. ![https://developer.android.com/images/fundamentals/diagram_backstack.png](<../../images/image (698).png>) @@ -23,21 +23,27 @@ U Android aplikacijama, **task affinity** specificira preferirani task aktivnost ### Launch Modes -Atribut `launchMode` usmerava rukovanje instancama aktivnosti unutar taskova. **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. +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. ### Detailed Attack Steps 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**: Zbog podudaranja task affinity, zlonamerna aplikacija se pokreće umesto ciljne aplikacije. +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. +> [!TIP] +> Imajte na umu da za ovaj napad da bi funkcionisao, ranjivi prikaz **ne mora imati exported na true** niti mora biti glavna aktivnost. + Za praktičnu implementaciju ovog napada, pogledajte Task Hijacking Strandhogg repozitorijum na GitHub-u: [Task Hijacking Strandhogg](https://github.com/az0mb13/Task_Hijacking_Strandhogg). ### Prevention Measures -Da bi se sprečili ovakvi napadi, programeri mogu postaviti `taskAffinity` na prazan string i odabrati `singleInstance` režim pokretanja, osiguravajući izolaciju svoje aplikacije od drugih. Prilagođavanje funkcije `onBackPressed()` pruža dodatnu zaštitu protiv otmice taska. +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. ## **References** diff --git a/src/mobile-pentesting/android-app-pentesting/react-native-application.md b/src/mobile-pentesting/android-app-pentesting/react-native-application.md index 21c83fe16..f684b4e6a 100644 --- a/src/mobile-pentesting/android-app-pentesting/react-native-application.md +++ b/src/mobile-pentesting/android-app-pentesting/react-native-application.md @@ -10,30 +10,72 @@ Da biste potvrdili da li je aplikacija izgrađena na React Native okviru, pratit 3. Koristite komandu `find . -print | grep -i ".bundle$"` da biste pretražili JavaScript datoteku. -Da biste dalje analizirali JavaScript kod, kreirajte datoteku pod imenom `index.html` u istoj direktoriji sa sledećim kodom: +## Javascript Kod + +Ako prilikom provere sadržaja `index.android.bundle` pronađete JavaScript kod aplikacije (čak i ako je minifikovan), možete **analizirati ga da pronađete osetljive informacije i ranjivosti**. + +Pošto paket zapravo sadrži sav JS kod aplikacije, moguće je **podeliti ga u različite datoteke** (potencijalno olakšavajući njegovo obrnuto inženjerstvo) koristeći **alat [react-native-decompiler](https://github.com/numandev1/react-native-decompiler)**. + +### Webpack + +Da biste dalje analizirali JavaScript kod, možete otpremiti datoteku na [https://spaceraccoon.github.io/webpack-exploder/](https://spaceraccoon.github.io/webpack-exploder/) ili pratiti ove korake: + +1. Kreirajte datoteku pod imenom `index.html` u istoj fascikli sa sledećim kodom: ```html ``` -Možete da otpremite datoteku na [https://spaceraccoon.github.io/webpack-exploder/](https://spaceraccoon.github.io/webpack-exploder/) ili pratite ove korake: +2. Otvorite `index.html` datoteku u Google Chrome-u. -1. Otvorite `index.html` datoteku u Google Chrome-u. +3. Otvorite Developer Toolbar pritiskom na **Command+Option+J za OS X** ili **Control+Shift+J za Windows**. -2. Otvorite Developer Toolbar pritiskom na **Command+Option+J za OS X** ili **Control+Shift+J za Windows**. - -3. Kliknite na "Sources" u Developer Toolbar-u. Trebalo bi da vidite JavaScript datoteku koja je podeljena na foldere i datoteke, čineći glavni paket. +4. Kliknite na "Sources" u Developer Toolbar-u. Trebalo bi da vidite JavaScript datoteku koja je podeljena na foldere i datoteke, čineći glavni paket. Ako pronađete datoteku pod nazivom `index.android.bundle.map`, moći ćete da analizirate izvorni kod u nekompresovanom formatu. Map datoteke sadrže izvorno mapiranje, što vam omogućava da mapirate kompresovane identifikatore. Da biste pretražili osetljive akreditive i krajnje tačke, pratite ove korake: -1. Identifikujte osetljive ključne reči za analizu JavaScript koda. React Native aplikacije često koriste usluge trećih strana kao što su Firebase, AWS S3 krajnje tačke, privatni ključevi itd. +1. Identifikujte osetljive ključne reči za analizu JavaScript koda. React Native aplikacije često koriste usluge trećih strana kao što su Firebase, AWS S3 usluge, privatni ključevi itd. -2. U ovom konkretnom slučaju, primećeno je da aplikacija koristi Dialogflow uslugu. Potražite obrazac povezan sa njenom konfiguracijom. +2. U ovom specifičnom slučaju, primećeno je da aplikacija koristi Dialogflow uslugu. Potražite obrazac povezan sa njenom konfiguracijom. 3. Bilo je sreće što su osetljivi hard-kodirani akreditive pronađeni u JavaScript kodu tokom recon procesa. +### Promenite JS kod i ponovo izgradite + +U ovom slučaju, promena koda je jednostavna. Samo treba da preimenujete aplikaciju da koristi ekstenziju `.zip` i da je raspakujete. Zatim možete **modifikovati JS kod unutar ovog paketa i ponovo izgraditi aplikaciju**. Ovo bi trebalo da bude dovoljno da vam omogući da **ubacite kod** u aplikaciju u svrhe testiranja. + +## Hermes bytecode + +Ako paket sadrži **Hermes bytecode**, **nećete moći da pristupite JavaScript kodu** aplikacije (čak ni kompresovanoj verziji). + +Možete proveriti da li paket sadrži Hermes bytecode pokretanjem sledeće komande: +```bash +file index.android.bundle +index.android.bundle: Hermes JavaScript bytecode, version 96 +``` +Međutim, možete koristiti alate **[hbctool](https://github.com/bongtrop/hbctool)**, **[hermes-dec](https://github.com/P1sec/hermes-dec)** ili **[hermes_rs](https://github.com/Pilfer/hermes_rs)** da **dezintegrirate bajtkod** i takođe da **dekompajlirate u neki pseudo JS kod**. Da biste to uradili, na primer, ove komande: +```bash +hbc-disassembler ./index.android.bundle /tmp/my_output_file.hasm +hbc-decompiler ./index.android.bundle /tmp/my_output_file.js +``` +### Promena koda i ponovna izgradnja + +Idealno bi bilo da možete da modifikujete disasemblirani kod (menjajući poređenje, ili vrednost ili šta god da treba da modifikujete) i zatim **ponovno izgradite bajtkod** i ponovo izgradite aplikaciju. + +Alat **[hbctool](https://github.com/bongtrop/hbctool)** podržava disasembliranje paketa i ponovnu izgradnju nakon što su promene izvršene, međutim **podržava samo stare verzije** Hermes bajtkoda. + +Alat **[hermes-dec](https://github.com/P1sec/hermes-dec)** ne podržava ponovnu izgradnju bajtkoda. + +Alat **[hermes_rs](https://github.com/Pilfer/hermes_rs)** podržava ponovnu izgradnju bajtkoda, ali je zapravo biblioteka, a ne CLI alat. + +## Dinamička analiza + +Možete pokušati da dinamički analizirate aplikaciju koristeći Frida da omogućite developerski režim React aplikacije i koristite **`react-native-debugger`** da se povežete na nju. Međutim, za ovo vam očigledno treba izvorni kod aplikacije. Više informacija o tome možete pronaći na [https://newsroom.bedefended.com/hooking-react-native-applications-with-frida/](https://newsroom.bedefended.com/hooking-react-native-applications-with-frida/). + ## Reference - [https://medium.com/bugbountywriteup/lets-know-how-i-have-explored-the-buried-secrets-in-react-native-application-6236728198f7](https://medium.com/bugbountywriteup/lets-know-how-i-have-explored-the-buried-secrets-in-react-native-application-6236728198f7) +- [https://www.assetnote.io/resources/research/expanding-the-attack-surface-react-native-android-applications](https://www.assetnote.io/resources/research/expanding-the-attack-surface-react-native-android-applications) +- [https://payatu.com/wp-content/uploads/2023/02/Mastering-React-Native-Application-Pentesting-A-Practical-Guide-2.pdf](https://payatu.com/wp-content/uploads/2023/02/Mastering-React-Native-Application-Pentesting-A-Practical-Guide-2.pdf) {{#include ../../banners/hacktricks-training.md}} diff --git a/src/mobile-pentesting/android-app-pentesting/tapjacking.md b/src/mobile-pentesting/android-app-pentesting/tapjacking.md index 9c37dacab..825a3369a 100644 --- a/src/mobile-pentesting/android-app-pentesting/tapjacking.md +++ b/src/mobile-pentesting/android-app-pentesting/tapjacking.md @@ -2,16 +2,17 @@ {{#include ../../banners/hacktricks-training.md}} - ## **Osnovne informacije** -**Tapjacking** je napad gde se **maliciozna** **aplikacija** pokreće i **pozicionira iznad aplikacije žrtve**. Kada vidljivo zakloni aplikaciju žrtve, njen korisnički interfejs je dizajniran na način da prevari korisnika da interaguje s njom, dok zapravo prosleđuje interakciju aplikaciji žrtve.\ +**Tapjacking** je napad gde se **maliciozna** **aplikacija** pokreće i **pozicionira iznad aplikacije žrtve**. Kada vidljivo zakloni aplikaciju žrtve, njen korisnički interfejs je dizajniran na način da prevari korisnika da interaguje sa njom, dok zapravo prosleđuje interakciju aplikaciji žrtve.\ U suštini, to **oslepljuje korisnika da ne zna da zapravo izvršava radnje na aplikaciji žrtve**. ### Detekcija Da biste detektovali aplikacije ranjive na ovaj napad, trebali biste tražiti **izvezene aktivnosti** u android manifestu (napomena: aktivnost sa intent-filterom se automatski izveze po defaultu). Kada pronađete izvezene aktivnosti, **proverite da li zahtevaju neku dozvolu**. To je zato što će **maliciozna aplikacija takođe trebati tu dozvolu**. +Takođe možete proveriti minimalnu SDK verziju aplikacije, proveravajući vrednost **`android:minSdkVersion`** u **`AndroidManifest.xml`** datoteci. Ako je vrednost **manja od 30**, aplikacija je ranjiva na Tapjacking. + ### Zaštita #### Android 12 (API 31,32) i noviji @@ -24,7 +25,7 @@ Ako je **`android:filterTouchesWhenObscured`** postavljeno na **`true`**, `View` #### **`setFilterTouchesWhenObscured`** -Atribut **`setFilterTouchesWhenObscured`** postavljen na true takođe može sprečiti eksploataciju ove ranjivosti ako je verzija Android-a niža.\ +Atribut **`setFilterTouchesWhenObscured`** postavljen na true takođe može sprečiti iskorišćavanje ove ranjivosti ako je verzija Android-a niža.\ Ako je postavljeno na **`true`**, na primer, dugme može automatski biti **onemogućeno ako je zaklonjeno**: ```xml