GCP - Storage Enum

Tip

Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Υποστηρίξτε το HackTricks

Storage

Η αποθήκευση Google Cloud Platform (GCP) είναι μια λύση αποθήκευσης βασισμένη στο cloud που παρέχει εξαιρετικά ανθεκτική και διαθέσιμη αποθήκευση αντικειμένων για μη δομημένα δεδομένα. Προσφέρει διάφορες κατηγορίες αποθήκευσης με βάση την απόδοση, τη διαθεσιμότητα και το κόστος, συμπεριλαμβανομένων των Standard, Nearline, Coldline και Archive. Η αποθήκευση GCP παρέχει επίσης προηγμένα χαρακτηριστικά όπως πολιτικές κύκλου ζωής, εκδόσεις και έλεγχο πρόσβασης για τη διαχείριση και την ασφάλεια των δεδομένων αποτελεσματικά.

Ο κάδος μπορεί να αποθηκευτεί σε μια περιοχή, σε 2 περιοχές ή πολλαπλές περιοχές (προεπιλογή).

Storage Types

  • Standard Storage: Αυτή είναι η προεπιλεγμένη επιλογή αποθήκευσης που προσφέρει υψηλή απόδοση, χαμηλή καθυστέρηση πρόσβασης σε συχνά προσπελάσιμα δεδομένα. Είναι κατάλληλη για ένα ευρύ φάσμα περιπτώσεων χρήσης, συμπεριλαμβανομένης της εξυπηρέτησης περιεχομένου ιστοσελίδων, της ροής πολυμέσων και της φιλοξενίας αγωγών ανάλυσης δεδομένων.
  • Nearline Storage: Αυτή η κατηγορία αποθήκευσης προσφέρει χαμηλότερα κόστη αποθήκευσης και ελαφρώς υψηλότερα κόστη πρόσβασης από την Standard Storage. Είναι βελτιστοποιημένη για σπάνια προσπελάσιμα δεδομένα, με ελάχιστη διάρκεια αποθήκευσης 30 ημερών. Είναι ιδανική για σκοπούς αντιγράφων ασφαλείας και αρχειοθέτησης.
  • Coldline Storage: Αυτή η κατηγορία αποθήκευσης είναι βελτιστοποιημένη για μακροχρόνια αποθήκευση σπάνια προσπελάσιμων δεδομένων, με ελάχιστη διάρκεια αποθήκευσης 90 ημερών. Προσφέρει χαμηλότερα κόστη αποθήκευσης από την Nearline Storage, αλλά με υψηλότερα κόστη πρόσβασης.
  • Archive Storage: Αυτή η κατηγορία αποθήκευσης έχει σχεδιαστεί για κρύα δεδομένα που προσπελάζονται πολύ σπάνια, με ελάχιστη διάρκεια αποθήκευσης 365 ημερών. Προσφέρει τα χαμηλότερα κόστη αποθήκευσης από όλες τις επιλογές αποθήκευσης GCP αλλά με τα υψηλότερα κόστη πρόσβασης. Είναι κατάλληλη για μακροχρόνια διατήρηση δεδομένων που πρέπει να αποθηκευτούν για λόγους συμμόρφωσης ή κανονιστικούς λόγους.
  • Autoclass: Εάν δεν ξέρετε πόσο συχνά θα προσπελάσετε τα δεδομένα, μπορείτε να επιλέξετε το Autoclass και η GCP θα αλλάξει αυτόματα τον τύπο αποθήκευσης για εσάς για να ελαχιστοποιήσει τα κόστη.

Access Control

Από προεπιλογή συνιστάται να ελέγχετε την πρόσβαση μέσω IAM, αλλά είναι επίσης δυνατή η ενεργοποίηση της χρήσης ACLs.
Εάν επιλέξετε να χρησιμοποιήσετε μόνο το IAM (προεπιλογή) και περάσουν 90 ημέρες, δεν θα μπορείτε να ενεργοποιήσετε τα ACLs για τον κάδο.

Versioning

Είναι δυνατή η ενεργοποίηση της εκδοχής, αυτό θα αποθηκεύσει παλιές εκδόσεις του αρχείου μέσα στον κάδο. Είναι δυνατή η ρύθμιση του αριθμού εκδόσεων που θέλετε να διατηρήσετε και ακόμη και πόσο καιρό θέλετε να ζουν οι μη τρέχουσες εκδόσεις (παλιές εκδόσεις). Συνιστάται 7 ημέρες για τον τύπο Standard.

Τα μεταδεδομένα μιας μη τρέχουσας έκδοσης διατηρούνται. Επιπλέον, τα ACLs των μη τρέχουσων εκδόσεων διατηρούνται επίσης, οπότε οι παλαιότερες εκδόσεις μπορεί να έχουν διαφορετικά ACLs από την τρέχουσα έκδοση.

Μάθετε περισσότερα στα docs.

Retention Policy

Δηλώστε πόσο καιρό θέλετε να απαγορεύσετε τη διαγραφή αντικειμένων μέσα στον κάδο (πολύ χρήσιμο για συμμόρφωση τουλάχιστον).
Μόνο μία από τις πολιτικές εκδόσεων ή διατήρησης μπορεί να ενεργοποιηθεί ταυτόχρονα.

Encryption

Από προεπιλογή, τα αντικείμενα είναι κρυπτογραφημένα χρησιμοποιώντας κλειδιά που διαχειρίζεται η Google, αλλά μπορείτε επίσης να χρησιμοποιήσετε ένα κλειδί από το KMS.

Public Access

Είναι δυνατή η παροχή πρόσβασης σε εξωτερικούς χρήστες (συνδεδεμένους στο GCP ή όχι) στο περιεχόμενο των κάδων.
Από προεπιλογή, όταν δημιουργείται ένας κάδος, θα έχει απενεργοποιημένη την επιλογή δημόσιας έκθεσης του κάδου, αλλά με αρκετές άδειες μπορεί να αλλάξει.

Η μορφή ενός URL για την πρόσβαση σε έναν κάδο είναι https://storage.googleapis.com/<bucket-name> ή https://<bucket_name>.storage.googleapis.com (και οι δύο είναι έγκυρες).

HMAC Keys

Ένα κλειδί HMAC είναι ένας τύπος διαπιστευτηρίου και μπορεί να συσχετιστεί με έναν λογαριασμό υπηρεσίας ή έναν λογαριασμό χρήστη στο Cloud Storage. Χρησιμοποιείτε ένα κλειδί HMAC για να δημιουργήσετε υπογραφές που περιλαμβάνονται σε αιτήματα προς το Cloud Storage. Οι υπογραφές δείχνουν ότι ένα δοσμένο αίτημα είναι εξουσιοδοτημένο από τον χρήστη ή τον λογαριασμό υπηρεσίας.

Τα κλειδιά HMAC έχουν δύο κύρια μέρη, ένα access ID και ένα secret.

  • Access ID: Μια αλφαριθμητική συμβολοσειρά που συνδέεται με μια συγκεκριμένη υπηρεσία ή λογαριασμό χρήστη. Όταν συνδέεται με έναν λογαριασμό υπηρεσίας, η συμβολοσειρά έχει μήκος 61 χαρακτήρες, και όταν συνδέεται με έναν λογαριασμό χρήστη, η συμβολοσειρά έχει μήκος 24 χαρακτήρες. Ακολουθεί ένα παράδειγμα ενός access ID:

GOOGTS7C7FUP3AIRVJTE2BCDKINBTES3HC2GY5CBFJDCQ2SYHV6A6XXVTJFSA

  • Secret: Μια συμβολοσειρά 40 χαρακτήρων κωδικοποιημένη σε Base-64 που συνδέεται με ένα συγκεκριμένο access ID. Ένα μυστικό είναι ένα προκαθορισμένο κλειδί που γνωρίζετε μόνο εσείς και το Cloud Storage. Χρησιμοποιείτε το μυστικό σας για να δημιουργήσετε υπογραφές ως μέρος της διαδικασίας αυθεντικοποίησης. Ακολουθεί ένα παράδειγμα ενός μυστικού:

bGoa+V7g/yqDXvKRqq+JTFn4uQZbPiQJo4pf9RzJ

Τanto το access ID όσο και το secret προσδιορίζουν μοναδικά ένα κλειδί HMAC, αλλά το μυστικό είναι πολύ πιο ευαίσθητη πληροφορία, καθώς χρησιμοποιείται για δημιουργία υπογραφών.

Enumeration

# List all storage buckets in project
gsutil ls

# Get each bucket configuration (protections, CLs, times, configs...)
gsutil ls -L

# List contents of a specific bucket
gsutil ls gs://bucket-name/
gsutil ls -r gs://bucket-name/ # Recursive
gsutil ls -a gs://bucket-name/ # Get ALL versions of objects

# Cat the context of a file without copying it locally
gsutil cat 'gs://bucket-name/folder/object'
gsutil cat 'gs://bucket-name/folder/object#<num>' # cat specific version

# Copy an object from the bucket to your local storage for review
gsutil cp gs://bucket-name/folder/object ~/

# List using a raw OAuth token
## Useful because "CLOUDSDK_AUTH_ACCESS_TOKEN" and "gcloud config set auth/access_token_file" doesn't work with gsutil
curl -H "Authorization: Bearer $TOKEN" "https://storage.googleapis.com/storage/v1/b/<storage-name>/o"
# Download file content from bucket
curl -H "Authorization: Bearer $TOKEN" "https://storage.googleapis.com/storage/v1/b/supportstorage-58249/o/flag.txt?alt=media" --output -

# Enumerate HMAC keys
gsutil hmac list

# Get permissions
gcloud storage buckets get-iam-policy gs://bucket-name/
gcloud storage objects get-iam-policy gs://bucket-name/folder/object

Αν λάβετε ένα σφάλμα “permission denied” κατά την καταγραφή των buckets, μπορεί να έχετε ακόμα πρόσβαση στο περιεχόμενο. Έτσι, τώρα που γνωρίζετε τη σύμβαση ονοματοδοσίας των buckets, μπορείτε να δημιουργήσετε μια λίστα πιθανών ονομάτων και να προσπαθήσετε να τα αποκτήσετε:

for i in $(cat wordlist.txt); do gsutil ls -r gs://"$i"; done

Με δικαιώματα storage.objects.list και storage.objects.get, θα πρέπει να είστε σε θέση να καταγράψετε όλους τους φακέλους και τα αρχεία από τον κάδο προκειμένου να τα κατεβάσετε. Μπορείτε να το πετύχετε αυτό με αυτό το σενάριο Python:

import requests
import xml.etree.ElementTree as ET

def list_bucket_objects(bucket_name, prefix='', marker=None):
url = f"https://storage.googleapis.com/{bucket_name}?prefix={prefix}"
if marker:
url += f"&marker={marker}"
response = requests.get(url)
xml_data = response.content
root = ET.fromstring(xml_data)
ns = {'ns': 'http://doc.s3.amazonaws.com/2006-03-01'}
for contents in root.findall('.//ns:Contents', namespaces=ns):
key = contents.find('ns:Key', namespaces=ns).text
print(key)
next_marker = root.find('ns:NextMarker', namespaces=ns)
if next_marker is not None:
next_marker_value = next_marker.text
list_bucket_objects(bucket_name, prefix, next_marker_value)

list_bucket_objects('<storage-name>')

Ανάβαση Δικαιωμάτων

Στην παρακάτω σελίδα μπορείτε να δείτε πώς να καταχραστείτε τα δικαιώματα αποθήκευσης για να αναβαθμίσετε τα δικαιώματα:

GCP - Storage Privesc

Μη Αυθεντικοποιημένη Enum

GCP - Storage Unauthenticated Enum

Μετά την Εκμετάλλευση

GCP - Storage Post Exploitation

Επιμονή

GCP - Storage Persistence

Tip

Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Υποστηρίξτε το HackTricks