GCP - Storage Enum

Impara l'hacking su AWS da zero a eroe con htARTE (Esperto Red Team di HackTricks su AWS)!

Altri modi per supportare HackTricks:

Storage

Google Cloud Platform (GCP) Storage è una soluzione di storage basata su cloud che fornisce un storage di oggetti altamente durevole e disponibile per dati non strutturati. Offre varie classi di storage basate su prestazioni, disponibilità e costo, tra cui Standard, Nearline, Coldline e Archive. GCP Storage fornisce anche funzionalità avanzate come policy di ciclo di vita, versioning e controllo degli accessi per gestire e proteggere i dati in modo efficace.

Il bucket può essere memorizzato in una regione, in 2 regioni o multi-regione (predefinito).

Tipi di Storage

  • Standard Storage: Questa è l'opzione di storage predefinita che offre un accesso ad alte prestazioni e a bassa latenza ai dati frequentemente accessibili. È adatto a una vasta gamma di casi d'uso, tra cui il servizio di contenuti web, lo streaming multimediale e l'hosting di pipeline di analisi dei dati.

  • Nearline Storage: Questa classe di storage offre costi di storage inferiori e costi di accesso leggermente più alti rispetto allo Standard Storage. È ottimizzato per dati raramente accessibili, con una durata minima di memorizzazione di 30 giorni. È ideale per scopi di backup e archiviazione.

  • Coldline Storage: Questa classe di storage è ottimizzata per lo storage a lungo termine di dati raramente accessibili, con una durata minima di memorizzazione di 90 giorni. Offre costi di storage inferiori rispetto al Nearline Storage, ma con costi di accesso più alti.

  • Archive Storage: Questa classe di storage è progettata per dati inattivi che vengono accessi molto raramente, con una durata minima di memorizzazione di 365 giorni. Offre i costi di storage più bassi di tutte le opzioni di storage di GCP ma con i costi di accesso più alti. È adatto per la conservazione a lungo termine di dati che devono essere archiviati per motivi di conformità o regolamentari.

  • Autoclass: Se non sai quanto accederai ai dati, puoi selezionare Autoclass e GCP cambierà automaticamente il tipo di storage per minimizzare i costi.

Controllo degli Accessi

Per impostazione predefinita è consigliato controllare l'accesso tramite IAM, ma è anche possibile abilitare l'uso delle ACL. Se si seleziona di utilizzare solo IAM (predefinito) e passano 90 giorni, non sarà possibile abilitare le ACL per il bucket.

Versioning

È possibile abilitare il versioning, questo salverà le vecchie versioni del file all'interno del bucket. È possibile configurare il numero di versioni da mantenere e anche per quanto tempo si desidera che le versioni non correnti (vecchie versioni) rimangano attive. È consigliato 7 giorni per il tipo Standard.

Il metadata di una versione non corrente viene mantenuto. Inoltre, le ACL delle versioni non correnti vengono mantenute, quindi le versioni più vecchie potrebbero avere ACL diverse dalla versione corrente.

Per saperne di più nella documentazione.

Politica di Conservazione

Indica per quanto tempo desideri vietare la cancellazione degli Oggetti all'interno del bucket (molto utile per la conformità almeno). Può essere abilitata solo una tra versioning o politica di conservazione alla volta.

Crittografia

Per impostazione predefinita gli oggetti sono criptati utilizzando chiavi gestite da Google, ma è anche possibile utilizzare una chiave da KMS.

Accesso Pubblico

È possibile dare accesso ai contenuti dei bucket agli utenti esterni (loggati in GCP o meno). Per impostazione predefinita, quando viene creato un bucket, sarà disabilitata l'opzione di esporre pubblicamente il bucket, ma con le autorizzazioni sufficienti può essere modificata.

Il formato di un URL per accedere a un bucket è https://storage.googleapis.com/<nome-bucket> o https://<nome_bucket>.storage.googleapis.com (entrambi sono validi).

Chiavi HMAC

Una chiave HMAC è un tipo di credenziale e può essere associata a un account di servizio o a un account utente in Cloud Storage. Si utilizza una chiave HMAC per creare firme che vengono poi incluse nelle richieste a Cloud Storage. Le firme mostrano che una richiesta specifica è autorizzata dall'utente o dall'account di servizio.

Le chiavi HMAC hanno due componenti principali, un ID di accesso e un segreto.

  • ID di Accesso: Una stringa alfanumerica collegata a un servizio specifico o a un account utente. Quando collegata a un account di servizio, la stringa è lunga 61 caratteri, e quando collegata a un account utente, la stringa è lunga 24 caratteri. Di seguito viene mostrato un esempio di un ID di accesso:

GOOGTS7C7FUP3AIRVJTE2BCDKINBTES3HC2GY5CBFJDCQ2SYHV6A6XXVTJFSA

  • Segreto: Una stringa codificata in Base-64 di 40 caratteri che è collegata a un ID di accesso specifico. Un segreto è una chiave precondivisa che solo tu e Cloud Storage conoscete. Si utilizza il segreto per creare firme come parte del processo di autenticazione. Di seguito viene mostrato un esempio di un segreto:

bGoa+V7g/yqDXvKRqq+JTFn4uQZbPiQJo4pf9RzJ

Sia l'ID di accesso che il segreto identificano univocamente una chiave HMAC, ma il segreto è un'informazione molto più sensibile, poiché viene utilizzato per creare firme.

Enumerazione

# 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

Se ricevi un errore di permesso negato durante l'elenco dei bucket, potresti comunque avere accesso ai contenuti. Ora che conosci la convenzione dei nomi dei bucket, puoi generare un elenco di possibili nomi e provare ad accedervi:

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

Con le autorizzazioni storage.objects.list e storage.objects.get, dovresti essere in grado di enumerare tutte le cartelle e i file dal bucket per scaricarli. Puoi ottenere ciò con questo 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>')

Escalazione dei privilegi

Nella seguente pagina puoi controllare come abusare dei permessi di archiviazione per escalare i privilegi:

Enumerazione non autenticata

Post Esploitation

Persistenza

Impara l'hacking di AWS da zero a eroe con htARTE (HackTricks AWS Red Team Expert)!

Altri modi per supportare HackTricks:

Last updated