Kubernetes Enumeration
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Якщо ви отримали доступ до машини, користувач може мати доступ до деякої платформи Kubernetes. Токен зазвичай знаходиться у файлі, на який вказує env var KUBECONFIG
або всередині ~/.kube
.
У цій папці ви можете знайти конфігураційні файли з токенами та конфігураціями для підключення до API сервера. У цій папці ви також можете знайти кеш-папку з інформацією, яка була отримана раніше.
Якщо ви отримали доступ до поду всередині середовища kubernetes, є інші місця, де ви можете знайти токени та інформацію про поточне середовище K8:
Перед тим, як продовжити, якщо ви не знаєте, що таке сервіс у Kubernetes, я б порадив вам перейти за цим посиланням і прочитати принаймні інформацію про архітектуру Kubernetes.
Витягнуто з документації:
“Коли ви створюєте под, якщо ви не вказуєте обліковий запис служби, він автоматично отримує обліковий запис служби за замовчуванням у тому ж просторі імен.”
ServiceAccount — це об'єкт, керований Kubernetes, і використовується для надання ідентичності для процесів, які працюють у поді. Кожен обліковий запис служби має секрет, пов'язаний з ним, і цей секрет містить токен доступу. Це JSON Web Token (JWT), метод для безпечного представлення вимог між двома сторонами.
Зазвичай один з каталогів:
/run/secrets/kubernetes.io/serviceaccount
/var/run/secrets/kubernetes.io/serviceaccount
/secrets/kubernetes.io/serviceaccount
містить файли:
ca.crt: Це сертифікат ca для перевірки комунікацій kubernetes
namespace: Він вказує на поточний простір імен
token: Він містить токен служби поточного поду.
Тепер, коли у вас є токен, ви можете знайти API сервер всередині змінної середовища KUBECONFIG
. Для отримання додаткової інформації виконайте (env | set) | grep -i "kuber|kube
"
Токен облікового запису служби підписується ключем, що знаходиться у файлі sa.key, і перевіряється sa.pub.
За замовчуванням місце розташування на Kubernetes:
/etc/kubernetes/pki
За замовчуванням місце розташування на Minikube:
/var/lib/localkube/certs
Гарячі поди — це поди, що містять токен облікового запису служби з привілегіями. Токен облікового запису служби з привілегіями — це токен, який має дозвіл на виконання привілейованих завдань, таких як перерахування секретів, створення подів тощо.
Якщо ви не знаєте, що таке RBAC, прочитайте цей розділ.
k9s: GUI, яка перераховує кластер kubernetes з терміналу. Перевірте команди в https://k9scli.io/topics/commands/. Напишіть :namespace
і виберіть усі, щоб потім шукати ресурси в усіх просторах імен.
k8slens: Пропонує кілька безкоштовних днів пробного періоду: https://k8slens.dev/
Щоб перерахувати середовище K8, вам потрібно кілька з цього:
дійсний токен аутентифікації. У попередньому розділі ми бачили, де шукати токен користувача та токен облікового запису служби.
адреса (https://host:port) API Kubernetes. Це зазвичай можна знайти у змінних середовища та/або у файлі конфігурації kube.
Необов'язково: ca.crt для перевірки API сервера. Це можна знайти в тих же місцях, де можна знайти токен. Це корисно для перевірки сертифіката API сервера, але використовуючи --insecure-skip-tls-verify
з kubectl
або -k
з curl
, вам не знадобиться це.
З цими деталями ви можете перерахувати kubernetes. Якщо API з якоїсь причини доступний через Інтернет, ви можете просто завантажити цю інформацію та перерахувати платформу з вашого хоста.
Однак зазвичай API сервер знаходиться всередині внутрішньої мережі, тому вам потрібно буде створити тунель через скомпрометовану машину, щоб отримати до нього доступ з вашої машини, або ви можете завантажити kubectl бінарний файл, або використовувати curl/wget/anything
для виконання сирих HTTP запитів до API сервера.
list
and get
verbsЗ get
дозволами ви можете отримати інформацію про конкретні активи (опція describe
у kubectl
) API:
Якщо у вас є list
дозвіл, вам дозволено виконувати API запити для переліку типу активу (get
опція в kubectl
):
Якщо у вас є watch
дозвіл, ви маєте право виконувати API запити для моніторингу активів:
Вони відкривають стрімінгове з'єднання, яке повертає вам повний маніфест Деплойменту щоразу, коли він змінюється (або коли створюється новий).
Наступні команди kubectl
вказують, як просто перерахувати об'єкти. Якщо ви хочете отримати доступ до даних, вам потрібно використовувати describe
замість get
Зсередини поду ви можете використовувати кілька змінних середовища:
За замовчуванням под може доступатися до kube-api сервера за доменним ім'ям kubernetes.default.svc
і ви можете побачити kube мережу в /etc/resolv.config
, оскільки тут ви знайдете адресу DNS сервера kubernetes (".1" того ж діапазону є кінцевою точкою kube-api).
Маючи токен і адресу API сервера, ви використовуєте kubectl або curl для доступу до нього, як вказано тут:
За замовчуванням, APISERVER спілкується за схемою https://
якщо в URL немає
https://
, ви можете отримати помилку, схожу на Bad Request.
Ви можете знайти офіційний чіт-лист kubectl тут. Мета наступних розділів - представити в упорядкованому вигляді різні варіанти для перерахунку та розуміння нового K8s, до якого ви отримали доступ.
Щоб знайти HTTP-запит, який надсилає kubectl
, ви можете використовувати параметр -v=8
Якщо вам вдалося вкрасти облікові дані деяких користувачів, ви можете налаштувати їх локально за допомогою чогось на зразок:
З цією інформацією ви дізнаєтеся про всі сервіси, які ви можете перерахувати
Інший спосіб перевірити свої привілеї - це використання інструменту: https://github.com/corneliusweig/rakkess****
Ви можете дізнатися більше про Kubernetes RBAC в:
Kubernetes Role-Based Access Control(RBAC)Якщо ви знаєте, які привілеї у вас є, перевірте наступну сторінку, щоб з'ясувати, чи можете ви їх зловживати для ескалації привілеїв:
Abusing Roles/ClusterRoles in KubernetesKubernetes підтримує декілька віртуальних кластерів, які базуються на одному фізичному кластері. Ці віртуальні кластери називаються просторами імен.
Якщо ви можете читати секрети, ви можете використовувати наступні рядки, щоб отримати привілеї, пов'язані з кожним токеном:
Як обговорювалося на початку цієї сторінки, коли запускається под, зазвичай йому призначається обліковий запис служби. Тому, якщо перерахувати облікові записи служб, їхні дозволи та де вони працюють, це може дозволити користувачу підвищити привілеї.
Розгортання вказують на компоненти, які потрібно запустити.
Pods - це фактичні контейнери, які будуть запускатися.
Kubernetes сервіси використовуються для експонування сервісу на конкретному порту та IP (який буде діяти як балансувальник навантаження для подів, які насправді пропонують сервіс). Це цікаво знати, де ви можете знайти інші сервіси, щоб спробувати атакувати.
Отримати всі вузли, налаштовані всередині кластера.
DaeamonSets дозволяє забезпечити, щоб конкретний pod працював на всіх вузлах кластера (або на вибраних). Якщо ви видалите DaemonSet, pods, якими він керує, також будуть видалені.
Cron jobs дозволяють запланувати запуск поду, який виконає певну дію, використовуючи синтаксис, подібний до crontab.
configMap завжди містить багато інформації та конфігураційних файлів, які надаються додаткам, що працюють у kubernetes. Зазвичай ви можете знайти багато паролів, секретів, токенів, які використовуються для підключення та валідації до інших внутрішніх/зовнішніх сервісів.
Якщо ви можете створювати нові поди, ви можете вийти з них на вузол. Для цього вам потрібно створити новий под, використовуючи файл yaml, переключитися на створений под, а потім chroot у систему вузла. Ви можете використовувати вже існуючі поди як посилання для файлу yaml, оскільки вони відображають існуючі образи та шляхи.
якщо вам потрібно створити pod на конкретному вузлі, ви можете використати наступну команду, щоб отримати мітки на вузлі
k get nodes --show-labels
Зазвичай, kubernetes.io/hostname та node-role.kubernetes.io/master є хорошими мітками для вибору.
Тоді ви створюєте свій attack.yaml файл
Після цього ви створюєте pod
Тепер ви можете переключитися на створений pod наступним чином
І нарешті ви chroot у систему вузла
Information obtained from: Kubernetes Namespace Breakout using Insecure Host Path Volume — Part 1 Attacking and Defending Kubernetes: Bust-A-Kube – Episode 1
Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)