GCP - Storage Enum

Dowiedz się, jak hakować AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!

Inne sposoby wsparcia HackTricks:

Magazynowanie

Google Cloud Platform (GCP) Storage to rozwiązanie magazynowania w chmurze, które zapewnia wysoce trwałe i dostępne magazynowanie obiektów dla danych niestrukturyzowanych. Oferuje różne klasy magazynowania oparte na wydajności, dostępności i kosztach, w tym Standard, Nearline, Coldline i Archive. GCP Storage zapewnia również zaawansowane funkcje takie jak polityki cyklu życia, wersjonowanie i kontrola dostępu, aby efektywnie zarządzać i zabezpieczać dane.

Wiadro można przechowywać w regionie, w 2 regionach lub w wielu regionach (domyślnie).

Typy magazynowania

  • Standardowe magazynowanie: Jest to domyślna opcja magazynowania, która zapewnia wysoką wydajność i niski dostęp o niskim opóźnieniu do często odwiedzanych danych. Nadaje się do szerokiego zakresu zastosowań, w tym dostarczania treści na stronie internetowej, przesyłania mediów strumieniowych i hostowania potoków analizy danych.

  • Magazynowanie Nearline: Ta klasa magazynowania oferuje niższe koszty magazynowania i nieco wyższe koszty dostępu niż Standardowe Magazynowanie. Jest zoptymalizowana dla danych rzadko odwiedzanych, z minimalnym czasem przechowywania danych wynoszącym 30 dni. Nadaje się do celów archiwizacji i tworzenia kopii zapasowych.

  • Magazynowanie Coldline: Ta klasa magazynowania jest zoptymalizowana dla długoterminowego przechowywania danych rzadko odwiedzanych, z minimalnym czasem przechowywania danych wynoszącym 90 dni. Oferuje niższe koszty magazynowania niż Magazynowanie Nearline, ale z wyższymi kosztami dostępu.

  • Magazynowanie Archive: Ta klasa magazynowania jest przeznaczona dla danych archiwalnych, do których dostęp jest bardzo rzadki, z minimalnym czasem przechowywania danych wynoszącym 365 dni. Oferuje najniższe koszty magazynowania spośród wszystkich opcji magazynowania w GCP, ale z najwyższymi kosztami dostępu. Nadaje się do długoterminowego przechowywania danych, które muszą być przechowywane ze względów zgodności lub regulacyjnych.

  • Autoklasa: Jeśli nie wiesz, jak często będziesz uzyskiwać dostęp do danych, możesz wybrać Autoklasę, a GCP automatycznie zmieni typ magazynowania, aby zminimalizować koszty.

Kontrola dostępu

Domyślnie zaleca się kontrolowanie dostępu za pomocą IAM, ale można również włączyć korzystanie z list ACL. Jeśli wybierzesz korzystanie tylko z IAM (domyślnie) i minie 90 dni, nie będziesz mógł włączyć list ACL dla wiadra.

Wersjonowanie

Możliwe jest włączenie wersjonowania, co spowoduje zachowanie starych wersji plików wewnątrz wiadra. Można skonfigurować liczbę wersji, które chcesz zachować oraz nawet jak długo mają żyć nieaktualne wersje (stare wersje). Zalecane jest 7 dni dla typu Standard.

Metadane nieaktualnej wersji są przechowywane. Ponadto listy ACL nieaktualnych wersji są również przechowywane, więc starsze wersje mogą mieć inne listy ACL niż bieżąca wersja.

Dowiedz się więcej w dokumentacji.

Polityka retencji

Określ, jak długo chcesz zakazać usuwania obiektów wewnątrz wiadra (bardzo przydatne ze względów zgodności przynajmniej). Tylko jedno z wersjonowania lub polityki retencji może być włączone jednocześnie.

Szyfrowanie

Domyślnie obiekty są szyfrowane za pomocą zarządzanych przez Google kluczy, ale można również użyć klucza z KMS.

Dostęp publiczny

Możliwe jest udzielenie zewnętrznym użytkownikom (zalogowanym do GCP lub nie) dostępu do zawartości wiadra. Domyślnie, gdy wiadro jest tworzone, opcja publicznego udostępniania wiadra jest wyłączona, ale przy wystarczających uprawnieniach można ją zmienić.

Format URL do dostępu do wiadra to https://storage.googleapis.com/<nazwa-wiadra> lub https://<nazwa_wiadra>.storage.googleapis.com (oba są poprawne).

Klucze HMAC

Klucz HMAC to rodzaj poświadczenia i może być powiązany z kontem usługi lub kontem użytkownika w Cloud Storage. Używasz klucza HMAC do tworzenia podpisów, które są następnie dołączane do żądań do Cloud Storage. Podpisy pokazują, że dane żądanie jest autoryzowane przez użytkownika lub konto usługi.

Klucze HMAC mają dwie podstawowe części, identyfikator dostępu i sekret.

  • Identyfikator dostępu: Alfanumeryczny ciąg powiązany z określoną usługą lub kontem użytkownika. Gdy jest powiązany z kontem usługi, ciąg ma długość 61 znaków, a gdy jest powiązany z kontem użytkownika, ciąg ma długość 24 znaków. Poniżej przedstawiono przykład identyfikatora dostępu:

GOOGTS7C7FUP3AIRVJTE2BCDKINBTES3HC2GY5CBFJDCQ2SYHV6A6XXVTJFSA

  • Sekret: 40-znakowy zakodowany w Base-64 ciąg, który jest powiązany z określonym identyfikatorem dostępu. Sekret to klucz uzgodniony z góry, który znają tylko ty i Cloud Storage. Używasz swojego sekretu do tworzenia podpisów w ramach procesu uwierzytelniania. Poniżej przedstawiono przykład sekretu:

bGoa+V7g/yqDXvKRqq+JTFn4uQZbPiQJo4pf9RzJ

Zarówno identyfikator dostępu, jak i sekret jednoznacznie identyfikują klucz HMAC, ale sekret jest znacznie bardziej poufną informacją, ponieważ jest używany do tworzenia podpisów.

Wyliczanie

# 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

Jeśli otrzymasz błąd o braku uprawnień do wyświetlenia kubełków, możesz nadal mieć dostęp do ich zawartości. Teraz, kiedy znasz konwencję nazewnictwa kubełków, możesz wygenerować listę możliwych nazw i spróbować uzyskać do nich dostęp:

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

Z uprawnieniami storage.objects.list i storage.objects.get powinieneś móc wyliczyć wszystkie foldery i pliki z kubełka, aby je pobrać. Możesz to osiągnąć za pomocą tego skryptu w języku 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>')

Eskalacja uprawnień

Na następnej stronie możesz sprawdzić, jak wykorzystać uprawnienia do przechowywania danych do eskalacji uprawnień:

pageGCP - Storage Privesc

Enumeracja bez uwierzytelnienia

pageGCP - Storage Unauthenticated Enum

Po wykorzystaniu

pageGCP - Storage Post Exploitation

Utrzymanie dostępu

pageGCP - Storage Persistence
Naucz się hakować AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!

Inne sposoby wsparcia HackTricks:

Last updated