AWS - Redshift Enum

Tip

Apprenez & pratiquez AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Apprenez & pratiquez GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Apprenez & pratiquez Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Soutenez HackTricks

Amazon Redshift

Redshift est un service entiĂšrement gĂ©rĂ© qui peut Ă©voluer jusqu’à plus d’un pĂ©taoctet, utilisĂ© comme un entrepĂŽt de donnĂ©es pour des solutions de big data. En utilisant des clusters Redshift, vous pouvez exĂ©cuter des analyses sur vos ensembles de donnĂ©es Ă  l’aide d’outils de requĂȘte rapides basĂ©s sur SQL et d’applications d’intelligence d’affaires pour mieux comprendre la vision de votre entreprise.

Redshift offre un chiffrement au repos utilisant une hiĂ©rarchie de clĂ©s de chiffrement Ă  quatre niveaux en utilisant soit KMS soit CloudHSM pour gĂ©rer le niveau supĂ©rieur des clĂ©s. Lorsque le chiffrement est activĂ© pour votre cluster, il ne peut pas ĂȘtre dĂ©sactivĂ© et vice versa. Lorsque vous avez un cluster non chiffrĂ©, il ne peut pas ĂȘtre chiffrĂ©.

Le chiffrement pour votre cluster ne peut se faire qu’au moment de sa crĂ©ation, et une fois chiffrĂ©, les donnĂ©es, les mĂ©tadonnĂ©es et tous les instantanĂ©s sont Ă©galement chiffrĂ©s. Les niveaux de hiĂ©rarchie des clĂ©s de chiffrement sont les suivants : le niveau un est la clĂ© maĂźtre, le niveau deux est la clĂ© de chiffrement du cluster, la CEK, le niveau trois, la clĂ© de chiffrement de la base de donnĂ©es, la DEK, et enfin le niveau quatre, les clĂ©s de chiffrement des donnĂ©es elles-mĂȘmes.

KMS

Lors de la crĂ©ation de votre cluster, vous pouvez soit sĂ©lectionner la clĂ© KMS par dĂ©faut pour Redshift soit sĂ©lectionner votre propre CMK, ce qui vous donne plus de flexibilitĂ© sur le contrĂŽle de la clĂ©, spĂ©cifiquement d’un point de vue auditable.

La clĂ© KMS par dĂ©faut pour Redshift est automatiquement créée par Redshift la premiĂšre fois que l’option de clĂ© est sĂ©lectionnĂ©e et utilisĂ©e, et elle est entiĂšrement gĂ©rĂ©e par AWS.

Cette clĂ© KMS est ensuite chiffrĂ©e avec la clĂ© maĂźtre CMK, niveau un. Cette clĂ© de donnĂ©es KMS chiffrĂ©e est ensuite utilisĂ©e comme clĂ© de chiffrement du cluster, la CEK, niveau deux. Cette CEK est ensuite envoyĂ©e par KMS Ă  Redshift oĂč elle est stockĂ©e sĂ©parĂ©ment du cluster. Redshift envoie ensuite cette CEK chiffrĂ©e au cluster via un canal sĂ©curisĂ© oĂč elle est stockĂ©e en mĂ©moire.

Redshift demande ensuite à KMS de déchiffrer la CEK, niveau deux. Cette CEK déchiffrée est ensuite également stockée en mémoire. Redshift crée ensuite une clé de chiffrement de base de données aléatoire, la DEK, niveau trois, et la charge dans la mémoire du cluster. La CEK déchiffrée en mémoire chiffre ensuite la DEK, qui est également stockée en mémoire.

Cette DEK chiffrée est ensuite envoyée via un canal sécurisé et stockée dans Redshift séparément du cluster. La CEK et la DEK sont maintenant stockées en mémoire du cluster à la fois sous forme chiffrée et déchiffrée. La DEK déchiffrée est ensuite utilisée pour chiffrer les clés de données, niveau quatre, qui sont générées aléatoirement par Redshift pour chaque bloc de données dans la base de données.

Vous pouvez utiliser AWS Trusted Advisor pour surveiller la configuration de vos buckets Amazon S3 et vous assurer que la journalisation des buckets est activĂ©e, ce qui peut ĂȘtre utile pour effectuer des audits de sĂ©curitĂ© et suivre les modĂšles d’utilisation dans S3.

CloudHSM

Utiliser Redshift avec CloudHSM

Lorsque vous travaillez avec CloudHSM pour effectuer votre chiffrement, vous devez d’abord Ă©tablir une connexion de confiance entre votre client HSM et Redshift tout en utilisant des certificats client et serveur.

Cette connexion est nĂ©cessaire pour fournir des communications sĂ©curisĂ©es, permettant aux clĂ©s de chiffrement d’ĂȘtre envoyĂ©es entre votre client HSM et vos clusters Redshift. En utilisant une paire de clĂ©s privĂ©es et publiques gĂ©nĂ©rĂ©es alĂ©atoirement, Redshift crĂ©e un certificat client public, qui est chiffrĂ© et stockĂ© par Redshift. Cela doit ĂȘtre tĂ©lĂ©chargĂ© et enregistrĂ© sur votre client HSM, et attribuĂ© Ă  la bonne partition HSM.

Vous devez ensuite configurer Redshift avec les dĂ©tails suivants de votre client HSM : l’adresse IP HSM, le nom de la partition HSM, le mot de passe de la partition HSM, et le certificat de serveur HSM public, qui est chiffrĂ© par CloudHSM en utilisant une clĂ© maĂźtre interne. Une fois ces informations fournies, Redshift confirmera et vĂ©rifiera qu’il peut se connecter et accĂ©der Ă  la partition de dĂ©veloppement.

Si vos politiques de sĂ©curitĂ© internes ou vos contrĂŽles de gouvernance dictent que vous devez appliquer une rotation des clĂ©s, cela est possible avec Redshift vous permettant de faire pivoter les clĂ©s de chiffrement pour les clusters chiffrĂ©s, cependant, vous devez ĂȘtre conscient que pendant le processus de rotation des clĂ©s, cela rendra un cluster indisponible pendant une trĂšs courte pĂ©riode, il est donc prĂ©fĂ©rable de ne faire pivoter les clĂ©s que lorsque vous en avez besoin, ou si vous pensez qu’elles ont pu ĂȘtre compromises.

Pendant la rotation, Redshift fera pivoter la CEK pour votre cluster et pour toutes les sauvegardes de ce cluster. Il fera pivoter une DEK pour le cluster mais il n’est pas possible de faire pivoter une DEK pour les instantanĂ©s stockĂ©s dans S3 qui ont Ă©tĂ© chiffrĂ©s en utilisant la DEK. Il mettra le cluster dans un Ă©tat de ‘rotation des clĂ©s’ jusqu’à ce que le processus soit terminĂ© lorsque le statut reviendra Ă  ‘disponible’.

ÉnumĂ©ration

# 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

Les actions suivantes permettent d’accorder l’accùs à d’autres comptes AWS au cluster :

Tip

Apprenez & pratiquez AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Apprenez & pratiquez GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Apprenez & pratiquez Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Soutenez HackTricks