Модуль 4.1: Поверхні атак
Складність:
[СЕРЕДНЯ]- Обізнаність щодо загрозЧас на виконання: 25-30 хвилин
Передумови: Модуль 3.5: Мережеві політики
Що ви зможете робити
Розділ «Що ви зможете робити»Після завершення цього модуля ви зможете:
- Визначити поверхні атак Kubernetes через API server, kubelet, etcd та container runtime
- Оцінити які вектори атак становлять найбільший ризик у даній конфігурації кластера
- Оцінити зовнішніх та внутрішніх зловмисників та їхні ймовірні точки входу
- Спроєктувати стратегії зменшення поверхні атаки шляхом відключення непотрібних точок доступу та функцій
Чому цей модуль важливий
Розділ «Чому цей модуль важливий»Щоб захистити систему, потрібно розуміти, як її можуть атакувати. Поверхня атаки — це сума всіх точок, через які зловмисник може спробувати проникнути або витягнути дані. Kubernetes має велику поверхню атаки через свою складність — розуміння цього допомагає визначати пріоритети безпеки.
Моделювання загроз є основною навичкою безпеки, і KCSA перевіряє вашу здатність ідентифікувати та оцінювати вектори атак.
Що таке поверхня атаки?
Розділ «Що таке поверхня атаки?»┌─────────────────────────────────────────────────────────────┐│ ВИЗНАЧЕННЯ ПОВЕРХНІ АТАКИ │├─────────────────────────────────────────────────────────────┤│ ││ Поверхня атаки = Усі точки входу, які може ││ використати зловмисник ││ ││ БІЛЬША ПОВЕРХНЯ АТАКИ: ││ • Більше відкритих сервісів ││ • Більше відкритих портів ││ • Більше користувачів з доступом ││ • Складніші конфігурації ││ = Більше можливостей для зловмисників ││ ││ МЕНША ПОВЕРХНЯ АТАКИ: ││ • Мінімум відкритих сервісів ││ • Обмежений мережевий доступ ││ • Мало привілейованих користувачів ││ • Прості, зміцнені конфігурації ││ = Менше можливостей для зловмисників ││ ││ МЕТА: Мінімізувати поверхню атаки, зберігаючи ││ функціональність ││ │└─────────────────────────────────────────────────────────────┘Поверхні атак Kubernetes
Розділ «Поверхні атак Kubernetes»┌─────────────────────────────────────────────────────────────┐│ КАРТА ПОВЕРХНІ АТАК KUBERNETES │├─────────────────────────────────────────────────────────────┤│ ││ ЗОВНІШНЯ ПОВЕРХНЯ АТАКИ (ззовні кластера) ││ ┌─────────────────────────────────────────────────────┐ ││ │ • API-сервер Kubernetes │ ││ │ • Ingress/Load Balancers │ ││ │ • Сервіси NodePort │ ││ │ • SSH до вузлів │ ││ │ • API хмарного провайдера │ ││ │ • Реєстри контейнерів │ ││ └─────────────────────────────────────────────────────┘ ││ ││ ВНУТРІШНЯ ПОВЕРХНЯ АТАКИ (зсередини кластера) ││ ┌─────────────────────────────────────────────────────┐ ││ │ • Мережа pod-to-pod │ ││ │ • Kubernetes API (з подів) │ ││ │ • kubelet API │ ││ │ • etcd │ ││ │ • Токени службових облікових записів │ ││ │ • Secrets │ ││ │ • Файлова система хоста (якщо змонтована) │ ││ │ • Середовище виконання контейнерів │ ││ └─────────────────────────────────────────────────────┘ ││ ││ ПОВЕРХНЯ АТАКИ ЛАНЦЮГА ПОСТАЧАННЯ ││ ┌─────────────────────────────────────────────────────┐ ││ │ • Образи контейнерів │ ││ │ • Базові образи │ ││ │ • Залежності застосунків │ ││ │ • Конвеєри CI/CD │ ││ │ • Helm-чарти/маніфести │ ││ └─────────────────────────────────────────────────────┘ ││ │└─────────────────────────────────────────────────────────────┘Зовнішня поверхня атаки
Розділ «Зовнішня поверхня атаки»Відкритість API-сервера
Розділ «Відкритість API-сервера»┌─────────────────────────────────────────────────────────────┐│ ПОВЕРХНЯ АТАКИ API-СЕРВЕРА │├─────────────────────────────────────────────────────────────┤│ ││ ПУБЛІЧНИЙ API-СЕРВЕР ││ • Доступний з інтернету ││ • Ціль для брутфорсу ││ • Ціль для credential stuffing ││ • Вразливий до експлойтів API ││ ││ СЦЕНАРІЇ АТАК: ││ 1. Вкрадені облікові дані → Повний доступ до кластера ││ 2. Увімкнений анонімний доступ → Витік інформації ││ 3. Вразливість API → Віддалене виконання коду ││ 4. Неправильна конфігурація RBAC → Підвищення привілеїв ││ ││ ЗАХОДИ ЗАХИСТУ: ││ • Приватна точка доступу API (потрібен VPN/bastion) ││ • Сильна автентифікація (OIDC, сертифікати) ││ • Вимкнути анонімну автентифікацію ││ • Правила мережевого брандмауера ││ • Журналювання аудиту API ││ │└─────────────────────────────────────────────────────────────┘Поверхня атаки Ingress
Розділ «Поверхня атаки Ingress»┌─────────────────────────────────────────────────────────────┐│ ПОВЕРХНЯ АТАКИ INGRESS │├─────────────────────────────────────────────────────────────┤│ ││ ЩО ВІДКРИТО: ││ • Ingress-контролер (nginx, traefik тощо) ││ • Бекенд-застосунки через ingress ││ • Точка завершення TLS ││ ││ СЦЕНАРІЇ АТАК: ││ 1. Вразливість ingress-контролера ││ 2. Вразливості застосунків (OWASP Top 10) ││ 3. Неправильна маршрутизація (host header атаки) ││ 4. Проблеми з TLS/сертифікатами ││ 5. Обхід шляху до непередбачених бекендів ││ ││ ЗАХОДИ ЗАХИСТУ: ││ • Оновлювати ingress-контролер ││ • WAF (Web Application Firewall) ││ • Суворі правила ingress ││ • Сильна конфігурація TLS ││ • Обмеження швидкості запитів ││ │└─────────────────────────────────────────────────────────────┘Внутрішня поверхня атаки
Розділ «Внутрішня поверхня атаки»З компрометованого поду
Розділ «З компрометованого поду»┌─────────────────────────────────────────────────────────────┐│ ПОВЕРХНЯ АТАКИ НА РІВНІ ПОДУ │├─────────────────────────────────────────────────────────────┤│ ││ СЦЕНАРІЙ: Зловмисник компрометує застосунок у поді ││ ││ ДО ЧОГО ВОНИ МАЮТЬ ДОСТУП: ││ ││ ЗАВЖДИ ДОСТУПНО: ││ ├── Файлова система контейнера ││ ├── Змінні середовища (можуть містити секрети) ││ ├── Змонтовані томи ││ └── Мережа (всі поди за замовчуванням) ││ ││ ЯКЩО ТОКЕН ЗМОНТОВАНО (за замовчуванням): ││ ├── Доступ до Kubernetes API ││ ├── Дозволи службового облікового запису ││ └── Secrets, доступні через RBAC ││ ││ ЯКЩО НЕПРАВИЛЬНО НАЛАШТОВАНО: ││ ├── privileged: true → Доступ до хоста ││ ├── Монтування hostPath → Файлова система хоста ││ ├── hostNetwork → Мережа хоста ││ ├── hostPID → Процеси хоста ││ └── Надмірний RBAC → Компрометація кластера ││ │└─────────────────────────────────────────────────────────────┘Поверхня атаки kubelet
Розділ «Поверхня атаки kubelet»┌─────────────────────────────────────────────────────────────┐│ ПОВЕРХНЯ АТАКИ KUBELET │├─────────────────────────────────────────────────────────────┤│ ││ KUBELET API (порт 10250) ││ • /exec - Виконання команд у контейнерах ││ • /run - Запуск команд ││ • /pods - Список подів ││ • /logs - Читання журналів ││ ││ СЦЕНАРІЇ АТАК: ││ 1. Анонімний доступ до kubelet → Виконання в будь-якому ││ контейнері ││ 2. Компрометація вузла → Вкрадені облікові дані kubelet ││ 3. Мережевий доступ до kubelet → Обхід автентифікації ││ API-сервера ││ ││ ЗАХОДИ ЗАХИСТУ: ││ • Вимкнути анонімну автентифікацію ││ • Вимкнути порт тільки для читання (10255) ││ • Мережева ізоляція для kubelet ││ • Режим авторизації Node ││ │└─────────────────────────────────────────────────────────────┘Поверхня атаки за типом суб’єкта
Розділ «Поверхня атаки за типом суб’єкта»┌─────────────────────────────────────────────────────────────┐│ СУБ'ЄКТИ ЗАГРОЗ │├─────────────────────────────────────────────────────────────┤│ ││ ЗОВНІШНІЙ ЗЛОВМИСНИК ││ • Немає початкового доступу ││ • Цілі: Відкриті сервіси, вкрадені облікові дані ││ • Мета: Початковий плацдарм ││ ││ КОМПРОМЕТОВАНИЙ ПОД ││ • Обмежений доступ до контейнера ││ • Цілі: Інші поди, секрети, API, втеча з контейнера ││ • Мета: Горизонтальне переміщення, ескалація ││ ││ ЗЛОВМИСНИЙ ІНСАЙДЕР ││ • Легітимні облікові дані ││ • Цілі: Зловживання дозволами, встановлення бекдорів ││ • Мета: Крадіжка даних, закріплення ││ ││ ЗЛОВМИСНИК ЛАНЦЮГА ПОСТАЧАННЯ ││ • Компрометує довірені компоненти ││ • Цілі: Образи, залежності, CI/CD ││ • Мета: Масова компрометація ││ ││ КОЖЕН СУБ'ЄКТ МАЄ РІЗНУ ПОВЕРХНЮ АТАКИ ││ │└─────────────────────────────────────────────────────────────┘Зменшення поверхні атаки
Розділ «Зменшення поверхні атаки»Принцип: мінімізація відкритості
Розділ «Принцип: мінімізація відкритості»┌─────────────────────────────────────────────────────────────┐│ ЗМЕНШЕННЯ ПОВЕРХНІ АТАКИ │├─────────────────────────────────────────────────────────────┤│ ││ МЕРЕЖА ││ ☐ Приватна точка доступу API-сервера ││ ☐ Мережеві політики (заборона за замовчуванням) ││ ☐ Без непотрібних сервісів NodePort/LoadBalancer ││ ☐ Правила брандмауера для доступу до вузлів ││ ││ АВТЕНТИФІКАЦІЯ ││ ☐ Вимкнути анонімну автентифікацію (API-сервер, kubelet) ││ ☐ Короткочасні облікові дані ││ ☐ Сильна автентифікація (MFA, сертифікати) ││ ││ НАВАНТАЖЕННЯ ││ ☐ Без привілейованих контейнерів ││ ☐ Без спільного доступу до просторів імен хоста ││ ☐ Кореневий файлова система тільки для читання ││ ☐ Вимкнути монтування токена службового облікового запису ││ ☐ Мінімальні образи контейнерів ││ ││ ВУЗЛИ ││ ☐ Мінімальна ОС (Bottlerocket, Flatcar) ││ ☐ Вимкнути SSH, якщо можливо ││ ☐ Регулярне оновлення ││ │└─────────────────────────────────────────────────────────────┘Чи знали ви?
Розділ «Чи знали ви?»-
Медіанний час виявлення порушення у хмарних середовищах перевищує 200 днів. Зменшення поверхні атаки означає менше місць для приховування.
-
70% порушень включають горизонтальне переміщення після початкового доступу. Зменшення внутрішньої поверхні атаки є таким же важливим, як і захист периметра.
-
Образи контейнерів у середньому містять 400+ пакетів — кожен є частиною вашої поверхні атаки. Мінімальні образи значно зменшують відкритість.
-
API-сервер Kubernetes є однією з найпоширеніших цілей, оскільки надає прямий доступ до кластера.
Поширені помилки
Розділ «Поширені помилки»| Помилка | Чому це шкодить | Рішення |
|---|---|---|
| Публічний API-сервер | Пряма ціль атаки | Приватна точка доступу + VPN |
| Стандартні токени ServiceAccount | Непотрібний доступ до API | Вимкнути автомонтування |
| Мережеві політики “дозволити все” | Повне горизонтальне переміщення | Заборона за замовчуванням |
| Привілейовані поди | Можлива компрометація хоста | Pod Security Standards |
| Великі образи контейнерів | Велика поверхня атаки | Мінімальні/distroless образи |
Перевірка знань
Розділ «Перевірка знань»-
Що становить зовнішню поверхню атаки кластера Kubernetes?
Відповідь
Точки входу, доступні ззовні кластера: API-сервер, ingress-контролери, сервіси LoadBalancer, сервіси NodePort, SSH-доступ до вузлів та будь-які інші зовнішньо відкриті точки доступу. -
Чому kubelet API є значною поверхнею атаки?
Відповідь
Kubelet API дозволяє виконувати команди в контейнерах, читати журнали та отримувати список подів. Якщо він не захищений належним чином (вимкнена анонімна автентифікація, обмежена мережа), його можна використати для контролю будь-якого контейнера на вузлі. -
Як компрометований под зазвичай розширює свою поверхню атаки?
Відповідь
Через доступ до токена ServiceAccount для запитів до Kubernetes API, сканування мережі для пошуку інших сервісів, читання змонтованих секретів/томів, і, якщо неправильно налаштовано, втечу на хост через привілейовані налаштування. -
Яка різниця між зовнішньою та внутрішньою поверхнею атаки?
Відповідь
Зовнішня поверхня атаки — це те, що доступно ззовні кластера (з інтернету). Внутрішня поверхня атаки — це те, що доступно зсередини кластера (pod-to-pod, API з подів). Обидві потребують захисту. -
Чому мінімальні образи контейнерів зменшують поверхню атаки?
Відповідь
Менше пакетів означає менше потенційних вразливостей, менше інструментів для зловмисників у разі компрометації контейнера та меншу складність для аудиту й оновлення.
Практична вправа: Оцінка поверхні атаки
Розділ «Практична вправа: Оцінка поверхні атаки»Сценарій: Перегляньте цю конфігурацію кластера та визначте проблеми поверхні атаки:
# API Server flags--anonymous-auth=true--authorization-mode=AlwaysAllow
# Kubelet configauthentication: anonymous: enabled: truereadOnlyPort: 10255
# Sample podapiVersion: v1kind: Podspec: hostNetwork: true hostPID: true containers: - name: app image: ubuntu:latest securityContext: privileged: trueПерелічіть проблеми поверхні атаки:
Проблеми поверхні атаки
API-сервер:
anonymous-auth=true— будь-хто може отримати доступ до API без автентифікаціїauthorization-mode=AlwaysAllow— немає авторизації, всі запити дозволені
Kubelet:
3. anonymous.enabled: true — kubelet API доступний без автентифікації
4. readOnlyPort: 10255 — витік інформації, перелік подів
Под:
5. hostNetwork: true — под використовує мережу хоста, може перехоплювати трафік
6. hostPID: true — под може бачити всі процеси хоста
7. privileged: true — повний доступ до хоста, тривіальна втеча з контейнера
8. ubuntu:latest — великий образ з багатьма пакетами, змінний тег
Вплив:
- Зовнішні зловмисники можуть отримати доступ до API без автентифікації
- Будь-який компрометований под має повний доступ до хоста
- Kubelet доступний для виконання команд у контейнерах
- Інформація легко доступна для розвідки
Підсумок
Розділ «Підсумок»Поверхня атаки — це сума всіх точок входу:
| Тип поверхні | Приклади | Стратегія зменшення |
|---|---|---|
| Зовнішня | API-сервер, Ingress, NodePort | Приватні точки доступу, брандмауери |
| Внутрішня | Мережа подів, kubelet, API з подів | Мережеві політики, вимкнення токенів |
| Ланцюг постачання | Образи, залежності, CI/CD | Сканування, підписування, мінімальні образи |
Ключові принципи:
- Що не відкрито — не може бути атаковано
- Мінімізуйте привілеї на кожному рівні
- Припускайте порушення, обмежуйте радіус ураження
- Різні суб’єкти мають різні поверхні атак
Наступний модуль
Розділ «Наступний модуль»Модуль 4.2: Поширені вразливості — Розуміння CVE та неправильних конфігурацій у Kubernetes.