AWS - EKS Post Exploitation

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

EKS

Для отримання додаткової інформації перевірте

AWS - EKS Enum

Перерахунок кластера з консолі AWS

Якщо у вас є дозвіл eks:AccessKubernetesApi, ви можете переглядати об'єкти Kubernetes через консоль AWS EKS (Дізнайтеся більше).

Підключення до AWS Kubernetes Кластера

  • Легкий спосіб:

# Generate kubeconfig
aws eks update-kubeconfig --name aws-eks-dev
  • Не такий простий спосіб:

Якщо ви можете отримати токен за допомогою aws eks get-token --name <cluster_name>, але у вас немає дозволів на отримання інформації про кластер (describeCluster), ви можете підготувати свій власний ~/.kube/config. Однак, маючи токен, вам все ще потрібен url-адреса для підключення (якщо вам вдалося отримати JWT токен з поду, читайте тут) і назва кластера.

У моєму випадку я не знайшов інформацію в журналах CloudWatch, але я знайшов її в LaunchTemplates userData і в EC2 машинах у userData також. Ви можете легко побачити цю інформацію в userData, наприклад, у наступному прикладі (назва кластера була cluster-name):

API_SERVER_URL=https://6253F6CA47F81264D8E16FAA7A103A0D.gr7.us-east-1.eks.amazonaws.com

/etc/eks/bootstrap.sh cluster-name --kubelet-extra-args '--node-labels=eks.amazonaws.com/sourceLaunchTemplateVersion=1,alpha.eksctl.io/cluster-name=cluster-name,alpha.eksctl.io/nodegroup-name=prd-ondemand-us-west-2b,role=worker,eks.amazonaws.com/nodegroup-image=ami-002539dd2c532d0a5,eks.amazonaws.com/capacityType=ON_DEMAND,eks.amazonaws.com/nodegroup=prd-ondemand-us-west-2b,type=ondemand,eks.amazonaws.com/sourceLaunchTemplateId=lt-0f0f0ba62bef782e5 --max-pods=58' --b64-cluster-ca $B64_CLUSTER_CA --apiserver-endpoint $API_SERVER_URL --dns-cluster-ip $K8S_CLUSTER_DNS_IP --use-max-pods false
kube конфігурація

```yaml describe-cache-parametersapiVersion: v1 clusters: - cluster: certificate-authority-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUMvakNDQWVhZ0F3SUJBZ0lCQURBTkJna3Foa2lHOXcwQkFRc0ZBREFWTVJNd0VRWURWUVFERXdwcmRXSmwKY201bGRHVnpNQjRYRFRJeU1USXlPREUyTWpjek1Wb1hEVE15TVRJeU5URTJNamN6TVZvd0ZURVRNQkVHQTFVRQpBeE1LYTNWaVpYSnVaWFJsY3pDQ0FTSXdEUVlKS29aSWh2Y05BUUVCQlFBRGdnRVBBRENDQVFvQ2dnRUJBTDlXCk9OS0ZqeXZoRUxDZGhMNnFwWkMwa1d0UURSRVF1UzVpRDcwK2pjbjFKWXZ4a3FsV1ZpbmtwOUt5N2x2ME5mUW8KYkNqREFLQWZmMEtlNlFUWVVvOC9jQXJ4K0RzWVlKV3dzcEZGbWlsY1lFWFZHMG5RV1VoMVQ3VWhOanc0MllMRQpkcVpzTGg4OTlzTXRLT1JtVE5sN1V6a05pTlUzSytueTZSRysvVzZmbFNYYnRiT2kwcXJSeFVpcDhMdWl4WGRVCnk4QTg3VjRjbllsMXo2MUt3NllIV3hhSm11eWI5enRtbCtBRHQ5RVhOUXhDMExrdWcxSDBqdTl1MDlkU09YYlkKMHJxY2lINjYvSTh0MjlPZ3JwNkY0dit5eUNJUjZFQURRaktHTFVEWUlVSkZ4WXA0Y1pGcVA1aVJteGJ5Nkh3UwpDSE52TWNJZFZRRUNQMlg5R2c4Q0F3RUFBYU5aTUZjd0RnWURWUjBQQVFIL0JBUURBZ0trTUE4R0ExVWRFd0VCCi93UUZNQU1CQWY4d0hRWURWUjBPQkJZRUZQVXFsekhWZmlDd0xqalhPRmJJUUc3L0VxZ1hNQlVHQTFVZEVRUU8KTUF5Q0NtdDFZbVZ5Ym1WMFpYTXdEUVlKS29aSWh2Y05BUUVMQlFBRGdnRUJBS1o4c0l4aXpsemx0aXRPcGcySgpYV0VUSThoeWxYNWx6cW1mV0dpZkdFVVduUDU3UEVtWW55eWJHbnZ5RlVDbnczTldMRTNrbEVMQVE4d0tLSG8rCnBZdXAzQlNYamdiWFovdWVJc2RhWlNucmVqNU1USlJ3SVFod250ZUtpU0J4MWFRVU01ZGdZc2c4SlpJY3I2WC8KRG5POGlHOGxmMXVxend1dUdHSHM2R1lNR0Mvd1V0czVvcm1GS291SmtSUWhBZElMVkNuaStYNCtmcHUzT21UNwprS3VmR0tyRVlKT09VL1c2YTB3OTRycU9iSS9Mem1GSWxJQnVNcXZWVDBwOGtlcTc1eklpdGNzaUJmYVVidng3Ci9sMGhvS1RqM0IrOGlwbktIWW4wNGZ1R2F2YVJRbEhWcldDVlZ4c3ZyYWpxOUdJNWJUUlJ6TnpTbzFlcTVZNisKRzVBPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg== server: https://6253F6CA47F81264D8E16FAA7A103A0D.gr7.us-west-2.eks.amazonaws.com name: arn:aws:eks:us-east-1::cluster/ contexts: - context: cluster: arn:aws:eks:us-east-1::cluster/ user: arn:aws:eks:us-east-1::cluster/ name: arn:aws:eks:us-east-1::cluster/ current-context: arn:aws:eks:us-east-1::cluster/ kind: Config preferences: {} users: - name: arn:aws:eks:us-east-1::cluster/ user: exec: apiVersion: client.authentication.k8s.io/v1beta1 args: - --region - us-west-2 - --profile - - eks - get-token - --cluster-name - command: aws env: null interactiveMode: IfAvailable provideClusterInfo: false ```

Від AWS до Kubernetes

Творець EKS кластера ЗАВЖДИ зможе потрапити в частину кластера kubernetes групи system:masters (k8s адміністратор). На момент написання цього матеріалу немає прямого способу дізнатися хто створив кластер (ви можете перевірити CloudTrail). І немає способу видалити цей привілей.

Спосіб надати доступ до K8s для більшої кількості AWS IAM користувачів або ролей - це використання configmap aws-auth.

Отже, будь-хто з доступом на запис до конфігураційної карти aws-auth зможе компрометувати весь кластер.

Для отримання додаткової інформації про те, як надати додаткові привілеї IAM ролям і користувачам в одному або різних облікових записах і як зловживати цим, перевірте цю сторінку.

Перевірте також цей чудовий пост, щоб дізнатися, як працює аутентифікація IAM -> Kubernetes.

Від Kubernetes до AWS

Можливо дозволити аутентифікацію OpenID для облікового запису служби kubernetes, щоб дозволити їм приймати ролі в AWS. Дізнайтеся, як це працює на цій сторінці.

ОТРИМАТИ Api Server Endpoint з JWT Токена

https://<cluster-id>.<two-random-chars><number>.<region>.eks.amazonaws.com

Не знайшов жодної документації, яка б пояснювала критерії для 'двох символів' та 'числа'. Але, проводячи деякі тести від свого імені, я бачу, що вони повторюються:

  • gr7

  • yl4

В будь-якому випадку, це всього лише 3 символи, ми можемо їх перебрати. Використовуйте наведену нижче скрипт для генерації списку.

from itertools import product
from string import ascii_lowercase

letter_combinations = product('abcdefghijklmnopqrstuvwxyz', repeat = 2)
number_combinations = product('0123456789', repeat = 1)

result = [
f'{''.join(comb[0])}{comb[1][0]}'
for comb in product(letter_combinations, number_combinations)
]

with open('out.txt', 'w') as f:
f.write('\n'.join(result))

Тоді з wfuzz

wfuzz -Z -z file,out.txt --hw 0 https://<cluster-id>.FUZZ.<region>.eks.amazonaws.com

Пам'ятайте, щоб замінити & .

Обхід CloudTrail

Якщо зловмисник отримує облікові дані AWS з дозволом на EKS. Якщо зловмисник налаштовує свій власний kubeconfig (без виклику update-kubeconfig) як було пояснено раніше, get-token не генерує журнали в Cloudtrail, оскільки не взаємодіє з AWS API (просто створює токен локально).

Отже, коли зловмисник спілкується з кластером EKS, cloudtrail не зафіксує нічого, що стосується вкраденого користувача та доступу до нього.

Зверніть увагу, що кластер EKS може мати увімкнені журнали, які зафіксують цей доступ (хоча за замовчуванням вони вимкнені).

Вимога викупу EKS?

За замовчуванням користувач або роль, яка створила кластер, ЗАВЖДИ матиме адміністративні привілеї над кластером. І це єдиний "безпечний" доступ, який AWS матиме до кластеру Kubernetes.

Отже, якщо зловмисник компрометує кластер, використовуючи fargate і видаляє всіх інших адміністраторів та видаляє користувача/роль AWS, яка створила кластер, зловмисник міг би вимагати викуп за кластер**.

Зверніть увагу, що якщо кластер використовує EC2 VMs, може бути можливим отримати адміністративні привілеї з Node і відновити кластер.

Насправді, якщо кластер використовує Fargate, ви могли б EC2 вузли або перемістити все до EC2 в кластер і відновити його, отримуючи токени в вузлі.

Підтримати HackTricks

Last updated