AWS - MSK Enum

Підтримайте 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.

Типи

Існують 2 типи кластерів Kafka, які AWS дозволяє створювати: Provisioned та Serverless.

З точки зору атакуючого важливо знати, що:

  • Serverless не може бути безпосередньо публічним (він може працювати лише в VPN без будь-якої публічної IP-адреси). Однак 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>

Доступ IAM до Kafka (у безсерверному режимі)

# 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

Підвищення привілеїв

AWS - MSK Privesc

Неаутентифікований доступ

AWS - MSK Unauthenticated Enum

Наполегливість

Якщо у вас є доступ до VPC, де знаходиться Provisioned Kafka, ви можете увімкнути несанкціонований доступ, якщо аутентифікація SASL/SCRAM, прочитайте пароль з секрету, надайте деякі інші керовані дозволи IAM користувачам (якщо використовується IAM або serverless) або зберігайте з сертифікатами.

Посилання

Підтримайте HackTricks

Last updated