macOS Auto Start
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Αυτή η ενότητα βασίζεται σε μεγάλο βαθμό στη σειρά blog Beyond the good ol' LaunchAgents, ο στόχος είναι να προσθέσουμε περισσότερες τοποθεσίες αυτόματης εκκίνησης (αν είναι δυνατόν), να υποδείξουμε ποιες τεχνικές λειτουργούν ακόμα σήμερα με την τελευταία έκδοση του macOS (13.4) και να προσδιορίσουμε τις άδειες που απαιτούνται.
Εδώ μπορείτε να βρείτε τοποθεσίες εκκίνησης χρήσιμες για sandbox bypass που σας επιτρέπουν να εκτελέσετε κάτι απλά γράφοντας το σε ένα αρχείο και περιμένοντας για μια πολύ συνηθισμένη ενέργεια, μια καθορισμένη ποσότητα χρόνου ή μια ενέργεια που μπορείτε συνήθως να εκτελέσετε από μέσα σε ένα sandbox χωρίς να χρειάζεστε δικαιώματα root.
/Library/LaunchAgents
Trigger: Επανεκκίνηση
Απαιτείται root
/Library/LaunchDaemons
Trigger: Επανεκκίνηση
Απαιτείται root
/System/Library/LaunchAgents
Trigger: Επανεκκίνηση
Απαιτείται root
/System/Library/LaunchDaemons
Trigger: Επανεκκίνηση
Απαιτείται root
~/Library/LaunchAgents
Trigger: Επανασύνδεση
~/Library/LaunchDemons
Trigger: Επανασύνδεση
Ως ενδιαφέρον γεγονός, launchd
έχει μια ενσωματωμένη λίστα ιδιοτήτων στην ενότητα Mach-o __Text.__config
που περιέχει άλλες γνωστές υπηρεσίες που πρέπει να εκκινήσει το launchd. Επιπλέον, αυτές οι υπηρεσίες μπορεί να περιέχουν το RequireSuccess
, RequireRun
και RebootOnSuccess
που σημαίνει ότι πρέπει να εκτελούνται και να ολοκληρώνονται με επιτυχία.
Φυσικά, δεν μπορεί να τροποποιηθεί λόγω υπογραφής κώδικα.
launchd
είναι η πρώτη διαδικασία που εκτελείται από τον πυρήνα του OX S κατά την εκκίνηση και η τελευταία που ολοκληρώνεται κατά την απενεργοποίηση. Πρέπει πάντα να έχει το PID 1. Αυτή η διαδικασία θα διαβάσει και θα εκτελέσει τις ρυθμίσεις που υποδεικνύονται στα ASEP plists σε:
/Library/LaunchAgents
: Πράκτορες ανά χρήστη που εγκαθίστανται από τον διαχειριστή
/Library/LaunchDaemons
: Daemons συστήματος που εγκαθίστανται από τον διαχειριστή
/System/Library/LaunchAgents
: Πράκτορες ανά χρήστη που παρέχονται από την Apple.
/System/Library/LaunchDaemons
: Daemons συστήματος που παρέχονται από την Apple.
Όταν ένας χρήστης συνδέεται, οι plists που βρίσκονται σε /Users/$USER/Library/LaunchAgents
και /Users/$USER/Library/LaunchDemons
εκκινούνται με τις άδειες των συνδεδεμένων χρηστών.
Η κύρια διαφορά μεταξύ πρακτόρων και daemons είναι ότι οι πράκτορες φορτώνονται όταν ο χρήστης συνδέεται και οι daemons φορτώνονται κατά την εκκίνηση του συστήματος (καθώς υπάρχουν υπηρεσίες όπως το ssh που πρέπει να εκτελούνται πριν οποιοσδήποτε χρήστης αποκτήσει πρόσβαση στο σύστημα). Επίσης, οι πράκτορες μπορεί να χρησιμοποιούν GUI ενώ οι daemons πρέπει να εκτελούνται στο παρασκήνιο.
Υπάρχουν περιπτώσεις όπου ένας agent πρέπει να εκτελείται πριν ο χρήστης συνδεθεί, αυτοί ονομάζονται PreLoginAgents. Για παράδειγμα, αυτό είναι χρήσιμο για την παροχή υποστηρικτικής τεχνολογίας κατά την είσοδο. Μπορούν επίσης να βρεθούν στο /Library/LaunchAgents
(δείτε εδώ ένα παράδειγμα).
Νέα αρχεία ρυθμίσεων Daemons ή Agents θα φορτωθούν μετά την επόμενη επανεκκίνηση ή χρησιμοποιώντας launchctl load <target.plist>
Είναι επίσης δυνατό να φορτωθούν αρχεία .plist χωρίς αυτή την επέκταση με launchctl -F <file>
(ωστόσο αυτά τα αρχεία plist δεν θα φορτωθούν αυτόματα μετά την επανεκκίνηση).
Είναι επίσης δυνατό να ξεφορτωθούν με launchctl unload <target.plist>
(η διαδικασία που υποδεικνύεται από αυτό θα τερματιστεί),
Για να διασφαλίσετε ότι δεν υπάρχει τίποτα (όπως μια υπέρβαση) που να εμποδίζει έναν Agent ή Daemon να τρέξει εκτελέστε: sudo launchctl load -w /System/Library/LaunchDaemos/com.apple.smdb.plist
Λίστα με όλους τους agents και daemons που έχουν φορτωθεί από τον τρέχοντα χρήστη:
Αν ένα plist ανήκει σε έναν χρήστη, ακόμα και αν βρίσκεται σε φακέλους συστήματος daemon, η εργασία θα εκτελείται ως ο χρήστης και όχι ως root. Αυτό μπορεί να αποτρέψει κάποιες επιθέσεις ανύψωσης δικαιωμάτων.
launchd
είναι η πρώτη διαδικασία χρήστη που ξεκινά από τον kernel. Η εκκίνηση της διαδικασίας πρέπει να είναι επιτυχής και δεν μπορεί να τερματιστεί ή να καταρρεύσει. Είναι ακόμη προστατευμένη από ορισμένα σήματα τερματισμού.
Ένα από τα πρώτα πράγματα που θα κάνει το launchd
είναι να ξεκινήσει όλους τους daemons όπως:
Daemons χρονοδιακόπτη που βασίζονται στον χρόνο για να εκτελούνται:
atd (com.apple.atrun.plist
): Έχει ένα StartInterval
30 λεπτών
crond (com.apple.systemstats.daily.plist
): Έχει StartCalendarInterval
για να ξεκινά στις 00:15
Δίκτυα daemons όπως:
org.cups.cups-lpd
: Ακούει σε TCP (SockType: stream
) με SockServiceName: printer
SockServiceName πρέπει να είναι είτε μια θύρα είτε μια υπηρεσία από το /etc/services
com.apple.xscertd.plist
: Ακούει σε TCP στην θύρα 1640
Path daemons που εκτελούνται όταν αλλάζει μια καθορισμένη διαδρομή:
com.apple.postfix.master
: Ελέγχει τη διαδρομή /etc/postfix/aliases
Daemons ειδοποιήσεων IOKit:
com.apple.xartstorageremoted
: "com.apple.iokit.matching" => { "com.apple.device-attach" => { "IOMatchLaunchStream" => 1 ...
Mach port:
com.apple.xscertd-helper.plist
: Υποδεικνύει στην είσοδο MachServices
το όνομα com.apple.xscertd.helper
UserEventAgent:
Αυτό είναι διαφορετικό από το προηγούμενο. Κάνει το launchd να δημιουργεί εφαρμογές σε απάντηση σε συγκεκριμένα γεγονότα. Ωστόσο, σε αυτή την περίπτωση, το κύριο δυαδικό που εμπλέκεται δεν είναι το launchd
αλλά το /usr/libexec/UserEventAgent
. Φορτώνει πρόσθετα από τον περιορισμένο φάκελο SIP /System/Library/UserEventPlugins/ όπου κάθε πρόσθετο υποδεικνύει τον αρχικοποιητή του στο κλειδί XPCEventModuleInitializer
ή, στην περίπτωση παλαιότερων πρόσθετων, στο λεξικό CFPluginFactories
κάτω από το κλειδί FB86416D-6164-2070-726F-70735C216EC0
του Info.plist
.
Writeup: https://theevilbit.github.io/beyond/beyond_0001/ Writeup (xterm): https://theevilbit.github.io/beyond/beyond_0018/
Χρήσιμο για να παρακαμφθεί το sandbox: ✅
Παράκαμψη TCC: ✅
Αλλά χρειάζεστε να βρείτε μια εφαρμογή με μια παράκαμψη TCC που εκτελεί ένα shell που φορτώνει αυτά τα αρχεία
~/.zshrc
, ~/.zlogin
, ~/.zshenv.zwc
, ~/.zshenv
, ~/.zprofile
Trigger: Άνοιγμα ενός τερματικού με zsh
/etc/zshenv
, /etc/zprofile
, /etc/zshrc
, /etc/zlogin
Trigger: Άνοιγμα ενός τερματικού με zsh
Απαιτείται root
~/.zlogout
Trigger: Έξοδος από ένα τερματικό με zsh
/etc/zlogout
Trigger: Έξοδος από ένα τερματικό με zsh
Απαιτείται root
Πιθανώς περισσότερα στο: man zsh
~/.bashrc
Trigger: Άνοιγμα ενός τερματικού με bash
/etc/profile
(δεν λειτούργησε)
~/.profile
(δεν λειτούργησε)
~/.xinitrc
, ~/.xserverrc
, /opt/X11/etc/X11/xinit/xinitrc.d/
Trigger: Αναμένεται να ενεργοποιηθεί με xterm, αλλά δεν είναι εγκατεστημένο και ακόμη και μετά την εγκατάσταση, εμφανίζεται αυτό το σφάλμα: xterm: DISPLAY is not set
Κατά την εκκίνηση ενός περιβάλλοντος shell όπως το zsh
ή το bash
, ορισμένα αρχεία εκκίνησης εκτελούνται. Το macOS χρησιμοποιεί αυτή τη στιγμή το /bin/zsh
ως προεπιλεγμένο shell. Αυτό το shell προσπελάζεται αυτόματα όταν εκκινείται η εφαρμογή Terminal ή όταν αποκτάται πρόσβαση σε μια συσκευή μέσω SSH. Ενώ το bash
και το sh
είναι επίσης παρόντα στο macOS, χρειάζεται να κληθούν ρητά για να χρησιμοποιηθούν.
Η σελίδα man του zsh, την οποία μπορούμε να διαβάσουμε με man zsh
έχει μια εκτενή περιγραφή των αρχείων εκκίνησης.
Η ρύθμιση της υποδεικνυόμενης εκμετάλλευσης και η αποσύνδεση και σύνδεση ή ακόμα και η επανεκκίνηση δεν λειτούργησαν για μένα για να εκτελέσω την εφαρμογή. (Η εφαρμογή δεν εκτελούνταν, ίσως χρειάζεται να είναι σε λειτουργία όταν εκτελούνται αυτές οι ενέργειες)
Writeup: https://theevilbit.github.io/beyond/beyond_0021/
~/Library/Preferences/ByHost/com.apple.loginwindow.<UUID>.plist
Trigger: Επανεκκίνηση επαναλειτουργίας εφαρμογών
Όλες οι εφαρμογές που θα επαναλειτουργήσουν βρίσκονται μέσα στο plist ~/Library/Preferences/ByHost/com.apple.loginwindow.<UUID>.plist
Έτσι, για να κάνετε τις επαναλειτουργούσες εφαρμογές να εκκινούν τη δική σας, απλά χρειάζεται να προσθέσετε την εφαρμογή σας στη λίστα.
Το UUID μπορεί να βρεθεί καταγράφοντας αυτή τη διεύθυνση ή με ioreg -rd1 -c IOPlatformExpertDevice | awk -F'"' '/IOPlatformUUID/{print $4}'
Για να ελέγξετε τις εφαρμογές που θα επαναλειτουργήσουν μπορείτε να κάνετε:
Για να προσθέσετε μια εφαρμογή σε αυτή τη λίστα μπορείτε να χρησιμοποιήσετε:
Χρήσιμο για να παρακάμψει το sandbox: ✅
TCC bypass: ✅
Η χρήση του Terminal απαιτεί άδειες FDA από τον χρήστη που το χρησιμοποιεί
~/Library/Preferences/com.apple.Terminal.plist
Trigger: Άνοιγμα του Terminal
Στο ~/Library/Preferences
αποθηκεύονται οι προτιμήσεις του χρήστη στις Εφαρμογές. Ορισμένες από αυτές τις προτιμήσεις μπορεί να περιέχουν μια ρύθμιση για εκτέλεση άλλων εφαρμογών/σκριπτών.
Για παράδειγμα, το Terminal μπορεί να εκτελέσει μια εντολή κατά την εκκίνηση:
Αυτή η ρύθμιση αντικατοπτρίζεται στο αρχείο ~/Library/Preferences/com.apple.Terminal.plist
όπως αυτό:
Λοιπόν, αν το plist των προτιμήσεων του τερματικού στο σύστημα μπορούσε να αντικατασταθεί, τότε η open
λειτουργία μπορεί να χρησιμοποιηθεί για να ανοίξει το τερματικό και αυτή η εντολή θα εκτελείται.
Μπορείτε να το προσθέσετε αυτό από το cli με:
Χρήσιμο για να παρακάμψει το sandbox: ✅
Παράκαμψη TCC: ✅
Χρήση Terminal για να έχει άδειες FDA ο χρήστης που το χρησιμοποιεί
Οπουδήποτε
Ενεργοποίηση: Άνοιγμα Terminal
Αν δημιουργήσεις ένα .terminal
script και το ανοίξεις, η εφαρμογή Terminal θα προσκληθεί αυτόματα να εκτελέσει τις εντολές που αναφέρονται εκεί. Αν η εφαρμογή Terminal έχει κάποιες ειδικές άδειες (όπως TCC), η εντολή σου θα εκτελείται με αυτές τις ειδικές άδειες.
Δοκίμασέ το με:
Μπορείτε επίσης να χρησιμοποιήσετε τις επεκτάσεις .command
, .tool
, με κανονικό περιεχόμενο shell scripts και θα ανοίγονται επίσης από το Terminal.
Εάν το terminal έχει Πλήρη Πρόσβαση Δίσκου, θα είναι σε θέση να ολοκληρώσει αυτή την ενέργεια (σημειώστε ότι η εντολή που εκτελείται θα είναι ορατή σε ένα παράθυρο terminal).
Writeup: https://theevilbit.github.io/beyond/beyond_0013/ Writeup: https://posts.specterops.io/audio-unit-plug-ins-896d3434a882
Χρήσιμο για να παρακάμψετε το sandbox: ✅
TCC bypass: 🟠
Μπορεί να αποκτήσετε κάποια επιπλέον πρόσβαση TCC
/Library/Audio/Plug-Ins/HAL
Απαιτείται root
Trigger: Επανεκκίνηση του coreaudiod ή του υπολογιστή
/Library/Audio/Plug-ins/Components
Απαιτείται root
Trigger: Επανεκκίνηση του coreaudiod ή του υπολογιστή
~/Library/Audio/Plug-ins/Components
Trigger: Επανεκκίνηση του coreaudiod ή του υπολογιστή
/System/Library/Components
Απαιτείται root
Trigger: Επανεκκίνηση του coreaudiod ή του υπολογιστή
Σύμφωνα με τις προηγούμενες αναφορές, είναι δυνατό να συγκεντρώσετε κάποια πρόσθετα ήχου και να τα φορτώσετε.
Writeup: https://theevilbit.github.io/beyond/beyond_0028/
Χρήσιμο για να παρακάμψετε το sandbox: ✅
TCC bypass: 🟠
Μπορεί να αποκτήσετε κάποια επιπλέον πρόσβαση TCC
/System/Library/QuickLook
/Library/QuickLook
~/Library/QuickLook
/Applications/AppNameHere/Contents/Library/QuickLook/
~/Applications/AppNameHere/Contents/Library/QuickLook/
Τα πρόσθετα QuickLook μπορούν να εκτελούνται όταν προκαλείτε την προεπισκόπηση ενός αρχείου (πατήστε το πλήκτρο διαστήματος με το αρχείο επιλεγμένο στο Finder) και ένα πρόσθετο που υποστηρίζει αυτόν τον τύπο αρχείου είναι εγκατεστημένο.
Είναι δυνατό να συγκεντρώσετε το δικό σας πρόσθετο QuickLook, να το τοποθετήσετε σε μία από τις προηγούμενες τοποθεσίες για να το φορτώσετε και στη συνέχεια να μεταβείτε σε ένα υποστηριζόμενο αρχείο και να πατήσετε το πλήκτρο διαστήματος για να το προκαλέσετε.
Αυτό δεν λειτούργησε για μένα, ούτε με το LoginHook του χρήστη ούτε με το LogoutHook του root
Writeup: https://theevilbit.github.io/beyond/beyond_0022/
Πρέπει να μπορείτε να εκτελέσετε κάτι σαν defaults write com.apple.loginwindow LoginHook /Users/$USER/hook.sh
Lo
cated in ~/Library/Preferences/com.apple.loginwindow.plist
Είναι απαρχαιωμένα αλλά μπορούν να χρησιμοποιηθούν για να εκτελούν εντολές όταν συνδέεται ένας χρήστης.
Αυτή η ρύθμιση αποθηκεύεται στο /Users/$USER/Library/Preferences/com.apple.loginwindow.plist
Για να το διαγράψετε:
The root user one is stored in /private/var/root/Library/Preferences/com.apple.loginwindow.plist
Εδώ μπορείτε να βρείτε τοποθεσίες εκκίνησης χρήσιμες για sandbox bypass που σας επιτρέπει να εκτελέσετε κάτι απλά γράφοντας το σε ένα αρχείο και περιμένοντας όχι πολύ κοινές συνθήκες όπως συγκεκριμένα προγράμματα εγκατεστημένα, "ασυνήθιστες" ενέργειες χρηστών ή περιβάλλοντα.
Writeup: https://theevilbit.github.io/beyond/beyond_0004/
Χρήσιμο για να παρακάμψετε το sandbox: ✅
Ωστόσο, πρέπει να μπορείτε να εκτελέσετε το δυαδικό crontab
Ή να είστε root
TCC bypass: 🔴
/usr/lib/cron/tabs/
, /private/var/at/tabs
, /private/var/at/jobs
, /etc/periodic/
Απαιτείται root για άμεση πρόσβαση εγγραφής. Δεν απαιτείται root αν μπορείτε να εκτελέσετε crontab <file>
Trigger: Εξαρτάται από τη δουλειά cron
List the cron jobs of the current user with:
Μπορείτε επίσης να δείτε όλα τα cron jobs των χρηστών στο /usr/lib/cron/tabs/
και /var/at/tabs/
(χρειάζεται root).
Στο MacOS, αρκετοί φάκελοι που εκτελούν scripts με ορισμένη συχνότητα μπορούν να βρεθούν σε:
Εκεί μπορείτε να βρείτε τις κανονικές cron εργασίες, τις at εργασίες (όχι πολύ χρησιμοποιούμενες) και τις περιοδικές εργασίες (κυρίως χρησιμοποιούμενες για τον καθαρισμό προσωρινών αρχείων). Οι καθημερινές περιοδικές εργασίες μπορούν να εκτελούνται, για παράδειγμα, με: periodic daily
.
Για να προσθέσετε μια εργασία cron χρήστη προγραμματισμένα, είναι δυνατόν να χρησιμοποιήσετε:
Writeup: https://theevilbit.github.io/beyond/beyond_0002/
~/Library/Application Support/iTerm2/Scripts/AutoLaunch
Trigger: Άνοιγμα του iTerm
~/Library/Application Support/iTerm2/Scripts/AutoLaunch.scpt
Trigger: Άνοιγμα του iTerm
~/Library/Preferences/com.googlecode.iterm2.plist
Trigger: Άνοιγμα του iTerm
Τα σενάρια που αποθηκεύονται στο ~/Library/Application Support/iTerm2/Scripts/AutoLaunch
θα εκτελούνται. Για παράδειγμα:
ή:
Το σενάριο ~/Library/Application Support/iTerm2/Scripts/AutoLaunch.scpt
θα εκτελείται επίσης:
Οι ρυθμίσεις του iTerm2 που βρίσκονται στο ~/Library/Preferences/com.googlecode.iterm2.plist
μπορούν να υποδείξουν μια εντολή προς εκτέλεση όταν ανοίγει το τερματικό iTerm2.
Αυτή η ρύθμιση μπορεί να διαμορφωθεί στις ρυθμίσεις του iTerm2:
Και η εντολή αντικατοπτρίζεται στις ρυθμίσεις:
Μπορείτε να ορίσετε την εντολή που θα εκτελείται με:
Είναι πολύ πιθανό να υπάρχουν άλλοι τρόποι κατάχρησης των ρυθμίσεων του iTerm2 για την εκτέλεση αυθαίρετων εντολών.
Writeup: https://theevilbit.github.io/beyond/beyond_0007/
Χρήσιμο για να παρακαμφθεί το sandbox: ✅
Αλλά το xbar πρέπει να είναι εγκατεστημένο
Παράκαμψη TCC: ✅
Ζητά άδειες προσβασιμότητας
~/Library/Application\ Support/xbar/plugins/
Trigger: Μόλις εκτελεστεί το xbar
Εάν είναι εγκατεστημένο το δημοφιλές πρόγραμμα xbar, είναι δυνατόν να γραφτεί ένα shell script στο ~/Library/Application\ Support/xbar/plugins/
το οποίο θα εκτελείται όταν ξεκινά το xbar:
Writeup: https://theevilbit.github.io/beyond/beyond_0008/
Χρήσιμο για να παρακαμφθεί το sandbox: ✅
Αλλά πρέπει να είναι εγκατεστημένο το Hammerspoon
Παράκαμψη TCC: ✅
Ζητά άδειες προσβασιμότητας
~/.hammerspoon/init.lua
Trigger: Μόλις εκτελεστεί το hammerspoon
Hammerspoon λειτουργεί ως πλατφόρμα αυτοματοποίησης για macOS, αξιοποιώντας τη γλώσσα προγραμματισμού LUA για τις λειτουργίες του. Σημαντικά, υποστηρίζει την ενσωμάτωση πλήρους κώδικα AppleScript και την εκτέλεση shell scripts, ενισχύοντας σημαντικά τις δυνατότητες scripting του.
Η εφαρμογή αναζητά ένα μόνο αρχείο, ~/.hammerspoon/init.lua
, και όταν ξεκινήσει, το script θα εκτελεστεί.
Χρήσιμο για να παρακαμφθεί το sandbox: ✅
Αλλά το BetterTouchTool πρέπει να είναι εγκατεστημένο
TCC bypass: ✅
Ζητά άδειες Automation-Shortcuts και Accessibility
~/Library/Application Support/BetterTouchTool/*
Αυτό το εργαλείο επιτρέπει να υποδεικνύονται εφαρμογές ή σενάρια που θα εκτελούνται όταν πατηθούν ορισμένα συντομεύσεις. Ένας επιτιθέμενος μπορεί να είναι σε θέση να ρυθμίσει τη δική του συντόμευση και ενέργεια για εκτέλεση στη βάση δεδομένων για να εκτελέσει αυθαίρετο κώδικα (μια συντόμευση θα μπορούσε να είναι απλώς να πατηθεί ένα πλήκτρο).
Χρήσιμο για να παρακαμφθεί το sandbox: ✅
Αλλά το Alfred πρέπει να είναι εγκατεστημένο
TCC bypass: ✅
Ζητά άδειες Automation, Accessibility και ακόμη και Full-Disk access
???
Επιτρέπει τη δημιουργία ροών εργασίας που μπορούν να εκτελούν κώδικα όταν πληρούνται ορισμένες προϋποθέσεις. Πιθανώς είναι δυνατό για έναν επιτιθέμενο να δημιουργήσει ένα αρχείο ροής εργασίας και να κάνει το Alfred να το φορτώσει (είναι απαραίτητο να πληρώσετε την premium έκδοση για να χρησιμοποιήσετε ροές εργασίας).
Writeup: https://theevilbit.github.io/beyond/beyond_0006/
Χρήσιμο για να παρακαμφθεί το sandbox: ✅
Αλλά το ssh πρέπει να είναι ενεργοποιημένο και χρησιμοποιούμενο
TCC bypass: ✅
Η χρήση SSH απαιτεί πρόσβαση FDA
~/.ssh/rc
Trigger: Σύνδεση μέσω ssh
/etc/ssh/sshrc
Απαιτείται root
Trigger: Σύνδεση μέσω ssh
Για να ενεργοποιήσετε το ssh απαιτείται Full Disk Access:
Από προεπιλογή, εκτός αν υπάρχει PermitUserRC no
στο /etc/ssh/sshd_config
, όταν ένας χρήστης συνδέεται μέσω SSH τα σενάρια /etc/ssh/sshrc
και ~/.ssh/rc
θα εκτελούνται.
Writeup: https://theevilbit.github.io/beyond/beyond_0003/
~/Library/Application Support/com.apple.backgroundtaskmanagementagent
Trigger: Σύνδεση
Payload εκμετάλλευσης αποθηκευμένο καλώντας osascript
/var/db/com.apple.xpc.launchd/loginitems.501.plist
Trigger: Σύνδεση
Απαιτείται δικαιώματα root
Στις Προτιμήσεις Συστήματος -> Χρήστες & Ομάδες -> Στοιχεία Σύνδεσης μπορείτε να βρείτε στοιχεία που θα εκτελούνται όταν ο χρήστης συνδέεται. Είναι δυνατή η καταγραφή τους, η προσθήκη και η αφαίρεση από τη γραμμή εντολών:
Αυτά τα στοιχεία αποθηκεύονται στο αρχείο ~/Library/Application Support/com.apple.backgroundtaskmanagementagent
Τα Login items μπορούν επίσης να υποδειχθούν χρησιμοποιώντας το API SMLoginItemSetEnabled το οποίο θα αποθηκεύσει τη ρύθμιση στο /var/db/com.apple.xpc.launchd/loginitems.501.plist
(Δείτε την προηγούμενη ενότητα σχετικά με τα Login Items, αυτή είναι μια επέκταση)
Εάν αποθηκεύσετε ένα αρχείο ZIP ως Login Item, το Archive Utility
θα το ανοίξει και αν το zip ήταν για παράδειγμα αποθηκευμένο στο ~/Library
και περιείχε τον φάκελο LaunchAgents/file.plist
με ένα backdoor, αυτός ο φάκελος θα δημιουργηθεί (δεν είναι από προεπιλογή) και το plist θα προστεθεί ώστε την επόμενη φορά που ο χρήστης θα συνδεθεί ξανά, το backdoor που υποδεικνύεται στο plist θα εκτελείται.
Μια άλλη επιλογή θα ήταν να δημιουργήσετε τα αρχεία .bash_profile
και `.zshenv μέσα στο HOME του χρήστη, έτσι ώστε αν ο φάκελος LaunchAgents υπάρχει ήδη, αυτή η τεχνική να λειτουργεί ακόμα.
Writeup: https://theevilbit.github.io/beyond/beyond_0014/
Χρήσιμο για να παρακάμψετε το sandbox: ✅
Αλλά πρέπει να εκτελέσετε at
και πρέπει να είναι ενεργοποιημένο
TCC bypass: 🔴
Πρέπει να εκτελέσετε at
και πρέπει να είναι ενεργοποιημένο
Οι εργασίες at
έχουν σχεδιαστεί για προγραμματισμό μιας φοράς εργασιών που θα εκτελούνται σε συγκεκριμένες χρονικές στιγμές. Σε αντίθεση με τις cron jobs, οι εργασίες at
αφαιρούνται αυτόματα μετά την εκτέλεση. Είναι κρίσιμο να σημειωθεί ότι αυτές οι εργασίες είναι επίμονες κατά την επανεκκίνηση του συστήματος, καθιστώντας τις πιθανές ανησυχίες ασφαλείας υπό ορισμένες συνθήκες.
Από προεπιλογή είναι απενεργοποιημένες αλλά ο χρήστης root μπορεί να τις ενεργοποιήσει με:
Αυτό θα δημιουργήσει ένα αρχείο σε 1 ώρα:
Έλεγχος της ουράς εργασιών χρησιμοποιώντας atq:
Από πάνω μπορούμε να δούμε δύο προγραμματισμένες εργασίες. Μπορούμε να εκτυπώσουμε τις λεπτομέρειες της εργασίας χρησιμοποιώντας at -c JOBNUMBER
Εάν οι εργασίες AT δεν είναι ενεργοποιημένες, οι δημιουργημένες εργασίες δεν θα εκτελούνται.
Τα αρχεία εργασίας μπορούν να βρεθούν στο /private/var/at/jobs/
Το όνομα αρχείου περιέχει την ουρά, τον αριθμό εργασίας και την ώρα που έχει προγραμματιστεί να εκτελεστεί. Για παράδειγμα, ας ρίξουμε μια ματιά στο a0001a019bdcd2
.
a
- αυτή είναι η ουρά
0001a
- αριθμός εργασίας σε δεκαεξαδική μορφή, 0x1a = 26
019bdcd2
- ώρα σε δεκαεξαδική μορφή. Αντιπροσωπεύει τα λεπτά που έχουν περάσει από την εποχή. 0x019bdcd2
είναι 26991826
σε δεκαδική μορφή. Αν το πολλαπλασιάσουμε με 60, παίρνουμε 1619509560
, που είναι GMT: 2021. Απρίλιος 27., Τρίτη 7:46:00
.
Αν εκτυπώσουμε το αρχείο εργασίας, θα βρούμε ότι περιέχει τις ίδιες πληροφορίες που λάβαμε χρησιμοποιώντας at -c
.
Writeup: https://theevilbit.github.io/beyond/beyond_0024/ Writeup: https://posts.specterops.io/folder-actions-for-persistence-on-macos-8923f222343d
Χρήσιμο για να παρακαμφθεί το sandbox: ✅
Αλλά πρέπει να μπορείτε να καλέσετε το osascript
με παραμέτρους για να επικοινωνήσετε με System Events
για να μπορέσετε να ρυθμίσετε τις Folder Actions
TCC bypass: 🟠
Έχει κάποιες βασικές άδειες TCC όπως Desktop, Documents και Downloads
/Library/Scripts/Folder Action Scripts
Απαιτείται δικαιώματα root
Trigger: Πρόσβαση στον καθορισμένο φάκελο
~/Library/Scripts/Folder Action Scripts
Trigger: Πρόσβαση στον καθορισμένο φάκελο
Οι Folder Actions είναι σενάρια που ενεργοποιούνται αυτόματα από αλλαγές σε έναν φάκελο, όπως η προσθήκη, η αφαίρεση στοιχείων ή άλλες ενέργειες όπως το άνοιγμα ή η αλλαγή μεγέθους του παραθύρου του φακέλου. Αυτές οι ενέργειες μπορούν να χρησιμοποιηθούν για διάφορες εργασίες και μπορούν να ενεργοποιηθούν με διαφορετικούς τρόπους, όπως χρησιμοποιώντας το UI του Finder ή εντολές τερματικού.
Για να ρυθμίσετε τις Folder Actions, έχετε επιλογές όπως:
Δημιουργία μιας ροής εργασίας Folder Action με το Automator και εγκατάσταση της ως υπηρεσία.
Επισύναψη ενός σεναρίου χειροκίνητα μέσω της ρύθμισης Folder Actions στο μενού περιβάλλοντος ενός φακέλου.
Χρήση του OSAScript για την αποστολή μηνυμάτων Apple Event στο System Events.app
για προγραμματισμένη ρύθμιση μιας Folder Action.
Αυτή η μέθοδος είναι ιδιαίτερα χρήσιμη για την ενσωμάτωση της ενέργειας στο σύστημα, προσφέροντας ένα επίπεδο επιμονής.
Το παρακάτω σενάριο είναι ένα παράδειγμα αυτού που μπορεί να εκτελεστεί από μια Folder Action:
Για να κάνετε το παραπάνω σενάριο χρησιμοποιήσιμο από τις Ενέργειες Φακέλου, μεταγλωττίστε το χρησιμοποιώντας:
Μετά την εκτέλεση του script, ρυθμίστε τις Ενέργειες Φακέλου εκτελώντας το παρακάτω script. Αυτό το script θα ενεργοποιήσει τις Ενέργειες Φακέλου παγκοσμίως και θα συνδέσει συγκεκριμένα το προηγουμένως εκτελεσμένο script στον φάκελο Επιφάνεια Εργασίας.
Εκτελέστε το σενάριο ρύθμισης με:
Αυτός είναι ο τρόπος για να υλοποιήσετε αυτή την επιμονή μέσω GUI:
Αυτό είναι το σενάριο που θα εκτελεστεί:
Συγκεντρώστε το με: osacompile -l JavaScript -o folder.scpt source.js
Μετακινήστε το σε:
Τότε, ανοίξτε την εφαρμογή Folder Actions Setup
, επιλέξτε τον φάκελο που θα θέλατε να παρακολουθήσετε και επιλέξτε στην περίπτωσή σας folder.scpt
(στη δική μου περίπτωση το ονόμασα output2.scp):
Τώρα, αν ανοίξετε αυτόν τον φάκελο με Finder, το σενάριό σας θα εκτελείται.
Αυτή η ρύθμιση αποθηκεύτηκε στο plist που βρίσκεται στο ~/Library/Preferences/com.apple.FolderActionsDispatcher.plist
σε μορφή base64.
Τώρα, ας προσπαθήσουμε να προετοιμάσουμε αυτή την επιμονή χωρίς πρόσβαση GUI:
Αντιγράψτε το ~/Library/Preferences/com.apple.FolderActionsDispatcher.plist
στο /tmp
για να το κάνετε backup:
cp ~/Library/Preferences/com.apple.FolderActionsDispatcher.plist /tmp
Αφαιρέστε τις Folder Actions που μόλις ρυθμίσατε:
Τώρα που έχουμε ένα κενό περιβάλλον
Αντιγράψτε το αρχείο backup: cp /tmp/com.apple.FolderActionsDispatcher.plist ~/Library/Preferences/
Ανοίξτε την εφαρμογή Folder Actions Setup.app για να καταναλώσετε αυτή τη ρύθμιση: open "/System/Library/CoreServices/Applications/Folder Actions Setup.app/"
Και αυτό δεν λειτούργησε για μένα, αλλά αυτές είναι οι οδηγίες από την αναφορά:(
Αναφορά: https://theevilbit.github.io/beyond/beyond_0027/
Χρήσιμο για να παρακάμψετε το sandbox: ✅
Αλλά πρέπει να έχετε εγκαταστήσει μια κακόβουλη εφαρμογή μέσα στο σύστημα
TCC bypass: 🔴
~/Library/Preferences/com.apple.dock.plist
Trigger: Όταν ο χρήστης κάνει κλικ στην εφαρμογή μέσα στο dock
Όλες οι εφαρμογές που εμφανίζονται στο Dock καθορίζονται μέσα στο plist: ~/Library/Preferences/com.apple.dock.plist
Είναι δυνατόν να προσθέσετε μια εφαρμογή απλά με:
Χρησιμοποιώντας κάποια κοινωνική μηχανική θα μπορούσατε να παριστάνετε για παράδειγμα το Google Chrome μέσα στο dock και στην πραγματικότητα να εκτελέσετε το δικό σας σενάριο:
Writeup: https://theevilbit.github.io/beyond/beyond_0017
Χρήσιμο για να παρακαμφθεί το sandbox: 🟠
Μια πολύ συγκεκριμένη ενέργεια πρέπει να συμβεί
Θα καταλήξετε σε άλλο sandbox
TCC bypass: 🔴
/Library/ColorPickers
Απαιτείται δικαιώματα root
Trigger: Χρησιμοποιήστε τον επιλογέα χρώματος
~/Library/ColorPickers
Trigger: Χρησιμοποιήστε τον επιλογέα χρώματος
Συγκεντρώστε ένα bundle επιλογέα χρώματος με τον κώδικά σας (μπορείτε να χρησιμοποιήσετε αυτό για παράδειγμα) και προσθέστε έναν κατασκευαστή (όπως στην ενότητα Screen Saver) και αντιγράψτε το bundle στο ~/Library/ColorPickers
.
Στη συνέχεια, όταν ενεργοποιηθεί ο επιλογέας χρώματος, ο κώδικάς σας θα πρέπει επίσης να ενεργοποιηθεί.
Σημειώστε ότι το δυαδικό αρχείο που φορτώνει τη βιβλιοθήκη σας έχει ένα πολύ περιοριστικό sandbox: /System/Library/Frameworks/AppKit.framework/Versions/C/XPCServices/LegacyExternalColorPickerService-x86_64.xpc/Contents/MacOS/LegacyExternalColorPickerService-x86_64
Writeup: https://theevilbit.github.io/beyond/beyond_0026/ Writeup: https://objective-see.org/blog/blog_0x11.html
Χρήσιμο για να παρακαμφθεί το sandbox: Όχι, γιατί χρειάζεται να εκτελέσετε την δική σας εφαρμογή
TCC bypass: ???
Μια συγκεκριμένη εφαρμογή
Ένα παράδειγμα εφαρμογής με μια Επέκταση Finder Sync μπορεί να βρεθεί εδώ.
Οι εφαρμογές μπορούν να έχουν Finder Sync Extensions
. Αυτή η επέκταση θα εισέλθει σε μια εφαρμογή που θα εκτελείται. Επιπλέον, για να μπορέσει η επέκταση να εκτελέσει τον κώδικά της πρέπει να είναι υπογεγραμμένη με κάποιο έγκυρο πιστοποιητικό προγραμματιστή της Apple, πρέπει να είναι sandboxed (αν και θα μπορούσαν να προστεθούν χαλαρές εξαιρέσεις) και πρέπει να είναι καταχωρημένη με κάτι σαν:
Writeup: https://theevilbit.github.io/beyond/beyond_0016/ Writeup: https://posts.specterops.io/saving-your-access-d562bf5bf90b
Χρήσιμο για να παρακάμψετε το sandbox: 🟠
Αλλά θα καταλήξετε σε ένα κοινό sandbox εφαρμογής
TCC bypass: 🔴
/System/Library/Screen Savers
Απαιτείται δικαιώματα root
Trigger: Επιλέξτε το screensaver
/Library/Screen Savers
Απαιτείται δικαιώματα root
Trigger: Επιλέξτε το screensaver
~/Library/Screen Savers
Trigger: Επιλέξτε το screensaver
Δημιουργήστε ένα νέο έργο στο Xcode και επιλέξτε το πρότυπο για να δημιουργήσετε ένα νέο Screen Saver. Στη συνέχεια, προσθέστε τον κώδικά σας σε αυτό, για παράδειγμα τον παρακάτω κώδικα για να δημιουργήσετε logs.
Build it, and copy the .saver
bundle to ~/Library/Screen Savers
. Then, open the Screen Saver GUI and it you just click on it, it should generate a lot of logs:
Σημειώστε ότι επειδή μέσα στα δικαιώματα του δυαδικού αρχείου που φορτώνει αυτόν τον κώδικα (/System/Library/Frameworks/ScreenSaver.framework/PlugIns/legacyScreenSaver.appex/Contents/MacOS/legacyScreenSaver
) μπορείτε να βρείτε com.apple.security.app-sandbox
θα είστε μέσα στο κοινό sandbox εφαρμογών.
Saver code:
writeup: https://theevilbit.github.io/beyond/beyond_0011/
Χρήσιμο για να παρακάμψει το sandbox: 🟠
Αλλά θα καταλήξετε σε ένα sandbox εφαρμογής
TCC bypass: 🔴
Το sandbox φαίνεται πολύ περιορισμένο
~/Library/Spotlight/
Trigger: Δημιουργείται ένα νέο αρχείο με μια επέκταση που διαχειρίζεται το spotlight plugin.
/Library/Spotlight/
Trigger: Δημιουργείται ένα νέο αρχείο με μια επέκταση που διαχειρίζεται το spotlight plugin.
Απαιτείται root
/System/Library/Spotlight/
Trigger: Δημιουργείται ένα νέο αρχείο με μια επέκταση που διαχειρίζεται το spotlight plugin.
Απαιτείται root
Some.app/Contents/Library/Spotlight/
Trigger: Δημιουργείται ένα νέο αρχείο με μια επέκταση που διαχειρίζεται το spotlight plugin.
Απαιτείται νέα εφαρμογή
Το Spotlight είναι η ενσωματωμένη λειτουργία αναζήτησης του macOS, σχεδιασμένη να παρέχει στους χρήστες γρήγορη και ολοκληρωμένη πρόσβαση σε δεδομένα στους υπολογιστές τους. Για να διευκολύνει αυτή τη γρήγορη δυνατότητα αναζήτησης, το Spotlight διατηρεί μια ιδιόκτητη βάση δεδομένων και δημιουργεί έναν δείκτη μέσω ανάλυσης των περισσότερων αρχείων, επιτρέποντας γρήγορες αναζητήσεις τόσο μέσω των ονομάτων αρχείων όσο και του περιεχομένου τους.
Ο υποκείμενος μηχανισμός του Spotlight περιλαμβάνει μια κεντρική διαδικασία που ονομάζεται 'mds', που σημαίνει 'metadata server'. Αυτή η διαδικασία οργανώνει ολόκληρη την υπηρεσία Spotlight. Συμπληρώνοντας αυτό, υπάρχουν πολλαπλοί δαίμονες 'mdworker' που εκτελούν διάφορες εργασίες συντήρησης, όπως η ευρετηρίαση διαφορετικών τύπων αρχείων (ps -ef | grep mdworker
). Αυτές οι εργασίες καθίστανται δυνατές μέσω των plugins εισαγωγέων Spotlight, ή ".mdimporter bundles", που επιτρέπουν στο Spotlight να κατανοεί και να ευρετηριάζει περιεχόμενο σε μια ποικιλία μορφών αρχείων.
Τα plugins ή .mdimporter
bundles βρίσκονται στις προαναφερθείσες τοποθεσίες και αν εμφανιστεί ένα νέο bundle, φορτώνεται μέσα σε ένα λεπτό (δεν χρειάζεται να επανεκκινήσετε καμία υπηρεσία). Αυτά τα bundles πρέπει να υποδεικνύουν ποιοι τύποι αρχείων και επεκτάσεις μπορούν να διαχειριστούν, με αυτόν τον τρόπο, το Spotlight θα τα χρησιμοποιήσει όταν δημιουργηθεί ένα νέο αρχείο με την υποδεικνυόμενη επέκταση.
Είναι δυνατόν να βρείτε όλους τους mdimporters
που είναι φορτωμένοι τρέχοντας:
Και για παράδειγμα /Library/Spotlight/iBooksAuthor.mdimporter χρησιμοποιείται για την ανάλυση αυτού του τύπου αρχείων (επέκταση .iba
και .book
μεταξύ άλλων):
Αν ελέγξετε το Plist άλλων mdimporter
, μπορεί να μην βρείτε την καταχώρηση UTTypeConformsTo
. Αυτό συμβαίνει επειδή είναι ένας ενσωματωμένος Uniform Type Identifiers (UTI) και δεν χρειάζεται να καθορίσει επεκτάσεις.
Επιπλέον, οι προεπιλεγμένες προσθήκες του συστήματος έχουν πάντα προτεραιότητα, επομένως ένας επιτιθέμενος μπορεί να έχει πρόσβαση μόνο σε αρχεία που δεν ευρετηριάζονται διαφορετικά από τους δικούς του mdimporters
της Apple.
Για να δημιουργήσετε τον δικό σας εισαγωγέα, μπορείτε να ξεκινήσετε με αυτό το έργο: https://github.com/megrimm/pd-spotlight-importer και στη συνέχεια να αλλάξετε το όνομα, το CFBundleDocumentTypes
και να προσθέσετε UTImportedTypeDeclarations
ώστε να υποστηρίζει την επέκταση που θα θέλατε να υποστηρίξετε και να τις αναφέρετε στο schema.xml
.
Στη συνέχεια, αλλάξτε τον κώδικα της συνάρτησης GetMetadataForFile
για να εκτελεί την payload σας όταν δημιουργείται ένα αρχείο με την επεξεργασμένη επέκταση.
Τέλος, κατασκευάστε και αντιγράψτε τον νέο σας .mdimporter
σε μία από τις προηγούμενες τοποθεσίες και μπορείτε να ελέγξετε αν φορτώνεται παρακολουθώντας τα logs ή ελέγχοντας mdimport -L.
Δεν φαίνεται να λειτουργεί πια.
Writeup: https://theevilbit.github.io/beyond/beyond_0009/
/System/Library/PreferencePanes
/Library/PreferencePanes
~/Library/PreferencePanes
Δεν φαίνεται να λειτουργεί πια.
Εδώ μπορείτε να βρείτε τοποθεσίες εκκίνησης χρήσιμες για παράκαμψη sandbox που σας επιτρέπουν να εκτελείτε απλά κάτι γράφοντας το σε ένα αρχείο ως root και/ή απαιτώντας άλλες παράξενες συνθήκες.
Writeup: https://theevilbit.github.io/beyond/beyond_0019/
/etc/periodic/daily
, /etc/periodic/weekly
, /etc/periodic/monthly
, /usr/local/etc/periodic
Απαιτείται root
Trigger: Όταν έρθει η ώρα
/etc/daily.local
, /etc/weekly.local
ή /etc/monthly.local
Απαιτείται root
Trigger: Όταν έρθει η ώρα
Τα περιοδικά scripts (/etc/periodic
) εκτελούνται λόγω των launch daemons που είναι ρυθμισμένα στο /System/Library/LaunchDaemons/com.apple.periodic*
. Σημειώστε ότι τα scripts που αποθηκεύονται στο /etc/periodic/
εκτελούνται ως ιδιοκτήτης του αρχείου, επομένως αυτό δεν θα λειτουργήσει για μια πιθανή κλιμάκωση προνομίων.
Υπάρχουν άλλα περιοδικά σενάρια που θα εκτελούνται όπως υποδεικνύεται στο /etc/defaults/periodic.conf
:
Αν καταφέρετε να γράψετε οποιοδήποτε από τα αρχεία /etc/daily.local
, /etc/weekly.local
ή /etc/monthly.local
, θα εκτελούνται sooner or later.
Σημειώστε ότι το περιοδικό σενάριο θα εκτελείται ως ο ιδιοκτήτης του σεναρίου. Έτσι, αν ένας κανονικός χρήστης είναι ο ιδιοκτήτης του σεναρίου, θα εκτελείται ως αυτός ο χρήστης (αυτό μπορεί να αποτρέψει επιθέσεις ανύψωσης προνομίων).
Writeup: Linux Hacktricks PAM Writeup: https://theevilbit.github.io/beyond/beyond_0005/
Απαιτείται πάντα root
Καθώς το PAM είναι πιο επικεντρωμένο στην επιμονή και το κακόβουλο λογισμικό παρά στην εύκολη εκτέλεση μέσα στο macOS, αυτό το blog δεν θα δώσει λεπτομερή εξήγηση, διαβάστε τα writeups για να κατανοήσετε καλύτερα αυτή την τεχνική.
Ελέγξτε τα PAM modules με:
Μια τεχνική επιμονής/κλιμάκωσης προνομίων που εκμεταλλεύεται το PAM είναι τόσο εύκολη όσο η τροποποίηση της μονάδας /etc/pam.d/sudo προσθέτοντας στην αρχή τη γραμμή:
Έτσι θα φαίνεται κάτι σαν αυτό:
Και επομένως, οποιαδήποτε προσπάθεια να χρησιμοποιηθεί sudo
θα λειτουργήσει.
Σημειώστε ότι αυτός ο φάκελος προστατεύεται από το TCC, οπότε είναι πολύ πιθανό ο χρήστης να λάβει μια προτροπή ζητώντας πρόσβαση.
Ένα άλλο ωραίο παράδειγμα είναι το su, όπου μπορείτε να δείτε ότι είναι επίσης δυνατό να δώσετε παραμέτρους στα PAM modules (και μπορείτε επίσης να κάνετε backdoor αυτό το αρχείο):
Writeup: https://theevilbit.github.io/beyond/beyond_0028/ Writeup: https://posts.specterops.io/persistent-credential-theft-with-authorization-plugins-d17b34719d65
Χρήσιμο για να παρακάμψετε το sandbox: 🟠
Αλλά χρειάζεστε να είστε root και να κάνετε επιπλέον ρυθμίσεις
TCC bypass: ???
/Library/Security/SecurityAgentPlugins/
Απαιτείται root
Είναι επίσης απαραίτητο να ρυθμίσετε τη βάση δεδομένων εξουσιοδότησης για να χρησιμοποιήσετε το plugin
Μπορείτε να δημιουργήσετε ένα authorization plugin που θα εκτελείται όταν ένας χρήστης συνδέεται για να διατηρήσει την επιμονή. Για περισσότερες πληροφορίες σχετικά με το πώς να δημιουργήσετε ένα από αυτά τα plugins, ελέγξτε τις προηγούμενες αναφορές (και να είστε προσεκτικοί, ένα κακώς γραμμένο μπορεί να σας κλειδώσει έξω και θα χρειαστεί να καθαρίσετε το mac σας από τη λειτουργία ανάκτησης).
Μεταφέρετε το πακέτο στην τοποθεσία που θα φορτωθεί:
Τέλος, προσθέστε τον κανόνα για να φορτώσετε αυτό το Plugin:
Το evaluate-mechanisms
θα ενημερώσει το πλαίσιο εξουσιοδότησης ότι θα χρειαστεί να καλέσει έναν εξωτερικό μηχανισμό για εξουσιοδότηση. Επιπλέον, το privileged
θα το εκτελέσει ως root.
Trigger it with:
And then the staff group should have sudo access (read /etc/sudoers
to confirm).
Writeup: https://theevilbit.github.io/beyond/beyond_0030/
Χρήσιμο για να παρακάμψετε το sandbox: 🟠
Αλλά πρέπει να είστε root και ο χρήστης πρέπει να χρησιμοποιεί man
TCC bypass: 🔴
/private/etc/man.conf
Απαιτείται root
/private/etc/man.conf
: Όποτε χρησιμοποιείται το man
Το αρχείο ρυθμίσεων /private/etc/man.conf
υποδεικνύει το δυαδικό/σενάριο που θα χρησιμοποιηθεί κατά το άνοιγμα αρχείων τεκμηρίωσης man. Έτσι, η διαδρομή προς το εκτελέσιμο θα μπορούσε να τροποποιηθεί ώστε κάθε φορά που ο χρήστης χρησιμοποιεί το man για να διαβάσει κάποια έγγραφα, να εκτελείται μια backdoor.
Για παράδειγμα, ορίστε στο /private/etc/man.conf
:
Και στη συνέχεια δημιουργήστε το /tmp/view
ως:
Writeup: https://theevilbit.github.io/beyond/beyond_0023/
Χρήσιμο για να παρακάμψει το sandbox: 🟠
Αλλά χρειάζεσαι δικαιώματα root και ο apache πρέπει να είναι σε λειτουργία
TCC bypass: 🔴
Το httpd δεν έχει δικαιώματα
/etc/apache2/httpd.conf
Απαιτείται root
Trigger: Όταν ξεκινά ο Apache2
Μπορείς να υποδείξεις στο /etc/apache2/httpd.conf
να φορτώσει ένα module προσθέτοντας μια γραμμή όπως:
Με αυτόν τον τρόπο, τα συμπιεσμένα σας modules θα φορτωθούν από το Apache. Το μόνο που χρειάζεται είναι είτε να το υπογράψετε με ένα έγκυρο πιστοποιητικό της Apple, είτε να προσθέσετε ένα νέο έμπιστο πιστοποιητικό στο σύστημα και να το υπογράψετε με αυτό.
Στη συνέχεια, αν χρειαστεί, για να βεβαιωθείτε ότι ο διακομιστής θα ξεκινήσει, μπορείτε να εκτελέσετε:
Κωδικός παράδειγμα για το Dylb:
Writeup: https://theevilbit.github.io/beyond/beyond_0031/
Χρήσιμο για να παρακάμψετε το sandbox: 🟠
Αλλά χρειάζεστε δικαιώματα root, το auditd να είναι σε εκτέλεση και να προκαλέσει προειδοποίηση
Παράκαμψη TCC: 🔴
/etc/security/audit_warn
Απαιτείται root
Trigger: Όταν το auditd ανιχνεύει μια προειδοποίηση
Όποτε το auditd ανιχνεύει μια προειδοποίηση, το σενάριο /etc/security/audit_warn
είναι εκτελούμενο. Έτσι, μπορείτε να προσθέσετε το payload σας σε αυτό.
You could force a warning with sudo audit -n
.
Αυτό είναι παρωχημένο, οπότε δεν θα πρέπει να βρεθεί τίποτα σε αυτές τις καταλόγους.
Το StartupItem είναι ένας κατάλογος που θα πρέπει να τοποθετείται είτε μέσα στο /Library/StartupItems/
είτε στο /System/Library/StartupItems/
. Μόλις δημιουργηθεί αυτός ο κατάλογος, πρέπει να περιλαμβάνει δύο συγκεκριμένα αρχεία:
Ένα rc script: Ένα shell script που εκτελείται κατά την εκκίνηση.
Ένα plist file, συγκεκριμένα ονομαζόμενο StartupParameters.plist
, το οποίο περιέχει διάφορες ρυθμίσεις παραμέτρων.
Βεβαιωθείτε ότι τόσο το rc script όσο και το αρχείο StartupParameters.plist
είναι σωστά τοποθετημένα μέσα στον κατάλογο StartupItem ώστε η διαδικασία εκκίνησης να τα αναγνωρίσει και να τα χρησιμοποιήσει.
Δεν μπορώ να βρω αυτό το συστατικό στο macOS μου, οπότε για περισσότερες πληροφορίες ελέγξτε την αναφορά
Αναφορά: https://theevilbit.github.io/beyond/beyond_0023/
Εισήχθη από την Apple, emond είναι ένας μηχανισμός καταγραφής που φαίνεται να είναι υποανάπτυκτος ή πιθανώς εγκαταλελειμμένος, ωστόσο παραμένει προσβάσιμος. Αν και δεν είναι ιδιαίτερα ωφέλιμος για έναν διαχειριστή Mac, αυτή η ασαφής υπηρεσία θα μπορούσε να χρησιμεύσει ως μια διακριτική μέθοδος επιμονής για τους απειλητικούς παράγοντες, πιθανώς απαρατήρητη από τους περισσότερους διαχειριστές macOS.
Για όσους γνωρίζουν την ύπαρξή του, η αναγνώριση οποιασδήποτε κακόβουλης χρήσης του emond είναι απλή. Ο LaunchDaemon του συστήματος για αυτή την υπηρεσία αναζητά σενάρια προς εκτέλεση σε έναν μόνο φάκελο. Για να το ελέγξετε, μπορεί να χρησιμοποιηθεί η παρακάτω εντολή:
Writeup: https://theevilbit.github.io/beyond/beyond_0018/
/opt/X11/etc/X11/xinit/privileged_startx.d
Απαιτείται δικαιώματα root
Ενεργοποίηση: Με το XQuartz
Το XQuartz δεν είναι πλέον εγκατεστημένο στο macOS, οπότε αν θέλετε περισσότερες πληροφορίες ελέγξτε την αναφορά.
Είναι τόσο περίπλοκο να εγκαταστήσετε kext ακόμα και ως root που δεν θα το θεωρήσω αυτό για να ξεφύγω από sandbox ή ακόμα και για επιμονή (εκτός αν έχετε μια εκμετάλλευση)
Για να εγκαταστήσετε ένα KEXT ως στοιχείο εκκίνησης, πρέπει να είναι εγκατεστημένο σε μία από τις παρακάτω τοποθεσίες:
/System/Library/Extensions
Αρχεία KEXT ενσωματωμένα στο λειτουργικό σύστημα OS X.
/Library/Extensions
Αρχεία KEXT εγκατεστημένα από λογισμικό τρίτων
Μπορείτε να καταγράψετε τα τρέχοντα φορτωμένα αρχεία kext με:
Για περισσότερες πληροφορίες σχετικά με τον έλεγχο των kernel extensions δείτε αυτή την ενότητα.
Writeup: https://theevilbit.github.io/beyond/beyond_0029/
/usr/local/bin/amstoold
Απαιτείται δικαίωμα root
Φαίνεται ότι το plist
από το /System/Library/LaunchAgents/com.apple.amstoold.plist
χρησιμοποιούσε αυτό το δυαδικό αρχείο ενώ εκθέτοντας μια υπηρεσία XPC... το θέμα είναι ότι το δυαδικό αρχείο δεν υπήρχε, οπότε θα μπορούσατε να τοποθετήσετε κάτι εκεί και όταν καλείται η υπηρεσία XPC, το δυαδικό σας αρχείο θα καλείται.
Δεν μπορώ πλέον να το βρω στο macOS μου.
Writeup: https://theevilbit.github.io/beyond/beyond_0015/
/Library/Preferences/Xsan/.xsanrc
Απαιτείται δικαίωμα root
Trigger: Όταν εκτελείται η υπηρεσία (σπάνια)
Φαίνεται ότι δεν είναι πολύ συνηθισμένο να εκτελείται αυτό το σενάριο και δεν μπόρεσα καν να το βρω στο macOS μου, οπότε αν θέλετε περισσότερες πληροφορίες ελέγξτε το writeup.
Αυτό δεν λειτουργεί σε σύγχρονες εκδόσεις του MacOS
Είναι επίσης δυνατό να τοποθετήσετε εδώ εντολές που θα εκτελούνται κατά την εκκίνηση. Παράδειγμα κανονικού σεναρίου rc.common:
Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)