AWS - Redshift Enum

Support HackTricks

Amazon Redshift

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

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

클러스터의 암호화는 생성 시에만 가능하며, 일단 암호화되면 데이터, 메타데이터 및 모든 스냅샷도 암호화됩니다. 암호화 키의 계층 수준은 다음과 같습니다. 1계층은 마스터 키, 2계층은 클러스터 암호화 키(CEK), 3계층은 데이터베이스 암호화 키(DEK), 마지막으로 4계층은 데이터 암호화 키입니다.

KMS

클러스터를 생성하는 동안 기본 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 파티션에 할당해야 합니다.

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

Support HackTricks

Last updated