AWS - MSK Enum

htARTE (HackTricks AWS Red Team Expert)에서 AWS 해킹을 처음부터 전문가까지 배워보세요!

HackTricks를 지원하는 다른 방법:

Amazon MSK

**Amazon Managed Streaming for Apache Kafka (Amazon MSK)**는 Apache Kafka를 통해 스트리밍 데이터를 처리하는 애플리케이션의 개발과 실행을 완전히 관리하는 서비스입니다. Amazon MSK는 클러스터의 생성, 업데이트 및 삭제를 포함한 제어 평면 작업을 제공합니다. 이 서비스는 데이터 생성 및 소비를 포함한 Apache Kafka 데이터 평면 작업의 활용을 허용합니다. 이는 오픈 소스 버전의 Apache Kafka에서 작동하므로 기존 애플리케이션, 도구 및 플러그인과의 호환성을 보장하며, 파트너 및 Apache Kafka 커뮤니티의 플러그인을 통해 응용 프로그램 코드를 수정할 필요가 없습니다.

신뢰성 측면에서 Amazon MSK는 일반적인 클러스터 장애 시나리오를 자동으로 감지하고 복구하여 생산자 및 소비자 애플리케이션이 최소한의 중단으로 데이터 쓰기 및 읽기 작업을 계속할 수 있도록 설계되었습니다. 또한, Apache Kafka가 복제해야 하는 데이터 양을 최소화하기 위해 대체 브로커의 저장소를 재사용하려고 시도하여 데이터 복제 프로세스를 최적화하려고 합니다.

유형

AWS에서 생성할 수 있는 Kafka 클러스터에는 2가지 유형이 있습니다: Provisioned와 Serverless.

공격자의 관점에서 알아야 할 사항은 다음과 같습니다:

  • Serverless는 직접 공개될 수 없습니다 (공개적으로 노출된 IP가 없는 VPN에서만 실행 가능). 그러나 Provisioned공개 IP를 구성할 수 있습니다 (기본적으로는 그렇지 않음) 및 보안 그룹을 구성하여 관련 포트를 노출할 수 있습니다.

  • Serverless는 인증 방법으로 IAM만 지원합니다. Provisioned는 SASL/SCRAM (비밀번호) 인증, IAM 인증, AWS Certificate Manager (ACM) 인증 및 인증되지 않은 액세스를 지원합니다.

  • 인증되지 않은 액세스가 활성화된 경우 Provisioned Kafka를 공개적으로 노출할 수 없습니다.

열거

#Get clusters
aws kafka list-clusters
aws kafka list-clusters-v2

# Check the supported authentication
aws kafka list-clusters |  jq -r ".ClusterInfoList[].ClientAuthentication"

# Get Zookeeper endpoints
aws kafka list-clusters | jq -r ".ClusterInfoList[].ZookeeperConnectString, .ClusterInfoList[].ZookeeperConnectStringTls"

# Get nodes and node enspoints
aws kafka kafka list-nodes --cluster-arn <cluster-arn>
aws kafka kafka list-nodes --cluster-arn <cluster-arn> | jq -r ".NodeInfoList[].BrokerNodeInfo.Endpoints" # Get endpoints

# Get used kafka configs
aws kafka list-configurations #Get Kafka config file
aws kafka describe-configuration --arn <config-arn> # Get version of config
aws kafka describe-configuration-revision --arn <config-arn> --revision <version> # Get content of config version

# If using SCRAN authentication, get used AWS secret name (not secret value)
aws kafka list-scram-secrets --cluster-arn <cluster-arn>

Kafka IAM 액세스 (서버리스 환경에서)

AWS Managed Streaming for Apache Kafka (MSK)는 서버리스 환경에서 실행되는 Apache Kafka 클러스터를 제공합니다. 이를 통해 사용자는 서버 관리에 대한 부담 없이 Kafka를 사용할 수 있습니다. 그러나 이러한 서버리스 환경에서도 적절한 IAM 액세스 제어를 구성하는 것이 중요합니다.

IAM 역할 생성

  1. AWS Management Console에 로그인합니다.

  2. IAM 콘솔로 이동합니다.

  3. "역할 만들기"를 선택합니다.

  4. "서비스를 선택하여 역할을 만드십시오."란에서 "MSK"를 선택합니다.

  5. "다음: 권한"을 선택합니다.

  6. 필요한 권한을 선택하고 "다음: 태그"를 선택합니다.

  7. 필요한 경우 역할에 태그를 추가하고 "다음: 검토"를 선택합니다.

  8. 역할에 적절한 이름을 지정하고 "역할 만들기"를 선택합니다.

IAM 역할 연결

  1. AWS Management Console에 로그인합니다.

  2. MSK 클러스터가 있는 AWS 콘솔로 이동합니다.

  3. 클러스터를 선택하고 "작업" 메뉴에서 "IAM 역할 연결"을 선택합니다.

  4. "IAM 역할 연결" 대화 상자에서 "IAM 역할 연결"을 선택합니다.

  5. "IAM 역할" 드롭다운 메뉴에서 이전에 생성한 IAM 역할을 선택합니다.

  6. "업데이트"를 선택하여 변경 사항을 저장합니다.

이제 서버리스 환경에서 Kafka에 대한 적절한 IAM 액세스 제어가 설정되었습니다. 이를 통해 보안을 강화하고 불필요한 액세스를 방지할 수 있습니다.

# Guide from https://docs.aws.amazon.com/msk/latest/developerguide/create-serverless-cluster.html
# Download Kafka
wget https://archive.apache.org/dist/kafka/2.8.1/kafka_2.12-2.8.1.tgz
tar -xzf kafka_2.12-2.8.1.tgz

# In kafka_2.12-2.8.1/libs download the MSK IAM JAR file.
cd kafka_2.12-2.8.1/libs
wget https://github.com/aws/aws-msk-iam-auth/releases/download/v1.1.1/aws-msk-iam-auth-1.1.1-all.jar

# Create file client.properties in kafka_2.12-2.8.1/bin
security.protocol=SASL_SSL
sasl.mechanism=AWS_MSK_IAM
sasl.jaas.config=software.amazon.msk.auth.iam.IAMLoginModule required;
sasl.client.callback.handler.class=software.amazon.msk.auth.iam.IAMClientCallbackHandler

# Export endpoints address
export BS=boot-ok2ngypz.c2.kafka-serverless.us-east-1.amazonaws.com:9098
## Make sure you will be able to access the port 9098 from the EC2 instance (check VPS, subnets and SG)

# Create a topic called msk-serverless-tutorial
kafka_2.12-2.8.1/bin/kafka-topics.sh --bootstrap-server $BS --command-config client.properties --create --topic msk-serverless-tutorial --partitions 6

# Send message of every new line
kafka_2.12-2.8.1/bin/kafka-console-producer.sh --broker-list $BS --producer.config client.properties --topic msk-serverless-tutorial

# Read messages
kafka_2.12-2.8.1/bin/kafka-console-consumer.sh --bootstrap-server $BS --consumer.config client.properties --topic msk-serverless-tutorial --from-beginning

권한 상승

pageAWS - MSK Privesc

인증되지 않은 액세스

pageAWS - MSK Unauthenticated Enum

지속성

만약 Provisioned Kafka가 있는 VPC에 액세스할 수 있다면, 인증되지 않은 액세스를 활성화할 수 있습니다. 만약 SASL/SCRAM 인증이 사용된다면, 비밀번호를 비밀에서 읽어들이고, 일부 다른 제어된 사용자 IAM 권한을 부여하거나 (IAM 또는 서버리스 사용 시) 인증서로 지속성을 유지할 수 있습니다.

참고 자료

htARTE (HackTricks AWS Red Team Expert)를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요!

HackTricks를 지원하는 다른 방법:

最終更新