# AWS - MSK Enum {{#include ../../../banners/hacktricks-training.md}} ## Amazon MSK **Amazon Managed Streaming for Apache Kafka (Amazon MSK)** ist ein vollständig verwalteter Dienst, der die Entwicklung und Ausführung von Anwendungen erleichtert, die Streaming-Daten über **Apache Kafka** verarbeiten. Die Steuerungsebene, einschließlich Erstellung, Aktualisierung und Löschung von **Clustern**, wird von Amazon MSK angeboten. Der Dienst ermöglicht die Nutzung von Apache Kafka **Datenebene-Operationen**, die die Datenproduktion und -konsumtion umfassen. Er basiert auf **Open-Source-Versionen von Apache Kafka**, was die Kompatibilität mit bestehenden Anwendungen, Tools und Plugins sowohl von Partnern als auch aus der **Apache Kafka-Community** sicherstellt, ohne dass Änderungen am Anwendungscode erforderlich sind. In Bezug auf die Zuverlässigkeit ist Amazon MSK so konzipiert, dass es **automatisch häufige Clusterfehler-Szenarien erkennt und sich davon erholt**, sodass Produzenten- und Konsumenten-Anwendungen ihre Daten Schreib- und Leseaktivitäten mit minimalen Unterbrechungen fortsetzen können. Darüber hinaus zielt es darauf ab, die Datenreplikationsprozesse zu optimieren, indem versucht wird, den Speicher von ersetzten Brokern **wiederzuverwenden**, wodurch das Volumen der Daten, die von Apache Kafka repliziert werden müssen, minimiert wird. ### **Typen** Es gibt 2 Arten von Kafka-Clustern, die AWS erstellen lässt: Provisioned und Serverless. Aus der Sicht eines Angreifers müssen Sie wissen, dass: - **Serverless kann nicht direkt öffentlich sein** (es kann nur in einem VPN ohne öffentlich exponierte IP ausgeführt werden). **Provisioned** kann jedoch so konfiguriert werden, dass es eine **öffentliche IP** erhält (standardmäßig geschieht dies nicht) und die **Sicherheitsgruppe** so konfiguriert wird, dass die relevanten Ports **exponiert** werden. - **Serverless** **unterstützt nur IAM** als Authentifizierungsmethode. **Provisioned** unterstützt SASL/SCRAM (**Passwort**) Authentifizierung, **IAM** Authentifizierung, AWS **Zertifikat** Manager (ACM) Authentifizierung und **unauthentifizierten** Zugriff. - Beachten Sie, dass es nicht möglich ist, ein Provisioned Kafka öffentlich zugänglich zu machen, wenn der unauthentifizierte Zugriff aktiviert ist. ### Enumeration ```bash #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 aws kafka kafka list-nodes --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 # Get version of config aws kafka describe-configuration-revision --arn --revision # Get content of config version # If using SCRAN authentication, get used AWS secret name (not secret value) aws kafka list-scram-secrets --cluster-arn ``` ### Kafka IAM-Zugriff (in serverlos) ```bash # 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 {{#ref}} ../aws-privilege-escalation/aws-msk-privesc/README.md {{#endref}} ### Unauthenticated Access {{#ref}} ../aws-unauthenticated-enum-access/aws-msk-unauthenticated-enum/README.md {{#endref}} ### Persistence Wenn Sie **Zugriff auf das VPC** haben, in dem ein Provisioned Kafka ist, könnten Sie **unauthorisierten Zugriff aktivieren**, wenn **SASL/SCRAM-Authentifizierung**, **das Passwort** aus dem Geheimnis **lesen**, einigen **anderen kontrollierten Benutzern IAM-Berechtigungen** geben (wenn IAM oder serverless verwendet wird) oder mit **Zertifikaten** persistieren. ## References - [https://docs.aws.amazon.com/msk/latest/developerguide/what-is-msk.html](https://docs.aws.amazon.com/msk/latest/developerguide/what-is-msk.html) {{#include ../../../banners/hacktricks-training.md}}