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-anti-i
This commit is contained in:
parent
d0046ed1ca
commit
5f66696476
@ -326,6 +326,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 Anti Instrumentation And Ssl Pinning Bypass](mobile-pentesting/android-app-pentesting/android-anti-instrumentation-and-ssl-pinning-bypass.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)
|
||||
|
@ -13,22 +13,22 @@ android-applications-basics.md
|
||||
## ADB (Android Debug Bridge)
|
||||
|
||||
Ovo je glavni alat koji vam je potreban za povezivanje sa android uređajem (emuliranim ili fizičkim).\
|
||||
**ADB** omogućava kontrolu uređaja preko **USB** ili **mreže** sa računara. Ova alatka omogućava **kopiranje** fajlova u oba pravca, **instalaciju** i **deinstalaciju** aplikacija, **izvršavanje** shell komandi, **pravljenje rezervnih kopija** podataka, **čitanje** logova, među ostalim funkcijama.
|
||||
**ADB** omogućava kontrolu uređaja preko **USB** ili **Mreže** sa računara. Ova alatka omogućava **kopiranje** fajlova u oba pravca, **instalaciju** i **deinstalaciju** aplikacija, **izvršavanje** shell komandi, **pravljenje rezervnih kopija** podataka, **čitanje** logova, među ostalim funkcijama.
|
||||
|
||||
Pogledajte sledeću listu [**ADB Komandi**](adb-commands.md) da biste naučili kako koristiti adb.
|
||||
|
||||
## Smali
|
||||
|
||||
Ponekad je zanimljivo **modifikovati kod aplikacije** kako 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 zastavicama). 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)
|
||||
- [Shizuku Privileged API (ADB-bazirani pristup bez root-a)](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)
|
||||
- **Preuzmite APK-ove**: [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)
|
||||
- **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)
|
||||
- Ekstrakt APK sa uređaja:
|
||||
```bash
|
||||
adb shell pm list packages
|
||||
@ -48,7 +48,7 @@ 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
|
||||
```
|
||||
## Studije slučaja i ranjivosti
|
||||
## Case Studies & Vulnerabilities
|
||||
|
||||
{{#ref}}
|
||||
../ios-pentesting/air-keyboard-remote-input-injection.md
|
||||
@ -58,12 +58,12 @@ java -jar uber-apk-signer.jar -a merged.apk --allowResign -o merged_signed
|
||||
../../linux-hardening/privilege-escalation/android-rooting-frameworks-manager-auth-bypass-syscall-hook.md
|
||||
{{#endref}}
|
||||
|
||||
## Staticka analiza
|
||||
## Static Analysis
|
||||
|
||||
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).
|
||||
|
||||
### Traženje zanimljivih informacija
|
||||
### Looking for interesting Info
|
||||
|
||||
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).
|
||||
|
||||
@ -71,19 +71,19 @@ Samo gledajući **stringove** APK-a možete tražiti **lozinke**, **URL-ove** ([
|
||||
|
||||
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)
|
||||
|
||||
### Osnovno razumevanje aplikacije - Manifest.xml, strings.xml
|
||||
### Basic understanding of the application - 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 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, naglašavajući važnost ne podržavanja zastarelih, ranjivih Android verzija iz sigurnosnih razloga.
|
||||
- **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 razumevanje 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 bezbednosnih 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.
|
||||
|
||||
@ -98,9 +98,9 @@ Pronađite više informacija u:
|
||||
tapjacking.md
|
||||
{{#endref}}
|
||||
|
||||
### Preuzimanje zadataka
|
||||
### Task Hijacking
|
||||
|
||||
**Aktivnost** sa **`launchMode`** postavljenim na **`singleTask` bez definisanog `taskAffinity`** je ranjiva na preuzimanje zadataka. To znači da se **aplikacija** može instalirati i ako se pokrene pre prave aplikacije, mogla bi **preuzeti zadatak prave aplikacije** (tako da korisnik interaguje sa **malicioznom aplikacijom misleći da koristi pravu**).
|
||||
**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 korisnik misli da koristi pravu aplikaciju dok zapravo interaguje sa **malicioznom aplikacijom**).
|
||||
|
||||
Više informacija u:
|
||||
|
||||
@ -108,51 +108,51 @@ Više informacija u:
|
||||
android-task-hijacking.md
|
||||
{{#endref}}
|
||||
|
||||
### Nesigurno skladištenje podataka
|
||||
### Insecure data storage
|
||||
|
||||
**Interno skladište**
|
||||
**Internal Storage**
|
||||
|
||||
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.
|
||||
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 **provođena** 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. **Staticka analiza:**
|
||||
1. **Static Analysis:**
|
||||
- **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. **Dinamička analiza:**
|
||||
2. **Dynamic Analysis:**
|
||||
- **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.
|
||||
|
||||
**Eksterno skladište**
|
||||
**External Storage**
|
||||
|
||||
Kada se radi o datotekama na **eksternom skladištu**, kao što su SD kartice, treba preduzeti određene mere opreza:
|
||||
Kada se radi o datotekama na **spoljnom skladištu**, kao što su SD kartice, treba preduzeti određene mere opreza:
|
||||
|
||||
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. **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. **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.
|
||||
- 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.
|
||||
1. **Accessibility**:
|
||||
- Datoteke na spoljnjem 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 spoljnjem skladištu.
|
||||
- Spoljno skladište može biti uklonjeno ili pristupljeno od strane bilo koje aplikacije, što ga čini manje sigurnim.
|
||||
3. **Handling Data from External Storage**:
|
||||
- Uvek **izvršite validaciju unosa** na podacima preuzetim iz spoljnog skladišta. Ovo je ključno jer su podaci iz nepouzdanog izvora.
|
||||
- Čuvanje izvršnih ili klasa datoteka na spoljnjem skladištu za dinamičko učitavanje se snažno ne preporučuje.
|
||||
- Ako vaša aplikacija mora preuzeti izvršne datoteke iz spoljnog 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`
|
||||
Spoljno skladište može biti **pristupano** u `/storage/emulated/0`, `/sdcard`, `/mnt/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 datotekama druge aplikacije.
|
||||
> 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.
|
||||
|
||||
**Osetljivi podaci pohranjeni u čistom tekstu**
|
||||
**Sensitive data stored in clear-text**
|
||||
|
||||
- **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.
|
||||
- **Shared preferences**: 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.
|
||||
- **Databases**: 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.
|
||||
|
||||
### Slomljeni TLS
|
||||
### Broken TLS
|
||||
|
||||
**Prihvatanje svih sertifikata**
|
||||
**Accept All Certificates**
|
||||
|
||||
Iz nekog razloga, ponekad programeri prihvataju sve sertifikate čak i ako, na primer, ime hosta ne odgovara sa linijama koda poput sledeće:
|
||||
```java
|
||||
SSLSocketFactory sf = new cc(trustStore);
|
||||
sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
|
||||
```
|
||||
Dobar način da se ovo testira je da pokušate da uhvatite saobraćaj koristeći neki proxy kao što je Burp bez autorizacije Burp CA unutar uređaja. Takođe, možete generisati sa Burp-om sertifikat za drugačije ime hosta i koristiti ga.
|
||||
Dobar način da testirate ovo je da pokušate da uhvatite saobraćaj koristeći neki proxy kao što je Burp bez autorizacije Burp CA unutar uređaja. Takođe, možete generisati sa Burp-om sertifikat za drugačije ime hosta i koristiti ga.
|
||||
|
||||
### Slomljena Kriptografija
|
||||
|
||||
@ -162,14 +162,14 @@ 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 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** kako bi proverila da li je modifikovana.
|
||||
- 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.
|
||||
- Koristite [**APKiD**](https://github.com/rednaga/APKiD) da proverite koji je kompajler/paker/obfuskator korišćen za izgradnju APK-a.
|
||||
|
||||
### React Native Aplikacija
|
||||
@ -190,7 +190,7 @@ Pročitajte sledeću stranicu da biste saznali kako lako pristupiti C# kodu xama
|
||||
|
||||
### Superpakovane Aplikacije
|
||||
|
||||
Prema ovom [**blog postu**](https://clearbluejar.github.io/posts/desuperpacking-meta-superpacked-apks-with-github-actions/), superpakovani je Meta algoritam koji kompresuje sadržaj aplikacije u jedan fajl. Blog govori o mogućnosti kreiranja aplikacije koja dekompresuje ovakve aplikacije... i bržem načinu koji uključuje **izvršavanje aplikacije i prikupljanje dekompresovanih fajlova iz datotečnog sistema.**
|
||||
Prema ovom [**blog postu**](https://clearbluejar.github.io/posts/desuperpacking-meta-superpacked-apks-with-github-actions/), superpakovane su Meta algoritam koji kompresuje sadržaj aplikacije u jedan fajl. Blog govori o mogućnosti kreiranja aplikacije koja dekompresuje ovakve aplikacije... i bržem načinu koji uključuje **izvršavanje aplikacije i prikupljanje dekompresovanih fajlova iz datotečnog sistema.**
|
||||
|
||||
### Automatizovana Staticka Analiza Koda
|
||||
|
||||
@ -227,11 +227,11 @@ content-protocol.md
|
||||
|
||||
## Dinamička Analiza
|
||||
|
||||
> Prvo, potrebna vam je okruženje gde možete instalirati aplikaciju i sve okruženje (Burp CA cert, Drozer i Frida uglavnom). Stoga, uređaj sa root-om (emuliran ili ne) je izuzetno preporučen.
|
||||
> Prvo, potrebna vam je okruženje gde možete instalirati aplikaciju i sve potrebne alate (Burp CA cert, Drozer i Frida uglavnom). Stoga, uređaj sa root-om (emuliran ili ne) je izuzetno preporučen.
|
||||
|
||||
### Online Dinamička analiza
|
||||
|
||||
Možete napraviti **besplatan nalog** na: [https://appetize.io/](https://appetize.io). Ova platforma vam omogućava da **otpremite** i **izvršite** APK-ove, tako da je korisna za gledanje kako se apk ponaša.
|
||||
Možete napraviti **besplatan nalog** na: [https://appetize.io/](https://appetize.io). Ova platforma vam omogućava da **otpremite** i **izvršite** APK-ove, tako da je korisna za praćenje kako se apk ponaša.
|
||||
|
||||
Možete čak i **videti logove vaše aplikacije** na vebu i povezati se putem **adb**.
|
||||
|
||||
@ -243,34 +243,34 @@ 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, 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).
|
||||
- [**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).
|
||||
- Naučite kako da ga postavite na ovoj stranici:
|
||||
|
||||
{{#ref}}
|
||||
avd-android-virtual-device.md
|
||||
{{#endref}}
|
||||
|
||||
- [**Genymotion**](https://www.genymotion.com/fun-zone/) **(Besplatna verzija:** Personal Edition, morate napraviti nalog. _Preporučuje se da **preuzmete** verziju **SA**_ _**VirtualBox** da biste izbegli potencijalne greške._)
|
||||
- [**Genymotion**](https://www.genymotion.com/fun-zone/) **(Besplatna verzija:** Personal Edition, potrebno je da napravite nalog. _Preporučuje se da **preuzmete** verziju **SA** _**VirtualBox** da biste izbegli potencijalne greške._)
|
||||
- [**Nox**](https://es.bignox.com) (Besplatno, ali ne podržava Frida ili Drozer).
|
||||
|
||||
> [!TIP]
|
||||
> Kada kreirate novi emulator na bilo kojoj platformi, zapamtite da što je veći ekran, emulator će sporije raditi. Dakle, izaberite male ekrane ako je moguće.
|
||||
> Kada kreirate novi emulator na bilo kojoj platformi, zapamtite da što je veći ekran, emulator će sporije raditi. Dakle, odaberite male ekrane ako je moguće.
|
||||
|
||||
Da biste **instalirali google usluge** (kao što je AppStore) u Genymotion-u, potrebno je da kliknete na crveno označeno dugme na sledećoj slici:
|
||||
|
||||
.png>)
|
||||
|
||||
Takođe, primetite da u **konfiguraciji Android VM u Genymotion-u** možete izabrati **Bridge Network mode** (ovo će biti korisno ako ćete se povezivati 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 se povezujete na Android VM iz različitog VM-a sa alatima).
|
||||
|
||||
#### Koristite fizički uređaj
|
||||
|
||||
Morate aktivirati **debugging** opcije i bilo bi dobro ako možete **root-ovati** ga:
|
||||
Potrebno je da aktivirate **debugging** opcije i bilo bi dobro da ga možete **root-ovati**:
|
||||
|
||||
1. **Podešavanja**.
|
||||
2. (Od Android 8.0) Izaberite **Sistem**.
|
||||
3. Izaberite **O telefonu**.
|
||||
4. Pritisnite **Broj izrade** 7 puta.
|
||||
5. Vratite se i naći ćete **Opcije za programere**.
|
||||
5. Vratite se nazad 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 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.
|
||||
@ -279,7 +279,7 @@ Morate aktivirati **debugging** opcije i bilo bi dobro ako možete **root-ovati*
|
||||
|
||||
**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 od Android 4.0**, **aplikacije mogu pristupiti samo svojim logovima**. Dakle, aplikacije ne mogu pristupiti logovima drugih aplikacija.\
|
||||
@ -287,30 +287,30 @@ Programeri bi trebali biti oprezni da ne izlažu **informacije za debagovanje**
|
||||
|
||||
**Keširanje Copy/Paste Bufe**
|
||||
|
||||
Androidov **clipboard-based** okvir omogućava funkcionalnost kopiranja i lepljenja u aplikacijama, ali predstavlja rizik jer **druge aplikacije** mogu **pristupiti** clipboard-u, potencijalno izlažući osetljive podatke. Ključno je **onemogućiti copy/paste** funkcije za osetljive delove aplikacije, kao što su podaci o kreditnim karticama, kako bi se sprečila curenja podataka.
|
||||
Androidov **okvir zasnovan na clipboard-u** omogućava funkcionalnost kopiranja i lepljenja u aplikacijama, ali predstavlja rizik jer **druge aplikacije** mogu **pristupiti** clipboard-u, potencijalno izlažući osetljive podatke. Ključno je **onemogućiti copy/paste** funkcije za osetljive delove aplikacije, kao što su podaci o kreditnim karticama, kako bi se sprečila curenja podataka.
|
||||
|
||||
**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 kao što je 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 bilo kakve osetljive informacije trećim stranama.
|
||||
Aplikacije često integrišu usluge kao što je Google Adsense, što može nenamerno **izliti 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.
|
||||
|
||||
### SQLite DBs
|
||||
|
||||
Većina aplikacija će koristiti **internu SQLite baze podataka** za čuvanje informacija. Tokom pentesta obratite pažnju na **baze podataka** koje su kreirane, imena **tabela** i **kolona** i sve **podatke** koji su sačuvani jer biste mogli pronaći **osetljive informacije** (što bi bila ranjivost).\
|
||||
Većina aplikacija će koristiti **internu SQLite baze podataka** za čuvanje informacija. Tokom pentesta obratite pažnju na **baze podataka** koje su kreirane, imena **tabela** i **kolona** i sve **podatke** sačuvane jer biste mogli pronaći **osetljive informacije** (što bi bila ranjivost).\
|
||||
Baze podataka bi trebale biti locirane u `/data/data/the.package.name/databases` kao `/data/data/com.mwr.example.sieve/databases`.
|
||||
|
||||
Ako baza podataka čuva poverljive informacije i je **šifrovana** ali možete **pronaći** **lozinku** unutar aplikacije, to je i dalje **ranjivost**.
|
||||
Ako baza podataka čuva poverljive informacije i je **šifrovana**, ali možete **pronaći** **lozinku** unutar aplikacije, to je i dalje **ranjivost**.
|
||||
|
||||
Enumerišite tabele koristeći `.tables` i enumerišite kolone tabela koristeći `.schema <table_name>`.
|
||||
|
||||
### Drozer (Eksploatacija Aktivnosti, Pružatelja Sadržaja i Usluga)
|
||||
|
||||
Iz [Drozer Docs](https://labs.mwrinfosecurity.com/assets/BlogFiles/mwri-drozer-user-guide-2015-03-23.pdf): **Drozer** vam omogućava da **preuzmete ulogu Android aplikacije** i interagujete sa drugim aplikacijama. Može raditi **sve što instalirana aplikacija može raditi**, kao što je korišćenje Android-ovog mehanizma međuprocesne komunikacije (IPC) i interakcija sa osnovnim operativnim sistemom.\
|
||||
Iz [Drozer Docs](https://labs.mwrinfosecurity.com/assets/BlogFiles/mwri-drozer-user-guide-2015-03-23.pdf): **Drozer** vam omogućava da **preuzmete ulogu Android aplikacije** i komunicirate sa drugim aplikacijama. Može raditi **sve što instalirana aplikacija može raditi**, kao što je korišćenje Android-ovog mehanizma međuprocesne komunikacije (IPC) i interakcija sa osnovnim operativnim sistemom.\
|
||||
Drozer je koristan alat za **eksploataciju eksportovanih aktivnosti, eksportovanih usluga i Pružatelja Sadržaja** kao što ćete naučiti u sledećim sekcijama.
|
||||
|
||||
### Eksploatacija eksportovanih Aktivnosti
|
||||
@ -320,9 +320,9 @@ Takođe zapamtite da kod aktivnosti počinje u **`onCreate`** metodi.
|
||||
|
||||
**Obilaženje autorizacije**
|
||||
|
||||
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.**
|
||||
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:
|
||||
|
||||
@ -331,14 +331,14 @@ Takođe možete pokrenuti eksportovanu aktivnost iz adb:
|
||||
```bash
|
||||
adb shell am start -n com.example.demo/com.example.test.MainActivity
|
||||
```
|
||||
**NAPOMENA**: MobSF će detektovati kao malicioznu upotrebu _**singleTask/singleInstance**_ kao `android:launchMode` u aktivnosti, ali zbog [ovoga](https://github.com/MobSF/Mobile-Security-Framework-MobSF/pull/750), očigledno je da je to opasno samo na starim verzijama (API verzije < 21).
|
||||
**NAPOMENA**: MobSF će detektovati kao zlonameran korišćenje _**singleTask/singleInstance**_ kao `android:launchMode` u aktivnosti, ali zbog [ovoga](https://github.com/MobSF/Mobile-Security-Framework-MobSF/pull/750), očigledno je da je to opasno samo na starim verzijama (API verzije < 21).
|
||||
|
||||
> [!TIP]
|
||||
> Imajte na umu da zaobilaženje autorizacije nije uvek ranjivost, to zavisi od načina na koji zaobilaženje funkcioniše i koje informacije su izložene.
|
||||
|
||||
**Curjenje osetljivih informacija**
|
||||
|
||||
**Aktivnosti takođe mogu vraćati rezultate**. Ako uspete da pronađete izvezenu i nezaštićenu aktivnost koja poziva metodu **`setResult`** i **vraća osetljive informacije**, došlo je do curenja osetljivih informacija.
|
||||
**Aktivnosti takođe mogu vraćati rezultate**. Ako uspete da pronađete izvezenu i nezaštićenu aktivnost koja poziva metodu **`setResult`** i **vraća osetljive informacije**, dolazi do curenja osetljivih informacija.
|
||||
|
||||
#### Tapjacking
|
||||
|
||||
@ -394,17 +394,17 @@ 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**
|
||||
|
||||
Jedan [zanimljiv izveštaj o bug bounty](https://hackerone.com/reports/855618) o linkovima (_/.well-known/assetlinks.json_).
|
||||
|
||||
### Neuspeh inspekcije i verifikacije transportnog sloja
|
||||
### 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 dekriptuju 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 dekriptuju 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
|
||||
|
||||
@ -412,17 +412,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).
|
||||
|
||||
Aplikacije koje ciljaju **API nivo 24 i više** zahtevaju izmene u Network Security Config-u kako bi prihvatile CA sertifikat proksija. 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:
|
||||
|
||||
@ -438,8 +438,8 @@ Važno je takođe tražiti uobičajene web ranjivosti unutar aplikacije. Detaljn
|
||||
|
||||
### Frida
|
||||
|
||||
[Frida](https://www.frida.re) je alat za dinamičku instrumentaciju za programere, inženjere obrnutog inženjeringa i istraživače bezbednosti.\
|
||||
**Možete pristupiti pokrenutim aplikacijama i povezati metode u vreme izvođenja da promenite ponašanje, promenite vrednosti, izdvojite vrednosti, pokrenete različit kod...**\
|
||||
[Frida](https://www.frida.re) je alat za dinamičku instrumentaciju za programere, inženjere obrnutog inženjeringa i istraživače sigurnosti.\
|
||||
**Možete pristupiti pokrenutim aplikacijama i povezati metode u vreme izvođenja da promenite ponašanje, promenite vrednosti, izvučete vrednosti, pokrenete različit kod...**\
|
||||
Ako želite da testirate Android aplikacije, morate znati kako koristiti Frida.
|
||||
|
||||
- Naučite kako koristiti Frida: [**Frida tutorijal**](frida-tutorial/index.html)
|
||||
@ -448,9 +448,15 @@ Ako želite da testirate Android aplikacije, morate znati kako koristiti Frida.
|
||||
- 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č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))
|
||||
|
||||
#### Anti-instrumentacija & radni tok za zaobilaženje SSL pinninga
|
||||
|
||||
{{#ref}}
|
||||
android-anti-instrumentation-and-ssl-pinning-bypass.md
|
||||
{{#endref}}
|
||||
|
||||
### **Dump Memorije - Fridump**
|
||||
|
||||
Proverite da li aplikacija čuva osetljive informacije unutar memorije koje ne bi trebala da čuva, kao što su lozinke ili mnemotehnike.
|
||||
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
|
||||
@ -461,7 +467,7 @@ python3 fridump3.py -u <PID>
|
||||
frida-ps -Uai
|
||||
python3 fridump3.py -u "<Name>"
|
||||
```
|
||||
Ovo će isprazniti memoriju u ./dump folder, i tamo možete pretraživati sa nečim poput:
|
||||
Ovo će isprazniti memoriju u ./dump folder, i tamo možete koristiti grep sa nečim poput:
|
||||
```bash
|
||||
strings * | grep -E "^[a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+$"
|
||||
```
|
||||
@ -489,7 +495,7 @@ Međutim, ako ovaj snimak sadrži **osetljive informacije**, neko ko ima pristup
|
||||
|
||||
Snimci se obično čuvaju na: **`/data/system_ce/0/snapshots`**
|
||||
|
||||
Android pruža način da **spreči snimanje ekrana postavljanjem FLAG_SECURE** parametra rasporeda. Korišćenjem ove oznake, sadržaj prozora se tretira kao siguran, sprečavajući da se pojavi na snimcima ekrana ili da se vidi na nesigurnim ekranima.
|
||||
Android pruža način da se **spreči hvatanje ekrana postavljanjem FLAG_SECURE** parametra rasporeda. Korišćenjem ove oznake, sadržaj prozora se tretira kao siguran, sprečavajući da se pojavi na snimcima ekrana ili da se vidi na nesigurnim ekranima.
|
||||
```bash
|
||||
getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE);
|
||||
```
|
||||
@ -499,9 +505,9 @@ Ovaj alat može pomoći u upravljanju različitim alatima tokom dinamičke anali
|
||||
|
||||
### Intent Injection
|
||||
|
||||
Programeri često kreiraju proxy komponente kao što su aktivnosti, servisi i prijemnici emitovanja koji obrađuju ove Intente i prosleđuju ih metodama kao što su `startActivity(...)` ili `sendBroadcast(...)`, što može biti rizično.
|
||||
Programeri često kreiraju proxy komponente kao što su aktivnosti, servisi i prijemnici koji obrađuju ove Intente i prosleđuju ih metodama kao što su `startActivity(...)` ili `sendBroadcast(...)`, što može biti rizično.
|
||||
|
||||
Opasnost leži u omogućavanju napadačima da aktiviraju neizvezene komponente aplikacije ili pristupe osetljivim provajderima sadržaja preusmeravanjem ovih Intenta. Značajan primer je `WebView` komponenta koja konvertuje URL-ove u `Intent` objekte putem `Intent.parseUri(...)` i zatim ih izvršava, što može dovesti do malicioznih injekcija Intenta.
|
||||
Opasnost leži u omogućavanju napadačima da aktiviraju neizvezene komponente aplikacije ili pristupe osetljivim provajderima sadržaja preusmeravanjem ovih Intenta. Značajan primer je `WebView` komponenta koja konvertuje URL-ove u `Intent` objekte putem `Intent.parseUri(...)` i zatim ih izvršava, što može dovesti do zlonamernih injekcija Intenta.
|
||||
|
||||
### Essential Takeaways
|
||||
|
||||
@ -535,10 +541,10 @@ Verovatno znate o ovim vrstama ranjivosti sa weba. Morate biti posebno oprezni s
|
||||
docker pull opensecurity/mobile-security-framework-mobsf
|
||||
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_).\
|
||||
Napomena 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
|
||||
|
||||
@ -610,7 +616,7 @@ Ovo je **sjajan alat za izvođenje statičke analize sa GUI-jem**
|
||||
|
||||
### [Qark](https://github.com/linkedin/qark)
|
||||
|
||||
Ovaj alat je dizajniran da traži nekoliko **ranjivosti vezanih za bezbednost Android aplikacija**, bilo u **izvor kodu** ili **pakovanim APK-ima**. Alat je takođe **sposoban da kreira "Proof-of-Concept" deployable APK** i **ADB komande**, da bi iskoristio neke od pronađenih ranjivosti (Izložene aktivnosti, intencije, tapjacking...). Kao i sa Drozer-om, nije potrebno root-ovati test uređaj.
|
||||
Ovaj alat je dizajniran da traži nekoliko **ranjivosti vezanih za sigurnost Android aplikacija**, bilo u **izvor kodu** ili **pakovanim APK-ima**. Alat je takođe **sposoban da kreira "Proof-of-Concept" deployable APK** i **ADB komande**, da bi iskoristio neke od pronađenih ranjivosti (Izložene aktivnosti, intencije, tapjacking...). Kao i sa Drozer-om, nije potrebno root-ovati test uređaj.
|
||||
```bash
|
||||
pip3 install --user qark # --user is only needed if not using a virtualenv
|
||||
qark --apk path/to/my.apk
|
||||
@ -619,7 +625,7 @@ qark --java path/to/specific/java/file.java
|
||||
```
|
||||
### [**ReverseAPK**](https://github.com/1N3/ReverseAPK.git)
|
||||
|
||||
- Prikazuje sve ekstrahovane datoteke radi lakšeg referenciranja
|
||||
- Prikazuje sve ekstrahovane datoteke za laku referencu
|
||||
- Automatski dekompajlira APK datoteke u Java i Smali format
|
||||
- Analizira AndroidManifest.xml za uobičajene ranjivosti i ponašanje
|
||||
- Staticka analiza izvornog koda za uobičajene ranjivosti i ponašanje
|
||||
@ -662,7 +668,7 @@ androbugs.exe -f [APK file]
|
||||
|
||||
**Androwarn** je alat čija je glavna svrha da detektuje i upozori korisnika na potencijalno zloćudno ponašanje koje razvija Android aplikacija.
|
||||
|
||||
Detekcija se vrši **statističkom analizom** Dalvik bytecode-a aplikacije, predstavljenog kao **Smali**, uz pomoć biblioteke [`androguard`](https://github.com/androguard/androguard).
|
||||
Detekcija se vrši **statčkom analizom** Dalvik bytecode-a aplikacije, predstavljenog kao **Smali**, uz pomoć biblioteke [`androguard`](https://github.com/androguard/androguard).
|
||||
|
||||
Ovaj alat traži **uobičajeno ponašanje "loših" aplikacija** kao što su: Ekstrakcija telekomunikacionih identifikatora, presretanje audio/video toka, modifikacija PIM podataka, izvršavanje proizvoljnog koda...
|
||||
```
|
||||
@ -672,7 +678,7 @@ python androwarn.py -i my_application_to_be_analyzed.apk -r html -v 3
|
||||
|
||||
.png>)
|
||||
|
||||
**MARA** je **M**obila **A**plikacija **R**everzno inženjerstvo i **A**naliza okvir. To je alat koji okuplja često korišćene alate za reverzno inženjerstvo i analizu mobilnih aplikacija, kako bi pomogao u testiranju mobilnih aplikacija protiv OWASP mobilnih bezbednosnih pretnji. Njegov cilj je da ovu zadatak učini lakšim i prijatnijim za programere mobilnih aplikacija i stručnjake za bezbednost.
|
||||
**MARA** je **M**obila **A**plikacija **R**everzno inženjerstvo i **A**naliza Framework. To je alat koji okuplja često korišćene alate za reverzno inženjerstvo i analizu mobilnih aplikacija, kako bi pomogao u testiranju mobilnih aplikacija protiv OWASP mobilnih bezbednosnih pretnji. Njegov cilj je da olakša ovaj zadatak i učini ga prijatnijim za programere mobilnih aplikacija i stručnjake za bezbednost.
|
||||
|
||||
Može da:
|
||||
|
||||
@ -693,7 +699,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 alat otvorenog koda 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 detektuje 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.
|
||||
|
||||
@ -701,13 +707,13 @@ ProGuard se distribuira kao deo Android SDK-a i pokreće se prilikom izgradnje a
|
||||
|
||||
Pronađite vodič korak po korak za deobfuskaciju apk-a na [https://blog.lexfo.fr/dexguard.html](https://blog.lexfo.fr/dexguard.html)
|
||||
|
||||
(Prema tom vodiču) Poslednji put kada smo proveravali, način rada Dexguard-a bio je:
|
||||
(Prema tom vodiču) Poslednji put kada smo proveravali, način rada Dexguard-a je bio:
|
||||
|
||||
- učitati resurs kao InputStream;
|
||||
- proslediti rezultat klasi koja nasleđuje FilterInputStream da bi ga dekriptovali;
|
||||
- uraditi neku beskorisnu obfuskaciju da bi se izgubilo nekoliko minuta vremena od reverzera;
|
||||
- proslediti dekriptovani rezultat ZipInputStream-u da bi dobili DEX datoteku;
|
||||
- konačno učitati dobijeni DEX kao resurs koristeći metodu `loadDex`.
|
||||
- proslediti dekriptovani rezultat ZipInputStream-u da bi dobili DEX fajl;
|
||||
- konačno učitati dobijeni DEX kao Resurs koristeći metodu `loadDex`.
|
||||
|
||||
### [DeGuard](http://apk-deguard.com)
|
||||
|
||||
@ -721,7 +727,7 @@ Ovo je LLM alat za pronalaženje potencijalnih bezbednosnih ranjivosti u android
|
||||
|
||||
### [Simplify](https://github.com/CalebFenton/simplify)
|
||||
|
||||
To je **generički android deobfuskator.** Simplify **virtuelno izvršava aplikaciju** da razume njeno ponašanje i zatim **pokušava da optimizuje kod** tako da se ponaša identično, ali je lakši za razumevanje ljudima. Svaka vrsta optimizacije je jednostavna i generička, tako da nije važno koja specifična vrsta obfuskacije se koristi.
|
||||
To je **generički android deobfuskator.** Simplify **virtuelno izvršava aplikaciju** da razume njeno ponašanje i zatim **pokušava da optimizuje kod** tako da se ponaša identično, ali je lakše za razumevanje ljudima. Svaka vrsta optimizacije je jednostavna i generička, tako da nije važno koja specifična vrsta obfuskacije se koristi.
|
||||
|
||||
### [APKiD](https://github.com/rednaga/APKiD)
|
||||
|
||||
@ -735,7 +741,7 @@ APKiD vam daje informacije o **kako je APK napravljen**. Identifikuje mnoge **ko
|
||||
|
||||
### [Androl4b](https://github.com/sh4hin/Androl4b)
|
||||
|
||||
AndroL4b je Android bezbednosna virtuelna mašina zasnovana na ubuntu-mate koja uključuje kolekciju najnovijih okvira, tutorijala i laboratorija od različitih bezbednosnih entuzijasta i istraživača za reverzno inženjerstvo i analizu malvera.
|
||||
AndroL4b je Android bezbednosna virtuelna mašina zasnovana na ubuntu-mate koja uključuje kolekciju najnovijih framework-a, tutorijala i labova od različitih bezbednosnih entuzijasta i istraživača za reverzno inženjerstvo i analizu malvera.
|
||||
|
||||
## References
|
||||
|
||||
|
@ -0,0 +1,203 @@
|
||||
# Android Anti-Instrumentation & SSL Pinning Bypass (Frida/Objection)
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
Ova stranica pruža praktičan radni tok za ponovnu analizu dinamičkih aplikacija na Androidu koje detektuju/blokiraju instrumentaciju ili primenjuju TLS pinning. Fokusira se na brzu procenu, uobičajene detekcije i kopirljive hook-ove/taktike za zaobilaženje bez repakovanja kada je to moguće.
|
||||
|
||||
## Detection Surface (šta aplikacije proveravaju)
|
||||
|
||||
- Provere root-a: su binarni, Magisk putevi, getprop vrednosti, uobičajeni root paketi
|
||||
- Frida/debugger provere (Java): Debug.isDebuggerConnected(), ActivityManager.getRunningAppProcesses(), getRunningServices(), skeniranje /proc, classpath, učitane biblioteke
|
||||
- Native anti-debug: ptrace(), syscalls, anti-attach, breakpoint-ovi, inline hook-ovi
|
||||
- Provere ranog inicijalizovanja: Application.onCreate() ili hook-ovi za pokretanje procesa koji se ruše ako je prisutna instrumentacija
|
||||
- TLS pinning: prilagođeni TrustManager/HostnameVerifier, OkHttp CertificatePinner, Conscrypt pinning, native pinovi
|
||||
|
||||
## Step 1 — Brza pobeda: sakrijte root sa Magisk DenyList
|
||||
|
||||
- Omogućite Zygisk u Magisk-u
|
||||
- Omogućite DenyList, dodajte ciljni paket
|
||||
- Ponovo pokrenite i ponovo testirajte
|
||||
|
||||
Mnoge aplikacije samo traže očigledne indikatore (su/Magisk putevi/getprop). DenyList često neutralizuje naivne provere.
|
||||
|
||||
References:
|
||||
- Magisk (Zygisk & DenyList): https://github.com/topjohnwu/Magisk
|
||||
|
||||
## Step 2 — 30‑sekundni Frida Codeshare testovi
|
||||
|
||||
Isprobajte uobičajene drop-in skripte pre nego što se detaljno upustite:
|
||||
|
||||
- anti-root-bypass.js
|
||||
- anti-frida-detection.js
|
||||
- hide_frida_gum.js
|
||||
|
||||
Example:
|
||||
```bash
|
||||
frida -U -f com.example.app -l anti-frida-detection.js
|
||||
```
|
||||
Ovo obično obezbeđuje stubove za Java root/debug provere, skeniranja procesa/usluga i native ptrace(). Korisno je na slabo zaštićenim aplikacijama; ojačani ciljevi mogu zahtevati prilagođene hook-ove.
|
||||
|
||||
- Codeshare: https://codeshare.frida.re/
|
||||
|
||||
## Korak 3 — Zaobići detektore u vreme inicijalizacije kasnim povezivanjem
|
||||
|
||||
Mnoge detekcije se izvršavaju samo tokom pokretanja procesa/onCreate(). Injekcija u vreme pokretanja (-f) ili gadgeti se hvataju; povezivanje nakon učitavanja UI može proći neprimećeno.
|
||||
```bash
|
||||
# Launch the app normally (launcher/adb), wait for UI, then attach
|
||||
frida -U -n com.example.app
|
||||
# Or with Objection to attach to running process
|
||||
aobjection --gadget com.example.app explore # if using gadget
|
||||
```
|
||||
Ako ovo funkcioniše, održavajte sesiju stabilnom i nastavite sa mapiranjem i stub proverama.
|
||||
|
||||
## Korak 4 — Mapiranje logike detekcije putem Jadx i pretrage stringova
|
||||
|
||||
Statističke ključne reči u Jadx:
|
||||
- "frida", "gum", "root", "magisk", "ptrace", "su", "getprop", "debugger"
|
||||
|
||||
Tipični Java obrasci:
|
||||
```java
|
||||
public boolean isFridaDetected() {
|
||||
return getRunningServices().contains("frida");
|
||||
}
|
||||
```
|
||||
Uobičajeni API-ji za pregledanje/hook:
|
||||
- android.os.Debug.isDebuggerConnected
|
||||
- android.app.ActivityManager.getRunningAppProcesses / getRunningServices
|
||||
- java.lang.System.loadLibrary / System.load (native bridge)
|
||||
- java.lang.Runtime.exec / ProcessBuilder (probing commands)
|
||||
- android.os.SystemProperties.get (root/emulator heuristics)
|
||||
|
||||
## Korak 5 — Runtime stubbing sa Frida (Java)
|
||||
|
||||
Override custom guards to return safe values without repacking:
|
||||
```js
|
||||
Java.perform(() => {
|
||||
const Checks = Java.use('com.example.security.Checks');
|
||||
Checks.isFridaDetected.implementation = function () { return false; };
|
||||
|
||||
// Neutralize debugger checks
|
||||
const Debug = Java.use('android.os.Debug');
|
||||
Debug.isDebuggerConnected.implementation = function () { return false; };
|
||||
|
||||
// Example: kill ActivityManager scans
|
||||
const AM = Java.use('android.app.ActivityManager');
|
||||
AM.getRunningAppProcesses.implementation = function () { return java.util.Collections.emptyList(); };
|
||||
});
|
||||
```
|
||||
Triiranje ranih padova? Izvršite dump klasa neposredno pre nego što se sruši kako biste uočili verovatne namespace-ove za detekciju:
|
||||
```js
|
||||
Java.perform(() => {
|
||||
Java.enumerateLoadedClasses({
|
||||
onMatch: n => console.log(n),
|
||||
onComplete: () => console.log('Done')
|
||||
});
|
||||
});
|
||||
```
|
||||
Zabeležite i neutralizujte sumnjive metode kako biste potvrdili tok izvršenja:
|
||||
```js
|
||||
Java.perform(() => {
|
||||
const Det = Java.use('com.example.security.DetectionManager');
|
||||
Det.checkFrida.implementation = function () {
|
||||
console.log('checkFrida() called');
|
||||
return false;
|
||||
};
|
||||
});
|
||||
```
|
||||
## Korak 6 — Pratite JNI/nativni trag kada Java hook-ovi ne uspeju
|
||||
|
||||
Pratite JNI ulazne tačke da locirate nativne učitavače i inicijalizaciju detekcije:
|
||||
```bash
|
||||
frida-trace -n com.example.app -i "JNI_OnLoad"
|
||||
```
|
||||
Brza native procena pakovanih .so fajlova:
|
||||
```bash
|
||||
# List exported symbols & JNI
|
||||
nm -D libfoo.so | head
|
||||
objdump -T libfoo.so | grep Java_
|
||||
strings -n 6 libfoo.so | egrep -i 'frida|ptrace|gum|magisk|su|root'
|
||||
```
|
||||
Interaktivno/nativno obrtanje:
|
||||
- Ghidra: https://ghidra-sre.org/
|
||||
- r2frida: https://github.com/nowsecure/r2frida
|
||||
|
||||
Primer: neuter ptrace da se savlada jednostavna anti‑debug zaštita u libc:
|
||||
```js
|
||||
const ptrace = Module.findExportByName(null, 'ptrace');
|
||||
if (ptrace) {
|
||||
Interceptor.replace(ptrace, new NativeCallback(function () {
|
||||
return -1; // pretend failure
|
||||
}, 'int', ['int', 'int', 'pointer', 'pointer']));
|
||||
}
|
||||
```
|
||||
Pogledajte takođe: {{#ref}}
|
||||
reversing-native-libraries.md
|
||||
{{#endref}}
|
||||
|
||||
## Korak 7 — Objection patching (ugradnja gadget-a / osnove uklanjanja)
|
||||
|
||||
Kada preferirate repakovanje umesto runtime hook-ova, pokušajte:
|
||||
```bash
|
||||
objection patchapk --source app.apk
|
||||
```
|
||||
Napomene:
|
||||
- Zahteva apktool; obezbedite trenutnu verziju iz zvaničnog vodiča kako biste izbegli probleme sa izgradnjom: https://apktool.org/docs/install
|
||||
- Umetanje gadgeta omogućava instrumentaciju bez root-a, ali može biti uhvaćeno jačim proverenim inicijalnim proverama.
|
||||
|
||||
Reference:
|
||||
- Objection: https://github.com/sensepost/objection
|
||||
|
||||
## Korak 8 — Rezerva: Patch TLS pinning za vidljivost mreže
|
||||
|
||||
Ako je instrumentacija blokirana, još uvek možete pregledati saobraćaj uklanjanjem pinning-a statički:
|
||||
```bash
|
||||
apk-mitm app.apk
|
||||
# Then install the patched APK and proxy via Burp/mitmproxy
|
||||
```
|
||||
- Alat: https://github.com/shroudedcode/apk-mitm
|
||||
- Za trikove sa CA‑trust konfiguracijom mreže (i Android 7+ korisničkim CA poverenjem), pogledajte:
|
||||
{{#ref}}
|
||||
make-apk-accept-ca-certificate.md
|
||||
{{#endref}}
|
||||
{{#ref}}
|
||||
install-burp-certificate.md
|
||||
{{#endref}}
|
||||
|
||||
## Korisna komanda cheat‑sheet
|
||||
```bash
|
||||
# List processes and attach
|
||||
frida-ps -Uai
|
||||
frida -U -n com.example.app
|
||||
|
||||
# Spawn with a script (may trigger detectors)
|
||||
frida -U -f com.example.app -l anti-frida-detection.js
|
||||
|
||||
# Trace native init
|
||||
frida-trace -n com.example.app -i "JNI_OnLoad"
|
||||
|
||||
# Objection runtime
|
||||
objection --gadget com.example.app explore
|
||||
|
||||
# Static TLS pinning removal
|
||||
apk-mitm app.apk
|
||||
```
|
||||
## Saveti i upozorenja
|
||||
|
||||
- Preferirajte kasno povezivanje umesto pokretanja kada aplikacije padnu pri pokretanju
|
||||
- Neka otkrivanja ponovo rade u kritičnim tokovima (npr. plaćanje, autentifikacija) — držite hook-ove aktivnim tokom navigacije
|
||||
- Kombinujte statičko i dinamičko: pretražujte stringove u Jadx da skratite listu klasa; zatim hook-ujte metode da verifikujete u vreme izvođenja
|
||||
- Ojačane aplikacije mogu koristiti pakere i nativno TLS pinovanje — očekujte da obrnuto inženjerstvo nativnog koda
|
||||
|
||||
## Reference
|
||||
|
||||
- [Reversing Android Apps: Bypassing Detection Like a Pro](https://www.kayssel.com/newsletter/issue-12/)
|
||||
- [Frida Codeshare](https://codeshare.frida.re/)
|
||||
- [Objection](https://github.com/sensepost/objection)
|
||||
- [apk-mitm](https://github.com/shroudedcode/apk-mitm)
|
||||
- [Jadx](https://github.com/skylot/jadx)
|
||||
- [Ghidra](https://ghidra-sre.org/)
|
||||
- [r2frida](https://github.com/nowsecure/r2frida)
|
||||
- [Apktool install guide](https://apktool.org/docs/install)
|
||||
- [Magisk](https://github.com/topjohnwu/Magisk)
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
Loading…
x
Reference in New Issue
Block a user