AWS - Redshift Enum

Support HackTricks

Amazon Redshift

Redshift는 빅 데이터 솔루션을 위한 데이터 웨어하우스로 사용되는 완전 관리형 서비스로, 크기를 페타바이트 이상으로 확장할 수 있습니다. Redshift 클러스터를 사용하면 빠른 SQL 기반 쿼리 도구와 비즈니스 인텔리전스 애플리케이션을 통해 데이터 세트에 대한 분석을 실행하여 비즈니스 비전을 더 잘 이해할 수 있습니다.

Redshift는 KMS 또는 CloudHSM을 사용하여 최상위 키를 관리하는 4단계 암호화 키 계층을 사용하여 정지 상태에서 암호화를 제공합니다. 클러스터에 대해 암호화가 활성화되면 비활성화할 수 없으며 그 반대도 마찬가지입니다. 암호화되지 않은 클러스터는 암호화할 수 없습니다.

클러스터의 암호화는 생성 중에만 발생할 수 있으며, 암호화된 후에는 데이터, 메타데이터 및 모든 스냅샷도 암호화됩니다. 암호화 키의 계층 수준은 다음과 같습니다. 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도 메모리에 저장됩니다.

이 암호화된 DEK는 안전한 채널을 통해 전송되어 Redshift에 클러스터와는 별도로 저장됩니다. CEK와 DEK는 이제 클러스터의 메모리에 암호화된 형태와 복호화된 형태로 모두 저장됩니다. 복호화된 DEK는 데이터베이스의 각 데이터 블록에 대해 Redshift가 무작위로 생성한 데이터 키(4단계)를 암호화하는 데 사용됩니다.

AWS Trusted Advisor를 사용하여 Amazon S3 버킷의 구성을 모니터링하고 버킷 로깅이 활성화되어 있는지 확인할 수 있으며, 이는 보안 감사 수행 및 S3에서 사용 패턴 추적에 유용할 수 있습니다.

CloudHSM

Using Redshift with CloudHSM

CloudHSM을 사용하여 암호화를 수행할 때, 먼저 HSM 클라이언트와 Redshift 간의 신뢰할 수 있는 연결을 설정해야 하며, 이때 클라이언트 및 서버 인증서를 사용해야 합니다.

이 연결은 안전한 통신을 제공하는 데 필요하며, 암호화 키가 HSM 클라이언트와 Redshift 클러스터 간에 전송될 수 있도록 합니다. 무작위로 생성된 개인 키와 공개 키 쌍을 사용하여 Redshift는 공개 클라이언트 인증서를 생성하며, 이는 암호화되어 Redshift에 저장됩니다. 이 인증서는 다운로드하여 HSM 클라이언트에 등록하고 올바른 HSM 파티션에 할당해야 합니다.

그런 다음 HSM 클라이언트의 다음 세부정보로 Redshift를 구성해야 합니다: HSM IP 주소, HSM 파티션 이름, HSM 파티션 비밀번호, CloudHSM에 의해 내부 마스터 키로 암호화된 공개 HSM 서버 인증서. 이 정보가 제공되면 Redshift는 개발 파티션에 연결하고 접근할 수 있는지 확인합니다.

내부 보안 정책이나 거버넌스 제어가 키 회전을 적용해야 한다고 규정하는 경우, Redshift는 암호화된 클러스터에 대해 암호화 키를 회전할 수 있도록 하여 이를 가능하게 합니다. 그러나 키 회전 과정에서 클러스터가 매우 짧은 시간 동안 사용할 수 없게 되므로, 필요할 때만 키를 회전하는 것이 가장 좋습니다. 또는 키가 손상되었을 가능성이 있다고 느낄 경우에만 회전해야 합니다.

회전 중에 Redshift는 클러스터 및 해당 클러스터의 모든 백업에 대해 CEK를 회전합니다. 클러스터에 대한 DEK는 회전하지만, DEK를 사용하여 암호화된 S3에 저장된 스냅샷에 대한 DEK를 회전하는 것은 불가능합니다. 이 과정이 완료될 때까지 클러스터는 '키 회전 중' 상태로 유지되며, 그 후 상태는 '사용 가능'으로 돌아갑니다.

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 계정에 대한 액세스를 부여할 수 있습니다:

HackTricks 지원하기

Last updated