mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
710 lines
48 KiB
Markdown
710 lines
48 KiB
Markdown
# Pentesting Android Aplikacija
|
|
|
|
{{#include ../../banners/hacktricks-training.md}}
|
|
|
|
## Osnovi Android Aplikacija
|
|
|
|
Preporučuje se da započnete čitanje ove stranice kako biste saznali o **najvažnijim delovima vezanim za sigurnost Android-a i najopasnijim komponentama u Android aplikaciji**:
|
|
|
|
{{#ref}}
|
|
android-applications-basics.md
|
|
{{#endref}}
|
|
|
|
## 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.
|
|
|
|
Pogledajte sledeću listu [**ADB Komandi**](adb-commands.md) da biste naučili kako koristiti adb.
|
|
|
|
## Smali
|
|
|
|
Ponekad je zanimljivo **modifikovati kod aplikacije** da biste pristupili **skrivenim informacijama** (možda dobro obfuskovanim lozinkama ili zastavicama). Tada bi moglo biti zanimljivo dekompilirati apk, modifikovati kod i ponovo ga kompajlirati.\
|
|
[**U ovom tutorijalu** možete **naučiti kako dekompilirati APK, modifikovati Smali kod i ponovo kompajlirati APK** sa novom funkcionalnošću](smali-changes.md). Ovo može biti veoma korisno kao **alternativa za nekoliko testova tokom dinamičke analize** koji će biti predstavljeni. Tada, **uvek imajte na umu ovu mogućnost**.
|
|
|
|
## Druge zanimljive trikove
|
|
|
|
- [Lažiranje vaše lokacije u Play Store-u](spoofing-your-location-in-play-store.md)
|
|
- **Preuzimanje APK-ova**: [https://apps.evozi.com/apk-downloader/](https://apps.evozi.com/apk-downloader/), [https://apkpure.com/es/](https://apkpure.com/es/), [https://www.apkmirror.com/](https://www.apkmirror.com), [https://apkcombo.com/es-es/apk-downloader/](https://apkcombo.com/es-es/apk-downloader/), [https://github.com/kiber-io/apkd](https://github.com/kiber-io/apkd)
|
|
- Ekstrakcija APK-a sa uređaja:
|
|
```bash
|
|
adb shell pm list packages
|
|
com.android.insecurebankv2
|
|
|
|
adb shell pm path com.android.insecurebankv2
|
|
package:/data/app/com.android.insecurebankv2-Jnf8pNgwy3QA_U5f-n_4jQ==/base.apk
|
|
|
|
adb pull /data/app/com.android.insecurebankv2-Jnf8pNgwy3QA_U5f-n_4jQ==/base.apk
|
|
```
|
|
- Spojite sve delove i osnovne apk-ove sa [APKEditor](https://github.com/REAndroid/APKEditor):
|
|
```bash
|
|
mkdir splits
|
|
adb shell pm path com.android.insecurebankv2 | cut -d ':' -f 2 | xargs -n1 -i adb pull {} splits
|
|
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
|
|
|
|
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
|
|
|
|
Samo gledajući **stringove** APK-a možete tražiti **lozinke**, **URL-ove** ([https://github.com/ndelphit/apkurlgrep](https://github.com/ndelphit/apkurlgrep)), **api** ključeve, **enkripciju**, **bluetooth uuids**, **tokene** i sve što je zanimljivo... potražite čak i **backdoor-e** za izvršavanje koda ili backdoor-e za autentifikaciju (hardkodirane admin kredencijale za aplikaciju).
|
|
|
|
**Firebase**
|
|
|
|
Obratite posebnu pažnju na **firebase URL-ove** i proverite da li je loše 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
|
|
|
|
**Istraživanje \_Manifest.xml**_\*\* i \*\*_**strings.xml**\_\*\* datoteka 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 omogućeno usb debagovanje.
|
|
- **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 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.
|
|
|
|
### Tapjacking
|
|
|
|
**Tapjacking** je napad gde se **maliciozna** **aplikacija** pokreće i **pozicionira iznad aplikacije žrtve**. Kada vidljivo prikrije aplikaciju žrtve, njen korisnički interfejs je dizajniran na način da prevari korisnika da interaguje s njom, dok zapravo prosleđuje interakciju aplikaciji žrtve.\
|
|
U suštini, to je **oslepljivanje korisnika da ne zna da zapravo izvršava radnje na aplikaciji žrtve**.
|
|
|
|
Pronađite više informacija u:
|
|
|
|
{{#ref}}
|
|
tapjacking.md
|
|
{{#endref}}
|
|
|
|
### Preuzimanje zadataka
|
|
|
|
**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 stvarne aplikacije, mogla bi **preuzeti zadatak stvarne aplikacije** (tako da korisnik misli da koristi **malicioznu aplikaciju misleći da koristi pravu**).
|
|
|
|
Više informacija u:
|
|
|
|
{{#ref}}
|
|
android-task-hijacking.md
|
|
{{#endref}}
|
|
|
|
### Nesigurno skladištenje podataka
|
|
|
|
**Interna pohrana**
|
|
|
|
U Androidu, datoteke **pohranjene** u **internoj** pohrani su **dizajnirane** da budu **pristupačne** isključivo od **aplikacije** koja ih je **napravila**. Ova sigurnosna mera je **propisana** od strane Android operativnog sistema i obično je adekvatna za sigurnosne potrebe većine aplikacija. Međutim, programeri ponekad koriste režime kao što su `MODE_WORLD_READABLE` i `MODE_WORLD_WRITABLE` da **omoguće** deljenje datoteka između različitih aplikacija. Ipak, ovi režimi **ne ograničavaju pristup** ovim datotekama od strane drugih aplikacija, uključujući potencijalno maliciozne.
|
|
|
|
1. **Staticka analiza:**
|
|
- **Osigurajte** da se korišćenje `MODE_WORLD_READABLE` i `MODE_WORLD_WRITABLE` **pažljivo ispita**. Ovi režimi **mogu potencijalno izložiti** datoteke **neprikladnom ili neovlašćenom pristupu**.
|
|
2. **Dinamička analiza:**
|
|
- **Proverite** **dozvole** postavljene na datotekama koje kreira aplikacija. Konkretno, **proverite** da li su neke datoteke **postavljene da budu čitljive ili zapisive globalno**. Ovo može predstavljati značajan sigurnosni rizik, jer bi omogućilo **bilo kojoj aplikaciji** instaliranoj na uređaju, bez obzira na njen izvor ili nameru, da **čita ili modifikuje** ove datoteke.
|
|
|
|
**Eksterna pohrana**
|
|
|
|
Kada se radi o datotekama na **eksternom 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. **Bezbednosne brige**:
|
|
- S obzirom na lakoću pristupa, savetuje se **da se ne čuvaju osetljive informacije** na eksternom skladištu.
|
|
- Eksterna pohrana može biti uklonjena ili dostupna bilo kojoj aplikaciji, što je čini manje sigurnom.
|
|
3. **Rukovanje podacima iz eksterne pohrane**:
|
|
- Uvek **izvršite validaciju unosa** na podacima preuzetim iz eksterne pohrane. Ovo je ključno jer su podaci iz nepouzdanog izvora.
|
|
- Čuvanje izvršnih ili klasa datoteka na eksternom skladištu za dinamičko učitavanje se snažno ne preporučuje.
|
|
- Ako vaša aplikacija mora preuzeti izvršne datoteke iz eksterne pohrane, osigurajte da su te datoteke **potpisane i kriptografski verifikovane** pre nego što se dinamički učitaju. Ovaj korak je vitalan za održavanje sigurnosne integriteta vaše aplikacije.
|
|
|
|
Eksterna pohrana može biti **pristupna** u `/storage/emulated/0`, `/sdcard`, `/mnt/sdcard`
|
|
|
|
> [!NAPOMENA]
|
|
> 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**
|
|
|
|
- **Deljene postavke**: Android omogućava svakoj aplikaciji da lako sačuva xml datoteke u putanji `/data/data/<packagename>/shared_prefs/` i ponekad je moguće pronaći osetljive informacije u čistom tekstu u toj fascikli.
|
|
- **Baze podataka**: Android omogućava svakoj aplikaciji da lako sačuva sqlite baze podataka u putanji `/data/data/<packagename>/databases/` i ponekad je moguće pronaći osetljive informacije u čistom tekstu u toj fascikli.
|
|
|
|
### Slomljeni TLS
|
|
|
|
**Prihvati sve sertifikate**
|
|
|
|
Iz nekog razloga, ponekad programeri prihvataju sve sertifikate čak i ako, na primer, ime hosta ne odgovara 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.
|
|
|
|
### Slomljena Kriptografija
|
|
|
|
**Loši Procesi Upravljanja Ključevima**
|
|
|
|
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**
|
|
|
|
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.
|
|
|
|
### Ostale provere
|
|
|
|
- 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), 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.
|
|
- Koristite [**APKiD**](https://github.com/rednaga/APKiD) da proverite koji je kompajler/paker/obfuskator korišćen za izradu APK-a.
|
|
|
|
### React Native Aplikacija
|
|
|
|
Pročitajte sledeću stranicu da biste saznali kako lako pristupiti JavaScript kodu React aplikacija:
|
|
|
|
{{#ref}}
|
|
react-native-application.md
|
|
{{#endref}}
|
|
|
|
### Xamarin Aplikacije
|
|
|
|
Pročitajte sledeću stranicu da biste saznali kako lako pristupiti C# kodu xamarin aplikacija:
|
|
|
|
{{#ref}}
|
|
../xamarin-apps.md
|
|
{{#endref}}
|
|
|
|
### 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.**
|
|
|
|
### Automatizovana Staticka Analiza Koda
|
|
|
|
Alat [**mariana-trench**](https://github.com/facebook/mariana-trench) je sposoban da pronađe **ranjivosti** skeniranjem **koda** aplikacije. Ovaj alat sadrži niz **poznatih izvora** (koji ukazuju alatu na **mesta** gde je **ulaz** **kontrolisan od strane korisnika**), **sinks** (koji ukazuju alatu na **opasna** **mesta** gde bi zlonamerni korisnički ulaz mogao izazvati štetu) i **pravila**. Ova pravila ukazuju na **kombinaciju** **izvora-sinks** koja ukazuje na ranjivost.
|
|
|
|
Sa ovim znanjem, **mariana-trench će pregledati kod i pronaći moguće ranjivosti u njemu**.
|
|
|
|
### Otkriće Tajni
|
|
|
|
Aplikacija može sadržati tajne (API ključeve, lozinke, skrivene URL-ove, poddomene...) unutar nje koje biste mogli otkriti. Možete koristiti alat kao što je [https://github.com/dwisiswant0/apkleaks](https://github.com/dwisiswant0/apkleaks).
|
|
|
|
### Obilaženje Biometrijske Autentifikacije
|
|
|
|
{{#ref}}
|
|
bypass-biometric-authentication-android.md
|
|
{{#endref}}
|
|
|
|
### Druge zanimljive funkcije
|
|
|
|
- **Izvršavanje koda**: `Runtime.exec(), ProcessBuilder(), native code:system()`
|
|
- **Slanje SMS-ova**: `sendTextMessage, sendMultipartTestMessage`
|
|
- **Nativne funkcije** deklarisane kao `native`: `public native, System.loadLibrary, System.load`
|
|
- [Pročitajte ovo da biste saznali **kako da obrnute nativne funkcije**](reversing-native-libraries.md)
|
|
|
|
### **Ostali trikovi**
|
|
|
|
{{#ref}}
|
|
content-protocol.md
|
|
{{#endref}}
|
|
|
|
---
|
|
|
|
---
|
|
|
|
## 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.
|
|
|
|
### 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 čak i **videti logove vaše aplikacije** na vebu i povezati se putem **adb**.
|
|
|
|
.png>)
|
|
|
|
Zahvaljujući ADB konekciji možete koristiti **Drozer** i **Frida** unutar emulatora.
|
|
|
|
### Lokalna Dinamička Analiza
|
|
|
|
#### Korišćenje emulatora
|
|
|
|
- [**Android Studio**](https://developer.android.com/studio) (Možete kreirati **x86** i **arm** uređaje, a prema [**ovome**](https://android-developers.googleblog.com/2020/03/run-arm-apps-on-android-emulator.html)**najnovijim x86** verzijama **podržavaju ARM biblioteke** bez potrebe za sporim arm emulatorom).
|
|
- 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 kreirati nalog. _Preporučuje se da **preuzmete** verziju **SA** _**VirtualBox** kako biste izbegli potencijalne greške._)
|
|
- [**Nox**](https://es.bignox.com) (Besplatno, ali ne podržava Frida ili Drozer).
|
|
|
|
> [!NOTE]
|
|
> 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 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
|
|
|
|
Morate aktivirati **debugging** opcije i bilo bi dobro ako možete **root-ovati** ga:
|
|
|
|
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**.
|
|
|
|
> Kada instalirate aplikaciju, prva stvar koju treba da uradite je da je isprobate i istražite šta radi, kako funkcioniše i da se upoznate s njom.\
|
|
> Preporučujem da **izvršite ovu inicijalnu dinamičku analizu koristeći MobSF dinamičku analizu + pidcat**, tako da ćemo moći da **naučimo kako aplikacija funkcioniše** dok MobSF **prikuplja** mnogo **zanimljivih** **podataka** koje možete pregledati kasnije.
|
|
|
|
### Neplanirano Otkriće Podataka
|
|
|
|
**Logovanje**
|
|
|
|
Programeri bi trebali biti oprezni da ne izlažu **informacije za debagovanje** javno, jer to može dovesti do curenja osetljivih podataka. 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.\
|
|
> U svakom slučaju, i dalje se preporučuje da **ne logujete osetljive informacije**.
|
|
|
|
**Keširanje Copy/Paste Bafera**
|
|
|
|
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 poslati 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 osetljive informacije trećim stranama.
|
|
|
|
### 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** koji su sačuvani 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**.
|
|
|
|
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)
|
|
|
|
Sa [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.\
|
|
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
|
|
|
|
[**Pročitajte ovo ako želite da osvežite šta je Android Aktivnost.**](android-applications-basics.md#launcher-activity-and-other-activities)\
|
|
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.**
|
|
|
|
[**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:
|
|
|
|
- ImePaketa je com.example.demo
|
|
- Eksportovana Aktivnost je com.example.test.MainActivity
|
|
```bash
|
|
adb shell am start -n com.example.demo/com.example.test.MainActivity
|
|
```
|
|
**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).
|
|
|
|
> [!NAPOMENA]
|
|
> 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 **`setResult`** metodu i **vraća osetljive informacije**, dolazi do curenja osetljivih informacija.
|
|
|
|
#### Tapjacking
|
|
|
|
Ako tapjacking nije sprečen, mogli biste zloupotrebiti izvezenu aktivnost da naterate **korisnika da izvrši neočekivane radnje**. Za više informacija o [**šta je Tapjacking pratite link**](#tapjacking).
|
|
|
|
### Iskorišćavanje Content Providers - Pristup i manipulacija osetljivim informacijama
|
|
|
|
[**Pročitajte ovo ako želite da osvežite šta je Content Provider.**](android-applications-basics.md#content-provider)\
|
|
Content providers se osnovno koriste za **deljenje podataka**. Ako aplikacija ima dostupne content providere, možda ćete moći da **izvučete osetljive** podatke iz njih. Takođe je zanimljivo testirati moguće **SQL injekcije** i **Path Traversals** jer bi mogli biti ranjivi.
|
|
|
|
[**Saznajte kako da iskoristite Content Providers sa Drozer-om.**](drozer-tutorial/index.html#content-providers)
|
|
|
|
### **Iskorišćavanje Servisa**
|
|
|
|
[**Pročitajte ovo ako želite da osvežite šta je Servis.**](android-applications-basics.md#services)\
|
|
Zapamtite da akcije Servisa počinju u metodi `onStartCommand`.
|
|
|
|
Servis je osnovno nešto što **može primati podatke**, **obrađivati** ih i **vraćati** (ili ne) odgovor. Dakle, ako aplikacija izlaže neke servise, trebali biste **proveriti** **kod** da biste razumeli šta radi i **testirati** ga **dinamički** za izvlačenje poverljivih informacija, zaobilaženje mera autentifikacije...\
|
|
[**Saznajte kako da iskoristite Servise sa Drozer-om.**](drozer-tutorial/index.html#services)
|
|
|
|
### **Iskorišćavanje Broadcast Receivers**
|
|
|
|
[**Pročitajte ovo ako želite da osvežite šta je Broadcast Receiver.**](android-applications-basics.md#broadcast-receivers)\
|
|
Zapamtite da akcije Broadcast Receiver-a počinju u metodi `onReceive`.
|
|
|
|
Broadcast receiver će čekati na određenu vrstu poruke. U zavisnosti od toga kako receiver obrađuje poruku, mogao bi biti ranjiv.\
|
|
[**Saznajte kako da iskoristite Broadcast Receivers sa Drozer-om.**](#exploiting-broadcast-receivers)
|
|
|
|
### **Iskorišćavanje Schemes / Deep links**
|
|
|
|
Možete ručno tražiti deep links, koristeći alate kao što je MobSF ili skripte poput [ove](https://github.com/ashleykinguk/FBLinkBuilder/blob/master/FBLinkBuilder.py).\
|
|
Možete **otvoriti** deklarisani **scheme** koristeći **adb** ili **pregledač**:
|
|
```bash
|
|
adb shell am start -a android.intent.action.VIEW -d "scheme://hostname/path?param=value" [your.package.name]
|
|
```
|
|
_Napomena da možete **izostaviti ime paketa** i mobilni uređaj će automatski pozvati aplikaciju koja treba da otvori tu vezu._
|
|
```markup
|
|
<!-- Browser regular link -->
|
|
<a href="scheme://hostname/path?param=value">Click me</a>
|
|
<!-- fallback in your url you could try the intent url -->
|
|
<a href="intent://hostname#Intent;scheme=scheme;package=your.package.name;S.browser_fallback_url=http%3A%2F%2Fwww.example.com;end">with alternative</a>
|
|
```
|
|
**Izvršeni kod**
|
|
|
|
Da biste pronašli **kod koji će biti izvršen u aplikaciji**, idite na aktivnost koju poziva deeplink i potražite funkciju **`onNewIntent`**.
|
|
|
|
 (1) (1) (1).png>)
|
|
|
|
**Osetljive informacije**
|
|
|
|
Svaki put kada pronađete deep link, proverite da **ne prima osetljive podatke (kao što su lozinke) putem URL parametara**, jer bi bilo koja druga aplikacija mogla **da se pretvara da je deep link i ukrade te 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/).
|
|
|
|
**Još primera**
|
|
|
|
Jedan [zanimljiv izveštaj o bug bounty](https://hackerone.com/reports/855618) o linkovima (_/.well-known/assetlinks.json_).
|
|
|
|
### Inspekcija i verifikacija transportnog sloja
|
|
|
|
- **Sertifikati se ne proveravaju uvek pravilno** od strane Android aplikacija. Uobičajeno je da ove aplikacije zanemaruju upozorenja i prihvataju samopotpisane sertifikate ili, u nekim slučajevima, vraćaju se na korišćenje HTTP veza.
|
|
- **Pregovori tokom SSL/TLS rukovanja su ponekad slabi**, koristeći nesigurne kriptografske suite. Ova ranjivost čini vezu podložnom napadima čoveka u sredini (MITM), omogućavajući napadačima da dešifruju podatke.
|
|
- **Curjenje privatnih informacija** je rizik kada aplikacije autentifikuju koristeći sigurne kanale, ali zatim komuniciraju preko nesigurnih kanala za druge transakcije. Ovaj pristup ne štiti osetljive podatke, kao što su kolačići sesije ili korisnički podaci, od presretanja od strane zlonamernih entiteta.
|
|
|
|
#### Verifikacija sertifikata
|
|
|
|
Fokusiraćemo se na **verifikaciju sertifikata**. Integritet sertifikata servera mora biti verifikovan kako bi se poboljšala sigurnost. Ovo je ključno jer nesigurne TLS konfiguracije i prenos osetljivih podataka preko nekriptovanih kanala mogu predstavljati značajne rizike. Za detaljne korake o verifikaciji sertifikata servera i rešavanju ranjivosti, [**ovaj resurs**](https://manifestsecurity.com/android-application-security-part-10/) pruža sveobuhvatne smernice.
|
|
|
|
#### 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.
|
|
|
|
#### Inspekcija saobraćaja
|
|
|
|
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 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).
|
|
|
|
#### Obilaženje SSL Pinning-a
|
|
|
|
Kada je SSL Pinning implementiran, obilaženje postaje neophodno za inspekciju HTTPS saobraćaja. Različite metode su dostupne za ovu svrhu:
|
|
|
|
- Automatski **modifikujte** **apk** da **obidje** SSLPinning sa [**apk-mitm**](https://github.com/shroudedcode/apk-mitm). Najveća prednost ove opcije je što vam neće biti potrebna root privilegija da obidjete SSL Pinning, ali ćete morati da obrišete aplikaciju i ponovo instalirate novu, a to ne mora uvek da funkcioniše.
|
|
- Možete koristiti **Frida** (o kojoj se govori u nastavku) da obidjete ovu zaštitu. Ovde imate vodič za korišćenje Burp+Frida+Genymotion: [https://spenkk.github.io/bugbounty/Configuring-Frida-with-Burp-and-GenyMotion-to-bypass-SSL-Pinning/](https://spenkk.github.io/bugbounty/Configuring-Frida-with-Burp-and-GenyMotion-to-bypass-SSL-Pinning/)
|
|
- Takođe možete pokušati da **automatski obidjete SSL Pinning** koristeći [**objection**](frida-tutorial/objection-tutorial.md)**:** `objection --gadget com.package.app explore --startup-command "android sslpinning disable"`
|
|
- Takođe možete pokušati da **automatski obidjete SSL Pinning** koristeći **MobSF dinamičku analizu** (objašnjeno u nastavku)
|
|
- Ako i dalje mislite da postoji neki saobraćaj koji ne hvata, možete pokušati da **prosledite saobraćaj do burp-a koristeći iptables**. Pročitajte ovaj blog: [https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62](https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62)
|
|
|
|
#### Traženje uobičajenih web ranjivosti
|
|
|
|
Važno je takođe tražiti uobičajene web ranjivosti unutar aplikacije. Detaljne informacije o identifikaciji i ublažavanju ovih ranjivosti su van okvira ovog sažetka, ali su opširno pokrivene na drugim mestima.
|
|
|
|
### 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 pokrenutoj aplikaciji i povezati metode u vreme izvođenja da promenite ponašanje, promenite vrednosti, izdvojite 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/)
|
|
- Neki "GUI" za akcije sa Frida: [**https://github.com/m0bilesecurity/RMS-Runtime-Mobile-Security**](https://github.com/m0bilesecurity/RMS-Runtime-Mobile-Security)
|
|
- Ojection je odličan za automatizaciju korišćenja Frida: [**https://github.com/sensepost/objection**](https://github.com/sensepost/objection) **,** [**https://github.com/dpnishant/appmon**](https://github.com/dpnishant/appmon)
|
|
- Možete pronaći neke sjajne Frida skripte ovde: [**https://codeshare.frida.re/**](https://codeshare.frida.re)
|
|
- Pokušajte da obidjete mehanizme protiv debagovanja / anti-frida učitavanjem Frida kao što je naznačeno u [https://erfur.github.io/blog/dev/code-injection-without-ptrace](https://erfur.github.io/blog/dev/code-injection-without-ptrace) (alat [linjector](https://github.com/erfur/linjector-rs))
|
|
|
|
### **Dump Memorije - Fridump**
|
|
|
|
Proverite da li aplikacija čuva osetljive informacije unutar memorije koje ne bi trebala da čuva, kao što su lozinke ili mnemotehničke asocijacije.
|
|
|
|
Korišćenjem [**Fridump3**](https://github.com/rootbsd/fridump3) možete dumpovati memoriju aplikacije sa:
|
|
```bash
|
|
# With PID
|
|
python3 fridump3.py -u <PID>
|
|
|
|
# With name
|
|
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:
|
|
```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]+$"
|
|
```
|
|
### **Osetljivi podaci u Keystore-u**
|
|
|
|
U Androidu, Keystore je najbolje mesto za čuvanje osetljivih podataka, međutim, uz dovoljno privilegija, još uvek je **moguće pristupiti mu**. Kako aplikacije obično čuvaju **osetljive podatke u čistom tekstu**, pentestovi bi trebali proveriti to kao root korisnik ili neko ko ima fizički pristup uređaju mogao bi biti u mogućnosti da ukrade ove podatke.
|
|
|
|
Čak i ako aplikacija čuva podatke u keystore-u, podaci bi trebali biti enkriptovani.
|
|
|
|
Da biste pristupili podacima unutar keystore-a, možete koristiti ovaj Frida skript: [https://github.com/WithSecureLabs/android-keystore-audit/blob/master/frida-scripts/tracer-cipher.js](https://github.com/WithSecureLabs/android-keystore-audit/blob/master/frida-scripts/tracer-cipher.js)
|
|
```bash
|
|
frida -U -f com.example.app -l frida-scripts/tracer-cipher.js
|
|
```
|
|
### **Zaobilaženje otiska prsta/bio-metrike**
|
|
|
|
Korišćenjem sledećeg Frida skripta može biti moguće **zaobići autentifikaciju otiskom prsta** koju Android aplikacije mogu sprovoditi kako bi **zaštitile određena osetljiva područja:**
|
|
```bash
|
|
frida --codeshare krapgras/android-biometric-bypass-update-android-11 -U -f <app.package>
|
|
```
|
|
### **Pozadine slika**
|
|
|
|
Kada stavite aplikaciju u pozadinu, Android čuva **snimak aplikacije** tako da kada se vrati u fokus, počinje da učitava sliku pre aplikacije, pa izgleda kao da je aplikacija učitana brže.
|
|
|
|
Međutim, ako ovaj snimak sadrži **osetljive informacije**, neko ko ima pristup snimku može **ukrasti te informacije** (napomena: potrebno je imati root pristup da biste mu pristupili).
|
|
|
|
Snimci se obično čuvaju na: **`/data/system_ce/0/snapshots`**
|
|
|
|
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 njegovo pojavljivanje na snimcima ekrana ili pregled na nesigurnim ekranima.
|
|
```bash
|
|
getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE);
|
|
```
|
|
### **Android Application Analyzer**
|
|
|
|
Ovaj alat može pomoći u upravljanju različitim alatima tokom dinamičke analize: [https://github.com/NotSoSecure/android_application_analyzer](https://github.com/NotSoSecure/android_application_analyzer)
|
|
|
|
### Intent Injection
|
|
|
|
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 zlonamernih Intent injekcija.
|
|
|
|
### Essential Takeaways
|
|
|
|
- **Intent Injection** je sličan problemu Open Redirect na webu.
|
|
- Eksploati uključuju prosleđivanje `Intent` objekata kao dodataka, koji mogu biti preusmereni da izvrše nesigurne operacije.
|
|
- Može izložiti neizvezene komponente i provajdere sadržaja napadačima.
|
|
- Konverzija URL-a u `Intent` od strane `WebView` može olakšati nepredviđene radnje.
|
|
|
|
### Android Client Side Injections and others
|
|
|
|
Verovatno znate o ovim vrstama ranjivosti sa weba. Morate biti posebno oprezni sa ovim ranjivostima u Android aplikaciji:
|
|
|
|
- **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).
|
|
- **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)
|
|
|
|
---
|
|
|
|
## Automatic Analysis
|
|
|
|
### [MobSF](https://github.com/MobSF/Mobile-Security-Framework-MobSF)
|
|
|
|
**Static analysis**
|
|
|
|
.png>)
|
|
|
|
**Procena ranjivosti aplikacije** koristeći lep web-baziran frontend. Takođe možete izvršiti dinamičku analizu (ali morate pripremiti okruženje).
|
|
```bash
|
|
docker pull opensecurity/mobile-security-framework-mobsf
|
|
docker run -it -p 8000:8000 opensecurity/mobile-security-framework-mobsf:latest
|
|
```
|
|
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 sa **VirusTotal** (biće potrebno da postavite svoj API ključ u _MobSF/settings.py_ i omogućite ga: `VT_ENABLED = TRUE` `VT_API_KEY = <Vaš API ključ>` `VT_UPLOAD = TRUE`). Takođe možete postaviti `VT_UPLOAD` na `False`, tada će **hash** biti **upload** umesto datoteke.
|
|
|
|
### Pomoćna dinamička analiza sa MobSF
|
|
|
|
**MobSF** može biti veoma koristan za **dinamičku analizu** u **Android**, ali u tom slučaju ćete morati da instalirate MobSF i **genymotion** na vašem hostu (VM ili Docker neće raditi). _Napomena: Prvo treba da **pokrenete VM u genymotion** a **zatim MobSF.**_\
|
|
**MobSF dinamički analizer** može:
|
|
|
|
- **Dump podataka aplikacije** (URL-ovi, logovi, clipboard, screenshot-ovi koje ste napravili, screenshot-ovi napravljeni od strane "**Exported Activity Tester**", emailovi, SQLite baze podataka, XML datoteke i druge kreirane datoteke). Sve ovo se radi automatski osim za screenshot-ove, treba da pritisnete kada želite screenshot ili treba da pritisnete "**Exported Activity Tester**" da dobijete screenshot-ove svih eksportovanih aktivnosti.
|
|
- Zabeleži **HTTPS saobraćaj**
|
|
- Koristi **Frida** da dobije **runtime** **informacije**
|
|
|
|
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.
|
|
|
|
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 vaših Frida skripti MobSF-u 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 (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 odaberete pomoćni modul koji želite da koristite, treba da pritisnete "**Start Instrumentation**" i videćete sve izlaze u "**Frida Live Logs**".
|
|
|
|
**Shell**
|
|
|
|
Mobsf takođe donosi shell sa nekim **adb** komandama, **MobSF komandama**, i uobičajenim **shell** **komandama** na dnu stranice dinamičke analize. Neke zanimljive komande:
|
|
```bash
|
|
help
|
|
shell ls
|
|
activities
|
|
exported_activities
|
|
services
|
|
receivers
|
|
```
|
|
**HTTP alati**
|
|
|
|
Kada se http saobraćaj uhvati, možete videti ružan prikaz uhvaćenog saobraćaja na "**HTTP(S) Traffic**" donjem delu ili lepši prikaz na "**Start HTTPTools**" zelenom dugmetu. Iz druge opcije, možete **poslati** **uhvaćene zahteve** na **proksije** kao što su Burp ili Owasp ZAP.\
|
|
Da biste to uradili, _uključite Burp -->_ _isključite Intercept --> u MobSB HTTPTools izaberite zahtev_ --> pritisnite "**Send to Fuzzer**" --> _izaberite adresu proksija_ ([http://127.0.0.1:8080\\](http://127.0.0.1:8080)).
|
|
|
|
Kada završite dinamičku analizu sa MobSF, možete pritisnuti na "**Start Web API Fuzzer**" da **fuzz-ujete http zahteve** i tražite ranjivosti.
|
|
|
|
> [!NOTE]
|
|
> Nakon izvođenja dinamičke analize sa MobSF, podešavanja proksija mogu biti pogrešno konfigurisana i nećete moći da ih popravite iz GUI-a. Možete popraviti podešavanja proksija tako što ćete uraditi:
|
|
>
|
|
> ```
|
|
> adb shell settings put global http_proxy :0
|
|
> ```
|
|
|
|
### 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 omogući da znate **šta se dešava u aplikaciji** dok vršite **dinamičku analizu**.
|
|
|
|
### [Yaazhini](https://www.vegabird.com/yaazhini/)
|
|
|
|
Ovo je **sjajan alat za izvođenje statičke analize sa GUI-jem**
|
|
|
|
.png>)
|
|
|
|
### [Qark](https://github.com/linkedin/qark)
|
|
|
|
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
|
|
qark --java path/to/parent/java/folder
|
|
qark --java path/to/specific/java/file.java
|
|
```
|
|
### [**ReverseAPK**](https://github.com/1N3/ReverseAPK.git)
|
|
|
|
- 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
|
|
- Informacije o uređaju
|
|
- i još mnogo toga
|
|
```bash
|
|
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 radi dekompresovanjem APK-ova i primenom niza pravila za otkrivanje tih ranjivosti.
|
|
|
|
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)
|
|
```
|
|
super-analyzer {apk_file}
|
|
```
|
|
### [StaCoAn](https://github.com/vincentcox/StaCoAn)
|
|
|
|
.png>)
|
|
|
|
StaCoAn je **crossplatform** alat koji pomaže programerima, lovcima na greške i etičkim hakerima u izvođenju [static code analysis](https://en.wikipedia.org/wiki/Static_program_analysis) na mobilnim aplikacijama.
|
|
|
|
Koncept je da prevučete i ispustite datoteku vaše mobilne aplikacije (datoteka .apk ili .ipa) na StaCoAn aplikaciju i ona će generisati vizuelni i prenosivi izveštaj za vas. Možete prilagoditi postavke i liste reči kako biste dobili prilagođeno iskustvo.
|
|
|
|
Preuzmite [latest release](https://github.com/vincentcox/StaCoAn/releases):
|
|
```
|
|
./stacoan
|
|
```
|
|
### [AndroBugs](https://github.com/AndroBugs/AndroBugs_Framework)
|
|
|
|
AndroBugs Framework je sistem za analizu ranjivosti na Androidu koji pomaže programerima ili hakerima da pronađu potencijalne sigurnosne ranjivosti u Android aplikacijama.\
|
|
[Windows izdanja](https://github.com/AndroBugs/AndroBugs_Framework/releases)
|
|
```
|
|
python androbugs.py -f [APK file]
|
|
androbugs.exe -f [APK file]
|
|
```
|
|
### [Androwarn](https://github.com/maaaaz/androwarn)
|
|
|
|
**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).
|
|
|
|
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
|
|
```
|
|
### [MARA Framework](https://github.com/xtiankisutsa/MARA_Framework)
|
|
|
|
.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 olakša ovaj zadatak i učini ga prijatnijim za programere mobilnih aplikacija i stručnjake za bezbednost.
|
|
|
|
Može da:
|
|
|
|
- Izvlači Java i Smali kod koristeći različite alate
|
|
- Analizira APK-ove koristeći: [smalisca](https://github.com/dorneanu/smalisca), [ClassyShark](https://github.com/google/android-classyshark), [androbugs](https://github.com/AndroBugs/AndroBugs_Framework), [androwarn](https://github.com/maaaaz/androwarn), [APKiD](https://github.com/rednaga/APKiD)
|
|
- Izvlači privatne informacije iz APK-a koristeći regex.
|
|
- Analizira Manifest.
|
|
- Analizira pronađene domene koristeći: [pyssltest](https://github.com/moheshmohan/pyssltest), [testssl](https://github.com/drwetter/testssl.sh) i [whatweb](https://github.com/urbanadventurer/WhatWeb)
|
|
- Deobfuskira APK putem [apk-deguard.com](http://www.apk-deguard.com)
|
|
|
|
### Koodous
|
|
|
|
Koristan za otkrivanje malvera: [https://koodous.com/](https://koodous.com)
|
|
|
|
## Obfuskacija/Deobfuskacija koda
|
|
|
|
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 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.
|
|
|
|
### [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 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`.
|
|
|
|
### [DeGuard](http://apk-deguard.com)
|
|
|
|
**DeGuard preokreće proces obfuskacije koji izvode Android alati za obfuskaciju. Ovo omogućava brojne analize bezbednosti, uključujući inspekciju koda i predikciju biblioteka.**
|
|
|
|
Možete da otpremite obfuskovani APK na njihovu platformu.
|
|
|
|
### [Deobfuscate android App](https://github.com/In3tinct/deobfuscate-android-app)
|
|
|
|
Ovo je LLM alat za pronalaženje potencijalnih bezbednosnih ranjivosti u android aplikacijama i deobfuskaciju koda android aplikacija. Koristi Google-ov javni API Gemini.
|
|
|
|
### [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še za razumevanje ljudima. Svaka vrsta optimizacije je jednostavna i generička, tako da nije važno koja specifična vrsta obfuskacije se koristi.
|