mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
74 lines
6.9 KiB
Markdown
74 lines
6.9 KiB
Markdown
# macOS Dirty NIB
|
||
|
||
{{#include ../../../banners/hacktricks-training.md}}
|
||
|
||
**Για περισσότερες λεπτομέρειες σχετικά με την τεχνική, ελέγξτε την αρχική ανάρτηση από:** [**https://blog.xpnsec.com/dirtynib/**](https://blog.xpnsec.com/dirtynib/) και την επόμενη ανάρτηση από [**https://sector7.computest.nl/post/2024-04-bringing-process-injection-into-view-exploiting-all-macos-apps-using-nib-files/**](https://sector7.computest.nl/post/2024-04-bringing-process-injection-into-view-exploiting-all-macos-apps-using-nib-files/)**.** Ακολουθεί μια περίληψη:
|
||
|
||
### Τι είναι τα αρχεία Nib
|
||
|
||
Τα αρχεία Nib (συντομογραφία του NeXT Interface Builder), μέρος του οικοσυστήματος ανάπτυξης της Apple, προορίζονται για τον καθορισμό **UI στοιχείων** και των αλληλεπιδράσεών τους σε εφαρμογές. Περιλαμβάνουν σειριοποιημένα αντικείμενα όπως παράθυρα και κουμπιά, και φορτώνονται κατά την εκτέλεση. Παρά τη συνεχιζόμενη χρήση τους, η Apple προτείνει πλέον τα Storyboards για πιο ολοκληρωμένη οπτικοποίηση ροής UI.
|
||
|
||
Το κύριο αρχείο Nib αναφέρεται στην τιμή **`NSMainNibFile`** μέσα στο αρχείο `Info.plist` της εφαρμογής και φορτώνεται από τη λειτουργία **`NSApplicationMain`** που εκτελείται στη λειτουργία `main` της εφαρμογής.
|
||
|
||
### Διαδικασία Εισαγωγής Dirty Nib
|
||
|
||
#### Δημιουργία και Ρύθμιση ενός Αρχείου NIB
|
||
|
||
1. **Αρχική Ρύθμιση**:
|
||
- Δημιουργήστε ένα νέο αρχείο NIB χρησιμοποιώντας το XCode.
|
||
- Προσθέστε ένα Αντικείμενο στην διεπαφή, ρυθμίζοντας την κλάση του σε `NSAppleScript`.
|
||
- Ρυθμίστε την αρχική ιδιότητα `source` μέσω των User Defined Runtime Attributes.
|
||
2. **Gadget Εκτέλεσης Κώδικα**:
|
||
- Η ρύθμιση διευκολύνει την εκτέλεση AppleScript κατόπιν αιτήματος.
|
||
- Ενσωματώστε ένα κουμπί για να ενεργοποιήσετε το αντικείμενο `Apple Script`, ενεργοποιώντας συγκεκριμένα τον επιλεγέα `executeAndReturnError:`.
|
||
3. **Δοκιμή**:
|
||
|
||
- Ένα απλό Apple Script για δοκιμαστικούς σκοπούς:
|
||
|
||
```bash
|
||
set theDialogText to "PWND"
|
||
display dialog theDialogText
|
||
```
|
||
|
||
- Δοκιμάστε εκτελώντας το στον debugger του XCode και κάνοντας κλικ στο κουμπί.
|
||
|
||
#### Στοχοποίηση μιας Εφαρμογής (Παράδειγμα: Pages)
|
||
|
||
1. **Προετοιμασία**:
|
||
- Αντιγράψτε την στοχοθετημένη εφαρμογή (π.χ., Pages) σε έναν ξεχωριστό φάκελο (π.χ., `/tmp/`).
|
||
- Ξεκινήστε την εφαρμογή για να παρακάμψετε τα προβλήματα του Gatekeeper και να την αποθηκεύσετε στην κρυφή μνήμη.
|
||
2. **Αντικατάσταση Αρχείου NIB**:
|
||
- Αντικαταστήστε ένα υπάρχον αρχείο NIB (π.χ., About Panel NIB) με το κατασκευασμένο αρχείο DirtyNIB.
|
||
3. **Εκτέλεση**:
|
||
- Ενεργοποιήστε την εκτέλεση αλληλεπιδρώντας με την εφαρμογή (π.χ., επιλέγοντας το στοιχείο μενού `About`).
|
||
|
||
#### Απόδειξη της Έννοιας: Πρόσβαση σε Δεδομένα Χρήστη
|
||
|
||
- Τροποποιήστε το AppleScript για να αποκτήσετε πρόσβαση και να εξάγετε δεδομένα χρήστη, όπως φωτογραφίες, χωρίς τη συγκατάθεση του χρήστη.
|
||
|
||
### Δείγμα Κώδικα: Κακόβουλο Αρχείο .xib
|
||
|
||
- Αποκτήστε πρόσβαση και ελέγξτε ένα [**δείγμα κακόβουλου αρχείου .xib**](https://gist.github.com/xpn/16bfbe5a3f64fedfcc1822d0562636b4) που δείχνει την εκτέλεση αυθαίρετου κώδικα.
|
||
|
||
### Άλλο Παράδειγμα
|
||
|
||
Στην ανάρτηση [https://sector7.computest.nl/post/2024-04-bringing-process-injection-into-view-exploiting-all-macos-apps-using-nib-files/](https://sector7.computest.nl/post/2024-04-bringing-process-injection-into-view-exploiting-all-macos-apps-using-nib-files/) μπορείτε να βρείτε οδηγίες για το πώς να δημιουργήσετε ένα dirty nib. 
|
||
|
||
### Αντιμετώπιση Περιορισμών Εκκίνησης
|
||
|
||
- Οι Περιορισμοί Εκκίνησης εμποδίζουν την εκτέλεση εφαρμογών από απροσδόκητες τοποθεσίες (π.χ., `/tmp`).
|
||
- Είναι δυνατόν να εντοπιστούν εφαρμογές που δεν προστατεύονται από Περιορισμούς Εκκίνησης και να στοχοποιηθούν για εισαγωγή αρχείου NIB.
|
||
|
||
### Πρόσθετες Προστασίες macOS
|
||
|
||
Από το macOS Sonoma και μετά, οι τροποποιήσεις μέσα σε πακέτα εφαρμογών είναι περιορισμένες. Ωστόσο, οι προηγούμενες μέθοδοι περιλάμβαναν:
|
||
|
||
1. Αντιγραφή της εφαρμογής σε διαφορετική τοποθεσία (π.χ., `/tmp/`).
|
||
2. Μετονομασία φακέλων μέσα στο πακέτο εφαρμογής για να παρακαμφθούν οι αρχικές προστασίες.
|
||
3. Μετά την εκτέλεση της εφαρμογής για να καταχωρηθεί με τον Gatekeeper, τροποποίηση του πακέτου εφαρμογής (π.χ., αντικατάσταση του MainMenu.nib με το Dirty.nib).
|
||
4. Επαναφορά των φακέλων και επανεκτέλεση της εφαρμογής για να εκτελεστεί το εισαγόμενο αρχείο NIB.
|
||
|
||
**Σημείωση**: Οι πρόσφατες ενημερώσεις του macOS έχουν μετριάσει αυτήν την εκμετάλλευση αποτρέποντας τις τροποποιήσεις αρχείων εντός των πακέτων εφαρμογών μετά την αποθήκευση στην κρυφή μνήμη του Gatekeeper, καθιστώντας την εκμετάλλευση αναποτελεσματική.
|
||
|
||
{{#include ../../../banners/hacktricks-training.md}}
|