GCP - Storage Enum

Вивчайте хакінг AWS від нуля до героя з htARTE (HackTricks AWS Red Team Expert)!

Інші способи підтримки HackTricks:

Сховище

Сховище Google Cloud Platform (GCP) - це хмарне сховище, яке забезпечує високу надійність та доступність сховища об'єктів для неструктурованих даних. Воно пропонує різні класи сховищ на основі продуктивності, доступності та вартості, включаючи Standard, Nearline, Coldline та Archive. Сховище GCP також надає розширені функції, такі як політики життєвого циклу, версіювання та контроль доступу, для ефективного управління та захисту даних.

Відро може бути збережене в регіоні, в 2 регіонах або в кількох регіонах (за замовчуванням).

Типи сховищ

  • Стандартне сховище: Це типовий варіант сховища, який пропонує високу продуктивність та доступ з низькою затримкою до часто використовуваних даних. Він підходить для широкого спектру використань, включаючи надання вмісту веб-сайтів, стрімінг медіа та розміщення конвеєрів аналізу даних.

  • Сховище Nearline: Цей клас сховища пропонує низькі витрати на зберігання та незначно вищі витрати на доступ порівняно зі стандартним сховищем. Воно оптимізоване для даних, які рідко використовуються, з мінімальним терміном зберігання 30 днів. Це ідеально підходить для резервного копіювання та архівування.

  • Сховище Coldline: Цей клас сховища оптимізований для довгострокового зберігання даних, які рідко використовуються, з мінімальним терміном зберігання 90 днів. Воно пропонує низькі витрати на зберігання порівняно зі сховищем Nearline, але з вищими витратами на доступ.

  • Сховище Archive: Цей клас сховища призначений для холодних даних, до яких дуже рідко звертаються, з мінімальним терміном зберігання 365 днів. Воно пропонує найнижчі витрати на зберігання серед усіх варіантів сховищ GCP, але з найвищими витратами на доступ. Воно підходить для довгострокового зберігання даних, які потрібно зберігати з міркувань відповідності або регулювання.

  • Автоклас: Якщо ви не знаєте, наскільки часто ви будете звертатися до даних, ви можете вибрати Автоклас, і GCP автоматично змінить тип сховища для вас, щоб знизити витрати.

Контроль доступу

За замовчуванням рекомендується керувати доступом через IAM, але також можна активувати використання ACL. Якщо ви виберете використання лише IAM (за замовчуванням) і пройде 90 днів, ви не зможете активувати ACL для відра.

Версіювання

Можливо активувати версіювання, це дозволить зберігати старі версії файлів всередині відра. Можливо налаштувати кількість версій, які ви хочете зберігати і навіть як довго ви хочете, щоб некоректні версії (старі версії) існували. Рекомендовано 7 днів для типу Standard.

Метадані некоректної версії зберігаються. Крім того, ACL некоректних версій також зберігаються, тому старі версії можуть мати різні ACL від поточної версії.

Дізнайтеся більше в документації.

Політика збереження

Вкажіть, наскільки довго ви хочете заборонити видалення об'єктів всередині відра (дуже корисно для відповідності, принаймні). Одночасно може бути активовано лише одне з версіювання або політику збереження.

Шифрування

За замовчуванням об'єкти шифруються за допомогою керованих ключів Google, але ви також можете використовувати ключ від KMS.

Публічний доступ

Можливо надати зовнішнім користувачам (увійшовши в GCP або ні) доступ до вмісту відра. За замовчуванням, коли створюється відро, опція публічного викладання відра вимкнена, але з достатніми дозволами її можна змінити.

Формат URL для доступу до відра - https://storage.googleapis.com/<ім'я-відра> або https://<ім'я_відра>.storage.googleapis.com (обидва варіанти є дійсними).

Ключі HMAC

Ключ HMAC - це тип підтвердження і може бути пов'язаний з обліковим записом служби або обліковим записом користувача в Cloud Storage. Ви використовуєте ключ HMAC для створення підписів, які потім включаються в запити до Cloud Storage. Підписи показують, що даний запит авторизований користувачем або обліковим записом служби.

У ключах HMAC є дві основні частини: ідентифікатор доступу та секрет.

  • Ідентифікатор доступу: Алфавітно-цифровий рядок, пов'язаний з певною службою або обліковим записом користувача. Коли він пов'язаний з обліковим записом служби, рядок має довжину 61 символ, а коли він пов'язаний з обліковим записом користувача, рядок має довжину 24 символи. Нижче наведено приклад ідентифікатора доступу:

GOOGTS7C7FUP3AIRVJTE2BCDKINBTES3HC2GY5CBFJDCQ2SYHV6A6XXVTJFSA

  • Секрет: 40-символьний рядок, закодований у форматі Base-64, який пов'язаний з певним ідентифікатором доступу. Секрет - це ключ, який відомий лише вам та Cloud Storage. Ви використовуєте свій секрет для створення підписів у процесі аутентифікації. Нижче наведено приклад секрету:

bGoa+V7g/yqDXvKRqq+JTFn4uQZbPiQJo4pf9RzJ

Як ідентифікатор доступу, так і секрет унікально ідентифікують ключ HMAC, але секрет є набагато більш чутливою інформацією, оскільки він використовується для створення підписів.

Енумерація

# 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

Якщо ви отримали помилку permission denied при переліку відра, у вас все ще може бути доступ до вмісту. Тепер, коли ви знаєте про конвенцію імен відра, ви можете згенерувати список можливих імен і спробувати отримати до них доступ:

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

Підвищення привілеїв

На наступній сторінці ви можете перевірити, як зловживати дозволами на сховище для підвищення привілеїв:

pageGCP - Storage Privesc

Неаутентифікована енумерація

pageGCP - Storage Unauthenticated Enum

Післяексплуатаційна діяльність

pageGCP - Storage Post Exploitation

Постійність

pageGCP - Storage Persistence
Вивчайте хакінг AWS від нуля до героя з htARTE (HackTricks AWS Red Team Expert)!

Інші способи підтримки HackTricks:

Last updated