hacktricks/src/linux-hardening/privilege-escalation/docker-security/abusing-docker-socket-for-privilege-escalation.md

5.3 KiB
Raw Blame History

Κατάχρηση του Docker Socket για Escalation Privileges

{{#include ../../../banners/hacktricks-training.md}}

Υπάρχουν περιπτώσεις όπου έχετε πρόσβαση στο docker socket και θέλετε να το χρησιμοποιήσετε για να ανεβάσετε δικαιώματα. Ορισμένες ενέργειες μπορεί να είναι πολύ ύποπτες και ίσως θελήσετε να τις αποφύγετε, οπότε εδώ μπορείτε να βρείτε διάφορες σημαίες που μπορεί να είναι χρήσιμες για την ανύψωση δικαιωμάτων:

Μέσω mount

Μπορείτε να mount διάφορα μέρη του filesystem σε ένα κοντέινερ που τρέχει ως root και να τα πρόσβαση.
Μπορείτε επίσης να καταχραστείτε ένα mount για να ανεβάσετε δικαιώματα μέσα στο κοντέινερ.

  • -v /:/host -> Mount το filesystem του host στο κοντέινερ ώστε να μπορείτε να διαβάσετε το filesystem του host.
  • Αν θέλετε να νιώσετε ότι είστε στον host αλλά να είστε στο κοντέινερ, μπορείτε να απενεργοποιήσετε άλλους μηχανισμούς άμυνας χρησιμοποιώντας σημαίες όπως:
  • --privileged
  • --cap-add=ALL
  • --security-opt apparmor=unconfined
  • --security-opt seccomp=unconfined
  • -security-opt label:disable
  • --pid=host
  • --userns=host
  • --uts=host
  • --cgroupns=host
  • **--device=/dev/sda1 --cap-add=SYS_ADMIN --security-opt apparmor=unconfined ** -> Αυτό είναι παρόμοιο με την προηγούμενη μέθοδο, αλλά εδώ mount το δίσκο της συσκευής. Στη συνέχεια, μέσα στο κοντέινερ τρέξτε mount /dev/sda1 /mnt και μπορείτε να πρόσβαση στο filesystem του host στο /mnt
  • Τρέξτε fdisk -l στον host για να βρείτε τη συσκευή </dev/sda1> για να την mount
  • -v /tmp:/host -> Αν για κάποιο λόγο μπορείτε μόνο να mount κάποια κατάλογο από τον host και έχετε πρόσβαση μέσα στον host. Mount το και δημιουργήστε ένα /bin/bash με suid στον mounted κατάλογο ώστε να μπορείτε να το εκτελέσετε από τον host και να ανεβάσετε σε root.

Note

Σημειώστε ότι ίσως δεν μπορείτε να mount τον φάκελο /tmp αλλά μπορείτε να mount έναν διαφορετικό εγγράψιμο φάκελο. Μπορείτε να βρείτε εγγράψιμους καταλόγους χρησιμοποιώντας: find / -writable -type d 2>/dev/null

Σημειώστε ότι δεν υποστηρίζουν όλοι οι κατάλογοι σε μια μηχανή linux το suid bit! Για να ελέγξετε ποιες καταλόγους υποστηρίζουν το suid bit, τρέξτε mount | grep -v "nosuid" Για παράδειγμα, συνήθως οι /dev/shm, /run, /proc, /sys/fs/cgroup και /var/lib/lxcfs δεν υποστηρίζουν το suid bit.

Σημειώστε επίσης ότι αν μπορείτε να mount /etc ή οποιονδήποτε άλλο φάκελο που περιέχει αρχεία ρυθμίσεων, μπορείτε να τα αλλάξετε από το docker κοντέινερ ως root προκειμένου να τα καταχραστείτε στον host και να ανεβάσετε δικαιώματα (ίσως τροποποιώντας το /etc/shadow)

Διαφυγή από το κοντέινερ

Curl

Σε αυτή τη σελίδα έχουμε συζητήσει τρόπους για να ανεβάσετε δικαιώματα χρησιμοποιώντας σημαίες docker, μπορείτε να βρείτε τρόπους να καταχραστείτε αυτές τις μεθόδους χρησιμοποιώντας την εντολή curl στη σελίδα:

{{#include ../../../banners/hacktricks-training.md}}