AWS - MSK Enum

Leer AWS-hacking van nul tot held met htARTE (HackTricks AWS Red Team Expert)!

Ander maniere om HackTricks te ondersteun:

Amazon MSK

Amazon Managed Streaming for Apache Kafka (Amazon MSK) is 'n diens wat ten volle bestuur word en die ontwikkeling en uitvoering van toepassings wat stroomdata verwerk deur Apache Kafka fasiliteer. Amazon MSK bied beheervlak-operasies aan, insluitend die skep, opdateer en verwyder van klusters. Die diens maak die gebruik van Apache Kafka data-vlak-operasies moontlik, wat data-produksie en -verbruik insluit. Dit werk met open-source weergawes van Apache Kafka, wat verseker dat dit versoenbaar is met bestaande toepassings, gereedskap en invoegtoepassings van beide vennote en die Apache Kafka-gemeenskap, sonder die nodigheid van veranderinge in die toepassingskode.

Wat betroubaarheid betref, is Amazon MSK ontwerp om outomaties algemene klusterfoute te detecteer en te herstel, om te verseker dat produsent- en verbruikertoepassings voortgaan met hul data-skryf- en leesaktiwiteite met minimale onderbreking. Verder streef dit daarna om data-replikasieprosesse te optimaliseer deur te probeer om die stoorplek van vervangen makelaars te hergebruik, wat die hoeveelheid data wat deur Apache Kafka gerepliseer moet word, verminder.

Tipes

Daar is 2 tipes Kafka-klusters wat AWS toelaat om te skep: Provisioned en Serverless.

Vanuit die oogpunt van 'n aanvaller moet jy weet dat:

  • Serverless kan nie direk openbaar wees (dit kan slegs in 'n VPN loop sonder enige openbaar blootgestelde IP). Tog kan Provisioned gekonfigureer word om 'n openbare IP te kry (standaard nie) en die sekuriteitsgroep te konfigureer om die relevante poorte bloot te stel.

  • Serverless ondersteun slegs IAM as verifikasiemetode. Provisioned ondersteun SASL/SCRAM (wagwoord) verifikasie, IAM verifikasie, AWS Certificate Manager (ACM) verifikasie en Ongeverifieerde toegang.

  • Let daarop dat dit nie moontlik is om 'n Provisioned Kafka openbaar bloot te stel as ongeverifieerde toegang geaktiveer is nie.

Enumerasie

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

Beschrijving

Kafka IAM-toegang (Identity and Access Management) is een methode om toegangscontrole in te stellen voor Kafka-clusters in een serverloze omgeving. Met IAM kunnen beheerders de rechten en machtigingen van gebruikers beheren om toegang te krijgen tot Kafka-topics en -bronnen.

Mogelijke aanvallen

  1. Onjuiste IAM-rollen: Als er onjuiste IAM-rollen zijn geconfigureerd, kan een aanvaller mogelijk toegang krijgen tot Kafka-topics en -bronnen die ze normaal gesproken niet zouden moeten hebben.

  2. Onjuiste machtigingen: Als een gebruiker onjuiste machtigingen heeft toegewezen gekregen, kan deze mogelijk gevoelige gegevens lezen, schrijven of verwijderen van Kafka-topics.

Aanbevolen beveiligingsmaatregelen

  1. Minimale rechten: Wijs gebruikers alleen de minimale rechten toe die ze nodig hebben om hun taken uit te voeren. Beperk de toegang tot Kafka-topics en -bronnen tot wat strikt noodzakelijk is.

  2. Regelmatige controle: Controleer regelmatig de IAM-rollen en machtigingen om ervoor te zorgen dat ze correct zijn geconfigureerd en dat er geen onjuiste toegang is verleend.

  3. Sterke authenticatie: Implementeer sterke authenticatiemethoden, zoals het gebruik van multi-factor authenticatie (MFA), om ongeautoriseerde toegang tot IAM-accounts te voorkomen.

  4. Logging en monitoring: Implementeer uitgebreide logging en monitoring om verdachte activiteiten te detecteren en te reageren op mogelijke inbreuken.

Voorbeeld

Hier is een voorbeeld van een IAM-beleid voor Kafka-toegang:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "kafka:Describe*",
        "kafka:List*",
        "kafka:Get*"
      ],
      "Resource": "*"
    },
    {
      "Effect": "Allow",
      "Action": [
        "kafka:Create*",
        "kafka:Delete*",
        "kafka:Update*"
      ],
      "Resource": "arn:aws:kafka:us-west-2:123456789012:cluster/my-kafka-cluster"
    }
  ]
}

In dit voorbeeld heeft de gebruiker toestemming om Kafka-clusters te beschrijven, lijsten op te halen en gegevens op te halen. Ze hebben ook toestemming om specifieke acties uit te voeren op een specifiek Kafka-cluster met de opgegeven ARN (Amazon Resource Name).

Referenties

# 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

Ongeverifieerde Toegang

pageAWS - MSK Unauthenticated Enum

Volharding

As jy toegang het tot die VPC waar 'n Provisioned Kafka is, kan jy ongeverifieerde toegang aktiveer, as SASL/SCRAM-verifikasie gebruik word, die wagwoord uit die geheim lees, 'n ander beheerde gebruiker IAM-permissies gee (as IAM of serverless gebruik word) of volhard met sertifikate.

Verwysings

Leer AWS-hacking van nul tot held met htARTE (HackTricks AWS Red Team Expert)!

Ander maniere om HackTricks te ondersteun:

Last updated