Linux Capabilities
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking:
HackTricks Training GCP Red Team Expert (GRTE)
![](https://book.hacktricks.xyz/~gitbook/image?url=https%3A%2F%2Ffiles.gitbook.com%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F-L_2uGJGU7AVNRcqRvEi%252Fuploads%252FelPCTwoecVdnsfjxCZtN%252Fimage.png%3Falt%3Dmedia%26token%3D9ee4ff3e-92dc-471c-abfe-1c25e446a6ed&width=768&dpr=4&quality=100&sign=9c8fe74f&sv=1)
RootedCON είναι η πιο σχετική εκδήλωση κυβερνοασφάλειας στην Ισπανία και μία από τις πιο σημαντικές στην Ευρώπη. Με αποστολή την προώθηση της τεχνικής γνώσης, αυτό το συνέδριο είναι ένα καυτό σημείο συνάντησης για επαγγελματίες της τεχνολογίας και της κυβερνοασφάλειας σε κάθε τομέα.\
Linux Capabilities
Οι δυνατότητες του Linux διαιρούν τα δικαιώματα root σε μικρότερες, διακριτές μονάδες, επιτρέποντας στις διαδικασίες να έχουν ένα υποσύνολο δικαιωμάτων. Αυτό ελαχιστοποιεί τους κινδύνους, αποφεύγοντας την άσκοπη χορήγηση πλήρων δικαιωμάτων root.
Το Πρόβλημα:
Οι κανονικοί χρήστες έχουν περιορισμένα δικαιώματα, επηρεάζοντας εργασίες όπως το άνοιγμα ενός δικτύου socket που απαιτεί πρόσβαση root.
Σύνολα Δικαιωμάτων:
Inherited (CapInh):
Σκοπός: Καθορίζει τις δυνατότητες που μεταβιβάζονται από τη γονική διαδικασία.
Λειτουργικότητα: Όταν δημιουργείται μια νέα διαδικασία, κληρονομεί τις δυνατότητες από τη γονική της διαδικασία σε αυτό το σύνολο. Χρήσιμο για τη διατήρηση ορισμένων δικαιωμάτων κατά τη διάρκεια της δημιουργίας διαδικασιών.
Περιορισμοί: Μια διαδικασία δεν μπορεί να αποκτήσει δυνατότητες που δεν είχε η γονική της διαδικασία.
Effective (CapEff):
Σκοπός: Αντιπροσωπεύει τις πραγματικές δυνατότητες που χρησιμοποιεί μια διαδικασία σε οποιαδήποτε στιγμή.
Λειτουργικότητα: Είναι το σύνολο των δυνατοτήτων που ελέγχει ο πυρήνας για να χορηγήσει άδεια για διάφορες λειτουργίες. Για τα αρχεία, αυτό το σύνολο μπορεί να είναι μια σημαία που υποδεικνύει αν οι επιτρεπόμενες δυνατότητες του αρχείου θα θεωρηθούν αποτελεσματικές.
Σημασία: Το αποτελεσματικό σύνολο είναι κρίσιμο για άμεσες ελέγχους δικαιωμάτων, λειτουργώντας ως το ενεργό σύνολο δυνατοτήτων που μπορεί να χρησιμοποιήσει μια διαδικασία.
Permitted (CapPrm):
Σκοπός: Ορίζει το μέγιστο σύνολο δυνατοτήτων που μπορεί να έχει μια διαδικασία.
Λειτουργικότητα: Μια διαδικασία μπορεί να ανυψώσει μια δυνατότητα από το επιτρεπόμενο σύνολο στο αποτελεσματικό της σύνολο, δίνοντάς της τη δυνατότητα να χρησιμοποιήσει αυτή τη δυνατότητα. Μπορεί επίσης να απορρίψει δυνατότητες από το επιτρεπόμενο σύνολό της.
Όριο: Λειτουργεί ως ανώτατο όριο για τις δυνατότητες που μπορεί να έχει μια διαδικασία, διασφαλίζοντας ότι μια διαδικασία δεν θα υπερβεί το προκαθορισμένο πεδίο δικαιωμάτων της.
Bounding (CapBnd):
Σκοπός: Θέτει ένα ανώτατο όριο στις δυνατότητες που μπορεί να αποκτήσει μια διαδικασία κατά τη διάρκεια του κύκλου ζωής της.
Λειτουργικότητα: Ακόμα και αν μια διαδικασία έχει μια συγκεκριμένη δυνατότητα στο κληρονομούμενο ή επιτρεπόμενο σύνολο, δεν μπορεί να αποκτήσει αυτή τη δυνατότητα εκτός αν είναι επίσης στο περιορισμένο σύνολο.
Χρήση: Αυτό το σύνολο είναι ιδιαίτερα χρήσιμο για τον περιορισμό της δυνατότητας ανύψωσης δικαιωμάτων μιας διαδικασίας, προσθέτοντας ένα επιπλέον επίπεδο ασφάλειας.
Ambient (CapAmb):
Σκοπός: Επιτρέπει σε ορισμένες δυνατότητες να διατηρούνται κατά τη διάρκεια μιας κλήσης συστήματος
execve
, η οποία συνήθως θα οδηγούσε σε πλήρη επαναφορά των δυνατοτήτων της διαδικασίας.Λειτουργικότητα: Διασφαλίζει ότι τα προγράμματα που δεν είναι SUID και δεν έχουν σχετικές δυνατότητες αρχείου μπορούν να διατηρήσουν ορισμένα δικαιώματα.
Περιορισμοί: Οι δυνατότητες σε αυτό το σύνολο υπόκεινται στους περιορισμούς των κληρονομούμενων και επιτρεπόμενων συνόλων, διασφαλίζοντας ότι δεν υπερβαίνουν τα επιτρεπόμενα δικαιώματα της διαδικασίας.
Για περισσότερες πληροφορίες ελέγξτε:
Δυνατότητες Διαδικασιών & Εκτελέσιμων Αρχείων
Δυνατότητες Διαδικασιών
Για να δείτε τις δυνατότητες για μια συγκεκριμένη διαδικασία, χρησιμοποιήστε το αρχείο status στον κατάλογο /proc. Καθώς παρέχει περισσότερες λεπτομέρειες, ας περιορίσουμε τις πληροφορίες μόνο στις σχετικές με τις δυνατότητες του Linux. Σημειώστε ότι για όλες τις εκτελούμενες διαδικασίες, οι πληροφορίες δυνατότητας διατηρούνται ανά νήμα, ενώ για τα εκτελέσιμα αρχεία στο σύστημα αρχείων αποθηκεύονται σε επεκτάσεις χαρακτηριστικών.
Μπορείτε να βρείτε τις δυνατότητες που ορίζονται στο /usr/include/linux/capability.h
Μπορείτε να βρείτε τις δυνατότητες της τρέχουσας διαδικασίας με cat /proc/self/status
ή κάνοντας capsh --print
και άλλων χρηστών στο /proc/<pid>/status
Αυτή η εντολή θα πρέπει να επιστρέφει 5 γραμμές στα περισσότερα συστήματα.
CapInh = Κληρονομούμενες ικανότητες
CapPrm = Επιτρεπόμενες ικανότητες
CapEff = Αποτελεσματικές ικανότητες
CapBnd = Περιορισμένο σύνολο
CapAmb = Σύνολο περιβαλλοντικών ικανοτήτων
Αυτοί οι δεκαεξαδικοί αριθμοί δεν έχουν νόημα. Χρησιμοποιώντας το εργαλείο capsh μπορούμε να τους αποκωδικοποιήσουμε στα ονόματα των δυνατοτήτων.
Ας ελέγξουμε τώρα τις ικανότητες που χρησιμοποιεί το ping
:
Αν και αυτό λειτουργεί, υπάρχει ένας άλλος και πιο εύκολος τρόπος. Για να δείτε τις δυνατότητες μιας εκτελούμενης διαδικασίας, απλώς χρησιμοποιήστε το getpcaps εργαλείο ακολουθούμενο από το αναγνωριστικό διαδικασίας (PID) της. Μπορείτε επίσης να παρέχετε μια λίστα αναγνωριστικών διαδικασίας.
Ας ελέγξουμε εδώ τις δυνατότητες του tcpdump
αφού δώσουμε στο δυαδικό αρχείο αρκετές δυνατότητες (cap_net_admin
και cap_net_raw
) για να παρακολουθήσει το δίκτυο (το tcpdump εκτελείται στη διαδικασία 9562):
Όπως μπορείτε να δείτε, οι δοθείσες ικανότητες αντιστοιχούν με τα αποτελέσματα των 2 τρόπων απόκτησης των ικανοτήτων ενός δυαδικού αρχείου. Το εργαλείο getpcaps χρησιμοποιεί την κλήση συστήματος capget() για να ερωτήσει τις διαθέσιμες ικανότητες για ένα συγκεκριμένο νήμα. Αυτή η κλήση συστήματος χρειάζεται μόνο να παρέχει το PID για να αποκτήσει περισσότερες πληροφορίες.
Ικανότητες Δυαδικών Αρχείων
Τα δυαδικά αρχεία μπορούν να έχουν ικανότητες που μπορούν να χρησιμοποιηθούν κατά την εκτέλεση. Για παράδειγμα, είναι πολύ συνηθισμένο να βρείτε το δυαδικό αρχείο ping
με την ικανότητα cap_net_raw
:
Μπορείτε να αναζητήσετε δυαδικά αρχεία με δυνατότητες χρησιμοποιώντας:
Dropping capabilities with capsh
Αν αφαιρέσουμε τις δυνατότητες CAP_NET_RAW για το ping, τότε το εργαλείο ping δεν θα λειτουργεί πλέον.
Besides the output of capsh itself, the tcpdump command itself should also raise an error.
/bin/bash: /usr/sbin/tcpdump: Η λειτουργία δεν επιτρέπεται
The error clearly shows that the ping command is not allowed to open an ICMP socket. Now we know for sure that this works as expected.
Αφαίρεση Δυνατοτήτων
You can remove capabilities of a binary with
User Capabilities
Φαίνεται ότι είναι δυνατόν να ανατεθούν ικανότητες και σε χρήστες. Αυτό πιθανώς σημαίνει ότι κάθε διαδικασία που εκτελείται από τον χρήστη θα μπορεί να χρησιμοποιεί τις ικανότητες του χρήστη.
Βασισμένο σε αυτό, αυτό και αυτό πρέπει να ρυθμιστούν μερικά αρχεία για να δοθούν σε έναν χρήστη ορισμένες ικανότητες, αλλά αυτό που αναθέτει τις ικανότητες σε κάθε χρήστη θα είναι το /etc/security/capability.conf
.
Παράδειγμα αρχείου:
Περιβαλλοντικές Ικανότητες
Με τη μεταγλώττιση του παρακάτω προγράμματος είναι δυνατόν να δημιουργηθεί ένα bash shell μέσα σε ένα περιβάλλον που παρέχει ικανότητες.
Μέσα στο bash που εκτελείται από το μεταγλωττισμένο περιβάλλον δυαδικό είναι δυνατόν να παρατηρηθούν οι νέες δυνατότητες (ένας κανονικός χρήστης δεν θα έχει καμία δυνατότητα στην "τρέχουσα" ενότητα).
Μπορείτε μόνο να προσθέσετε ικανότητες που είναι παρούσες τόσο στα επιτρεπόμενα όσο και στα κληρονομούμενα σύνολα.
Ικανότητες-συνειδητές/Ικανότητες-ανίδεες δυαδικές
Οι δυαδικές που είναι ικανότητες-συνειδητές δεν θα χρησιμοποιήσουν τις νέες ικανότητες που παρέχονται από το περιβάλλον, ωστόσο οι δυαδικές που είναι ικανότητες-ανίδεες θα τις χρησιμοποιήσουν καθώς δεν θα τις απορρίψουν. Αυτό καθιστά τις δυαδικές ικανότητες-ανίδεες ευάλωτες μέσα σε ένα ειδικό περιβάλλον που παρέχει ικανότητες σε δυαδικές.
Ικανότητες Υπηρεσίας
Από προεπιλογή, μια υπηρεσία που εκτελείται ως root θα έχει ανατεθεί σε όλες τις ικανότητες, και σε ορισμένες περιπτώσεις αυτό μπορεί να είναι επικίνδυνο. Επομένως, ένα αρχείο διαμόρφωσης υπηρεσίας επιτρέπει να καθορίσετε τις ικανότητες που θέλετε να έχει, και τον χρήστη που θα πρέπει να εκτελεί την υπηρεσία για να αποφευχθεί η εκτέλεση μιας υπηρεσίας με περιττά προνόμια:
Capabilities in Docker Containers
Από προεπιλογή, το Docker αναθέτει μερικές ικανότητες στα κοντέινερ. Είναι πολύ εύκολο να ελέγξετε ποιες είναι αυτές οι ικανότητες εκτελώντας:
![](https://book.hacktricks.xyz/~gitbook/image?url=https%3A%2F%2Ffiles.gitbook.com%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F-L_2uGJGU7AVNRcqRvEi%252Fuploads%252FelPCTwoecVdnsfjxCZtN%252Fimage.png%3Falt%3Dmedia%26token%3D9ee4ff3e-92dc-471c-abfe-1c25e446a6ed&width=768&dpr=4&quality=100&sign=9c8fe74f&sv=1)
RootedCON είναι η πιο σχετική εκδήλωση κυβερνοασφάλειας στην Ισπανία και μία από τις πιο σημαντικές στην Ευρώπη. Με αποστολή την προώθηση της τεχνικής γνώσης, αυτό το συνέδριο είναι ένα καυτό σημείο συνάντησης για επαγγελματίες της τεχνολογίας και της κυβερνοασφάλειας σε κάθε πειθαρχία.
Privesc/Container Escape
Οι δυνατότητες είναι χρήσιμες όταν θέλετε να περιορίσετε τις δικές σας διαδικασίες μετά την εκτέλεση προνομιακών λειτουργιών (π.χ. μετά την εγκατάσταση chroot και την δέσμευση σε ένα socket). Ωστόσο, μπορούν να εκμεταλλευτούν περνώντας τους κακόβουλες εντολές ή παραμέτρους που εκτελούνται ως root.
Μπορείτε να επιβάλετε δυνατότητες σε προγράμματα χρησιμοποιώντας setcap
, και να τις ελέγξετε χρησιμοποιώντας getcap
:
Το +ep
σημαίνει ότι προσθέτετε την ικανότητα (“-” θα την αφαιρούσε) ως Ενεργή και Επιτρεπόμενη.
Για να εντοπίσετε προγράμματα σε ένα σύστημα ή φάκελο με ικανότητες:
Exploitation example
Στο παρακάτω παράδειγμα, το δυαδικό αρχείο /usr/bin/python2.6
βρέθηκε ευάλωτο σε privesc:
Δυνατότητες που απαιτούνται από το tcpdump
για να επιτρέπουν σε οποιονδήποτε χρήστη να καταγράφει πακέτα:
Η ειδική περίπτωση των "κενών" ικανοτήτων
Από τα έγγραφα: Σημειώστε ότι μπορεί κανείς να αναθέσει κενές ικανότητες σε ένα αρχείο προγράμματος, και έτσι είναι δυνατό να δημιουργηθεί ένα πρόγραμμα set-user-ID-root που αλλάζει το αποτελεσματικό και αποθηκευμένο set-user-ID της διαδικασίας που εκτελεί το πρόγραμμα σε 0, αλλά δεν παρέχει καμία ικανότητα σε αυτή τη διαδικασία. Ή, απλά, αν έχετε ένα δυαδικό που:
δεν ανήκει στον root
δεν έχει bits
SUID
/SGID
ρυθμισμέναέχει κενές ικανότητες (π.χ.:
getcap myelf
επιστρέφειmyelf =ep
)
τότε αυτό το δυαδικό θα εκτελείται ως root.
CAP_SYS_ADMIN
CAP_SYS_ADMIN
είναι μια πολύ ισχυρή ικανότητα του Linux, συχνά ισοδύναμη με επίπεδο κοντά στον root λόγω των εκτενών διοικητικών προνομίων της, όπως η τοποθέτηση συσκευών ή η χειραγώγηση χαρακτηριστικών του πυρήνα. Ενώ είναι απαραίτητη για κοντέινερ που προσομοιώνουν ολόκληρα συστήματα, το CAP_SYS_ADMIN
θέτει σημαντικές προκλήσεις ασφάλειας, ειδικά σε περιβάλλοντα κοντέινερ, λόγω της δυνατότητάς του για κλιμάκωση προνομίων και συμβιβασμό του συστήματος. Επομένως, η χρήση του απαιτεί αυστηρές αξιολογήσεις ασφάλειας και προσεκτική διαχείριση, με ισχυρή προτίμηση για την απόρριψη αυτής της ικανότητας σε κοντέινερ συγκεκριμένων εφαρμογών για να τηρηθεί η αρχή της ελάχιστης προνομίας και να ελαχιστοποιηθεί η επιφάνεια επίθεσης.
Παράδειγμα με δυαδικό
Χρησιμοποιώντας python, μπορείτε να τοποθετήσετε ένα τροποποιημένο passwd αρχείο πάνω από το πραγματικό passwd αρχείο:
Και τέλος mount το τροποποιημένο αρχείο passwd
στο /etc/passwd
:
Και θα μπορείτε να su
ως root χρησιμοποιώντας τον κωδικό "password".
Παράδειγμα με περιβάλλον (Docker breakout)
Μπορείτε να ελέγξετε τις ενεργοποιημένες δυνατότητες μέσα στο κοντέινερ docker χρησιμοποιώντας:
Μέσα στην προηγούμενη έξοδο μπορείτε να δείτε ότι η δυνατότητα SYS_ADMIN είναι ενεργοποιημένη.
Mount
Αυτό επιτρέπει στο docker container να τοποθετήσει τον δίσκο του host και να έχει ελεύθερη πρόσβαση σε αυτόν:
Πλήρης πρόσβαση
Στην προηγούμενη μέθοδο καταφέραμε να αποκτήσουμε πρόσβαση στον δίσκο του docker host. Σε περίπτωση που διαπιστώσετε ότι ο host εκτελεί έναν ssh server, θα μπορούσατε να δημιουργήσετε έναν χρήστη μέσα στον δίσκο του docker host και να αποκτήσετε πρόσβαση μέσω SSH:
CAP_SYS_PTRACE
Αυτό σημαίνει ότι μπορείτε να διαφύγετε από το κοντέινερ εισάγοντας ένα shellcode μέσα σε κάποια διαδικασία που εκτελείται μέσα στον κεντρικό υπολογιστή. Για να έχετε πρόσβαση σε διαδικασίες που εκτελούνται μέσα στον κεντρικό υπολογιστή, το κοντέινερ πρέπει να εκτελείται τουλάχιστον με --pid=host
.
CAP_SYS_PTRACE
παρέχει τη δυνατότητα χρήσης λειτουργιών αποσφαλμάτωσης και ιχνηλάτησης κλήσεων συστήματος που παρέχονται από το ptrace(2)
και κλήσεις διασύνδεσης μνήμης όπως το process_vm_readv(2)
και το process_vm_writev(2)
. Αν και είναι ισχυρό για διαγνωστικούς και παρακολούθησης σκοπούς, εάν το CAP_SYS_PTRACE
είναι ενεργοποιημένο χωρίς περιοριστικά μέτρα όπως ένα φίλτρο seccomp στο ptrace(2)
, μπορεί να υπονομεύσει σημαντικά την ασφάλεια του συστήματος. Συγκεκριμένα, μπορεί να εκμεταλλευτεί για να παρακάμψει άλλους περιορισμούς ασφαλείας, ιδίως αυτούς που επιβάλλονται από το seccomp, όπως αποδεικνύεται από αποδείξεις εννοιών (PoC) όπως αυτή.
Παράδειγμα με δυαδικό (python)
Παράδειγμα με δυαδικό (gdb)
gdb
με ικανότητα ptrace
:
Debug a root process with gdb και αντιγράψτε-επικολλήστε τις προηγουμένως παραγόμενες γραμμές gdb:
Παράδειγμα με περιβάλλον (Docker breakout) - Άλλη κακή χρήση του gdb
Αν GDB είναι εγκατεστημένο (ή μπορείτε να το εγκαταστήσετε με apk add gdb
ή apt install gdb
για παράδειγμα) μπορείτε να αποσφαλματώσετε μια διαδικασία από τον κεντρικό υπολογιστή και να την κάνετε να καλέσει τη συνάρτηση system
. (Αυτή η τεχνική απαιτεί επίσης την ικανότητα SYS_ADMIN
).
Δεν θα μπορείτε να δείτε την έξοδο της εντολής που εκτελείται, αλλά θα εκτελείται από αυτή τη διαδικασία (οπότε αποκτήστε ένα rev shell).
Αν λάβετε το σφάλμα "No symbol "system" in current context." ελέγξτε το προηγούμενο παράδειγμα που φορτώνει ένα shellcode σε ένα πρόγραμμα μέσω gdb.
Παράδειγμα με περιβάλλον (Docker breakout) - Εισαγωγή Shellcode
Μπορείτε να ελέγξετε τις ενεργοποιημένες δυνατότητες μέσα στο κοντέινερ docker χρησιμοποιώντας:
List processes running in the host ps -eaf
Get the architecture
uname -m
Find a shellcode for the architecture (https://www.exploit-db.com/exploits/41128)
Find a program to inject the shellcode into a process memory (https://github.com/0x00pf/0x00sec_code/blob/master/mem_inject/infect.c)
Modify the shellcode inside the program and compile it
gcc inject.c -o inject
Inject it and grab your shell:
./inject 299; nc 172.17.0.1 5600
CAP_SYS_MODULE
CAP_SYS_MODULE
empowers a process to load and unload kernel modules (init_module(2)
, finit_module(2)
and delete_module(2)
system calls), offering direct access to the kernel's core operations. This capability presents critical security risks, as it enables privilege escalation and total system compromise by allowing modifications to the kernel, thereby bypassing all Linux security mechanisms, including Linux Security Modules and container isolation.
This means that you can insert/remove kernel modules in/from the kernel of the host machine.
Example with binary
In the following example the binary python
has this capability.
Από προεπιλογή, η εντολή modprobe
ελέγχει τη λίστα εξαρτήσεων και τα αρχεία χάρτη στον κατάλογο /lib/modules/$(uname -r)
.
Για να εκμεταλλευτούμε αυτό, ας δημιουργήσουμε έναν ψεύτικο φάκελο lib/modules:
Τότε συγκεντρώστε το module του πυρήνα που μπορείτε να βρείτε 2 παραδείγματα παρακάτω και αντιγράψτε το σε αυτόν τον φάκελο:
Τέλος, εκτελέστε τον απαραίτητο κώδικα python για να φορτώσετε αυτό το kernel module:
Παράδειγμα 2 με δυαδικό
Στο παρακάτω παράδειγμα, το δυαδικό kmod
έχει αυτή την ικανότητα.
Το οποίο σημαίνει ότι είναι δυνατόν να χρησιμοποιήσετε την εντολή insmod
για να εισάγετε ένα module πυρήνα. Ακολουθήστε το παρακάτω παράδειγμα για να αποκτήσετε ένα reverse shell εκμεταλλευόμενοι αυτό το προνόμιο.
Παράδειγμα με περιβάλλον (Docker breakout)
Μπορείτε να ελέγξετε τις ενεργοποιημένες δυνατότητες μέσα στο κοντέινερ docker χρησιμοποιώντας:
Μέσα στην προηγούμενη έξοδο μπορείτε να δείτε ότι η δυνατότητα SYS_MODULE είναι ενεργοποιημένη.
Δημιουργήστε το kernel module που θα εκτελεί ένα reverse shell και το Makefile για να το συγκεντρώσετε:
Ο κενός χαρακτήρας πριν από κάθε λέξη make στο Makefile πρέπει να είναι ένα tab, όχι κενά!
Εκτελέστε make
για να το μεταγλωττίσετε.
Τέλος, ξεκινήστε το nc
μέσα σε ένα shell και φορτώστε το module από ένα άλλο και θα καταγράψετε το shell στη διαδικασία nc:
Ο κώδικας αυτής της τεχνικής αντιγράφηκε από το εργαστήριο του "Abusing SYS_MODULE Capability" από https://www.pentesteracademy.com/
Ένα άλλο παράδειγμα αυτής της τεχνικής μπορεί να βρεθεί στο https://www.cyberark.com/resources/threat-research-blog/how-i-hacked-play-with-docker-and-remotely-ran-code-on-the-host
CAP_DAC_READ_SEARCH
CAP_DAC_READ_SEARCH επιτρέπει σε μια διαδικασία να παρακάμψει τις άδειες για την ανάγνωση αρχείων και για την ανάγνωση και εκτέλεση καταλόγων. Η κύρια χρήση του είναι για σκοπούς αναζήτησης ή ανάγνωσης αρχείων. Ωστόσο, επιτρέπει επίσης σε μια διαδικασία να χρησιμοποιήσει τη λειτουργία open_by_handle_at(2)
, η οποία μπορεί να έχει πρόσβαση σε οποιοδήποτε αρχείο, συμπεριλαμβανομένων εκείνων εκτός του namespace mount της διαδικασίας. Ο χειριστής που χρησιμοποιείται στο open_by_handle_at(2)
υποτίθεται ότι είναι ένας μη διαφανής αναγνωριστικός αριθμός που αποκτάται μέσω του name_to_handle_at(2)
, αλλά μπορεί να περιλαμβάνει ευαίσθητες πληροφορίες όπως αριθμούς inode που είναι ευάλωτοι σε παραβίαση. Η δυνατότητα εκμετάλλευσης αυτής της ικανότητας, ιδιαίτερα στο πλαίσιο των κοντέινερ Docker, αποδείχθηκε από τον Sebastian Krahmer με την εκμετάλλευση shocker, όπως αναλύθηκε εδώ. Αυτό σημαίνει ότι μπορείτε να παρακάμψετε τους ελέγχους άδειας ανάγνωσης αρχείων και τους ελέγχους άδειας ανάγνωσης/εκτέλεσης καταλόγων.
Παράδειγμα με δυαδικό αρχείο
Το δυαδικό αρχείο θα μπορεί να διαβάσει οποιοδήποτε αρχείο. Έτσι, αν ένα αρχείο όπως το tar έχει αυτή την ικανότητα, θα μπορεί να διαβάσει το αρχείο shadow:
Παράδειγμα με binary2
Σε αυτή την περίπτωση ας υποθέσουμε ότι το python
δυαδικό αρχείο έχει αυτή την ικανότητα. Για να καταγράψετε τα αρχεία του root, θα μπορούσατε να κάνετε:
Και για να διαβάσετε ένα αρχείο θα μπορούσατε να κάνετε:
Παράδειγμα σε Περιβάλλον (Docker breakout)
You can check the enabled capabilities inside the docker container using:
Inside the previous output you can see that the DAC_READ_SEARCH capability is enabled. As a result, the container can debug processes.
You can learn how the following exploiting works in https://medium.com/@fun_cuddles/docker-breakout-exploit-analysis-a274fff0e6b3 but in resume CAP_DAC_READ_SEARCH not only allows us to traverse the file system without permission checks, but also explicitly removes any checks to open_by_handle_at(2) and θα μπορούσε να επιτρέψει στη διαδικασία μας να αποκτήσει πρόσβαση σε ευαίσθητα αρχεία που έχουν ανοιχτεί από άλλες διαδικασίες.
The original exploit that abuse this permissions to read files from the host can be found here: http://stealth.openwall.net/xSports/shocker.c, the following is a modified version that allows you to indicate the file you want to read as first argument and dump it in a file.
Η εκμετάλλευση χρειάζεται να βρει έναν δείκτη σε κάτι που είναι τοποθετημένο στον οικοδεσπότη. Η αρχική εκμετάλλευση χρησιμοποίησε το αρχείο /.dockerinit και αυτή η τροποποιημένη έκδοση χρησιμοποιεί το /etc/hostname. Αν η εκμετάλλευση δεν λειτουργεί, ίσως χρειαστεί να ορίσετε ένα διαφορετικό αρχείο. Για να βρείτε ένα αρχείο που είναι τοποθετημένο στον οικοδεσπότη, απλώς εκτελέστε την εντολή mount:
![](https://book.hacktricks.xyz/~gitbook/image?url=https%3A%2F%2F916570657-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252Fr3Cb8nKOYrlGZdSyjbAy%252Fuploads%252Fgit-blob-e8bf27d92631c9009d2613b4bac9f501b6290062%252Fimage%2520%28407%29%2520%281%29.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=f751c8af&sv=1)
Ο κώδικας αυτής της τεχνικής αντιγράφηκε από το εργαστήριο "Abusing DAC_READ_SEARCH Capability" από https://www.pentesteracademy.com/
![](https://book.hacktricks.xyz/~gitbook/image?url=https%3A%2F%2Ffiles.gitbook.com%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F-L_2uGJGU7AVNRcqRvEi%252Fuploads%252FelPCTwoecVdnsfjxCZtN%252Fimage.png%3Falt%3Dmedia%26token%3D9ee4ff3e-92dc-471c-abfe-1c25e446a6ed&width=768&dpr=4&quality=100&sign=9c8fe74f&sv=1)
RootedCON είναι η πιο σχετική εκδήλωση κυβερνοασφάλειας στην Ισπανία και μία από τις πιο σημαντικές στην Ευρώπη. Με αποστολή την προώθηση της τεχνικής γνώσης, αυτό το συνέδριο είναι ένα καυτό σημείο συνάντησης για επαγγελματίες της τεχνολογίας και της κυβερνοασφάλειας σε κάθε πειθαρχία.
CAP_DAC_OVERRIDE
Αυτό σημαίνει ότι μπορείτε να παρακάμψετε τους ελέγχους δικαιωμάτων εγγραφής σε οποιοδήποτε αρχείο, οπότε μπορείτε να γράψετε οποιοδήποτε αρχείο.
Υπάρχουν πολλά αρχεία που μπορείτε να επικαλύψετε για να κερδίσετε δικαιώματα, μπορείτε να πάρετε ιδέες από εδώ.
Παράδειγμα με δυαδικό αρχείο
Σε αυτό το παράδειγμα, το vim έχει αυτή την ικανότητα, οπότε μπορείτε να τροποποιήσετε οποιοδήποτε αρχείο όπως το passwd, sudoers ή shadow:
Παράδειγμα με δυαδικό 2
Σε αυτό το παράδειγμα, το python
δυαδικό θα έχει αυτή την ικανότητα. Μπορείτε να χρησιμοποιήσετε το python για να παρακάμψετε οποιοδήποτε αρχείο:
Παράδειγμα με περιβάλλον + CAP_DAC_READ_SEARCH (Docker breakout)
Μπορείτε να ελέγξετε τις ενεργοποιημένες δυνατότητες μέσα στο κοντέινερ docker χρησιμοποιώντας:
Πρώτα απ' όλα, διαβάστε την προηγούμενη ενότητα που καταχράται την ικανότητα DAC_READ_SEARCH για να διαβάσει αυθαίρετα αρχεία του host και συγκεντρώστε την εκμετάλλευση. Στη συνέχεια, συγκεντρώστε την παρακάτω έκδοση της εκμετάλλευσης shocker που θα σας επιτρέψει να γράφετε αυθαίρετα αρχεία μέσα στο σύστημα αρχείων του host:
Για να ξεφύγετε από το κοντέινερ docker, μπορείτε να κατεβάσετε τα αρχεία /etc/shadow
και /etc/passwd
από τον κεντρικό υπολογιστή, να προσθέσετε σε αυτά έναν νέο χρήστη και να χρησιμοποιήσετε shocker_write
για να τα αντικαταστήσετε. Στη συνέχεια, πρόσβαση μέσω ssh.
Ο κώδικας αυτής της τεχνικής αντιγράφηκε από το εργαστήριο "Abusing DAC_OVERRIDE Capability" από https://www.pentesteracademy.com
CAP_CHOWN
Αυτό σημαίνει ότι είναι δυνατόν να αλλάξετε την ιδιοκτησία οποιουδήποτε αρχείου.
Παράδειγμα με δυαδικό
Ας υποθέσουμε ότι το python
δυαδικό έχει αυτή την ικανότητα, μπορείτε να αλλάξετε τον ιδιοκτήτη του αρχείου shadow, να αλλάξετε τον κωδικό πρόσβασης του root και να κλιμακώσετε τα δικαιώματα:
Ή με το ruby
δυαδικό αρχείο που έχει αυτή την ικανότητα:
CAP_FOWNER
Αυτό σημαίνει ότι είναι δυνατόν να αλλάξετε την άδεια οποιουδήποτε αρχείου.
Παράδειγμα με δυαδικό αρχείο
Αν το python έχει αυτή την ικανότητα, μπορείτε να τροποποιήσετε τις άδειες του αρχείου shadow, να αλλάξετε τον κωδικό πρόσβασης του root, και να κλιμακώσετε τα δικαιώματα:
CAP_SETUID
Αυτό σημαίνει ότι είναι δυνατόν να οριστεί το αποτελεσματικό αναγνωριστικό χρήστη της δημιουργούμενης διαδικασίας.
Παράδειγμα με δυαδικό αρχείο
Αν το python έχει αυτή την ικανότητα, μπορείτε πολύ εύκολα να την εκμεταλλευτείτε για να κερδίσετε δικαιώματα root:
Άλλος τρόπος:
CAP_SETGID
Αυτό σημαίνει ότι είναι δυνατόν να ορίσετε το αποτελεσματικό αναγνωριστικό ομάδας της δημιουργούμενης διαδικασίας.
Υπάρχουν πολλά αρχεία που μπορείτε να επικαλύψετε για να κερδίσετε δικαιώματα, μπορείτε να πάρετε ιδέες από εδώ.
Παράδειγμα με δυαδικό αρχείο
Σε αυτή την περίπτωση θα πρέπει να αναζητήσετε ενδιαφέροντα αρχεία που μπορεί να διαβάσει μια ομάδα, επειδή μπορείτε να προσποιηθείτε οποιαδήποτε ομάδα:
Μόλις βρείτε ένα αρχείο που μπορείτε να εκμεταλλευτείτε (μέσω ανάγνωσης ή εγγραφής) για να κλιμακώσετε τα δικαιώματα, μπορείτε να πάρετε ένα shell προσποιούμενοι την ενδιαφέρουσα ομάδα με:
Σε αυτή την περίπτωση, η ομάδα shadow υποκλάπηκε, οπότε μπορείτε να διαβάσετε το αρχείο /etc/shadow
:
Αν το docker είναι εγκατεστημένο, θα μπορούσατε να παριστάνετε την ομάδα docker και να την εκμεταλλευτείτε για να επικοινωνήσετε με το docker socket και να κλιμακώσετε τα δικαιώματα.
CAP_SETFCAP
Αυτό σημαίνει ότι είναι δυνατόν να ορίσετε ικανότητες σε αρχεία και διαδικασίες
Παράδειγμα με δυαδικό αρχείο
Αν το python έχει αυτή την ικανότητα, μπορείτε πολύ εύκολα να την εκμεταλλευτείτε για να κλιμακώσετε τα δικαιώματα σε root:
Σημειώστε ότι αν ορίσετε μια νέα ικανότητα στο δυαδικό αρχείο με CAP_SETFCAP, θα χάσετε αυτή την ικανότητα.
Μόλις έχετε ικανότητα SETUID μπορείτε να μεταβείτε στην ενότητα της για να δείτε πώς να κλιμακώσετε τα δικαιώματα.
Παράδειγμα με περιβάλλον (Docker breakout)
Από προεπιλογή, η ικανότητα CAP_SETFCAP δίνεται στη διαδικασία μέσα στο κοντέινερ στο Docker. Μπορείτε να το ελέγξετε κάνοντας κάτι όπως:
Αυτή η ικανότητα επιτρέπει να δώσουμε οποιαδήποτε άλλη ικανότητα σε δυαδικά αρχεία, οπότε θα μπορούσαμε να σκεφτούμε για διαφυγή από το κοντέινερ καταχρώντας οποιαδήποτε από τις άλλες ικανότητες που αναφέρονται σε αυτή τη σελίδα. Ωστόσο, αν προσπαθήσετε να δώσετε για παράδειγμα τις ικανότητες CAP_SYS_ADMIN και CAP_SYS_PTRACE στο δυαδικό αρχείο gdb, θα διαπιστώσετε ότι μπορείτε να τις δώσετε, αλλά το δυαδικό αρχείο δεν θα μπορεί να εκτελεστεί μετά από αυτό:
From the docs: Permitted: Αυτό είναι ένα περιοριστικό υπερσύνολο για τις αποτελεσματικές ικανότητες που μπορεί να αναλάβει το νήμα. Είναι επίσης ένα περιοριστικό υπερσύνολο για τις ικανότητες που μπορεί να προστεθούν στο κληρονομούμενο σύνολο από ένα νήμα που δεν έχει την ικανότητα CAP_SETPCAP στο αποτελεσματικό του σύνολο. Φαίνεται ότι οι επιτρεπόμενες ικανότητες περιορίζουν αυτές που μπορούν να χρησιμοποιηθούν. Ωστόσο, το Docker παρέχει επίσης την CAP_SETPCAP από προεπιλογή, οπότε μπορεί να είστε σε θέση να ορίσετε νέες ικανότητες μέσα στις κληρονομούμενες. Ωστόσο, στην τεκμηρίωση αυτής της ικανότητας: CAP_SETPCAP : […] προσθέτει οποιαδήποτε ικανότητα από το περιοριστικό σύνολο του καλούντος νήματος στο κληρονομούμενο σύνολό του. Φαίνεται ότι μπορούμε να προσθέσουμε μόνο στο κληρονομούμενο σύνολο ικανότητες από το περιοριστικό σύνολο. Αυτό σημαίνει ότι δεν μπορούμε να βάλουμε νέες ικανότητες όπως CAP_SYS_ADMIN ή CAP_SYS_PTRACE στο κληρονομούμενο σύνολο για να κλιμακώσουμε τα δικαιώματα.
CAP_SYS_RAWIO
CAP_SYS_RAWIO παρέχει μια σειρά από ευαίσθητες λειτουργίες, συμπεριλαμβανομένης της πρόσβασης σε /dev/mem
, /dev/kmem
ή /proc/kcore
, τροποποίηση του mmap_min_addr
, πρόσβαση στις κλήσεις συστήματος ioperm(2)
και iopl(2)
, και διάφορες εντολές δίσκου. Η FIBMAP ioctl(2)
είναι επίσης ενεργοποιημένη μέσω αυτής της ικανότητας, η οποία έχει προκαλέσει προβλήματα στο παρελθόν. Σύμφωνα με τη σελίδα man, αυτό επιτρέπει επίσης στον κάτοχο να περιγραφικά εκτελεί μια σειρά από ειδικές για τη συσκευή λειτουργίες σε άλλες συσκευές
.
Αυτό μπορεί να είναι χρήσιμο για κλιμάκωση δικαιωμάτων και breakout του Docker.
CAP_KILL
Αυτό σημαίνει ότι είναι δυνατό να τερματίσετε οποιαδήποτε διαδικασία.
Παράδειγμα με δυαδικό αρχείο
Ας υποθέσουμε ότι το python
δυαδικό αρχείο έχει αυτή την ικανότητα. Αν μπορούσατε επίσης να τροποποιήσετε κάποια υπηρεσία ή ρύθμιση υποδοχής (ή οποιοδήποτε αρχείο ρύθμισης σχετικό με μια υπηρεσία), θα μπορούσατε να το backdoor, και στη συνέχεια να τερματίσετε τη διαδικασία που σχετίζεται με αυτή την υπηρεσία και να περιμένετε να εκτελεστεί το νέο αρχείο ρύθμισης με το backdoor σας.
Privesc με kill
Αν έχετε δυνατότητες kill και υπάρχει ένα πρόγραμμα node που τρέχει ως root (ή ως διαφορετικός χρήστης) μπορείτε πιθανώς να στείλετε του το σήμα SIGUSR1 και να το κάνετε να ανοίξει τον debugger του node όπου μπορείτε να συνδεθείτε.
![](https://book.hacktricks.xyz/~gitbook/image?url=https%3A%2F%2Ffiles.gitbook.com%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F-L_2uGJGU7AVNRcqRvEi%252Fuploads%252FelPCTwoecVdnsfjxCZtN%252Fimage.png%3Falt%3Dmedia%26token%3D9ee4ff3e-92dc-471c-abfe-1c25e446a6ed&width=768&dpr=4&quality=100&sign=9c8fe74f&sv=1)
RootedCON είναι το πιο σχετικό γεγονός κυβερνοασφάλειας στην Ισπανία και ένα από τα πιο σημαντικά στην Ευρώπη. Με αποστολή την προώθηση της τεχνικής γνώσης, αυτό το συνέδριο είναι ένα καυτό σημείο συνάντησης για επαγγελματίες της τεχνολογίας και της κυβερνοασφάλειας σε κάθε πειθαρχία.
CAP_NET_BIND_SERVICE
Αυτό σημαίνει ότι είναι δυνατό να ακούσετε σε οποιαδήποτε θύρα (ακόμα και σε προνομιούχες). Δεν μπορείτε να αναβαθμίσετε τα προνόμια άμεσα με αυτή την ικανότητα.
Παράδειγμα με δυαδικό
Αν python
έχει αυτή την ικανότητα, θα μπορεί να ακούει σε οποιαδήποτε θύρα και ακόμα να συνδέεται από αυτή σε οποιαδήποτε άλλη θύρα (ορισμένες υπηρεσίες απαιτούν συνδέσεις από συγκεκριμένες προνομιούχες θύρες)
CAP_NET_RAW
CAP_NET_RAW ικανότητα επιτρέπει στις διαδικασίες να δημιουργούν RAW και PACKET sockets, επιτρέποντάς τους να παράγουν και να στέλνουν αυθαίρετα πακέτα δικτύου. Αυτό μπορεί να οδηγήσει σε κινδύνους ασφαλείας σε κοντεϊνεροποιημένα περιβάλλοντα, όπως η παραχάραξη πακέτων, η έγχυση κυκλοφορίας και η παράκαμψη ελέγχων πρόσβασης δικτύου. Κακόβουλοι παράγοντες θα μπορούσαν να εκμεταλλευτούν αυτό για να παρεμβαίνουν στη δρομολόγηση κοντεϊνερών ή να διακυβεύσουν την ασφάλεια του δικτύου του κεντρικού υπολογιστή, ειδικά χωρίς επαρκείς προστασίες τείχους προστασίας. Επιπλέον, CAP_NET_RAW είναι κρίσιμη για τα προνομιούχα κοντέινερ ώστε να υποστηρίζουν λειτουργίες όπως το ping μέσω RAW ICMP αιτημάτων.
Αυτό σημαίνει ότι είναι δυνατό να καταγράψετε την κυκλοφορία. Δεν μπορείτε να αναβαθμίσετε τα προνόμια άμεσα με αυτή την ικανότητα.
Παράδειγμα με δυαδικό αρχείο
Αν το δυαδικό αρχείο tcpdump
έχει αυτή την ικανότητα, θα μπορείτε να το χρησιμοποιήσετε για να καταγράψετε πληροφορίες δικτύου.
Σημειώστε ότι αν το περιβάλλον παρέχει αυτή την ικανότητα, μπορείτε επίσης να χρησιμοποιήσετε tcpdump
για να καταγράψετε την κίνηση.
Παράδειγμα με δυαδικό 2
Το παρακάτω παράδειγμα είναι python2
κώδικας που μπορεί να είναι χρήσιμος για να παγιδεύσει την κίνηση της διεπαφής "lo" (localhost). Ο κώδικας προέρχεται από το εργαστήριο "The Basics: CAP-NET_BIND + NET_RAW" από https://attackdefense.pentesteracademy.com/
CAP_NET_ADMIN + CAP_NET_RAW
CAP_NET_ADMIN ικανότητα δίνει στον κάτοχο τη δύναμη να αλλάξει τις ρυθμίσεις δικτύου, συμπεριλαμβανομένων των ρυθμίσεων τείχους προστασίας, των πινάκων δρομολόγησης, των δικαιωμάτων υποδοχών και των ρυθμίσεων διεπαφών δικτύου εντός των εκτεθειμένων ονομάτων χώρου δικτύου. Επίσης, επιτρέπει την ενεργοποίηση του promiscuous mode στις διεπαφές δικτύου, επιτρέποντας την ανίχνευση πακέτων σε διάφορους χώρους ονομάτων.
Παράδειγμα με δυαδικό
Ας υποθέσουμε ότι το python binary έχει αυτές τις ικανότητες.
CAP_LINUX_IMMUTABLE
Αυτό σημαίνει ότι είναι δυνατή η τροποποίηση των χαρακτηριστικών inode. Δεν μπορείτε να αναβαθμίσετε τα δικαιώματα άμεσα με αυτή την ικανότητα.
Παράδειγμα με δυαδικό αρχείο
Αν διαπιστώσετε ότι ένα αρχείο είναι αμετάβλητο και η python έχει αυτή την ικανότητα, μπορείτε να αφαιρέσετε το χαρακτηριστικό αμεταβλητότητας και να κάνετε το αρχείο τροποποιήσιμο:
Σημειώστε ότι συνήθως αυτό το αμετάβλητο χαρακτηριστικό ρυθμίζεται και αφαιρείται χρησιμοποιώντας:
CAP_SYS_CHROOT
CAP_SYS_CHROOT επιτρέπει την εκτέλεση της κλήσης συστήματος chroot(2)
, η οποία μπορεί δυνητικά να επιτρέψει την έξοδο από περιβάλλοντα chroot(2)
μέσω γνωστών ευπαθειών:
CAP_SYS_BOOT
CAP_SYS_BOOT όχι μόνο επιτρέπει την εκτέλεση της κλήσης συστήματος reboot(2)
για επανεκκινήσεις συστήματος, συμπεριλαμβανομένων συγκεκριμένων εντολών όπως LINUX_REBOOT_CMD_RESTART2
προσαρμοσμένων για ορισμένες πλατφόρμες υλικού, αλλά επιτρέπει επίσης τη χρήση του kexec_load(2)
και, από το Linux 3.17 και μετά, του kexec_file_load(2)
για τη φόρτωση νέων ή υπογεγραμμένων πυρήνων σφαλμάτων αντίστοιχα.
CAP_SYSLOG
CAP_SYSLOG διαχωρίστηκε από το ευρύτερο CAP_SYS_ADMIN στο Linux 2.6.37, παρέχοντας συγκεκριμένα τη δυνατότητα χρήσης της κλήσης syslog(2)
. Αυτή η ικανότητα επιτρέπει την προβολή διευθύνσεων πυρήνα μέσω του /proc
και παρόμοιων διεπαφών όταν η ρύθμιση kptr_restrict
είναι στο 1, η οποία ελέγχει την έκθεση διευθύνσεων πυρήνα. Από το Linux 2.6.39, η προεπιλογή για το kptr_restrict
είναι 0, που σημαίνει ότι οι διευθύνσεις πυρήνα είναι εκτεθειμένες, αν και πολλές διανομές το ρυθμίζουν σε 1 (κρύβουν διευθύνσεις εκτός από τον uid 0) ή 2 (πάντα κρύβουν διευθύνσεις) για λόγους ασφαλείας.
Επιπλέον, CAP_SYSLOG επιτρέπει την πρόσβαση στην έξοδο dmesg
όταν το dmesg_restrict
είναι 1. Παρά αυτές τις αλλαγές, το CAP_SYS_ADMIN διατηρεί τη δυνατότητα εκτέλεσης λειτουργιών syslog
λόγω ιστορικών προηγούμενων.
CAP_MKNOD
CAP_MKNOD επεκτείνει τη λειτουργικότητα της κλήσης συστήματος mknod
πέρα από τη δημιουργία κανονικών αρχείων, FIFOs (ονομασμένοι σωλήνες) ή υποδοχών τομέα UNIX. Επιτρέπει συγκεκριμένα τη δημιουργία ειδικών αρχείων, τα οποία περιλαμβάνουν:
S_IFCHR: Ειδικά αρχεία χαρακτήρων, τα οποία είναι συσκευές όπως τερματικά.
S_IFBLK: Ειδικά αρχεία μπλοκ, τα οποία είναι συσκευές όπως δίσκοι.
Αυτή η ικανότητα είναι απαραίτητη για διαδικασίες που απαιτούν τη δυνατότητα δημιουργίας αρχείων συσκευών, διευκολύνοντας την άμεση αλληλεπίδραση με το υλικό μέσω χαρακτήρων ή μπλοκ συσκευών.
Είναι μια προεπιλεγμένη ικανότητα docker (https://github.com/moby/moby/blob/master/oci/caps/defaults.go#L6-L19).
Αυτή η ικανότητα επιτρέπει την εκτέλεση αναβάθμισης δικαιωμάτων (μέσω πλήρους ανάγνωσης δίσκου) στον οικοδεσπότη, υπό αυτές τις προϋποθέσεις:
Έχετε αρχική πρόσβαση στον οικοδεσπότη (Χωρίς δικαιώματα).
Έχετε αρχική πρόσβαση στο κοντέινερ (Με δικαιώματα (EUID 0), και αποτελεσματικό
CAP_MKNOD
).Ο οικοδεσπότης και το κοντέινερ θα πρέπει να μοιράζονται το ίδιο namespace χρηστών.
Βήματα για τη Δημιουργία και Πρόσβαση σε Συσκευή Μπλοκ σε Ένα Κοντέινερ:
Στον Οικοδεσπότη ως Κανονικός Χρήστης:
Προσδιορίστε το τρέχον αναγνωριστικό χρήστη σας με
id
, π.χ.,uid=1000(standarduser)
.Προσδιορίστε τη στοχευμένη συσκευή, για παράδειγμα,
/dev/sdb
.
Μέσα στο Κοντέινερ ως
root
:
Επιστροφή στον Κεντρικό Υπολογιστή:
Αυτή η προσέγγιση επιτρέπει στον τυπικό χρήστη να έχει πρόσβαση και ενδεχομένως να διαβάσει δεδομένα από το /dev/sdb
μέσω του κοντέινερ, εκμεταλλευόμενος τα κοινά namespaces χρηστών και τις άδειες που έχουν οριστεί στη συσκευή.
CAP_SETPCAP
CAP_SETPCAP επιτρέπει σε μια διαδικασία να αλλάξει τα σύνολα ικανοτήτων μιας άλλης διαδικασίας, επιτρέποντας την προσθήκη ή την αφαίρεση ικανοτήτων από τα αποτελεσματικά, κληρονομούμενα και επιτρεπόμενα σύνολα. Ωστόσο, μια διαδικασία μπορεί να τροποποιήσει μόνο τις ικανότητες που κατέχει στο δικό της επιτρεπόμενο σύνολο, διασφαλίζοντας ότι δεν μπορεί να ανυψώσει τα προνόμια μιας άλλης διαδικασίας πέρα από το δικό της. Οι πρόσφατες ενημερώσεις του πυρήνα έχουν σφίξει αυτούς τους κανόνες, περιορίζοντας το CAP_SETPCAP
ώστε να μειώνει μόνο τις ικανότητες εντός του δικού του ή των επιτρεπόμενων συνόλων των απογόνων του, με στόχο τη μείωση των κινδύνων ασφαλείας. Η χρήση απαιτεί να έχετε το CAP_SETPCAP
στο αποτελεσματικό σύνολο και τις στοχευμένες ικανότητες στο επιτρεπόμενο σύνολο, χρησιμοποιώντας το capset()
για τροποποιήσεις. Αυτό συνοψίζει τη βασική λειτουργία και τους περιορισμούς του CAP_SETPCAP
, επισημαίνοντας τον ρόλο του στη διαχείριση προνομίων και την ενίσχυση της ασφάλειας.
CAP_SETPCAP
είναι μια ικανότητα του Linux που επιτρέπει σε μια διαδικασία να τροποποιήσει τα σύνολα ικανοτήτων μιας άλλης διαδικασίας. Παρέχει τη δυνατότητα προσθήκης ή αφαίρεσης ικανοτήτων από τα αποτελεσματικά, κληρονομούμενα και επιτρεπόμενα σύνολα ικανοτήτων άλλων διαδικασιών. Ωστόσο, υπάρχουν ορισμένοι περιορισμοί σχετικά με το πώς μπορεί να χρησιμοποιηθεί αυτή η ικανότητα.
Μια διαδικασία με CAP_SETPCAP
μπορεί να χορηγήσει ή να αφαιρέσει μόνο ικανότητες που βρίσκονται στο δικό της επιτρεπόμενο σύνολο ικανοτήτων. Με άλλα λόγια, μια διαδικασία δεν μπορεί να χορηγήσει μια ικανότητα σε μια άλλη διαδικασία αν δεν έχει αυτή την ικανότητα η ίδια. Αυτός ο περιορισμός αποτρέπει μια διαδικασία από το να ανυψώσει τα προνόμια μιας άλλης διαδικασίας πέρα από το δικό της επίπεδο προνομίων.
Επιπλέον, σε πρόσφατες εκδόσεις του πυρήνα, η ικανότητα CAP_SETPCAP
έχει περιοριστεί περαιτέρω. Δεν επιτρέπει πλέον σε μια διαδικασία να τροποποιεί αυθαίρετα τα σύνολα ικανοτήτων άλλων διαδικασιών. Αντίθετα, επιτρέπει μόνο σε μια διαδικασία να μειώσει τις ικανότητες στο δικό της επιτρεπόμενο σύνολο ικανοτήτων ή στο επιτρεπόμενο σύνολο ικανοτήτων των απογόνων της. Αυτή η αλλαγή εισήχθη για να μειώσει τους πιθανούς κινδύνους ασφαλείας που σχετίζονται με την ικανότητα.
Για να χρησιμοποιήσετε το CAP_SETPCAP
αποτελεσματικά, πρέπει να έχετε την ικανότητα στο αποτελεσματικό σας σύνολο ικανοτήτων και τις στοχευμένες ικανότητες στο επιτρεπόμενο σύνολο ικανοτήτων σας. Μπορείτε στη συνέχεια να χρησιμοποιήσετε την κλήση συστήματος capset()
για να τροποποιήσετε τα σύνολα ικανοτήτων άλλων διαδικασιών.
Συνοψίζοντας, το CAP_SETPCAP
επιτρέπει σε μια διαδικασία να τροποποιήσει τα σύνολα ικανοτήτων άλλων διαδικασιών, αλλά δεν μπορεί να χορηγήσει ικανότητες που δεν έχει η ίδια. Επιπλέον, λόγω ανησυχιών ασφαλείας, η λειτουργικότητά του έχει περιοριστεί σε πρόσφατες εκδόσεις του πυρήνα ώστε να επιτρέπει μόνο τη μείωση των ικανοτήτων στο δικό του επιτρεπόμενο σύνολο ικανοτήτων ή στα επιτρεπόμενα σύνολα ικανοτήτων των απογόνων του.
Αναφορές
Οι περισσότερες από αυτές τις παραδείγματα προήλθαν από κάποια εργαστήρια του https://attackdefense.pentesteracademy.com/, οπότε αν θέλετε να εξασκηθείτε σε αυτές τις τεχνικές privesc, προτείνω αυτά τα εργαστήρια.
Άλλες αναφορές:
![](https://book.hacktricks.xyz/~gitbook/image?url=https%3A%2F%2Ffiles.gitbook.com%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F-L_2uGJGU7AVNRcqRvEi%252Fuploads%252FelPCTwoecVdnsfjxCZtN%252Fimage.png%3Falt%3Dmedia%26token%3D9ee4ff3e-92dc-471c-abfe-1c25e446a6ed&width=768&dpr=4&quality=100&sign=9c8fe74f&sv=1)
RootedCON είναι η πιο σχετική εκδήλωση κυβερνοασφάλειας στην Ισπανία και μία από τις πιο σημαντικές στην Ευρώπη. Με αποστολή την προώθηση της τεχνικής γνώσης, αυτό το συνέδριο είναι ένα καυτό σημείο συνάντησης για επαγγελματίες τεχνολογίας και κυβερνοασφάλειας σε κάθε τομέα.
Μάθετε & εξασκηθείτε στο Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο Hacking GCP:
HackTricks Training GCP Red Team Expert (GRTE)
Last updated