AWS - Redshift Enum

Apprenez le piratage AWS de zéro à héros avec htARTE (HackTricks AWS Red Team Expert)!

Autres façons de soutenir HackTricks :

Amazon Redshift

Redshift est un service entièrement géré pouvant atteindre plus d'un pétaoctet de taille, utilisé comme entrepôt de données pour les 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 obtenir une meilleure compréhension de la vision de votre entreprise.

Redshift offre un chiffrement au repos en utilisant une hiérarchie de quatre niveaux de clés de chiffrement 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 de votre cluster ne peut se faire que lors de sa création, et une fois chiffré, les données, les métadonnées et toutes les instantanés sont également chiffrés. Les niveaux de hiérarchie des clés de chiffrement sont les suivants, le premier niveau est la clé principale, le deuxième niveau est la clé de chiffrement du cluster, le CEK, le troisième niveau, la clé de chiffrement de la base de données, le DEK, et enfin le quatrième niveau, les clés de chiffrement des données elles-mêmes.

KMS

Lors de la création de votre cluster, vous pouvez sélectionner soit 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é, notamment 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é principale CMK, niveau un. Cette clé de données KMS chiffrée est ensuite utilisée comme clé de chiffrement du cluster, le CEK, niveau deux. Ce CEK est ensuite envoyé par KMS à Redshift où il est stocké séparément du cluster. Redshift envoie ensuite ce CEK chiffré au cluster via un canal sécurisé où il est stocké en mémoire.

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

Ce DEK chiffré est ensuite envoyé via un canal sécurisé et stocké dans Redshift séparément du cluster. Le CEK et le DEK sont maintenant stockés en mémoire du cluster à la fois sous forme chiffrée et déchiffrée. Le DEK déchiffré est ensuite utilisé pour chiffrer les clés de données, niveau quatre, qui sont générées de manière aléatoire 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 compartiments Amazon S3 et vous assurer que le journalisation des compartiments 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

Utilisation de 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 en utilisant des certificats client et serveur.

Cette connexion est nécessaire pour fournir des communications sécurisées, permettant l'envoi de clés de chiffrement entre votre client HSM et vos clusters Redshift. En utilisant une paire de clés privée et publique générée de manière aléatoire, Redshift crée un certificat client public, qui est chiffré et stocké par Redshift. Celui-ci doit être téléchargé et enregistré sur votre client HSM, et attribué à la partition HSM correcte.

Vous devez ensuite configurer Redshift avec les détails suivants de votre client HSM : l'adresse IP du HSM, le nom de la partition HSM, le mot de passe de la partition HSM, et le certificat 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 tourner les clés de chiffrement pour les clusters chiffrés, cependant, vous devez être conscient qu'au cours du processus de rotation des clés, le cluster sera temporairement indisponible pendant une très courte période, il est donc préférable de ne faire tourner les clés que lorsque vous en avez besoin, ou si vous pensez qu'elles ont pu être compromises.

Pendant la rotation, Redshift fera tourner le CEK pour votre cluster et pour toutes les sauvegardes de ce cluster. Il fera tourner un DEK pour le cluster mais il n'est pas possible de faire tourner un DEK pour les instantanés stockés dans S3 qui ont été chiffrés à l'aide du DEK. Il mettra le cluster dans un état de 'rotation des clés' jusqu'à ce que le processus soit terminé, moment où 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

Élévation de privilèges

Persistance

Les actions suivantes permettent de donner accès à d'autres comptes AWS au cluster :

Apprenez le piratage AWS de zéro à héros avec htARTE (HackTricks AWS Red Team Expert)!

Autres façons de soutenir HackTricks :

Dernière mise à jour