AWS - Redshift Enum

Tip

Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Υποστηρίξτε το HackTricks

Amazon Redshift

Το Redshift είναι μια πλήρως διαχειριζόμενη υπηρεσία που μπορεί να κλιμακωθεί σε μέγεθος άνω του ενός petabyte, η οποία χρησιμοποιείται ως αποθήκη δεδομένων για λύσεις big data. Χρησιμοποιώντας τα clusters Redshift, μπορείτε να εκτελείτε αναλύσεις στα σύνολα δεδομένων σας χρησιμοποιώντας γρήγορα, SQL-based εργαλεία ερωτήσεων και εφαρμογές επιχειρηματικής ευφυΐας για να αποκτήσετε μεγαλύτερη κατανόηση της ορατότητας για την επιχείρησή σας.

Το Redshift προσφέρει κρυπτογράφηση σε κατάσταση αδράνειας χρησιμοποιώντας μια ιεραρχία τεσσάρων επιπέδων κλειδιών κρυπτογράφησης χρησιμοποιώντας είτε KMS είτε CloudHSM για τη διαχείριση του ανώτερου επιπέδου κλειδιών. Όταν η κρυπτογράφηση είναι ενεργοποιημένη για το cluster σας, δεν μπορεί να απενεργοποιηθεί και το αντίστροφο. Όταν έχετε ένα μη κρυπτογραφημένο cluster, δεν μπορεί να κρυπτογραφηθεί.

Η κρυπτογράφηση για το cluster σας μπορεί να συμβεί μόνο κατά τη δημιουργία του, και μόλις κρυπτογραφηθεί, τα δεδομένα, τα μεταδεδομένα και οποιαδήποτε στιγμιότυπα είναι επίσης κρυπτογραφημένα. Τα επίπεδα κλειδιών κρυπτογράφησης είναι τα εξής: το πρώτο επίπεδο είναι το κύριο κλειδί, το δεύτερο επίπεδο είναι το κλειδί κρυπτογράφησης του cluster, το CEK, το τρίτο επίπεδο, το κλειδί κρυπτογράφησης της βάσης δεδομένων, το DEK, και τέλος το τέταρτο επίπεδο, τα κλειδιά κρυπτογράφησης δεδομένων.

KMS

Κατά τη δημιουργία του cluster σας, μπορείτε είτε να επιλέξετε το προεπιλεγμένο κλειδί KMS για το Redshift είτε να επιλέξετε το δικό σας CMK, το οποίο σας δίνει περισσότερη ευελιξία στον έλεγχο του κλειδιού, ειδικά από μια οπτική ελέγχου.

Το προεπιλεγμένο κλειδί KMS για το Redshift δημιουργείται αυτόματα από το Redshift την πρώτη φορά που επιλέγεται και χρησιμοποιείται η επιλογή κλειδιού, και διαχειρίζεται πλήρως από την AWS.

Αυτό το κλειδί KMS κρυπτογραφείται στη συνέχεια με το κύριο κλειδί CMK, επίπεδο ένα. Αυτό το κρυπτογραφημένο κλειδί δεδομένων KMS χρησιμοποιείται στη συνέχεια ως το κλειδί κρυπτογράφησης του cluster, το CEK, επίπεδο δύο. Αυτό το CEK αποστέλλεται στη συνέχεια από το KMS στο Redshift όπου αποθηκεύεται ξεχωριστά από το cluster. Το Redshift στέλνει στη συνέχεια αυτό το κρυπτογραφημένο CEK στο cluster μέσω ενός ασφαλούς καναλιού όπου αποθηκεύεται στη μνήμη.

Το Redshift ζητά στη συνέχεια από το KMS να αποκρυπτογραφήσει το CEK, επίπεδο δύο. Αυτό το αποκρυπτογραφημένο CEK αποθηκεύεται επίσης στη μνήμη. Το Redshift δημιουργεί στη συνέχεια ένα τυχαίο κλειδί κρυπτογράφησης βάσης δεδομένων, το DEK, επίπεδο τρία, και το φορτώνει στη μνήμη του cluster. Το αποκρυπτογραφημένο CEK στη μνήμη κρυπτογραφεί το DEK, το οποίο επίσης αποθηκεύεται στη μνήμη.

Αυτό το κρυπτογραφημένο DEK αποστέλλεται στη συνέχεια μέσω ενός ασφαλούς καναλιού και αποθηκεύεται στο Redshift ξεχωριστά από το cluster. Τόσο το CEK όσο και το DEK είναι τώρα αποθηκευμένα στη μνήμη του cluster τόσο σε κρυπτογραφημένη όσο και σε αποκρυπτογραφημένη μορφή. Το αποκρυπτογραφημένο DEK χρησιμοποιείται στη συνέχεια για να κρυπτογραφήσει τα κλειδιά δεδομένων, επίπεδο τέσσερα, που δημιουργούνται τυχαία από το Redshift για κάθε μπλοκ δεδομένων στη βάση δεδομένων.

Μπορείτε να χρησιμοποιήσετε το AWS Trusted Advisor για να παρακολουθείτε τη διαμόρφωση των κάδων Amazon S3 σας και να διασφαλίσετε ότι η καταγραφή κάδου είναι ενεργοποιημένη, κάτι που μπορεί να είναι χρήσιμο για την εκτέλεση ελέγχων ασφαλείας και την παρακολούθηση προτύπων χρήσης στο S3.

CloudHSM

Χρήση του Redshift με το CloudHSM

Όταν εργάζεστε με το CloudHSM για να εκτελέσετε την κρυπτογράφησή σας, πρώτα πρέπει να ρυθμίσετε μια αξιόπιστη σύνδεση μεταξύ του πελάτη HSM σας και του Redshift χρησιμοποιώντας πιστοποιητικά πελάτη και διακομιστή.

Αυτή η σύνδεση απαιτείται για να παρέχει ασφαλείς επικοινωνίες, επιτρέποντας στα κλειδιά κρυπτογράφησης να αποστέλλονται μεταξύ του πελάτη HSM σας και των clusters Redshift σας. Χρησιμοποιώντας ένα τυχαία παραγόμενο ζεύγος ιδιωτικού και δημόσιου κλειδιού, το Redshift δημιουργεί ένα δημόσιο πιστοποιητικό πελάτη, το οποίο κρυπτογραφείται και αποθηκεύεται από το Redshift. Αυτό πρέπει να κατέβει και να καταχωρηθεί στον πελάτη HSM σας, και να ανατεθεί στο σωστό τμήμα HSM.

Πρέπει στη συνέχεια να ρυθμίσετε το Redshift με τις ακόλουθες λεπτομέρειες του πελάτη HSM σας: η διεύθυνση IP του HSM, το όνομα τμήματος HSM, ο κωδικός πρόσβασης τμήματος HSM και το δημόσιο πιστοποιητικό διακομιστή HSM, το οποίο κρυπτογραφείται από το CloudHSM χρησιμοποιώντας ένα εσωτερικό κύριο κλειδί. Μόλις παρασχεθούν αυτές οι πληροφορίες, το Redshift θα επιβεβαιώσει και θα επαληθεύσει ότι μπορεί να συνδεθεί και να έχει πρόσβαση στο τμήμα ανάπτυξης.

Εάν οι εσωτερικές πολιτικές ασφαλείας ή οι έλεγχοι διακυβέρνησης απαιτούν να εφαρμόσετε περιστροφή κλειδιών, τότε αυτό είναι δυνατό με το Redshift, επιτρέποντάς σας να περιστρέφετε τα κλειδιά κρυπτογράφησης για κρυπτογραφημένα clusters, ωστόσο, πρέπει να είστε ενήμεροι ότι κατά τη διαδικασία περιστροφής κλειδιών, θα καταστήσει ένα cluster μη διαθέσιμο για πολύ σύντομο χρονικό διάστημα, οπότε είναι καλύτερο να περιστρέφετε τα κλειδιά μόνο όταν χρειάζεται ή αν πιστεύετε ότι μπορεί να έχουν παραβιαστεί.

Κατά τη διάρκεια της περιστροφής, το Redshift θα περιστρέψει το CEK για το cluster σας και για οποιαδήποτε αντίγραφα ασφαλείας αυτού του cluster. Θα περιστρέψει ένα DEK για το cluster αλλά δεν είναι δυνατό να περιστραφεί ένα DEK για τα στιγμιότυπα που αποθηκεύονται στο S3 που έχουν κρυπτογραφηθεί χρησιμοποιώντας το DEK. Θα θέσει το cluster σε κατάσταση ‘περιστροφής κλειδιών’ μέχρι να ολοκληρωθεί η διαδικασία, όταν η κατάσταση θα επιστρέψει σε ‘διαθέσιμο’.

Enumeration

# 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

AWS - Redshift Privesc

Persistence

Οι παρακάτω ενέργειες επιτρέπουν την παροχή πρόσβασης σε άλλους λογαριασμούς AWS στο cluster:

Tip

Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Υποστηρίξτε το HackTricks