# AWS - Redshift Enum

{{#include ../../../banners/hacktricks-training.md}}

## Amazon Redshift

Redshift je potpuno upravljana usluga koja može da se skalira do više od petabajta, koja se koristi kao **data warehouse za big data rešenja**. Koristeći Redshift klastere, možete da izvršavate analitiku nad vašim skupovima podataka koristeći brze, SQL-bazirane alate za upite i aplikacije za poslovnu inteligenciju kako biste stekli bolje razumevanje vizije za vaše poslovanje.

**Redshift nudi enkripciju u mirovanju koristeći hijerarhiju od četiri nivoa enkripcijskih ključeva koristeći KMS ili CloudHSM za upravljanje najvišim nivoom ključeva**. **Kada je enkripcija omogućena za vaš klaster, ne može se onemogućiti i obrnuto**. Kada imate neenkriptovani klaster, ne može se enkriptovati.

Enkripcija za vaš klaster može se dogoditi samo tokom njegove kreacije, a kada je enkriptovan, podaci, metapodaci i sve snimke su takođe enkriptovani. Nivoi enkripcijskih ključeva su sledeći, **prvi nivo je glavni ključ, drugi nivo je ključ enkripcije klastera, CEK, treći nivo, ključ enkripcije baze podataka, DEK, i konačno četvrti nivo, ključevi enkripcije podataka**.

### KMS

Tokom kreacije vašeg klastera, možete ili odabrati **podrazumevani KMS ključ** za Redshift ili odabrati svoj **vlastiti CMK**, što vam daje veću fleksibilnost u kontroli ključa, posebno iz auditable perspektive.

Podrazumevani KMS ključ za Redshift automatski se kreira od strane Redshift-a prvi put kada se opcija ključa odabere i koristi, i potpuno ga upravlja AWS.

Ovaj KMS ključ se zatim enkriptuje sa CMK glavnim ključem, prvi nivo. Ovaj enkriptovani KMS ključ podataka se zatim koristi kao ključ enkripcije klastera, CEK, drugi nivo. Ovaj CEK se zatim šalje od strane KMS-a Redshift-u gde se čuva odvojeno od klastera. Redshift zatim šalje ovaj enkriptovani CEK klasteru preko sigurnog kanala gde se čuva u memoriji.

Redshift zatim traži od KMS-a da dekriptuje CEK, drugi nivo. Ovaj dekriptovani CEK se zatim takođe čuva u memoriji. Redshift zatim kreira nasumični ključ enkripcije baze podataka, DEK, treći nivo, i učitava ga u memoriju klastera. Dekriptovani CEK u memoriji zatim enkriptuje DEK, koji se takođe čuva u memoriji.

Ovaj enkriptovani DEK se zatim šalje preko sigurnog kanala i čuva se u Redshift-u odvojeno od klastera. I CEK i DEK su sada čuvani u memoriji klastera u enkriptovanom i dekriptovanom obliku. Dekriptovani DEK se zatim koristi za enkripciju ključeva podataka, četvrti nivo, koji se nasumično generišu od strane Redshift-a za svaki blok podataka u bazi podataka.

Možete koristiti AWS Trusted Advisor za praćenje konfiguracije vaših Amazon S3 kanti i osiguranje da je logovanje kanti omogućeno, što može biti korisno za izvođenje bezbednosnih audita i praćenje obrazaca korišćenja u S3.

### CloudHSM

<details>

<summary>Korišćenje Redshift-a sa CloudHSM</summary>

Kada radite sa CloudHSM za izvođenje vaše enkripcije, prvo morate postaviti poverljivu vezu između vašeg HSM klijenta i Redshift-a koristeći klijentske i serverske sertifikate.

Ova veza je potrebna za obezbeđivanje sigurnih komunikacija, omogućavajući slanje enkripcijskih ključeva između vašeg HSM klijenta i vaših Redshift klastera. Koristeći nasumično generisani privatni i javni ključ, Redshift kreira javni klijentski sertifikat, koji je enkriptovan i čuvan od strane Redshift-a. Ovaj sertifikat mora biti preuzet i registrovan na vašem HSM klijentu, i dodeljen ispravnoj HSM particiji.

Zatim morate konfigurisati Redshift sa sledećim detaljima vašeg HSM klijenta: HSM IP adresa, ime HSM particije, lozinka HSM particije, i javni HSM serverski sertifikat, koji je enkriptovan od strane CloudHSM koristeći unutrašnji glavni ključ. Kada su ovi podaci dostavljeni, Redshift će potvrditi i verifikovati da može da se poveže i pristupi razvoju particije.

Ako vaša interna pravila bezbednosti ili upravljačke kontrole nalažu da morate primeniti rotaciju ključeva, onda je to moguće sa Redshift-om koji vam omogućava da rotirate enkripcijske ključeve za enkriptovane klastere, međutim, morate biti svesni da će tokom procesa rotacije klaster biti nedostupan na vrlo kratak period, pa je najbolje rotirati ključeve samo kada je to potrebno, ili ako smatrate da su možda kompromitovani.

Tokom rotacije, Redshift će rotirati CEK za vaš klaster i za sve rezervne kopije tog klastera. Rotiraće DEK za klaster, ali nije moguće rotirati DEK za snimke pohranjene u S3 koje su enkriptovane koristeći DEK. Staviće klaster u stanje 'rotiranje ključeva' dok se proces ne završi kada će status ponovo biti 'dostupan'.

</details>

### Enumeration
```bash
# Get clusters
aws redshift describe-clusters
## Get if publicly accessible
aws redshift describe-clusters | jq -r ".Clusters[].PubliclyAccessible"
## Get DB username to login
aws redshift describe-clusters | jq -r ".Clusters[].MasterUsername"
## Get endpoint
aws redshift describe-clusters | jq -r ".Clusters[].Endpoint"
## Public addresses of the nodes
aws redshift describe-clusters | jq -r ".Clusters[].ClusterNodes[].PublicIPAddress"
## Get IAM roles of the clusters
aws redshift describe-clusters | jq -r ".Clusters[].IamRoles"

# Endpoint access & authorization
aws redshift describe-endpoint-access
aws redshift describe-endpoint-authorization

# Get credentials
aws redshift get-cluster-credentials --db-user <username> --cluster-identifier <cluster-id>
## By default, the temporary credentials expire in 900 seconds. You can optionally specify a duration between 900 seconds (15 minutes) and 3600 seconds (60 minutes).
aws redshift get-cluster-credentials-with-iam --cluster-identifier <cluster-id>
## Gives creds to access redshift with the IAM redshift permissions given to the current AWS account
## More in https://docs.aws.amazon.com/redshift/latest/mgmt/redshift-iam-access-control-identity-based.html

# Authentication profiles
aws redshift describe-authentication-profiles

# Snapshots
aws redshift describe-cluster-snapshots

# Scheduled actions
aws redshift describe-scheduled-actions

# Connect
# The redshift instance must be publicly available (not by default), the sg need to allow inbounds connections to the port and you need creds
psql -h redshift-cluster-1.sdflju3jdfkfg.us-east-1.redshift.amazonaws.com -U admin -d dev -p 5439
```
## Privesc

{{#ref}}
../aws-privilege-escalation/aws-redshift-privesc.md
{{#endref}}

## Persistence

Sledeće akcije omogućavaju dodeljivanje pristupa drugim AWS nalozima klasteru:

- [authorize-endpoint-access](https://docs.aws.amazon.com/cli/latest/reference/redshift/authorize-endpoint-access.html)
- [authorize-snapshot-access](https://docs.aws.amazon.com/cli/latest/reference/redshift/authorize-snapshot-access.html)

{{#include ../../../banners/hacktricks-training.md}}
