Pentesting Kubernetes Services
Last updated
Last updated
Learn & practice AWS Hacking: Learn & practice GCP Hacking:
Kubernetes використовує кілька специфічних мережевих сервісів, які ви можете знайти відкритими в Інтернеті або в внутрішній мережі, як тільки ви зможете зламати один под.
Один із способів може бути пошук Identity LIKE "k8s.%.com"
на для знаходження піддоменів, пов'язаних з kubernetes. Інший спосіб може бути пошук "k8s.%.com"
в github і пошук YAML файлів, що містять рядок.
Може бути корисно для вас зрозуміти, як Kubernetes може викривати сервіси публічно, щоб знайти їх:
Наступні порти можуть бути відкритими в кластері Kubernetes:
Це API Kubernetes сервіс, з яким зазвичай спілкуються адміністратори, використовуючи інструмент kubectl
.
Звичайні порти: 6443 та 443, але також 8443 у minikube та 8080 як незахищений.
Перевірте наступну сторінку, щоб дізнатися, як отримати чутливі дані та виконати чутливі дії, спілкуючись з цим сервісом:
Цей сервіс працює на кожному вузлі кластера. Це сервіс, який контролює поди всередині вузла. Він спілкується з kube-apiserver.
Якщо ви знайдете цей сервіс, що підлягає експозиції, ви, можливо, виявили неаутентифіковане RCE.
Якщо відповідь Unauthorized
, це означає, що потрібна аутентифікація.
Якщо ви можете перерахувати вузли, ви можете отримати список кінцевих точок kubelets за допомогою:
Ви можете зловживати цим сервісом для ескалації привілеїв всередині Kubernetes:
Сервіс, корисний для збору метрик.
Коли порт відкритий на всіх вузлах через NodePort, той самий порт відкритий на всіх вузлах, проксуючи трафік у оголошений Service. За замовчуванням цей порт буде в діапазоні 30000-32767. Тому нові неперевірені сервіси можуть бути доступні через ці порти.
Анонімний доступ до kube-apiserver API кінцевих точок не дозволено. Але ви можете перевірити деякі кінцеві точки:
ETCD зберігає секрети кластера, конфігураційні файли та інші чутливі дані. За замовчуванням ETCD не може бути доступним анонімно, але завжди добре перевірити.
Дозволяє анонімні запити до сервера Kubelet. Запити, які не відхилені іншим методом аутентифікації, розглядаються як анонімні запити. Анонімні запити мають ім'я користувача
system:anonymous
та ім'я групиsystem:unauthenticated
Щоб краще зрозуміти, як працює аутентифікація та авторизація API Kubelet, перегляньте цю сторінку:
API сервісу Kubelet не документований, але вихідний код можна знайти тут, і знайти відкриті кінцеві точки так само просто, як виконати:
Усі вони звучать цікаво.
Ця кінцева точка перераховує поди та їхні контейнери:
Цей кінцевий пункт дозволяє дуже легко виконувати код всередині будь-якого контейнера:
Щоб уникнути цієї атаки, служба kubelet повинна працювати з параметром --anonymous-auth false
, а служба повинна бути сегрегована на мережевому рівні.
Коли порт kubelet тільки для читання відкритий, стає можливим отримання інформації з API несанкціонованими особами. Витік цього порту може призвести до розкриття різних елементів конфігурації кластера. Хоча інформація, включаючи імена подів, розташування внутрішніх файлів та інші конфігурації, може не бути критично важливою, її витік все ще становить загрозу безпеці і повинен бути уникнутий.
Приклад того, як цю вразливість можна експлуатувати, включає віддаленого зловмисника, який отримує доступ до конкретного URL. Перейшовши за адресою http://<external-IP>:10255/pods
, зловмисник може потенційно отримати чутливу інформацію з kubelet:
Якщо ETCD можна отримати анонімно, вам може знадобитися використати інструмент. Наступна команда отримає всі збережені ключі:
Документація пояснює, що за замовчуванням анонімний доступ до сервісу дозволений:
Ви можете використовувати інструмент для взаємодії з Kubelet та їхніми кінцевими точками.
Вивчайте та практикуйте Hacking AWS: Вивчайте та практикуйте Hacking GCP:
Перевірте !
Приєднуйтесь до 💬 або або слідкуйте за нами в Twitter 🐦 .
Діліться хакерськими трюками, надсилаючи PR до та репозиторіїв на GitHub.
443/TCP
kube-apiserver
Порт API Kubernetes
2379/TCP
etcd
6666/TCP
etcd
etcd
4194/TCP
cAdvisor
Метрики контейнерів
6443/TCP
kube-apiserver
Порт API Kubernetes
8443/TCP
kube-apiserver
Порт API Minikube
8080/TCP
kube-apiserver
Небезпечний порт API
10250/TCP
kubelet
HTTPS API, який дозволяє повний доступ
10255/TCP
kubelet
Неавтентифікований порт HTTP тільки для читання: поди, запущені поди та стан вузла
10256/TCP
kube-proxy
Сервер перевірки стану Kube Proxy
9099/TCP
calico-felix
Сервер перевірки стану для Calico
6782-4/TCP
weave
Метрики та кінцеві точки
30000-32767/TCP
NodePort
Проксі для сервісів
44134/TCP
Tiller
Служба Helm, що слухає