Перейти до вмісту

Модуль 4.2: Поширені вразливості

Складність: [СЕРЕДНЯ] - Обізнаність щодо загроз

Час на виконання: 25-30 хвилин

Передумови: Модуль 4.1: Поверхні атак


Що ви зможете робити

Розділ «Що ви зможете робити»

Після завершення цього модуля ви зможете:

  • Визначити поширені категорії вразливостей Kubernetes: CVE, неправильні конфігурації та небезпечні значення за замовчуванням
  • Оцінити серйозність вразливостей за допомогою CVSS-балів та контексту експлуатованості
  • Оцінити різницю між вразливостями коду та вразливостями конфігурації
  • Пояснити стратегії пом’якшення для найпоширеніших шаблонів вразливостей Kubernetes

Чому цей модуль важливий

Розділ «Чому цей модуль важливий»

Розуміння поширених вразливостей допомагає передбачати атаки та визначати пріоритети захисту. Вразливості Kubernetes бувають двох видів: вразливості коду (CVE) та неправильні конфігурації. Обидва можуть призвести до компрометації кластера, але неправильні конфігурації зустрічаються значно частіше.

KCSA перевіряє вашу обізнаність щодо поширених шаблонів вразливостей та заходів їх зменшення.


Категорії вразливостей

Розділ «Категорії вразливостей»
┌─────────────────────────────────────────────────────────────┐
│ ТИПИ ВРАЗЛИВОСТЕЙ KUBERNETES │
├─────────────────────────────────────────────────────────────┤
│ │
│ CVE (Вразливості коду) │
│ • Помилки в Kubernetes, середовищі виконання контейнерів │
│ або залежностях │
│ • Потребують виправлення для усунення │
│ • Відстежуються за ідентифікаторами CVE │
│ • Приклади: втеча runc, обхід API-сервера │
│ │
│ НЕПРАВИЛЬНІ КОНФІГУРАЦІЇ │
│ • Небезпечні налаштування у вашому кластері │
│ • Виправляються зміною конфігурації │
│ • Найпоширеніший тип вразливостей │
│ • Приклади: привілейовані поди, відкриті секрети │
│ │
│ НЕБЕЗПЕЧНІ ЗНАЧЕННЯ ЗА ЗАМОВЧУВАННЯМ │
│ • Стандартні налаштування, які не є безпечними │
│ • Потребують проактивного зміцнення │
│ • Приклади: анонімна автентифікація, відсутність │
│ мережевих політик │
│ │
│ ЛАНЦЮГ ПОСТАЧАННЯ │
│ • Вразливості в образах або залежностях │
│ • Успадковані від зовнішніх джерел │
│ • Приклади: вразливі базові образи, шкідливі пакети │
│ │
└─────────────────────────────────────────────────────────────┘

CVE втечі з контейнера

Розділ «CVE втечі з контейнера»
┌─────────────────────────────────────────────────────────────┐
│ ВРАЗЛИВОСТІ ВТЕЧІ З КОНТЕЙНЕРА │
├─────────────────────────────────────────────────────────────┤
│ │
│ CVE-2019-5736 (runc) │
│ ├── Вплив: Втеча з контейнера через шкідливий образ │
│ ├── Атака: Перезапис бінарного файлу runc на хості │
│ ├── Зачеплено: Docker, containerd, CRI-O │
│ └── Виправлення: Оновити runc │
│ │
│ CVE-2020-15257 (containerd) │
│ ├── Вплив: Втеча з контейнера через API │
│ ├── Атака: Доступ до API-сокету containerd-shim │
│ ├── Зачеплено: containerd до 1.4.3 │
│ └── Виправлення: Оновити containerd │
│ │
│ CVE-2022-0811 (CRI-O) │
│ ├── Вплив: Втеча з контейнера через параметри ядра │
│ ├── Атака: Встановлення kernel.core_pattern для втечі │
│ ├── Зачеплено: CRI-O │
│ └── Виправлення: Оновити CRI-O │
│ │
│ ВИСНОВОК: Середовища виконання контейнерів є критичним │
│ рівнем безпеки. Тримайте їх оновленими! │
│ │
└─────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────┐
│ CVE API/АВТОРИЗАЦІЇ KUBERNETES │
├─────────────────────────────────────────────────────────────┤
│ │
│ CVE-2018-1002105 (Підвищення привілеїв) │
│ ├── Вплив: Будь-який користувач → cluster-admin │
│ ├── Атака: Підвищення з'єднання API до бекенду │
│ ├── Серйозність: Критична (9.8) │
│ └── Виправлення: Kubernetes 1.10.11, 1.11.5, 1.12.3 │
│ │
│ CVE-2020-8554 (MITM через LoadBalancer) │
│ ├── Вплив: Перехоплення трафіку до зовнішніх IP │
│ ├── Атака: Створення сервісу з ExternalIP │
│ ├── Серйозність: Середня │
│ └── Виправлення: Обмежити ExternalIP через admission │
│ │
│ CVE-2021-25741 (Атака через символічне посилання) │
│ ├── Вплив: Доступ до файлів за межами тому │
│ ├── Атака: Символічне посилання в монтуванні subPath │
│ ├── Зачеплено: Всі версії Kubernetes до виправлення │
│ └── Виправлення: Оновити Kubernetes │
│ │
└─────────────────────────────────────────────────────────────┘

Поширені неправильні конфігурації

Розділ «Поширені неправильні конфігурації»

Неправильні конфігурації RBAC

Розділ «Неправильні конфігурації RBAC»
┌─────────────────────────────────────────────────────────────┐
│ НЕПРАВИЛЬНІ КОНФІГУРАЦІЇ RBAC │
├─────────────────────────────────────────────────────────────┤
│ │
│ НАДМІРНІ ДОЗВОЛИ │
│ ├── Проблема: Символи підстановки (*) у ролях │
│ ├── Ризик: Доступ до непередбачених ресурсів │
│ └── Виправлення: Вказувати точні ресурси та дії │
│ │
│ КЛАСТЕРНИЙ РІВЕНЬ ЗАМІСТЬ ПРОСТОРУ ІМЕН │
│ ├── Проблема: ClusterRoleBinding для доступу в │
│ │ просторі імен │
│ ├── Ризик: Доступ до всіх просторів імен │
│ └── Виправлення: Використовувати RoleBinding │
│ │
│ ПРИВ'ЯЗКА ДО СТАНДАРТНОГО СЛУЖБОВОГО ОБЛІКОВОГО ЗАПИСУ │
│ ├── Проблема: Ролі прив'язані до default SA │
│ ├── Ризик: Всі поди в просторі імен отримують дозволи │
│ └── Виправлення: Створювати спеціалізовані ServiceAccount │
│ │
│ НЕБЕЗПЕЧНІ ДОЗВОЛИ │
│ ├── create pods → Можна створити привілейовані поди │
│ ├── get secrets → Можна читати всі секрети у межах │
│ ├── impersonate → Можна діяти як будь-який користувач │
│ └── Виправлення: Перевірити та обмежити ці дозволи │
│ │
└─────────────────────────────────────────────────────────────┘

Неправильні конфігурації безпеки подів

Розділ «Неправильні конфігурації безпеки подів»
┌─────────────────────────────────────────────────────────────┐
│ НЕПРАВИЛЬНІ КОНФІГУРАЦІЇ БЕЗПЕКИ ПОДІВ │
├─────────────────────────────────────────────────────────────┤
│ │
│ ПРИВІЛЕЙОВАНІ КОНТЕЙНЕРИ │
│ privileged: true │
│ └── Вплив: Повний доступ до хоста, легка втеча │
│ │
│ СПІЛЬНИЙ ДОСТУП ДО ПРОСТОРІВ ІМЕН ХОСТА │
│ hostPID: true, hostNetwork: true, hostIPC: true │
│ └── Вплив: Видно процеси, мережу, IPC хоста │
│ │
│ НЕБЕЗПЕЧНІ МОЖЛИВОСТІ │
│ capabilities: { add: [SYS_ADMIN, SYS_PTRACE] } │
│ └── Вплив: Майже root-привілеї │
│ │
│ ЗАПУСК ВІД ІМЕНІ ROOT │
│ runAsUser: 0, runAsNonRoot: false │
│ └── Вплив: Вищі привілеї при експлуатації │
│ │
│ ФАЙЛОВА СИСТЕМА ДЛЯ ЗАПИСУ │
│ readOnlyRootFilesystem: false │
│ └── Вплив: Зловмисник може зберегти зміни │
│ │
│ ЧУТЛИВІ ШЛЯХИ ХОСТА │
│ hostPath: { path: /etc, path: /var/run/docker.sock } │
│ └── Вплив: Доступ до файлової системи хоста, втеча │
│ │
└─────────────────────────────────────────────────────────────┘

Неправильні конфігурації мережі

Розділ «Неправильні конфігурації мережі»
┌─────────────────────────────────────────────────────────────┐
│ НЕПРАВИЛЬНІ КОНФІГУРАЦІЇ МЕРЕЖІ │
├─────────────────────────────────────────────────────────────┤
│ │
│ ВІДСУТНІСТЬ МЕРЕЖЕВИХ ПОЛІТИК │
│ ├── За замовчуванням: Всі поди можуть зв'язатися з усіма │
│ ├── Ризик: Горизонтальне переміщення після компрометації │
│ └── Виправлення: Реалізувати заборону за замовчуванням │
│ + явний дозвіл │
│ │
│ ВІДКРИТИЙ API-СЕРВЕР │
│ ├── Проблема: Публічна точка доступу API-сервера │
│ ├── Ризик: Прямі атаки, credential stuffing │
│ └── Виправлення: Приватна точка доступу, VPN │
│ │
│ НЕПОТРІБНЕ ВІДКРИТТЯ СЕРВІСІВ │
│ ├── Проблема: NodePort/LoadBalancer для внутрішніх сервісів│
│ ├── Ризик: Збільшена поверхня атаки │
│ └── Виправлення: Використовувати ClusterIP, ingress │
│ │
│ ВІДСУТНІСТЬ КОНТРОЛЮ ВИХІДНОГО ТРАФІКУ │
│ ├── Проблема: Поди можуть зв'язуватися з будь-якою │
│ │ зовнішньою точкою │
│ ├── Ризик: Витік даних, комунікація з C2 │
│ └── Виправлення: Мережеві політики вихідного трафіку │
│ │
└─────────────────────────────────────────────────────────────┘

Оцінка вразливостей (CVSS)

Розділ «Оцінка вразливостей (CVSS)»
┌─────────────────────────────────────────────────────────────┐
│ ОЦІНКА CVSS │
├─────────────────────────────────────────────────────────────┤
│ │
│ CVSS (Common Vulnerability Scoring System) │
│ Стандартний метод оцінки серйозності вразливостей │
│ │
│ ДІАПАЗОНИ ОЦІНОК: │
│ ├── 0.0 - Немає │
│ ├── 0.1-3.9 - Низька │
│ ├── 4.0-6.9 - Середня │
│ ├── 7.0-8.9 - Висока │
│ └── 9.0-10.0 - Критична │
│ │
│ ФАКТОРИ ОЦІНКИ: │
│ ├── Вектор атаки (Мережевий/Суміжний/Локальний/Фізичний) │
│ ├── Складність атаки (Низька/Висока) │
│ ├── Необхідні привілеї (Немає/Низькі/Високі) │
│ ├── Взаємодія користувача (Немає/Потрібна) │
│ ├── Обсяг (Без змін/Зі змінами) │
│ ├── Вплив (Конфіденційність/Цілісність/Доступність) │
│ └── Базова/Часова/Середовищна оцінки │
│ │
│ ВИКОРИСТАННЯ ДЛЯ ПРІОРИТИЗАЦІЇ: │
│ Критична/Висока → Негайна дія │
│ Середня → Планування виправлення │
│ Низька → Виправлення у регулярних циклах │
│ │
└─────────────────────────────────────────────────────────────┘

Виявлення вразливостей

Розділ «Виявлення вразливостей»

Інструменти для пошуку вразливостей

Розділ «Інструменти для пошуку вразливостей»
ІнструментПризначення
TrivyСканування образів контейнерів
GrypeСканування образів контейнерів
kube-benchПеревірки за CIS benchmark
kubeauditАудит безпеки
FalcoВиявлення загроз у реальному часі
PolarisПеревірка найкращих практик
OPA/GatekeeperЗабезпечення політик

Приклад: Вивід kube-bench

Розділ «Приклад: Вивід kube-bench»
[INFO] 1 Control Plane Security Configuration
[PASS] 1.1.1 Ensure API server pod file permissions (score)
[FAIL] 1.1.2 Ensure API server pod file ownership (score)
[WARN] 1.2.1 Ensure anonymous-auth is not disabled (info)
...
== Summary ==
45 checks PASS
10 checks FAIL
5 checks WARN

Реагування на вразливості

Розділ «Реагування на вразливості»
┌─────────────────────────────────────────────────────────────┐
│ ПРОЦЕС РЕАГУВАННЯ НА ВРАЗЛИВОСТІ │
├─────────────────────────────────────────────────────────────┤
│ │
│ 1. ІДЕНТИФІКАЦІЯ │
│ • Оголошення CVE │
│ • Інструменти сканування │
│ • Рекомендації з безпеки │
│ │
│ 2. ОЦІНКА │
│ • Чи впливає на моє середовище? │
│ • Яка серйозність (CVSS)? │
│ • Чи активно експлуатується? │
│ │
│ 3. ПРІОРИТИЗАЦІЯ │
│ • Критична + Активний експлойт → Негайно │
│ • Висока + Публічний експлойт → Дні │
│ • Середня → Тижні │
│ • Низька → Регулярний цикл оновлень │
│ │
│ 4. ВИПРАВЛЕННЯ │
│ • Оновити, якщо доступне виправлення │
│ • Зменшити ризик, якщо виправлення немає │
│ • Прийняти ризик із документуванням │
│ │
│ 5. ПЕРЕВІРКА │
│ • Підтвердити застосування виправлення │
│ • Повторно просканувати на вразливість │
│ • Оновити документацію │
│ │
└─────────────────────────────────────────────────────────────┘

  • Більшість порушень спричинені неправильними конфігураціями, а не zero-day. Виправлення конфігурацій часто є більш ефективним, ніж полювання на CVE.

  • Середній образ контейнера має 100+ вразливостей. Пріоритизація є необхідною — ви не можете виправити все.

  • CVE-2018-1002105 була критичною вразливістю Kubernetes, яка дозволяла будь-якому автентифікованому користувачу стати cluster-admin. Ось чому важливо тримати Kubernetes оновленим.

  • Distroless образи мають на 50-90% менше CVE, ніж традиційні базові образи на кшталт Ubuntu або Alpine.


ПомилкаЧому це шкодитьРішення
Ігнорування критичних CVEРизик експлуатаціїНегайно виправляти критичні
Сканування без виправленняХибне відчуття безпекиВідстежувати виправлення
Сканування лише образівПропуск проблем часу виконанняДодати сканування конфігурацій
Відсутність SLA для вразливостейНепослідовне реагуванняВизначити терміни реагування
Оновлення без тестуванняМоже зламати застосункиСпочатку тестувати у staging

  1. Яка різниця між CVE та неправильною конфігурацією?

    Відповідь CVE — це вразливість коду (помилка), яка потребує програмного виправлення. Неправильна конфігурація — це небезпечне налаштування, яке потребує зміни конфігурації. Неправильні конфігурації зустрічаються частіше, але їх легше виправити.
  2. Чому CVE-2019-5736 (runc) була значною?

    Відповідь Вона дозволяла втечу з контейнера через перезапис бінарного файлу runc на хості за допомогою шкідливого образу контейнера. Це зачепило всі основні середовища виконання контейнерів (Docker, containerd, CRI-O) і потребувало оновлення середовища виконання.
  3. Який діапазон оцінок CVSS вважається “Критичним”?

    Відповідь 9.0-10.0. Критичні вразливості зазвичай потребують негайних дій через високий вплив та легкість експлуатації.
  4. Чому символи підстановки (*) в RBAC вважаються вразливістю?

    Відповідь Символи підстановки надають доступ до всіх ресурсів або дій, включно з тими, які ще не існують. Це порушує принцип найменших привілеїв і може відкрити непередбачений доступ до нових типів ресурсів.
  5. Який тип вразливостей зустрічається частіше: CVE чи неправильні конфігурації?

    Відповідь Неправильні конфігурації зустрічаються значно частіше. Більшість проблем безпеки Kubernetes виникають через небезпечні налаштування, а не через вразливості коду.

Практична вправа: Оцінка вразливостей

Розділ «Практична вправа: Оцінка вразливостей»

Сценарій: Ви отримали цей звіт сканування вразливостей. Визначте пріоритети:

CRITICAL: CVE-2019-5736 in runc (container escape)
HIGH: Privileged containers in production namespace
HIGH: CVE-2021-44228 (Log4Shell) in app image
MEDIUM: No network policies defined
MEDIUM: Default ServiceAccount token mounted
LOW: Container image using :latest tag
LOW: CVE-2020-XXXX in unused library

Ранжуйте їх за пріоритетом та поясніть:

Пріоритизація
  1. CVE-2019-5736 (КРИТИЧНА) — Втеча з контейнера, активна експлуатація

    • Виправлення: Негайно оновити runc
    • Вплив: Втеча з контейнера на хост
  2. CVE-2021-44228 Log4Shell (ВИСОКА) — Віддалене виконання коду

    • Виправлення: Терміново оновити образ застосунку
    • Вплив: RCE в контейнері
  3. Привілейовані контейнери (ВИСОКА) — Неправильна конфігурація

    • Виправлення: Видалити прапорець privileged, використовувати конкретні capabilities
    • Вплив: Легка втеча з контейнера при компрометації
  4. Відсутність мережевих політик (СЕРЕДНЯ) — Неправильна конфігурація

    • Виправлення: Реалізувати заборону за замовчуванням + явний дозвіл
    • Вплив: Можливе горизонтальне переміщення
  5. Стандартний токен SA (СЕРЕДНЯ) — Неправильна конфігурація

    • Виправлення: Вимкнути автомонтування, використовувати спеціалізовані SA
    • Вплив: Доступ до API з компрометованого поду
  6. Тег :latest (НИЗЬКА) — Порушення найкращих практик

    • Виправлення: Використовувати незмінні теги з дайджестами
    • Вплив: Непередбачувані версії
  7. CVE невикористаної бібліотеки (НИЗЬКА) — Низький вплив

    • Виправлення: Видалити невикористану залежність
    • Вплив: Мінімальний (бібліотека не використовується)

Вразливості Kubernetes бувають різних видів:

ТипПрикладиРеагування
Критичні CVEВтеча runc, підвищення привілеїв K8sНегайне оновлення
Високі CVELog4Shell, обхід APIТермінове оновлення
Неправильні конфігураціїПривілейовані поди, відсутність RBACВиправлення конфігурації
Небезпечні значення за замовчуваннямАнонімна автентифікація, відсутність політикПроактивне зміцнення

Ключові практики:

  • Регулярне сканування (образи, конфігурації, час виконання)
  • Пріоритизація за серйозністю та можливістю експлуатації
  • Виправляйте неправильні конфігурації — це найпоширеніша проблема
  • Тримайте компоненти оновленими
  • Майте визначений процес реагування на вразливості

Модуль 4.3: Втеча з контейнера — Розуміння та запобігання сценаріям виходу з контейнера.