mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-22 04:33:28 +00:00
Translated ['binary-exploitation/common-binary-protections-and-bypasses/
This commit is contained in:
parent
2a6701bf82
commit
c41421dbfc
4 changed files with 240 additions and 48 deletions
|
@ -725,6 +725,7 @@
|
|||
* [Ret2plt](binary-exploitation/common-binary-protections-and-bypasses/aslr/ret2plt.md)
|
||||
* [Ret2ret & Reo2pop](binary-exploitation/common-binary-protections-and-bypasses/aslr/ret2ret.md)
|
||||
* [CET & Shadow Stack](binary-exploitation/common-binary-protections-and-bypasses/cet-and-shadow-stack.md)
|
||||
* [Libc Protections](binary-exploitation/common-binary-protections-and-bypasses/libc-protections.md)
|
||||
* [Memory Tagging Extension (MTE)](binary-exploitation/common-binary-protections-and-bypasses/memory-tagging-extension-mte.md)
|
||||
* [No-exec / NX](binary-exploitation/common-binary-protections-and-bypasses/no-exec-nx.md)
|
||||
* [PIE](binary-exploitation/common-binary-protections-and-bypasses/pie/README.md)
|
||||
|
|
|
@ -0,0 +1,80 @@
|
|||
# Προστασίες Libc
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Άλλοι τρόποι υποστήριξης του HackTricks:
|
||||
|
||||
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
||||
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||
* Ανακαλύψτε την [**Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Εγγραφείτε** στην 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα τηλεγραφήματος**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs** στα [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
|
||||
|
||||
</details>
|
||||
|
||||
## Επιβολή Στοίβας Τμημάτων
|
||||
|
||||
Το **Malloc** εκχωρεί μνήμη σε **ομάδες 8 bytes (32-bit) ή 16 bytes (64-bit)**. Αυτό σημαίνει ότι το τέλος των τμημάτων σε συστήματα 32-bit πρέπει να ευθυγραμμίζεται με το **0x8**, και σε συστήματα 64-bit με το **0x0**. Η λειτουργία ασφαλείας ελέγχει ότι κάθε τμήμα **ευθυγραμμίζεται σωστά** σε αυτές τις συγκεκριμένες θέσεις πριν χρησιμοποιηθεί ένας δείκτης από ένα bin.
|
||||
|
||||
### Οφέλη Ασφάλειας
|
||||
|
||||
Η επιβολή της ευθυγράμμισης τμημάτων σε συστήματα 64-bit ενισχύει σημαντικά την ασφάλεια του Malloc με τον τρόπο που **περιορίζει την τοποθέτηση ψεύτικων τμημάτων σε μόνο 1 στις 16 διευθύνσεις**. Αυτό δυσκολεύει τις προσπάθειες εκμετάλλευσης, ειδικά σε σενάρια όπου ο χρήστης έχει περιορισμένο έλεγχο επί των τιμών εισόδου, καθιστώντας τις επιθέσεις πιο πολύπλοκες και δυσκολότερες να εκτελεστούν με επιτυχία.
|
||||
|
||||
* **Επίθεση Fastbin στο \_\_malloc\_hook**
|
||||
|
||||
Οι νέοι κανόνες ευθυγράμμισης στο Malloc εμποδίζουν επίσης μια κλασική επίθεση που αφορά το `__malloc_hook`. Προηγουμένως, οι επιτιθέμενοι μπορούσαν να διαμορφώσουν τα μεγέθη τμημάτων για να **αντικαταστήσουν αυτόν τον δείκτη συνάρτησης** και να κερδίσουν **εκτέλεση κώδικα**. Τώρα, η αυστηρή απαίτηση ευθυγράμμισης εξασφαλίζει ότι τέτοιες διαμορφώσεις δεν είναι πλέον εφικτές, κλείνοντας έτσι μια κοινή διαδρομή εκμετάλλευσης και ενισχύοντας συνολικά την ασφάλεια.
|
||||
|
||||
## Ανακάτεμα Δεικτών σε fastbins και tcache
|
||||
|
||||
Το **Ανακάτεμα Δεικτών** είναι μια ασφαλειακή βελτίωση που χρησιμοποιείται για την προστασία των **fastbin και tcache Fd δεικτών** σε λειτουργίες διαχείρισης μνήμης. Αυτή η τεχνική βοηθά στην πρόληψη ορισμένων τύπων εκμετάλλευσης μνήμης, ειδικά αυτών που δεν απαιτούν διαρροή πληροφοριών μνήμης ή που διαμορφώνουν άμεσα τοποθεσίες μνήμης σχετικά με γνωστές θέσεις (σχετικές **αντικαταστάσεις**).
|
||||
|
||||
Η καρδιά αυτής της τεχνικής είναι μια τύπου ασάφειας:
|
||||
|
||||
**`Νέος_Δείκτης = (L >> 12) XOR P`**
|
||||
|
||||
* **L** είναι η **Τοποθεσία Αποθήκευσης** του δείκτη.
|
||||
* **P** είναι ο πραγματικός **fastbin/tcache Fd Δείκτης**.
|
||||
|
||||
Ο λόγος για τον οποίο γίνεται δυαδική μετατόπιση της τοποθεσίας αποθήκευσης (L) κατά 12 bits πριν τη λειτουργία XOR είναι κρίσιμος. Αυτή η διαμόρφωση αντιμετωπίζει μια ευπάθεια που είναι ενσωματωμένη στην προσδιοριστική φύση των λιγότερο σημαντικών 12 bits των διευθύνσεων μνήμης, τα οποία είναι συνήθως προβλέψιμα λόγω περιορισμών της αρχιτεκτονικής του συστήματος. Με τη μετατόπιση των bits, η προβλέψιμη μερίδα αφαιρείται από την εξίσωση, ενισχύοντας την τυχαιότητα του νέου, ανακατεμένου δείκτη και κατ' επέκταση προστατεύοντας ενάντια σε επιθέσεις που βασίζονται στην προβλέψιμότητα αυτών των bits.
|
||||
|
||||
Αυτός ο ανακατεμένος δείκτης εκμεταλλεύεται την υπάρχουσα τυχαιότητα που παρέχεται από το **Address Space Layout Randomization (ASLR)**, το οποίο τυχαιοποιεί τις διευθύνσεις που χρησιμοποιούνται από τα προγράμματα για να δυσκολέψει τους επιτιθέμενους να προβλέψουν τη μνημιακή διάταξη ενός διεργασίας.
|
||||
|
||||
**Ανακατεμένος Δείκτης με Διαρροή Μνήμης**
|
||||
|
||||
{% hint style="danger" %}
|
||||
Για μια καλύτερη εξήγηση της διαδικασίας [**ελέγξτε την αρχική ανάρτηση από εδώ**](https://maxwelldulin.com/BlogPost?post=5445977088).
|
||||
{% endhint %}
|
||||
|
||||
### Επισκόπηση Αλγορίθμου
|
||||
|
||||
Η τύπου χρησιμοποιούμενη για το ανακάτεμα και την αποκωδικοποίηση των δεικτών είναι: 
|
||||
|
||||
**`Νέος_Δείκτης = (L >> 12) XOR P`**
|
||||
|
||||
Όπου το **L** είναι η τοποθεσία αποθήκευσης και το **P** είναι ο Fd δείκτης. Όταν το **L** μετατοπίζεται δεξιά κατά 12 bits, αποκαλύπτει τα πιο σημαντικά bits του **P**, λόγω της φύσης του **XOR**, που εξάγει 0 όταν τα bits XOR-άρονται με τον εαυτό τους.
|
||||
|
||||
**Βασικά Βήματα στον Αλγόριθμο:**
|
||||
|
||||
1. **Αρχική Διαρροή των Πιο Σημαντικών Bits**: Με το XOR του μετατοπισμένου **L** με το **P**, παίρνετε αποτελεσματικά τα πρώτα 12 bits του **P** επειδή η μετατοπισμένη περιοχή του **L** θα είναι μηδέν, αφήνοντας τα αντίστοιχα bits του **P** αναλλοίωτα.
|
||||
2. **Ανάκτηση των Bits του Δείκτη**: Καθώς το XOR είναι αντιστρέψιμο, γνωρίζοντας το αποτέλεσμα και ένα από τα ορίσματα σας επιτρέπει να υπολογίσετε το άλλο όρισμα. Αυτή η ιδιότητα χρησιμοποιείται για να εξάγετε ολόκληρο το σύνολο των bits για το **P** με τον διαδοχικό XOR γνωστών συνόλων bits με τμήματα του ανακατεμένου δείκτη.
|
||||
3. **Επαναλαμβανόμενο Ανακάτεμα**: Η διαδικασία επαναλαμβάνεται, κάθε φορά χρησιμοποιώντας τα νεότερα ανακαλυφθέντα bits του **P** από το προηγούμεν
|
||||
## Προστασία Pointer Guard
|
||||
|
||||
Το Pointer guard είναι μια τεχνική μείωσης εκμετάλλευσης που χρησιμοποιείται στο glibc για την προστασία αποθηκευμένων δεικτών συνάρτησης, ιδιαίτερα αυτών που έχουν καταχωρηθεί από κλήσεις βιβλιοθήκης όπως το `atexit()`. Αυτή η προστασία περιλαμβάνει την ανακάτεμα των δεικτών με XOR με ένα μυστικό που αποθηκεύεται στα δεδομένα νήματος (`fs:0x30`) και την εφαρμογή ενός δυαδικού περιστροφής. Αυτό το μηχανισμό στοχεύει στο να αποτρέψει τους επιτιθέμενους από το να αρπάξουν τον έλεγχο ροής με τον παρεμβολή στους δείκτες συνάρτησης.
|
||||
|
||||
### **Παράκαμψη του Pointer Guard με έκθεση**
|
||||
|
||||
1. **Κατανόηση των Λειτουργιών του Pointer Guard:** Το ανακάτεμα των δεικτών γίνεται χρησιμοποιώντας τον μακρό `PTR_MANGLE` που κάνει XOR τον δείκτη με ένα μυστικό 64 bit και στη συνέχεια εκτελεί μια αριστερή περιστροφή 0x11 bits. Η αντίστροφη λειτουργία για την ανάκτηση του αρχικού δείκτη χειρίζεται από το `PTR_DEMANGLE`.
|
||||
2. **Στρατηγική Επίθεσης:** Η επίθεση βασίζεται σε μια προσέγγιση γνωστού κειμένου, όπου ο επιτιθέμενος πρέπει να γνωρίζει τόσο την αρχική όσο και τη μετασχηματισμένη εκδοχή ενός δείκτη για να συμπεράνει το μυστικό που χρησιμοποιείται για τον μετασχηματισμό.
|
||||
3. **Εκμετάλλευση Γνωστών Κειμένων:**
|
||||
* **Αναγνώριση Σταθερών Δεικτών Συνάρτησης:** Με την εξέταση του πηγαίου κώδικα του glibc ή των πινάκων δεικτών συνάρτησης που αρχικοποιούνται (όπως το `__libc_pthread_functions`), ένας επιτιθέμενος μπορεί να βρει προβλέψιμους δείκτες συνάρτησης.
|
||||
* **Υπολογισμός του Μυστικού:** Χρησιμοποιώντας έναν γνωστό δείκτη συνάρτησης όπως το `__pthread_attr_destroy` και τη μετασχηματισμένη του εκδοχή από τον πίνακα δεικτών συνάρτησης, το μυστικό μπορεί να υπολογιστεί αναστρέφοντας την περιστροφή (δεξιά περιστροφή) του μετασχηματισμένου δείκτη και στη συνέχεια κάνοντας XOR με τη διεύθυνση της συνάρτησης.
|
||||
4. **Εναλλακτικά Κείμενα:** Ο επιτιθέμενος μπορεί επίσης να πειραματιστεί με τον μετασχηματισμό δεικτών με γνωστές τιμές όπως το 0 ή το -1 για να δει αν αυτές παράγουν αναγνωρίσιμα πρότυπα στη μνήμη, αποκαλύπτοντας πιθανώς το μυστικό όταν αυτά τα πρότυπα βρίσκονται σε αναλήψεις μνήμης.
|
||||
5. **Πρακτική Εφαρμογή:** Μετά τον υπολογισμό του μυστικού, ένας επιτιθέμενος μπορεί να χειρίζεται τους δείκτες με έλεγχο, παρακάμπτοντας ουσιαστικά την προστασία του Pointer Guard σε μια εφαρμογή πολλαπλών νημάτων με γνώση της βάσης δεδομένων libc και τη δυνατότητα ανάγνωσης αυθαίρετων τοποθεσιών μνήμης.
|
||||
|
||||
## Αναφορές
|
||||
|
||||
* [https://maxwelldulin.com/BlogPost?post=5445977088](https://maxwelldulin.com/BlogPost?post=5445977088)
|
||||
* [https://blog.infosectcbr.com.au/2020/04/bypassing-pointer-guard-in-linuxs-glibc.html?m=1](https://blog.infosectcbr.com.au/2020/04/bypassing-pointer-guard-in-linuxs-glibc.html?m=1)
|
|
@ -2,15 +2,15 @@
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>Μάθετε το χάκινγκ AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Ειδικός Ερυθρού Συνεργείου HackTricks AWS)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Ειδικός Red Team AWS του HackTricks)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Άλλοι τρόποι υποστήριξης του HackTricks:
|
||||
|
||||
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
||||
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στη [**ομάδα τηλεγράφου**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια στο GitHub.
|
||||
* **Εγγραφείτε** στην 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα τηλεγραφήματος**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs** στα [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
|
||||
|
||||
</details>
|
||||
|
||||
|
@ -18,17 +18,17 @@
|
|||
|
||||
Ένα **πακέτο εγκατάστασης macOS** (επίσης γνωστό ως αρχείο `.pkg`) είναι ένα μορφότυπο αρχείου που χρησιμοποιείται από το macOS για τη **διανομή λογισμικού**. Αυτά τα αρχεία είναι σαν ένα **κουτί που περιέχει ό,τι χρειάζεται ένα κομμάτι λογισμικού** για να εγκατασταθεί και να λειτουργήσει σωστά.
|
||||
|
||||
Το ίδιο το αρχείο πακέτου είναι ένα αρχείο αρχειοθήκης που κρατά μια **ιεραρχία αρχείων και καταλόγων που θα εγκατασταθούν στον στόχο** υπολογιστή. Μπορεί επίσης να περιλαμβάνει **σενάρια** για να εκτελέσει εργασίες πριν και μετά την εγκατάσταση, όπως η ρύθμιση αρχείων διαμόρφωσης ή η καθαρισμός παλαιών εκδόσεων του λογισμικού.
|
||||
Το ίδιο το αρχείο πακέτου είναι ένα αρχείο αρχειοθήκης που κρατά μια **ιεραρχία αρχείων και καταλόγων που θα εγκατασταθούν στον** υπολογιστή-στόχο. Μπορεί επίσης να περιλαμβάνει **σενάρια** για να εκτελέσει εργασίες πριν και μετά την εγκατάσταση, όπως η ρύθμιση αρχείων διαμόρφωσης ή η καθαρισμός παλαιότερων εκδόσεων του λογισμικοϋ.
|
||||
|
||||
### Ιεραρχία
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/Pasted Graphic.png" alt="https://www.youtube.com/watch?v=iASSG0_zobQ"><figcaption></figcaption></figure>
|
||||
|
||||
* **Διανομή (xml)**: Προσαρμογές (τίτλος, κείμενο καλωσορίσματος...) και έλεγχοι σεναρίου/εγκατάστασης
|
||||
* **PackageInfo (xml)**: Πληροφορίες, απαιτήσεις εγκατάστασης, τοποθεσία εγκατάστασης, διαδρομές για τα σενάρια που θα εκτελεστοώσν
|
||||
* **Λογαριασμός υλικών (bom)**: Λίστα αρχείων προς εγκατάσταση, ενημέρωση ή αφαίρεση με δικαιώματα αρχείου
|
||||
* **Φορτίο (CPIO αρχείο gzip συμπιεσμένο)**: Αρχεία προς εγκατάσταση στην `τοποθεσία-εγκατάστασης` από το PackageInfo
|
||||
* **Σενάρια (CPIO αρχείο gzip συμπιεσμένο)**: Προεγκατάσταση και μεταεγκατάσταση σεναρίων και περισσότεροι πόροι που εξάγονται σε προσωρινό κατάλογο για εκτέλεση.
|
||||
* **Διανομή (xml)**: Προσαρμογές (τίτλος, κείμενο καλωσορίσματος...) και ελέγχοι σεναρίου/εγκατάστασης
|
||||
* **PackageInfo (xml)**: Πληροφορίες, απαιτήσεις εγκατάστασης, τοποθεσία εγκατάστασης, διαδρομές για τα σενάρια που θα τρέξουν
|
||||
* **Λογαριασμός υλικών (bom)**: Λίστα αρχείων για εγκατάσταση, ενημέρωση ή αφαίρεση με δικαιώματα αρχείου
|
||||
* **Φορτίο (CPIO αρχείο gzip συμπιεσμένο)**: Αρχεία για εγκατάσταση στην `τοποθεσία-εγκατάστασης` από το PackageInfo
|
||||
* **Σενάρια (CPIO αρχείο gzip συμπιεσμένο)**: Προεγκατάσταση και μεταεγκατάσταση σεναρίων και περισσότεροι πόροι εξάγονται σε έναν προσωρινό κατάλογο για εκτέλεση.
|
||||
|
||||
### Αποσυμπίεση
|
||||
```bash
|
||||
|
@ -50,15 +50,19 @@ cpio -i < Scripts
|
|||
|
||||
Τα αρχεία DMG, ή Apple Disk Images, είναι ένα μορφή αρχείου που χρησιμοποιείται από το macOS της Apple για εικόνες δίσκου. Ένα αρχείο DMG είναι ουσιαστικά μια **εικόνα δίσκου που μπορεί να τοποθετηθεί** (περιέχει το δικό του σύστημα αρχείων) που περιέχει ωμά δεδομένα των τετραγωνικών τύπων συμπιεσμένα και μερικές φορές κρυπτογραφημένα. Όταν ανοίγετε ένα αρχείο DMG, το macOS **τοποθετεί το ως να ήταν φυσικός δίσκος**, επιτρέποντάς σας να έχετε πρόσβαση στα περιεχόμενά του.
|
||||
|
||||
{% hint style="danger" %}
|
||||
Σημειώστε ότι οι εγκαταστάτες **`.dmg`** υποστηρίζουν **τόσα πολλά μορφές** ώστε στο παρελθόν μερικοί από αυτούς που περιείχαν ευπάθειες καταχρηστικά χρησιμοποιήθηκαν για να αποκτηθεί **εκτέλεση κώδικα πυρήνα**.
|
||||
{% endhint %}
|
||||
|
||||
### Ιεραρχία
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (12) (2).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../.gitbook/assets/image (222).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Η ιεραρχία ενός αρχείου DMG μπορεί να είναι διαφορετική ανάλογα με το περιεχόμενο. Ωστόσο, για τα DMG εφαρμογών, συνήθως ακολουθεί αυτή τη δομή:
|
||||
|
||||
* Κορυφαίο Επίπεδο: Αυτό είναι το ριζικό επίπεδο της εικόνας δίσκου. Συνήθως περιέχει την εφαρμογή και πιθανώς ένα σύνδεσμο προς τον φάκελο Εφαρμογές.
|
||||
* Εφαρμογή (.app): Αυτή είναι η πραγματική εφαρμογή. Στο macOS, μια εφαρμογή είναι τυπικά ένα πακέτο που περιέχει πολλά μεμονωμένα αρχεία και φακέλους που αποτελούν την εφαρμογή.
|
||||
* Σύνδεσμος Εφαρμογών: Αυτός είναι ένας συντόμευση προς τον φάκελο Εφαρμογές στο macOS. Ο σκοπός αυτού είναι να σας διευκολύνει στην εγκατάσταση της εφαρμογής. Μπορείτε να σύρετε το αρχείο .app σε αυτόν το συντόμευση για να εγκαταστήσετε την εφαρμογή.
|
||||
* Σύνδεσμος Εφαρμογών: Αυτός είναι ένας συντομευμένος τρόπος προς τον φάκελο Εφαρμογές στο macOS. Ο σκοπός αυτού είναι να σας διευκολύνει στην εγκατάσταση της εφαρμογής. Μπορείτε να σύρετε το αρχείο .app σε αυτόν το συντόμευση για να εγκαταστήσετε την εφαρμογή.
|
||||
|
||||
## Ανύψωση προνομίων μέσω κατάχρησης pkg
|
||||
|
||||
|
@ -66,7 +70,7 @@ cpio -i < Scripts
|
|||
|
||||
Αν ένα σενάριο πριν ή μετά την εγκατάσταση εκτελείται για παράδειγμα από το **`/var/tmp/Installerutil`**, και ένας επιτιθέμενος μπορεί να ελέγχει αυτό το σενάριο για να αναβαθμίσει τα προνόμια κάθε φορά που εκτελείται. Ή ένα άλλο παρόμοιο παράδειγμα:
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/Pasted Graphic 5.png" alt="https://www.youtube.com/watch?v=iASSG0_zobQ"><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../.gitbook/assets/Pasted Graphic 5.png" alt="https://www.youtube.com/watch?v=iASSG0_zobQ"><figcaption><p><a href="https://www.youtube.com/watch?v=kCXhIYtODBg">https://www.youtube.com/watch?v=kCXhIYtODBg</a></p></figcaption></figure>
|
||||
|
||||
### AuthorizationExecuteWithPrivileges
|
||||
|
||||
|
@ -78,9 +82,9 @@ cpio -i < Scripts
|
|||
```
|
||||
### Εκτέλεση με την τοποθέτηση σε σημείο πρόσβασης
|
||||
|
||||
Αν ένα πρόγραμμα εγκατάστασης γράφει στο `/tmp/fixedname/bla/bla`, είναι δυνατόν να **δημιουργήσετε ένα σημείο πρόσβασης** πάνω από το `/tmp/fixedname` χωρίς κάτοχους, έτσι μπορείτε **να τροποποιήσετε οποιοδήποτε αρχείο κατά τη διάρκεια της εγκατάστασης** για να καταχραστείτε τη διαδικασία εγκατάστασης.
|
||||
Εάν ένα πρόγραμμα εγκατάστασης γράφει στο `/tmp/fixedname/bla/bla`, είναι δυνατόν να **δημιουργηθεί ένα σημείο πρόσβασης** πάνω στο `/tmp/fixedname` χωρίς κάτοχους, έτσι ώστε να μπορείτε **να τροποποιήσετε οποιοδήποτε αρχείο κατά τη διάρκεια της εγκατάστασης** για να καταχραστείτε τη διαδικασία εγκατάστασης.
|
||||
|
||||
Ένα παράδειγμα αυτού είναι το **CVE-2021-26089** το οποίο κατάφερε να **αντικαταστήσει ένα περιοδικό script** για να λάβει εκτέλεση ως root. Για περισσότερες πληροφορίες ανατρέξτε στην ομιλία: [**OBTS v4.0: "Mount(ain) of Bugs" - Csaba Fitzl**](https://www.youtube.com/watch?v=jSYPazD4VcE)
|
||||
Ένα παράδειγμα αυτού είναι το **CVE-2021-26089** το οποίο κατάφερε να **αντικαταστήσει ένα περιοδικό script** για να εκτελέσει ως root. Για περισσότερες πληροφορίες ανατρέξτε στην ομιλία: [**OBTS v4.0: "Mount(ain) of Bugs" - Csaba Fitzl**](https://www.youtube.com/watch?v=jSYPazD4VcE)
|
||||
|
||||
## pkg ως κακόβουλο λογισμικό
|
||||
|
||||
|
@ -90,11 +94,12 @@ cpio -i < Scripts
|
|||
|
||||
### JS στο Distribution xml
|
||||
|
||||
Είναι δυνατόν να προσθέσετε **`<script>`** tags στο αρχείο **distribution xml** του πακέτου και αυτός ο κώδικας θα εκτελεστεί και μπορεί **να εκτελέσει εντολές** χρησιμοποιώντας το **`system.run`**:
|
||||
Είναι δυνατόν να προσθέσετε **`<script>`** tags στο αρχείο **distribution xml** του πακέτου και αυτός ο κώδικας θα εκτελεστεί και μπορεί **να εκτελέσει εντολές** χρησιμοποιώντας **`system.run`**:
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (14).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../.gitbook/assets/image (1040).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
## Αναφορές
|
||||
|
||||
* [**DEF CON 27 - Unpacking Pkgs A Look Inside Macos Installer Packages And Common Security Flaws**](https://www.youtube.com/watch?v=iASSG0\_zobQ)
|
||||
* [**OBTS v4.0: "The Wild World of macOS Installers" - Tony Lambert**](https://www.youtube.com/watch?v=Eow5uNHtmIg)
|
||||
* [**DEF CON 27 - Unpacking Pkgs Μια ματιά μέσα στα πακέτα εγκατάστασης του Macos και συνηθισμένα ελαττώματα ασφαλείας**](https://www.youtube.com/watch?v=iASSG0\_zobQ)
|
||||
* [**OBTS v4.0: "Ο Άγριος Κόσμος των Εγκαταστάσεων macOS" - Tony Lambert**](https://www.youtube.com/watch?v=Eow5uNHtmIg)
|
||||
* [**DEF CON 27 - Unpacking Pkgs Μια ματιά μέσα στα πακέτα εγκατάστασης του MacOS**](https://www.youtube.com/watch?v=kCXhIYtODBg)
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Μάθετε το χάκινγκ του AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Άλλοι τρόποι υποστήριξης του HackTricks:
|
||||
|
||||
|
@ -20,35 +20,35 @@
|
|||
|
||||
* **ανάγνωση** - μπορείτε να **απαριθμήσετε** τα στοιχεία του καταλόγου
|
||||
* **εγγραφή** - μπορείτε να **διαγράψετε/γράψετε** **αρχεία** στον κατάλογο και μπορείτε να **διαγράψετε κενούς φακέλους**.
|
||||
* Αλλά δεν μπορείτε **να διαγράψετε/τροποποιήσετε μη κενούς φακέλους** εκτός αν έχετε δικαιώματα εγγραφής πάνω σε αυτόν.
|
||||
* Αλλά δεν μπορείτε να **διαγράψετε/τροποποιήσετε μη-κενούς φακέλους** εκτός αν έχετε δικαιώματα εγγραφής πάνω σε αυτόν.
|
||||
* Δεν μπορείτε να τροποποιήσετε το όνομα ενός φακέλου εκτός αν το κατέχετε.
|
||||
* **εκτέλεση** - σας επιτρέπεται να διασχίσετε τον κατάλογο - αν δεν έχετε αυτό το δικαίωμα, δεν μπορείτε να έχετε πρόσβαση σε κανένα αρχείο μέσα σε αυτόν, ή σε οποιουσδήποτε υποκαταλόγους.
|
||||
|
||||
### Επικίνδυνοι Συνδυασμοί
|
||||
|
||||
**Πώς να αντικαταστήσετε ένα αρχείο/φάκελο που ανήκει στο root**, αλλά:
|
||||
**Πώς να αντικαταστήσετε ένα αρχείο/φάκελο που ανήκει στο ριζικό χρήστη**, αλλά:
|
||||
|
||||
* Ένας γονικός **κατόχος καταλόγου** στη διαδρομή είναι ο χρήστης
|
||||
* Ένας γονικός **κατόχος καταλόγου** στη διαδρομή είναι μια **ομάδα χρηστών** με **πρόσβαση εγγραφής**
|
||||
* Μια **ομάδα χρηστών** έχει **πρόσβαση εγγραφής** στο **αρχείο**
|
||||
|
||||
Με οποιονδήποτε από τους προηγούμενους συνδυασμούς, ένας επιτιθέμενος θα μπορούσε να **ενθερμήσει** ένα **σύμβολο/σκληρό σύνδεσμο** στην αναμενόμενη διαδρομή για να αποκτήσει προνομιούχη αυθαίρετη εγγραφή.
|
||||
Με οποιονδήποτε από τους προηγούμενους συνδυασμούς, ένας επιτιθέμενος θα μπορούσε να **ενθερμήσει** ένα **σύμβολο/σκληρό σύνδεσμο** στην αναμενόμενη διαδρομή για να αποκτήσει προνομιούχα αυθαίρετη εγγραφή.
|
||||
|
||||
### Ειδική περίπτωση ρίζας φακέλου R+X
|
||||
|
||||
Αν υπάρχουν αρχεία σε έναν **κατάλογο** όπου **μόνο ο root έχει πρόσβαση R+X**, αυτά δεν είναι προσβάσιμα από κανέναν άλλο. Έτσι μια ευπάθεια που επιτρέπει τη **μετακίνηση ενός αρχείου που μπορεί να διαβαστεί από ένα χρήστη**, το οποίο δεν μπορεί να διαβαστεί λόγω αυτού του **περιορισμού**, από αυτόν τον φάκελο **σε έναν διαφορετικό**, θα μπορούσε να καταχραστείται για να διαβάσει αυτά τα αρχεία.
|
||||
Αν υπάρχουν αρχεία σε έναν **κατάλογο** όπου **μόνο η ρίζα έχει πρόσβαση R+X**, αυτά **δεν είναι προσβάσιμα από κανέναν άλλο**. Έτσι μια ευπάθεια που επιτρέπει τη **μετακίνηση ενός αρχείου που μπορεί να διαβαστεί από έναν χρήστη**, το οποίο δεν μπορεί να διαβαστεί λόγω αυτού του **περιορισμού**, από αυτόν τον φάκελο **σε έναν διαφορετικό**, θα μπορούσε να καταχραστείται για να διαβάσει αυτά τα αρχεία.
|
||||
|
||||
Παράδειγμα στο: [https://theevilbit.github.io/posts/exploiting\_directory\_permissions\_on\_macos/#nix-directory-permissions](https://theevilbit.github.io/posts/exploiting\_directory\_permissions\_on\_macos/#nix-directory-permissions)
|
||||
|
||||
## Συμβολικός Σύνδεσμος / Σκληρός Σύνδεσμος
|
||||
|
||||
Αν ένα προνομιούχο διεργασία γράφει δεδομένα σε ένα **αρχείο** που θα μπορούσε να **ελεγχθεί** από έναν **χαμηλότερου επιπέδου χρήστη**, ή που θα μπορούσε να **έχει δημιουργηθεί προηγουμένως** από έναν χαμηλότερου επιπέδου χρήστη. Ο χρήστης θα μπορούσε απλά να **το κατευθύνει σε ένα άλλο αρχείο** μέσω ενός Συμβολικού ή Σκληρού συνδέσμου, και η προνομιούχα διεργασία θα γράψει σε αυτό το αρχείο.
|
||||
Αν ένα προνομιούχο διεργασία γράφει δεδομένα σε ένα **αρχείο** που θα μπορούσε να **ελεγχθεί** από έναν **χρήστη με χαμηλότερα προνόμια**, ή που θα μπορούσε να **έχει δημιουργηθεί προηγουμένως** από έναν χρήστη με χαμηλότερα προνόμια. Ο χρήστης θα μπορούσε απλά να **το κατευθύνει σε ένα άλλο αρχείο** μέσω ενός Συμβολικού ή Σκληρού συνδέσμου, και η προνομιούχα διεργασία θα γράψει σε αυτό το αρχείο.
|
||||
|
||||
Ελέγξτε στις άλλες ενότητες όπου ένας επιτιθέμενος θα μπορούσε να **καταχραστεί μια αυθαίρετη εγγραφή για να αναβαθμίσει τα προνόμια**.
|
||||
Ελέγξτε στις άλλες ενότητες όπου ένας επιτιθέμενος θα μπορούσε να **καταχραστεί μια αυθαίρετη εγγραφή για να αναβαθμίσει τα προνόμιά του**.
|
||||
|
||||
## .fileloc
|
||||
|
||||
Τα αρχεία με την επέκταση **`.fileloc`** μπορούν να κατευθύνουν σε άλλες εφαρμογές ή δυαδικά αρχεία, έτσι ώστε όταν ανοίγονται, η εφαρμογή/δυαδικό θα εκτελεστεί.\
|
||||
Τα αρχεία με την επέκταση **`.fileloc`** μπορούν να δείχνουν σε άλλες εφαρμογές ή δυαδικά αρχεία, έτσι όταν ανοίγονται, η εφαρμογή/δυαδικό θα εκτελεστεί.\
|
||||
Παράδειγμα:
|
||||
```xml
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
@ -62,13 +62,13 @@
|
|||
</dict>
|
||||
</plist>
|
||||
```
|
||||
## Αυθαίρετο FD
|
||||
## Τυχαίο FD
|
||||
|
||||
Εάν μπορείτε να κάνετε ένα **process να ανοίξει ένα αρχείο ή έναν φάκελο με υψηλά προνόμια**, μπορείτε να καταχραστείτε το **`crontab`** για να ανοίξετε ένα αρχείο στο `/etc/sudoers.d` με **`EDITOR=exploit.py`**, έτσι το `exploit.py` θα λάβει το FD στο αρχείο μέσα στο `/etc/sudoers` και θα το καταχραστεί.
|
||||
|
||||
Για παράδειγμα: [https://youtu.be/f1HA5QhLQ7Y?t=21098](https://youtu.be/f1HA5QhLQ7Y?t=21098)
|
||||
|
||||
## Αποφύγετε τα κόλπα των xattrs της καραντίνας
|
||||
## Αποφύγετε τα κόλπα xattrs της καραντίνας
|
||||
|
||||
### Αφαιρέστε τα
|
||||
```bash
|
||||
|
@ -97,7 +97,7 @@ mkdir /tmp/mnt/lol
|
|||
xattr -w com.apple.quarantine "" /tmp/mnt/lol
|
||||
xattr: [Errno 1] Operation not permitted: '/tmp/mnt/lol'
|
||||
```
|
||||
### Γραφείο ACL
|
||||
### writeextattr ACL
|
||||
|
||||
Αυτό το ACL εμποδίζει την προσθήκη `xattrs` στο αρχείο
|
||||
```bash
|
||||
|
@ -124,11 +124,11 @@ ls -le /tmp/test
|
|||
|
||||
Η μορφή αρχείου **AppleDouble** αντιγράφει ένα αρχείο συμπεριλαμβανομένων των ACEs του.
|
||||
|
||||
Στο [**πηγαίο κώδικα**](https://opensource.apple.com/source/Libc/Libc-391/darwin/copyfile.c.auto.html) είναι δυνατόν να δούμε ότι η αναπαράσταση κειμένου ACL που αποθηκεύεται μέσα στο xattr με το όνομα **`com.apple.acl.text`** θα οριστεί ως ACL στο αποσυμπιεσμένο αρχείο. Έτσι, αν συμπιέσετε μια εφαρμογή σε ένα αρχείο zip με τη μορφή αρχείου **AppleDouble** με ένα ACL που εμποδίζει άλλα xattrs να γραφτούν σε αυτό... το xattr καραντίνας δεν ορίστηκε στην εφαρμογή:
|
||||
Στον [**πηγαίο κώδικα**](https://opensource.apple.com/source/Libc/Libc-391/darwin/copyfile.c.auto.html) είναι δυνατόν να δούμε ότι η αναπαράσταση κειμένου ACL που αποθηκεύεται μέσα στο xattr με το όνομα **`com.apple.acl.text`** θα οριστεί ως ACL στο αποσυμπιεσμένο αρχείο. Έτσι, αν συμπιέσετε μια εφαρμογή σε ένα αρχείο zip με τη μορφή αρχείου **AppleDouble** με ένα ACL που εμποδίζει άλλα xattrs να γραφτούν σε αυτό... το xattr καραντίνας δεν ορίστηκε στην εφαρμογή:
|
||||
|
||||
Ελέγξτε την [**αρχική αναφορά**](https://www.microsoft.com/en-us/security/blog/2022/12/19/gatekeepers-achilles-heel-unearthing-a-macos-vulnerability/) για περισσότερες πληροφορίες.
|
||||
Ελέγξτε την [**πρωτότυπη αναφορά**](https://www.microsoft.com/en-us/security/blog/2022/12/19/gatekeepers-achilles-heel-unearthing-a-macos-vulnerability/) για περισσότερες πληροφορίες.
|
||||
|
||||
Για να αναπαράγετε αυτό πρέπει πρώτα να λάβετε τη σωστή συμβολοσειρά acl:
|
||||
Για να αναπαράγουμε αυτό πρέπει πρώτα να αποκτήσουμε το σωστό αλφαριθμητικό acl:
|
||||
```bash
|
||||
# Everything will be happening here
|
||||
mkdir /tmp/temp_xattrs
|
||||
|
@ -146,9 +146,9 @@ ditto -c -k del test.zip
|
|||
ditto -x -k --rsrc test.zip .
|
||||
ls -le test
|
||||
```
|
||||
(Note ότι ακόμη και αν αυτό λειτουργεί, το sandbox γράφει το quarantine xattr πριν)
|
||||
(Note that even if this works the sandbox write the quarantine xattr before)
|
||||
|
||||
Δεν είναι πραγματικά απαραίτητο, αλλά το αφήνω εκεί απλά για περίπτωση:
|
||||
Δεν είναι πραγματικά απαραίτητο, αλλά το αφήνω εκεί απλώς για περίπτωση:
|
||||
|
||||
{% content-ref url="macos-xattr-acls-extra-stuff.md" %}
|
||||
[macos-xattr-acls-extra-stuff.md](macos-xattr-acls-extra-stuff.md)
|
||||
|
@ -202,12 +202,12 @@ ls -le test
|
|||
...
|
||||
</dict>
|
||||
```
|
||||
Είναι δυνατόν να υπολογιστεί η υπογραφή ενός πόρου από το command line με:
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
Είναι δυνατόν να υπολογιστεί η υπογραφή ενός πόρου από το cli με:
|
||||
```bash
|
||||
openssl dgst -binary -sha1 /System/Cryptexes/App/System/Applications/Safari.app/Contents/Resources/AppIcon.icns | openssl base64
|
||||
```
|
||||
{% endcode %}
|
||||
|
||||
## Τοποθέτηση dmgs
|
||||
|
||||
Ένας χρήστης μπορεί να τοποθετήσει ένα προσαρμοσμένο dmg ακόμα και πάνω σε ορισμένους υπάρχοντες φακέλους. Έτσι μπορείτε να δημιουργήσετε ένα προσαρμοσμένο πακέτο dmg με προσαρμοσμένο περιεχόμενο:
|
||||
|
@ -233,14 +233,14 @@ hdiutil create -srcfolder justsome.app justsome.dmg
|
|||
```
|
||||
{% endcode %}
|
||||
|
||||
Συνήθως το macOS προσαρτά δίσκους επικοινωνώντας με την υπηρεσία Mach `com.apple.DiskArbitrarion.diskarbitrariond` (παρέχεται από το `/usr/libexec/diskarbitrationd`). Αν προσθέσετε την παράμετρο `-d` στο αρχείο LaunchDaemons plist και επανεκκινήσετε, θα αποθηκεύσει logs στον φάκελο `/var/log/diskarbitrationd.log`.\
|
||||
Ωστόσο, είναι δυνατόν να χρησιμοποιήσετε εργαλεία όπως το `hdik` και το `hdiutil` για να επικοινωνήσετε απευθείας με το `com.apple.driver.DiskImages` kext.
|
||||
Συνήθως το macOS προσαρτά το δίσκο μιλώντας στην υπηρεσία Mach `com.apple.DiskArbitrarion.diskarbitrariond` (που παρέχεται από το `/usr/libexec/diskarbitrationd`). Εάν προστεθεί η παράμετρος `-d` στο αρχείο LaunchDaemons plist και επανεκκινηθεί, θα αποθηκεύσει καταγραφές στο `/var/log/diskarbitrationd.log`.\
|
||||
Ωστόσο, είναι δυνατόν να χρησιμοποιηθούν εργαλεία όπως το `hdik` και το `hdiutil` για να επικοινωνήσουν απευθείας με το `com.apple.driver.DiskImages` kext.
|
||||
|
||||
## Αυθαίρετες Εγγραφές
|
||||
|
||||
### Περιοδικά sh scripts
|
||||
### Περιοδικά scripts sh
|
||||
|
||||
Αν το script σας μπορεί να ερμηνευτεί ως ένα **shell script** μπορείτε να αντικαταστήσετε το **`/etc/periodic/daily/999.local`** shell script που θα εκτελείται κάθε μέρα.
|
||||
Εάν το script σας μπορεί να ερμηνευτεί ως ένα **shell script** μπορείτε να αντικαταστήσετε το **`/etc/periodic/daily/999.local`** shell script που θα εκτελείται κάθε μέρα.
|
||||
|
||||
Μπορείτε να **προσομοιώσετε** την εκτέλεση αυτού του script με: **`sudo periodic daily`**
|
||||
|
||||
|
@ -263,19 +263,19 @@ hdiutil create -srcfolder justsome.app justsome.dmg
|
|||
</dict>
|
||||
</plist>
|
||||
```
|
||||
### Δημιουργία script `/Applications/Scripts/privesc.sh`
|
||||
### Αρχείο Sudoers
|
||||
|
||||
Αν έχετε **αυθαίρετη εγγραφή**, μπορείτε να δημιουργήσετε ένα αρχείο μέσα στον φάκελο **`/etc/sudoers.d/`** που να σας παρέχει δικαιώματα **sudo**.
|
||||
|
||||
### Αρχεία PATH
|
||||
|
||||
Το αρχείο **`/etc/paths`** είναι ένα από τα κύρια μέρη που γεμίζουν τη μεταβλητή περιβάλλοντος PATH. Πρέπει να είστε root για να το αντικαταστήσετε, αλλά αν ένα script από **προνομιούχο διεργασία** εκτελεί κάποια **εντολή χωρίς την πλήρη διαδρομή**, μπορείτε να το **αρπάξετε** τροποποιώντας αυτό το αρχείο.
|
||||
Το αρχείο **`/etc/paths`** είναι ένα από τα κύρια μέρη που γεμίζουν τη μεταβλητή περιβάλλοντος PATH. Πρέπει να είστε root για να το αντικαταστήσετε, αλλά αν ένα σενάριο από **προνομιούχο διεργασία** εκτελεί κάποια **εντολή χωρίς την πλήρη διαδρομή**, μπορείτε να το **αρπάξετε** τροποποιώντας αυτό το αρχείο.
|
||||
|
||||
Μπορείτε επίσης να γράψετε αρχεία στο **`/etc/paths.d`** για να φορτώσετε νέους φακέλους στη μεταβλητή περιβάλλοντος `PATH`.
|
||||
|
||||
## Δημιουργία εγγράψιμων αρχείων ως άλλοι χρήστες
|
||||
|
||||
Αυτό θα δημιουργήσει ένα αρχείο που ανήκει στον ριζικό χρήστη και είναι εγγράψιμο από εμένα ([**κώδικας από εδώ**](https://github.com/gergelykalman/brew-lpe-via-periodic/blob/main/brew\_lpe.sh)). Αυτό ενδέχεται επίσης να λειτουργήσει ως προϋπόθεση για ανέλιξη δικαιωμάτων:
|
||||
Αυτό θα δημιουργήσει ένα αρχείο που ανήκει στο ροοτ και είναι εγγράψιμο από εμένα ([**κώδικας από εδώ**](https://github.com/gergelykalman/brew-lpe-via-periodic/blob/main/brew\_lpe.sh)). Αυτό ενδέχεται επίσης να λειτουργήσει ως προνομιακή αύξηση:
|
||||
```bash
|
||||
DIRNAME=/usr/local/etc/periodic/daily
|
||||
|
||||
|
@ -287,20 +287,126 @@ MallocStackLogging=1 MallocStackLoggingDirectory=$DIRNAME MallocStackLoggingDont
|
|||
FILENAME=$(ls "$DIRNAME")
|
||||
echo $FILENAME
|
||||
```
|
||||
## POSIX Shared Memory
|
||||
|
||||
**Το POSIX shared memory** επιτρέπει σε διεργασίες σε λειτουργικά συστήματα συμβατά με το POSIX να έχουν πρόσβαση σε μια κοινή περιοχή μνήμης, διευκολύνοντας την ταχύτερη επικοινωνία σε σύγκριση με άλλες μεθόδους επικοινωνίας μεταξύ διεργασιών. Περιλαμβάνει τη δημιουργία ή το άνοιγμα ενός κοινού αντικειμένου μνήμης με τη χρήση της `shm_open()`, την ορισμό του μεγέθους του με τη χρήση της `ftruncate()`, και την αντιστοίχισή του στο χώρο διευθύνσεων της διεργασίας χρησιμοποιώντας την `mmap()`. Οι διεργασίες μπορούν στη συνέχεια να διαβάζουν και να γράφουν απευθείας σε αυτήν την περιοχή μνήμης. Για τη διαχείριση της ταυτόχρονης πρόσβασης και την πρόληψη διαφθοράς δεδομένων, συχνά χρησιμοποιούνται μηχανισμοί συγχρονισμού όπως mutexes ή semaphores. Τέλος, οι διεργασίες αποσυντονίζουν και κλείνουν την κοινή μνήμη με τη χρήση των `munmap()` και `close()`, και προαιρετικά αφαιρούν το αντικείμενο μνήμης με τη χρήση της `shm_unlink()`. Αυτό το σύστημα είναι ιδιαίτερα αποτελεσματικό για αποτελεσματική, γρήγορη IPC σε περιβάλλοντα όπου πολλές διεργασίες χρειάζεται να έχουν πρόσβαση σε κοινά δεδομένα με ταχύτητα.
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Παράδειγμα Κώδικα Παραγωγού</summary>
|
||||
```c
|
||||
// gcc producer.c -o producer -lrt
|
||||
#include <fcntl.h>
|
||||
#include <sys/mman.h>
|
||||
#include <sys/stat.h>
|
||||
#include <unistd.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
int main() {
|
||||
const char *name = "/my_shared_memory";
|
||||
const int SIZE = 4096; // Size of the shared memory object
|
||||
|
||||
// Create the shared memory object
|
||||
int shm_fd = shm_open(name, O_CREAT | O_RDWR, 0666);
|
||||
if (shm_fd == -1) {
|
||||
perror("shm_open");
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
|
||||
// Configure the size of the shared memory object
|
||||
if (ftruncate(shm_fd, SIZE) == -1) {
|
||||
perror("ftruncate");
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
|
||||
// Memory map the shared memory
|
||||
void *ptr = mmap(0, SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, shm_fd, 0);
|
||||
if (ptr == MAP_FAILED) {
|
||||
perror("mmap");
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
|
||||
// Write to the shared memory
|
||||
sprintf(ptr, "Hello from Producer!");
|
||||
|
||||
// Unmap and close, but do not unlink
|
||||
munmap(ptr, SIZE);
|
||||
close(shm_fd);
|
||||
|
||||
return 0;
|
||||
}
|
||||
```
|
||||
</details>
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Παράδειγμα Καταναλωτή Κώδικα</summary>
|
||||
```c
|
||||
// gcc consumer.c -o consumer -lrt
|
||||
#include <fcntl.h>
|
||||
#include <sys/mman.h>
|
||||
#include <sys/stat.h>
|
||||
#include <unistd.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
int main() {
|
||||
const char *name = "/my_shared_memory";
|
||||
const int SIZE = 4096; // Size of the shared memory object
|
||||
|
||||
// Open the shared memory object
|
||||
int shm_fd = shm_open(name, O_RDONLY, 0666);
|
||||
if (shm_fd == -1) {
|
||||
perror("shm_open");
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
|
||||
// Memory map the shared memory
|
||||
void *ptr = mmap(0, SIZE, PROT_READ, MAP_SHARED, shm_fd, 0);
|
||||
if (ptr == MAP_FAILED) {
|
||||
perror("mmap");
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
|
||||
// Read from the shared memory
|
||||
printf("Consumer received: %s\n", (char *)ptr);
|
||||
|
||||
// Cleanup
|
||||
munmap(ptr, SIZE);
|
||||
close(shm_fd);
|
||||
shm_unlink(name); // Optionally unlink
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
```
|
||||
</details>
|
||||
|
||||
## macOS Προστατευμένοι Δείκτες
|
||||
|
||||
Οι **προστατευμένοι δείκτες του macOS** είναι μια λειτουργία ασφαλείας που εισήχθη στο macOS για να βελτιώσει την ασφάλεια και την αξιοπιστία των λειτουργιών των **αποκλειστικών δεικτών αρχείων** σε εφαρμογές χρήστη. Αυτοί οι προστατευμένοι δείκτες παρέχουν έναν τρόπο σύνδεσης συγκεκριμένων περιορισμών ή "φρουρών" με τους δείκτες αρχείων, οι οποίοι επιβάλλονται από τον πυρήνα.
|
||||
|
||||
Αυτή η λειτουργία είναι ιδιαίτερα χρήσιμη για την πρόληψη ορισμένων κατηγοριών ευπαθειών ασφάλειας όπως η **μη εξουσιοδοτημένη πρόσβαση σε αρχεία** ή οι **συνθήκες ανταγωνισμού**. Αυτές οι ευπαθείς σημεία εμφανίζονται όταν, για παράδειγμα, ένα νήμα έχει πρόσβαση σε μια περιγραφή αρχείου δίνοντας **σε ένα άλλο ευάλωτο νήμα πρόσβαση πάνω σε αυτό** ή όταν ένας δείκτης αρχείου **κληρονομείται** από ένα ευάλωτο παιδικό διεργασία. Κάποιες λειτουργίες που σχετίζονται με αυτήν τη λειτουργικότητα είναι:
|
||||
|
||||
* `guarded_open_np`: Άνοιγμα ενός FD με φρουρό
|
||||
* `guarded_close_np`: Κλείσιμο
|
||||
* `change_fdguard_np`: Αλλαγή σημαιών φρουράς σε έναν δείκτη (ακόμα και αφαίρεση της προστασίας του φρουρού)
|
||||
|
||||
## Αναφορές
|
||||
|
||||
* [https://theevilbit.github.io/posts/exploiting\_directory\_permissions\_on\_macos/](https://theevilbit.github.io/posts/exploiting\_directory\_permissions\_on\_macos/)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Ειδικός Ερυθρού Συνεργείου AWS του HackTricks)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Άλλοι τρόποι υποστήριξης του HackTricks:
|
||||
|
||||
* Αν θέλετε να δείτε την **εταιρεία σας διαφημισμένη στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
|
||||
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||
* Ανακαλύψτε [**Την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Εγγραφείτε** 💬 [**στην ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα τηλεγραφήματος**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια στο GitHub.
|
||||
* Ανακαλύψτε την [**Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στη [**ομάδα τηλεγραφήματος**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Μοιραστείτε τα χάκινγκ σας χάρη στην υποβολή PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) αποθετήρια του github.
|
||||
|
||||
</details>
|
||||
|
|
Loading…
Reference in a new issue