AWS - Redshift Enum

Reading time: 5 minutes

tip

AWS 해킹 배우기 및 연습하기:HackTricks Training AWS Red Team Expert (ARTE)
GCP 해킹 배우기 및 연습하기: HackTricks Training GCP Red Team Expert (GRTE) Azure 해킹 배우기 및 연습하기: HackTricks Training Azure Red Team Expert (AzRTE)

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

CloudHSM과 함께 Redshift 사용하기

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

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

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

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

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

Enumeration

bash
# 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

프라이벡스

AWS - Redshift Privesc

지속성

다음 작업을 통해 클러스터에 다른 AWS 계정에 대한 액세스를 부여할 수 있습니다:

tip

AWS 해킹 배우기 및 연습하기:HackTricks Training AWS Red Team Expert (ARTE)
GCP 해킹 배우기 및 연습하기: HackTricks Training GCP Red Team Expert (GRTE) Azure 해킹 배우기 및 연습하기: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks 지원하기