GCP - Storage Enum

Apprenez le piratage AWS de zéro à héros avec htARTE (Expert en équipe rouge AWS de HackTricks)!

Autres façons de soutenir HackTricks :

Stockage

Le Stockage de Google Cloud Platform (GCP) est une solution de stockage basée sur le cloud qui fournit un stockage d'objets hautement durable et disponible pour des données non structurées. Il offre diverses classes de stockage basées sur les performances, la disponibilité et le coût, notamment Standard, Nearline, Coldline et Archive. Le Stockage GCP propose également des fonctionnalités avancées telles que des politiques de cycle de vie, la versioning et le contrôle d'accès pour gérer et sécuriser efficacement les données.

Le bucket peut être stocké dans une région, dans 2 régions ou multi-région (par défaut).

Types de Stockage

  • Stockage Standard : Il s'agit de l'option de stockage par défaut qui offre un accès haute performance et faible latence aux données fréquemment consultées. Il convient à un large éventail de cas d'utilisation, notamment la diffusion de contenu de site Web, le streaming multimédia et l'hébergement de pipelines d'analyse de données.

  • Stockage Nearline : Cette classe de stockage offre des coûts de stockage inférieurs et des coûts d'accès légèrement plus élevés que le Stockage Standard. Il est optimisé pour les données consultées de manière peu fréquente, avec une durée de stockage minimale de 30 jours. Il est idéal pour les sauvegardes et les archives.

  • Stockage Coldline : Cette classe de stockage est optimisée pour le stockage à long terme de données consultées de manière peu fréquente, avec une durée de stockage minimale de 90 jours. Il offre des coûts de stockage inférieurs par rapport au Stockage Nearline, mais avec des coûts d'accès plus élevés.

  • Stockage Archive : Cette classe de stockage est conçue pour les données froides consultées très rarement, avec une durée de stockage minimale de 365 jours. Il offre les coûts de stockage les plus bas de toutes les options de stockage GCP mais avec les coûts d'accès les plus élevés. Il convient à la conservation à long terme de données devant être stockées pour des raisons de conformité ou réglementaires.

  • Autoclass : Si vous ne savez pas combien vous allez accéder aux données, vous pouvez sélectionner Autoclass et GCP changera automatiquement le type de stockage pour minimiser les coûts.

Contrôle d'Accès

Par défaut, il est recommandé de contrôler l'accès via IAM, mais il est également possible d'activer l'utilisation des ACL. Si vous choisissez d'utiliser uniquement IAM (par défaut) et que 90 jours se sont écoulés, vous ne pourrez pas activer les ACL pour le bucket.

Versioning

Il est possible d'activer la versioning, cela sauvegardera les anciennes versions du fichier à l'intérieur du bucket. Il est possible de configurer le nombre de versions que vous souhaitez conserver et même pendant combien de temps vous souhaitez que les versions non actuelles (anciennes versions) restent. Il est recommandé de 7 jours pour le type Standard.

Les métadonnées d'une version non actuelle sont conservées. De plus, les ACL des versions non actuelles sont également conservées, donc les anciennes versions peuvent avoir des ACL différentes de la version actuelle.

En savoir plus dans la documentation.

Politique de Rétention

Indiquez pendant combien de temps vous souhaitez interdire la suppression des objets à l'intérieur du bucket (très utile pour la conformité au moins). Seule l'une des versioning ou de la politique de rétention peut être activée à la fois.

Chiffrement

Par défaut, les objets sont chiffrés à l'aide de clés gérées par Google, mais vous pouvez également utiliser une clé de KMS.

Accès Public

Il est possible de donner aux utilisateurs externes (connectés à GCP ou non) accès au contenu des buckets. Par défaut, lorsqu'un bucket est créé, l'option d'exposer publiquement le bucket sera désactivée, mais avec les autorisations suffisantes, cela peut être modifié.

Le format d'une URL pour accéder à un bucket est https://storage.googleapis.com/<nom-du-bucket> ou https://<nom_du_bucket>.storage.googleapis.com (les deux sont valides).

Clés HMAC

Une clé HMAC est un type de certificat et peut être associée à un compte de service ou un compte utilisateur dans le Stockage Cloud. Vous utilisez une clé HMAC pour créer des signatures qui sont ensuite incluses dans les requêtes au Stockage Cloud. Les signatures montrent qu'une requête donnée est autorisée par l'utilisateur ou le compte de service.

Les clés HMAC ont deux éléments principaux, un identifiant d'accès et un secret.

  • Identifiant d'Accès : Une chaîne alphanumérique liée à un service spécifique ou un compte utilisateur. Lorsqu'elle est liée à un compte de service, la chaîne a une longueur de 61 caractères, et lorsqu'elle est liée à un compte utilisateur, la chaîne a une longueur de 24 caractères. Voici un exemple d'identifiant d'accès :

GOOGTS7C7FUP3AIRVJTE2BCDKINBTES3HC2GY5CBFJDCQ2SYHV6A6XXVTJFSA

  • Secret : Une chaîne encodée en Base-64 de 40 caractères qui est liée à un identifiant d'accès spécifique. Un secret est une clé prépartagée que vous et le Stockage Cloud connaissez. Vous utilisez votre secret pour créer des signatures dans le cadre du processus d'authentification. Voici un exemple de secret :

bGoa+V7g/yqDXvKRqq+JTFn4uQZbPiQJo4pf9RzJ

Tant l'identifiant d'accès que le secret identifient de manière unique une clé HMAC, mais le secret est une information beaucoup plus sensible, car il est utilisé pour créer des signatures.

Énumération

# 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

Si vous obtenez une erreur de permission refusée lors de l'énumération des buckets, vous pouvez toujours avoir accès au contenu. Maintenant que vous connaissez la convention de nommage des buckets, vous pouvez générer une liste de noms possibles et essayer d'y accéder :

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

Avec les autorisations storage.objects.list et storage.objects.get, vous devriez pouvoir énumérer tous les dossiers et fichiers du bucket afin de les télécharger. Vous pouvez y parvenir avec ce script 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>')

Élévation de privilèges

Sur la page suivante, vous pouvez vérifier comment abuser des autorisations de stockage pour escalader les privilèges:

pageGCP - Storage Privesc

Énumération non authentifiée

pageGCP - Storage Unauthenticated Enum

Post-exploitation

pageGCP - Storage Post Exploitation

Persistance

pageGCP - Storage Persistence
Apprenez le piratage AWS de zéro à héros avec htARTE (HackTricks AWS Red Team Expert)!

Autres façons de soutenir HackTricks:

Dernière mise à jour