AWS - MSK Enum

Support HackTricks

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 der 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 von Partnern und 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 gängige 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 von Apache Kafka zu replizierenden Daten minimiert wird.

Typen

Es gibt 2 Arten von Kafka-Clustern, die AWS erstellen lässt: Bereitgestellt und Serverlos.

Aus der Sicht eines Angreifers müssen Sie wissen, dass:

  • Serverlos kann nicht direkt öffentlich sein (es kann nur in einem VPN ohne öffentlich exponierte IP ausgeführt werden). Bereitgestellt kann jedoch so konfiguriert werden, dass es eine öffentliche IP erhält (standardmäßig hat es das nicht) und die Sicherheitsgruppe so konfiguriert wird, dass die relevanten Ports exponiert werden.

  • Serverlos unterstützt nur IAM als Authentifizierungsmethode. Bereitgestellt 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 bereitgestelltes Kafka öffentlich zu exponieren, wenn der unauthentifizierte Zugriff aktiviert ist.

Enumeration

#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-Zugriff (in serverless)

# 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

Unauthenticated Access

Persistence

Wenn Sie Zugriff auf das VPC haben, in dem ein Provisioned Kafka ist, könnten Sie unauthorisierten Zugriff aktivieren, wenn Sie SASL/SCRAM-Authentifizierung verwenden, das Passwort aus dem Geheimnis lesen, einigen anderen kontrollierten Benutzern IAM-Berechtigungen geben (wenn IAM oder serverlos verwendet wird) oder mit Zertifikaten persistieren.

References

Support HackTricks

Last updated