AWS - MSK Enum

Naucz się hakować AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!

Inne sposoby wsparcia HackTricks:

Amazon MSK

Amazon Managed Streaming for Apache Kafka (Amazon MSK) to usługa, która jest w pełni zarządzana, ułatwiająca rozwój i wykonanie aplikacji przetwarzających strumieniowe dane za pomocą Apache Kafka. Amazon MSK oferuje operacje na poziomie kontrolnym, takie jak tworzenie, aktualizowanie i usuwanie klastrów. Usługa umożliwia korzystanie z operacji na poziomie danych Apache Kafka, obejmujących produkcję i konsumpcję danych. Działa na wersjach oprogramowania Apache Kafka dostępnych w otwartym źródle, zapewniając kompatybilność z istniejącymi aplikacjami, narzędziami i wtyczkami zarówno od partnerów, jak i społeczności Apache Kafka, eliminując konieczność wprowadzania zmian w kodzie aplikacji.

Pod względem niezawodności, Amazon MSK został zaprojektowany w taki sposób, aby automatycznie wykrywać i przywracać się z powszechnych scenariuszy awarii klastra, zapewniając, że aplikacje producentów i konsumentów kontynuują zapisywanie i odczytywanie danych z minimalnym zakłóceniem. Ponadto, usługa ta ma na celu optymalizację procesów replikacji danych poprzez próbę ponownego wykorzystania pamięci masowej zastąpionych brokerów, co minimalizuje ilość danych, które muszą być replikowane przez Apache Kafka.

Typy

Istnieją 2 typy klastrów Kafka, które można utworzyć w AWS: Provisioned (dostarczony) i Serverless (bezserwerowy).

Z punktu widzenia atakującego, musisz wiedzieć, że:

  • Serverless nie może być bezpośrednio publiczny (może działać tylko w sieci VPN bez żadnego publicznie wystawionego adresu IP). Jednak Provisioned można skonfigurować tak, aby uzyskać publiczny adres IP (domyślnie go nie ma) i skonfigurować grupę zabezpieczeń, aby udostępnić odpowiednie porty.

  • Serverless obsługuje tylko uwierzytelnianie IAM. Provisioned obsługuje uwierzytelnianie SASL/SCRAM (hasło), uwierzytelnianie IAM, uwierzytelnianie AWS Certificate Manager (ACM) i dostęp bez uwierzytelnienia.

  • Należy zauważyć, że niemożliwe jest publiczne udostępnienie Kafka Provisioned, jeśli włączony jest dostęp bez uwierzytelnienia.

Wyliczanie

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

Dostęp IAM do Kafka (w środowisku serverless)

W przypadku korzystania z usługi Kafka w środowisku serverless, dostęp do niej jest zarządzany za pomocą usługi Identity and Access Management (IAM). IAM umożliwia kontrolowanie uprawnień użytkowników i zasobów w usłudze Kafka.

Aby skonfigurować dostęp IAM do Kafka, należy wykonać następujące kroki:

  1. Utwórz rolę IAM: Rozpocznij od utworzenia roli IAM, która będzie miała odpowiednie uprawnienia do korzystania z usługi Kafka. Możesz skonfigurować dostęp do różnych zasobów Kafka, takich jak tematy, grupy konsumentów, a także operacje na tematach, takie jak odczyt, zapis i zarządzanie.

  2. Skonfiguruj polityki IAM: Następnie skonfiguruj polityki IAM, które będą przypisane do roli. Polityki te określają, jakie konkretne uprawnienia mają być udzielone użytkownikom korzystającym z roli. Możesz dostosować polityki, aby zapewnić dostęp tylko do niezbędnych zasobów i operacji.

  3. Przypisz rolę IAM do użytkowników: Na koniec przypisz utworzoną rolę IAM do użytkowników, którzy mają mieć dostęp do usługi Kafka. Możesz przypisać rolę do użytkowników indywidualnie lub grupowo, w zależności od potrzeb.

Dzięki skonfigurowaniu dostępu IAM do usługi Kafka w środowisku serverless, możesz precyzyjnie kontrolować, jakie operacje mogą być wykonywane na tematach Kafka i przez kogo.

# 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

Privesc

pageAWS - MSK Privesc

Nieuwierzytelniony dostęp

pageAWS - MSK Unauthenticated Enum

Trwałość

Jeśli masz dostęp do VPC, w którym znajduje się Provisioned Kafka, możesz włączyć nieuwierzytelniony dostęp, jeśli uwierzytelnianie SASL/SCRAM jest włączone, odczytać hasło z sekretu, nadać inne kontrolowane uprawnienia IAM użytkownikowi (jeśli używane jest IAM lub serverless) lub trwać z certyfikatami.

Odwołania

Naucz się hakować AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!

Inne sposoby wsparcia HackTricks:

Last updated