AWS - Redshift Enum

ゼロからヒーローまでAWSハッキングを学ぶ htARTE(HackTricks AWS Red Team Expert)

HackTricksをサポートする他の方法:

Amazon Redshift

Redshiftは、ビッグデータソリューションのデータウェアハウスとして使用される、サイズがペタバイトを超えるまでスケーリング可能な完全管理型サービスです。Redshiftクラスタを使用すると、高速なSQLベースのクエリツールとビジネスインテリジェンスアプリケーションを使用して、データセットに対する分析を実行し、ビジネスのビジョンをより深く理解することができます。

Redshiftは、KMSまたはCloudHSMを使用して暗号化を休止状態で提供し、暗号化がクラスタに有効になると無効にできず、その逆も同様です。暗号化されていないクラスタでは、暗号化できません。

クラスタの暗号化は作成時のみ可能であり、一旦暗号化されるとデータ、メタデータ、およびスナップショットも暗号化されます。暗号化キーの階層レベルは次のとおりです。階層1はマスターキー、階層2はクラスタ暗号化キー(CEK)、階層3はデータベース暗号化キー(DEK)、最後に階層4はデータ暗号化キー自体です。

KMS

クラスタの作成時に、RedshiftのデフォルトKMSキーを選択するか、独自のCMKを選択することができます。これにより、監査の観点からキーの制御に対する柔軟性が向上します。

RedshiftのデフォルトKMSキーは、Redshiftによって初めてキーオプションが選択されて使用されたときに自動的に作成され、AWSによって完全に管理されます。

このKMSキーは、CMKマスターキー(階層1)で暗号化され、暗号化されたKMSデータキーはクラスタ暗号化キー(CEK、階層2)として使用されます。このCEKはKMSによってRedshiftに送信され、クラスタからは別々に保存されます。その後、Redshiftはこの暗号化されたCEKをセキュアチャネルを介してクラスタに送信し、メモリに保存します。

Redshiftは次に、KMSにCEK(階層2)の復号を要求します。復号されたCEKもメモリに保存されます。その後、Redshiftはランダムなデータベース暗号化キー(DEK、階層3)を作成し、それをクラスタのメモリにロードします。メモリ内の復号されたCEKはDEKを暗号化し、これもメモリに保存されます。

この暗号化されたDEKはセキュアチャネルを介して送信され、クラスタから別々にRedshiftに保存されます。CEKとDEKの両方は、メモリ内に暗号化および復号された形式でクラスタに保存されます。復号されたDEKは、Redshiftによってデータベース内の各データブロックのためにランダムに生成されたデータキー(階層4)を暗号化するために使用されます。

Amazon S3バケットの構成を監視し、バケットログ記録が有効になっていることを確認するためにAWS Trusted Advisorを使用することができます。これは、セキュリティ監査を実行し、S3の使用パターンを追跡するのに役立ちます。

CloudHSM

CloudHSMを使用したRedshift

CloudHSMを使用して暗号化を実行する場合、まずHSMクライアントとRedshiftの間に信頼された接続を設定する必要があります。この際には、クライアント証明書とサーバ証明書を使用します。

この接続は、暗号化キーをHSMクライアントとRedshiftクラスタの間で送信できるようにするために必要です。ランダムに生成されたプライベートキーとパブリックキーのペアを使用して、Redshiftは公開クライアント証明書を作成し、これを暗号化してRedshiftに保存します。これをHSMクライアントにダウンロードして登録し、適切なHSMパーティションに割り当てる必要があります。

次に、RedshiftをHSMクライアントの次の詳細で構成する必要があります。HSMのIPアドレス、HSMパーティション名、HSMパーティションパスワード、およびCloudHSMによって暗号化された公開HSMサーバ証明書です。これらの情報が提供されると、Redshiftは接続を確認し、開発パーティションにアクセスできることを確認します。

内部セキュリティポリシーまたはガバナンスコントロールにより、暗号キーのローテーションを適用する必要がある場合、Redshiftを使用して暗号化されたクラスタの暗号化キーをローテーションできます。ただし、キーのローテーションプロセス中に、クラスタが非常に短い時間利用できなくなるため、必要に応じてのみキーをローテーションするか、またはキーが侵害された可能性がある場合にのみ行うことが最適です。

ローテーション中、RedshiftはクラスタのCEKをローテーションし、そのクラスタのバックアップ用のCEKをローテーションします。クラスタのDEKをローテーションしますが、DEKを使用して暗号化されたS3に保存されているスナップショットのDEKをローテーションすることはできません。プロセスが完了するまで、クラスタを「キーのローテーション中」の状態にし、ステータスが「利用可能」に戻ると完了します。

列挙

# 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

特権昇格

pageAWS - Redshift Privesc

永続性

以下のアクションにより、他のAWSアカウントにクラスタへのアクセス権限を付与できます:

htARTE(HackTricks AWS Red Team Expert)を通じて、ゼロからヒーローまでAWSハッキングを学びましょう!

HackTricksをサポートする他の方法:

最終更新