В этом практическом руководстве, мы познакомимся с Kubernetes (K8s) с точки зрения пентестера, а именно с основами, терминологией и методами исследования экземпляров Kubernetes. Для начала давайте разберёмся, что такое Kubernetes, и его терминологией.
Kubernetes — это система с открытым исходным кодом для автоматизации развертывания и управления контейнеризированными приложениями на множестве серверов, объединённых в кластер. Существует официальный глоссарий, но ниже приведены ключевые понятия, с которыми стоит ознакомиться:
Pod (Под) — наименьшая единица в экосистеме Kubernetes: группа контейнеров, совместно выполняемых на одном узле кластера.
Node (Узел) — физическая или виртуальная машина, на которой запускаются поды. Каждый узел содержит kubelet и kube-proxy.
Kubelet — это агент, который работает на каждом узле в кластере. Он взаимодействует с API-сервером Kubernetes, что гарантирует работу подов, а также регистрирует и отслеживает состояние узлов в кластере.
Kube-proxy — сетевой посредник, запускаемый на каждом узле кластера Kubernetes. Он преобразует определения служб в действующие сетевые правила, поддерживая сетевую связность служб и подов.
Cluster (Кластер) — набор узлов, который включает в себя управляющий узел и набор рабочих узлов, запускающих контейнерные приложения.
Container (Контейнер) — это изолированная среда, в которой запускаются приложения вместе со всеми их зависимостями. Контейнеры создают отдельное пространство процессов и файловой системы, позволяя запускать приложения независимо друг от друга на одной машине.
etcd — распределённое хранилище в формате ключ-значение, используемое для хранения конфигурации, состояния и метаданных кластера.
kubectl — CLI-инструмент (командная строка) для взаимодействия с API-сервером Kubernetes.
Kubernetes API Server — это компонент, который является центральной точкой управления кластером Kubernetes. Он управляет всеми коммуникациями между пользователями, внешними инструментами и внутренними компонентами кластера.
Kube-scheduler — это компонент, который отвечает за планирование запуска контейнеров на рабочих нодах в кластере.
Deployment (Деплоймент)— это объект, который управляет жизненным циклом контейнеров и обеспечивает стабильное развёртывание, обновление и масштабирование приложений.
Namespace (Пространство имён) — виртуальный кластер в рамках физического, позволяющий изолировать ресурсы и управлять неймингом контейнеров, сервисов и деплойментов.
Теперь обсудим kubectl — основной инструмент для взаимодействия с Kubernetes-инстансами. Его можно установить через Homebrew:
brew install kubectl
или
brew install kubernetes-cli

Чтобы kubectl мог обнаружить и подключиться к кластеру, требуется файл конфигурации kubeconfig.

Проверьте, правильно ли настроен kubectl, проверив информацию о кластере:
kubectl cluster-info
Некоторые полезные команды:
kubectl get pods -A # Список всех подов во всех пространствах имён
kubectl get secrets # Получение секретов
kubectl get services # Получение сервисов
kubectl version # Проверка версии клиента и сервера
Когда вы освоили базовые команды, можно переходить к обнаружению и анализу типичных уязвимостей в инстансах Kubernetes. Начнём с утечки информации. Много данных можно получить через поиск по crt.sh и Google — ищите поддомены вроде k8s.*.com. Также попробуйте запрос k8s.%.com + github и обратите внимание на YAML-файлы с соответствующими строками.
Инструменты Censys и Shodan также отлично подходят для этой задачи. Вот список запросов, которые помогут вам в поиске:
kubernetesDashboard
kubernetes
k8s
kubernetes master или kubernetes control plane
openshift
swarm
product:etcd
k8s.io
apiserver
k8s_node, k8s-cluster-etcd, kubeadm-master, kubemaster-etcd
services.kubernetes.kubernetes_dashboard_found

Такие инструменты, как Kubernetes Dashboard, Weave Scope и Lens, используются для визуального представления кластеров. Данные панели управления значительно упрощают работу. При неправильной настройке этих панелей администратором, их можно найти через Shodan или Censys.
Если вы исследуете целевую инфраструктуру, в которой используется Kubernetes, то при сканировании сети вы можете обнаружить следующие открытые порты и службы:
Порт |
Процесс |
Назначение |
---|---|---|
443/TCP |
kube-apiserver |
API-интерфейс Kubernetes |
2379/TCP |
etcd |
API-хранилище etcd |
6666/TCP |
etcd |
etcd |
4194/TCP |
cAdvisor |
Метрики контейнеров |
6443/TCP |
kube-apiserver |
Основной API-порт |
8443/TCP |
kube-apiserver |
API-порт Minikube |
8080/TCP |
kube-apiserver |
API-порт без шифрования |
10250/TCP |
kubelet |
Полный доступ через HTTPS |
10255/TCP |
kubelet |
Read-only HTTP-интерфейс: информация о подах и состоянии узлов |
10256/TCP |
kube-proxy |
Проверка состояния прокси |
9099/TCP |
calico-felix |
Проверка состояния Calico |
6782–6784 |
weave |
Метрики и конечные точки |
30000–32767 |
NodePort |
Прокси-доступ к сервисам |
44134/TCP |
Tiller |
Служба Helm |
API-сервер Kubernetes чаще всего доступен по портам 6443 и 443, в случае Minikube — по 8443, а для незашифрованного доступа — 8080.
Вот некоторые примеры curl-запросов к API-серверу, которые могут дать полезную информацию:
curl -k https://<IP>:6443/swaggerapi
curl -k https://<IP>:6443/healthz
curl -k https://<IP>:6443/api/v1
Примеры запросов к etcd API:
curl -k https://<IP>:2379
curl -k https://<IP>:2379/version
etcdctl --endpoints=http://<IP>:2379 get / --prefix --keys-only
Распространённая ошибка конфигурации Kubernetes — это оставление открытых API эндопинтов. Если обратиться к IP-адресу управляющего узла, то можно увидеть список доступных путей:
https://:<CONTROL-PANEL-IP>:
/api
/api/v1
/apis
/apis/admissionregistration.k8s.io
/apis/apiextensions.k8s.io
/apis/apiregistration.k8s.io/v1
/apis/apps/v1
/apis/authentication.k8s.io/v1
/apis/authorization.k8s.io/v1beta
/apis/autoscaling/v1
/apis/batch/v1
/apis/certificates.k8s.io/v1
Порт cAdvisor также может раскрыть метрики контейнеров:
curl -k https://<IP>:4194
Если kube-apiserver доступен без TLS, то можно использовать:
curl -k http://<IP>:8080
Доступ к порту 10255 (read-only API kubelet) может позволить извлечь информацию о конфигурации кластера, именах подов, расположении внутренних файлов и прочих данных, пригодных для дальнейших атак:
curl -k http://<IP>:10255/pods
anaaylin
NSFW AI : https://replicate.com/generators-ai-nsfw/best-ai-sexting