GCP - Network Docker Escape

Μάθετε το χάκινγκ του AWS από το μηδέν μέχρι τον ήρωα με το htARTE (HackTricks AWS Red Team Expert)!

Άλλοι τρόποι υποστήριξης του HackTricks:

Αρχική Κατάσταση

Σε και τα δύο writeups όπου αναφέρεται αυτή η τεχνική, οι επιτιθέμενοι κατάφεραν να αποκτήσουν πρόσβαση root μέσα σε ένα Docker container που διαχειρίζεται η GCP με πρόσβαση στο δίκτυο του οικοδεσπότη (και τις δυνατότητες CAP_NET_ADMIN και CAP_NET_RAW).

Επεξήγηση Επίθεσης

Σε ένα παράδειγμα υπολογιστικής μονάδας της Google, η κανονική επιθεώρηση της κίνησης του δικτύου αποκαλύπτει πολλές απλές αιτήσεις HTTP προς την μονάδα μεταδεδομένων στη διεύθυνση 169.254.169.254. Ο Google Guest Agent, ένα ανοιχτού κώδικα υπηρεσία, κάνει συχνά τέτοιες αιτήσεις.

Αυτός ο πράκτορας έχει σχεδιαστεί για να παρακολουθεί τις αλλαγές στα μεταδεδομένα. Ειδικότερα, τα μεταδεδομένα περιλαμβάνουν ένα πεδίο για δημόσια κλειδιά SSH. Όταν προστίθεται ένα νέο δημόσιο κλειδί SSH στα μεταδεδομένα, ο πράκτορας εξουσιοδοτεί αυτόματα το κλειδί στο αρχείο .authorized_key. Επίσης, μπορεί να δημιουργήσει ένα νέο χρήστη και να τον προσθέσει στους sudoers αν χρειαστεί.

Ο πράκτορας παρακολουθεί τις αλλαγές αποστέλλοντας μια αίτηση για να ανακτήσει όλες τις τιμές των μεταδεδομένων αναδρομικά (GET /computeMetadata/v1/?recursive=true). Αυτή η αίτηση έχει σχεδιαστεί έτσι ώστε ο διακομιστής μεταδεδομένων να στείλει απάντηση μόνο εάν υπάρχει οποιαδήποτε αλλαγή στα μεταδεδομένα από την τελευταία ανάκτηση, που αναγνωρίζεται από ένα Etag (wait_for_change=true&last_etag=). Επιπλέον, περιλαμβάνεται ένας παράμετρος timeout (timeout_sec=). Εάν δεν υπάρξει αλλαγή εντός του καθορισμένου timeout, ο διακομιστής απαντά με τις μη αλλαγμένες τιμές.

Αυτή η διαδικασία επιτρέπει στην IMDS (Instance Metadata Service) να απαντήσει μετά από 60 δευτερόλεπτα εάν δεν έχει γίνει καμία αλλαγή στις ρυθμίσεις, δημιουργώντας ένα δυνητικό παράθυρο για την εισαγωγή μιας πλαστής απάντησης ρυθμίσεων στον πράκτορα ξενιστή.

Ένας επιτιθέμενος θα μπορούσε να εκμεταλλευτεί αυτό εκτελώντας μια επίθεση Man-in-the-Middle (MitM), παραπλανώντας την απάντηση από τον διακομιστή IMDS και εισάγοντας ένα νέο δημόσιο κλειδί. Αυτό θα μπορούσε να επιτρέψει μη εξουσιοδοτημένη πρόσβαση SSH στον οικοδεσπότη.

Τεχνική Διαφυγής

Ενώ η ARP spoofing είναι αναποτελεσματική στα δίκτυα της Google Compute Engine, μια τροποποιημένη έκδοση του rshijack που αναπτύχθηκε από τον Ezequiel μπορεί να χρησιμοποιηθεί για την εισαγωγή πακέτων στην επικοινωνία για να εισαχθεί ο χρήστης SSH.

Αυτή η έκδοση του rshijack επιτρέπει την εισαγωγή των αριθμών ACK και SEQ ως παραμέτρους γραμμής εντολών, διευκολύνοντας την παραπλάνηση μιας απάντησης πριν από την πραγματική απάντηση του διακομιστή Metadata. Επιπλέον, χρησιμοποιείται ένα μικρό Shell script για να επιστρέψει ένα ειδικά διαμορφωμένο φορτίο. Αυτό το φορτίο ενεργοποιεί τον Google Guest Agent να **δημιουργήσει έναν

tcpdump -S -i eth0 'host 169.254.169.254 and port 80' &

Αναζητήστε μια γραμμή παρόμοια με:

<TIME> IP <LOCAL_IP>.<PORT> > 169.254.169.254.80: Flags [P.], seq <NUM>:<TARGET_ACK>, ack <TARGET_SEQ>, win <NUM>, length <NUM>: HTTP: GET /computeMetadata/v1/?timeout_sec=<SECONDS>&last_etag=<ETAG>&alt=json&recursive=True&wait_for_change=True HTTP/1.1
  1. Αποστολή των ψεύτικων μεταδεδομένων με το σωστό ETAG στο rshijack:

fakeData.sh <ETAG> | rshijack -q eth0 169.254.169.254:80 <LOCAL_IP>:<PORT> <TARGET_SEQ> <TARGET_ACK>; ssh -i id_rsa -o StrictHostKeyChecking=no wouter@localhost

Αυτό το βήμα εξουσιοδοτεί το δημόσιο κλειδί, επιτρέποντας τη σύνδεση SSH με το αντίστοιχο ιδιωτικό κλειδί.

Αναφορές

Μάθετε το hacking στο AWS από το μηδέν μέχρι τον ήρωα με το htARTE (HackTricks AWS Red Team Expert)!

Άλλοι τρόποι για να υποστηρίξετε το HackTricks:

Last updated