AWS - MSK Enum

Tip

Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Υποστηρίξτε το HackTricks

Amazon MSK

Amazon Managed Streaming for Apache Kafka (Amazon MSK) είναι μια υπηρεσία που διαχειρίζεται πλήρως, διευκολύνοντας την ανάπτυξη και εκτέλεση εφαρμογών που επεξεργάζονται ροές δεδομένων μέσω του Apache Kafka. Οι λειτουργίες ελέγχου, συμπεριλαμβανομένης της δημιουργίας, ενημέρωσης και διαγραφής clusters, προσφέρονται από το Amazon MSK. Η υπηρεσία επιτρέπει τη χρήση των data-plane operations του Apache Kafka, που περιλαμβάνουν την παραγωγή και κατανάλωση δεδομένων. Λειτουργεί σε open-source εκδόσεις του Apache Kafka, διασφαλίζοντας τη συμβατότητα με υπάρχουσες εφαρμογές, εργαλεία και πρόσθετα τόσο από συνεργάτες όσο και από την κοινότητα του Apache Kafka, εξαλείφοντας την ανάγκη για τροποποιήσεις στον κωδικό της εφαρμογής.

Όσον αφορά την αξιοπιστία, το Amazon MSK έχει σχεδιαστεί για να ανιχνεύει αυτόματα και να ανακτάται από κοινά σενάρια αποτυχίας του cluster, διασφαλίζοντας ότι οι εφαρμογές παραγωγής και κατανάλωσης συνεχίζουν τις δραστηριότητές τους για εγγραφή και ανάγνωση δεδομένων με ελάχιστη διακοπή. Επιπλέον, στοχεύει στη βελτιστοποίηση των διαδικασιών αναπαραγωγής δεδομένων προσπαθώντας να επανχρησιμοποιήσει την αποθήκευση των αντικατεστημένων brokers, μειώνοντας έτσι τον όγκο των δεδομένων που πρέπει να αναπαραχθούν από το Apache Kafka.

Τύποι

Υπάρχουν 2 τύποι Kafka clusters που επιτρέπει το AWS να δημιουργηθούν: Provisioned και Serverless.

Από την οπτική γωνία ενός επιτιθέμενου, πρέπει να γνωρίζετε ότι:

  • Serverless δεν μπορεί να είναι άμεσα δημόσιο (μπορεί να λειτουργήσει μόνο σε ένα VPN χωρίς δημόσια εκτεθειμένη IP). Ωστόσο, το Provisioned μπορεί να ρυθμιστεί για να αποκτήσει μια δημόσια IP (κατά προεπιλογή δεν το κάνει) και να ρυθμίσει την ομάδα ασφαλείας για να εκθέσει τις σχετικές θύρες.
  • Serverless υποστηρίζει μόνο IAM ως μέθοδο αυθεντικοποίησης. Το Provisioned υποστηρίζει SASL/SCRAM (κωδικό πρόσβασης) αυθεντικοποίηση, IAM αυθεντικοποίηση, AWS Certificate Manager (ACM) αυθεντικοποίηση και Μη Αυθεντικοποιημένη πρόσβαση.
  • Σημειώστε ότι δεν είναι δυνατό να εκτεθεί δημόσια ένα Provisioned Kafka εάν είναι ενεργοποιημένη η μη αυθεντικοποιημένη πρόσβαση.

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>

Πρόσβαση IAM Kafka (σε 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

AWS - MSK Privesc

Unauthenticated Access

AWS - MSK Unauthenticated Enum

Persistence

Αν πρόκειται να έχετε πρόσβαση στο VPC όπου βρίσκεται ένα Provisioned Kafka, θα μπορούσατε να επιτρέψετε μη εξουσιοδοτημένη πρόσβαση, αν SASL/SCRAM authentication, διαβάσετε τον κωδικό πρόσβασης από το μυστικό, δώσετε κάποιες άλλες ελεγχόμενες άδειες IAM (αν χρησιμοποιείται IAM ή serverless) ή να επιμείνετε με πιστοποιητικά.

References

Tip

Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Υποστηρίξτε το HackTricks