GCP - Storage Enum

Support HackTricks

Storage

Google Cloud Platform (GCP) Storage ist eine cloudbasierte Speicherlösung, die hochgradig haltbaren und verfügbaren Objektspeicher für unstrukturierte Daten bietet. Es bietet verschiedene Speicherklassen basierend auf Leistung, Verfügbarkeit und Kosten, einschließlich Standard, Nearline, Coldline und Archive. GCP Storage bietet auch erweiterte Funktionen wie Lebenszyklusrichtlinien, Versionierung und Zugriffskontrolle, um Daten effektiv zu verwalten und zu sichern.

Der Bucket kann in einer Region, in 2 Regionen oder Multi-Region (Standard) gespeichert werden.

Storage Types

  • Standard Storage: Dies ist die Standard-Speicheroption, die hohe Leistung und niedrige Latenz für häufig abgerufene Daten bietet. Es eignet sich für eine Vielzahl von Anwendungsfällen, einschließlich der Bereitstellung von Website-Inhalten, Streaming-Medien und Hosting von Datenanalyse-Pipelines.

  • Nearline Storage: Diese Speicherklasse bietet niedrigere Speicherkosten und etwas höhere Zugriffskosten als Standard Storage. Sie ist für selten abgerufene Daten optimiert, mit einer Mindestspeicherdauer von 30 Tagen. Sie ist ideal für Backup- und Archivierungszwecke.

  • Coldline Storage: Diese Speicherklasse ist für langfristige Speicherung von selten abgerufenen Daten optimiert, mit einer Mindestspeicherdauer von 90 Tagen. Sie bietet niedrigere Speicherkosten als Nearline Storage, jedoch mit höheren Zugriffskosten.

  • Archive Storage: Diese Speicherklasse ist für kalte Daten konzipiert, die sehr selten abgerufen werden, mit einer Mindestspeicherdauer von 365 Tagen. Sie bietet die niedrigsten Speicherkosten aller GCP-Speicheroptionen, jedoch mit den höchsten Zugriffskosten. Sie eignet sich für die langfristige Aufbewahrung von Daten, die aus Compliance- oder regulatorischen Gründen gespeichert werden müssen.

  • Autoclass: Wenn Sie nicht wissen, wie oft Sie auf die Daten zugreifen werden, können Sie Autoclass auswählen, und GCP wird automatisch den Speichertyp für Sie ändern, um Kosten zu minimieren.

Access Control

Standardmäßig wird empfohlen, den Zugriff über IAM zu steuern, aber es ist auch möglich, die Verwendung von ACLs zu aktivieren. Wenn Sie sich entscheiden, nur IAM (Standard) zu verwenden und 90 Tage vergehen, können Sie ACLs für den Bucket nicht aktivieren.

Versioning

Es ist möglich, die Versionierung zu aktivieren, dies wird alte Versionen der Datei im Bucket speichern. Es ist möglich, die Anzahl der Versionen, die Sie behalten möchten, und sogar wie lange Sie nicht aktuelle Versionen (alte Versionen) aufbewahren möchten, zu konfigurieren. Empfohlen werden 7 Tage für den Standardtyp.

Die Metadaten einer nicht aktuellen Version werden aufbewahrt. Darüber hinaus werden ACLs von nicht aktuellen Versionen ebenfalls aufbewahrt, sodass ältere Versionen möglicherweise andere ACLs als die aktuelle Version haben.

Erfahren Sie mehr in den Docs.

Retention Policy

Geben Sie an, wie lange Sie die Löschung von Objekten im Bucket verbieten möchten (sehr nützlich für Compliance, mindestens). Nur eine von Versionierung oder Aufbewahrungsrichtlinie kann gleichzeitig aktiviert werden.

Encryption

Standardmäßig werden Objekte mit von Google verwalteten Schlüsseln verschlüsselt, aber Sie können auch einen Schlüssel von KMS verwenden.

Public Access

Es ist möglich, externen Benutzern (angemeldet bei GCP oder nicht) Zugriff auf den Inhalt von Buckets zu gewähren. Standardmäßig wird beim Erstellen eines Buckets die Option, den Bucket öffentlich zugänglich zu machen, deaktiviert, kann jedoch mit ausreichenden Berechtigungen geändert werden.

Das Format einer URL, um auf einen Bucket zuzugreifen, ist https://storage.googleapis.com/<bucket-name> oder https://<bucket_name>.storage.googleapis.com (beide sind gültig).

HMAC Keys

Ein HMAC-Schlüssel ist eine Art von Anmeldeinformationen und kann einem Dienstkonto oder einem Benutzerkonto in Cloud Storage zugeordnet werden. Sie verwenden einen HMAC-Schlüssel, um Signaturen zu erstellen, die dann in Anfragen an Cloud Storage enthalten sind. Signaturen zeigen, dass eine bestimmte Anfrage vom Benutzer oder Dienstkonto autorisiert ist.

HMAC-Schlüssel haben zwei Hauptbestandteile, eine Zugriffs-ID und ein Geheimnis.

  • Access ID: Eine alphanumerische Zeichenfolge, die mit einem bestimmten Dienst- oder Benutzerkonto verknüpft ist. Wenn sie mit einem Dienstkonto verknüpft ist, hat die Zeichenfolge eine Länge von 61 Zeichen, und wenn sie mit einem Benutzerkonto verknüpft ist, hat die Zeichenfolge eine Länge von 24 Zeichen. Folgendes zeigt ein Beispiel für eine Zugriffs-ID:

GOOGTS7C7FUP3AIRVJTE2BCDKINBTES3HC2GY5CBFJDCQ2SYHV6A6XXVTJFSA

  • Secret: Eine 40-Zeichen lange, Base-64-codierte Zeichenfolge, die mit einer bestimmten Zugriffs-ID verknüpft ist. Ein Geheimnis ist ein vorab geteilter Schlüssel, den nur Sie und Cloud Storage kennen. Sie verwenden Ihr Geheimnis, um Signaturen als Teil des Authentifizierungsprozesses zu erstellen. Folgendes zeigt ein Beispiel für ein Geheimnis:

bGoa+V7g/yqDXvKRqq+JTFn4uQZbPiQJo4pf9RzJ

Sowohl die Zugriffs-ID als auch das Geheimnis identifizieren eindeutig einen HMAC-Schlüssel, aber das Geheimnis ist viel sensiblere Informationen, da es verwendet wird, um Signaturen zu erstellen.

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

Wenn Sie einen Berechtigungsfehler beim Auflisten von Buckets erhalten, haben Sie möglicherweise dennoch Zugriff auf den Inhalt. Jetzt, da Sie über die Namenskonvention der Buckets Bescheid wissen, können Sie eine Liste möglicher Namen erstellen und versuchen, auf sie zuzugreifen:

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

Mit den Berechtigungen storage.objects.list und storage.objects.get sollten Sie in der Lage sein, alle Ordner und Dateien aus dem Bucket aufzulisten, um sie herunterzuladen. Sie können dies mit diesem Python-Skript erreichen:

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>')

Privilegieneskalation

In der folgenden Seite kannst du überprüfen, wie man Speicherberechtigungen missbrauchen kann, um Privilegien zu eskalieren:

GCP - Storage Privesc

Unauthentifizierte Enum

GCP - Storage Unauthenticated Enum

Post-Exploitation

GCP - Storage Post Exploitation

Persistenz

GCP - Storage Persistence
Unterstütze HackTricks

Last updated