Модуль 4.2: Поширені вразливості
Складність:
[СЕРЕДНЯ]- Обізнаність щодо загрозЧас на виконання: 25-30 хвилин
Передумови: Модуль 4.1: Поверхні атак
Що ви зможете робити
Розділ «Що ви зможете робити»Після завершення цього модуля ви зможете:
- Визначити поширені категорії вразливостей Kubernetes: CVE, неправильні конфігурації та небезпечні значення за замовчуванням
- Оцінити серйозність вразливостей за допомогою CVSS-балів та контексту експлуатованості
- Оцінити різницю між вразливостями коду та вразливостями конфігурації
- Пояснити стратегії пом’якшення для найпоширеніших шаблонів вразливостей Kubernetes
Чому цей модуль важливий
Розділ «Чому цей модуль важливий»Розуміння поширених вразливостей допомагає передбачати атаки та визначати пріоритети захисту. Вразливості Kubernetes бувають двох видів: вразливості коду (CVE) та неправильні конфігурації. Обидва можуть призвести до компрометації кластера, але неправильні конфігурації зустрічаються значно частіше.
KCSA перевіряє вашу обізнаність щодо поширених шаблонів вразливостей та заходів їх зменшення.
Категорії вразливостей
Розділ «Категорії вразливостей»┌─────────────────────────────────────────────────────────────┐│ ТИПИ ВРАЗЛИВОСТЕЙ KUBERNETES │├─────────────────────────────────────────────────────────────┤│ ││ CVE (Вразливості коду) ││ • Помилки в Kubernetes, середовищі виконання контейнерів ││ або залежностях ││ • Потребують виправлення для усунення ││ • Відстежуються за ідентифікаторами CVE ││ • Приклади: втеча runc, обхід API-сервера ││ ││ НЕПРАВИЛЬНІ КОНФІГУРАЦІЇ ││ • Небезпечні налаштування у вашому кластері ││ • Виправляються зміною конфігурації ││ • Найпоширеніший тип вразливостей ││ • Приклади: привілейовані поди, відкриті секрети ││ ││ НЕБЕЗПЕЧНІ ЗНАЧЕННЯ ЗА ЗАМОВЧУВАННЯМ ││ • Стандартні налаштування, які не є безпечними ││ • Потребують проактивного зміцнення ││ • Приклади: анонімна автентифікація, відсутність ││ мережевих політик ││ ││ ЛАНЦЮГ ПОСТАЧАННЯ ││ • Вразливості в образах або залежностях ││ • Успадковані від зовнішніх джерел ││ • Приклади: вразливі базові образи, шкідливі пакети ││ │└─────────────────────────────────────────────────────────────┘Відомі CVE Kubernetes
Розділ «Відомі CVE Kubernetes»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 ядра Kubernetes
Розділ «CVE ядра Kubernetes»┌─────────────────────────────────────────────────────────────┐│ 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 PASS10 checks FAIL5 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 |
Перевірка знань
Розділ «Перевірка знань»-
Яка різниця між CVE та неправильною конфігурацією?
Відповідь
CVE — це вразливість коду (помилка), яка потребує програмного виправлення. Неправильна конфігурація — це небезпечне налаштування, яке потребує зміни конфігурації. Неправильні конфігурації зустрічаються частіше, але їх легше виправити. -
Чому CVE-2019-5736 (runc) була значною?
Відповідь
Вона дозволяла втечу з контейнера через перезапис бінарного файлу runc на хості за допомогою шкідливого образу контейнера. Це зачепило всі основні середовища виконання контейнерів (Docker, containerd, CRI-O) і потребувало оновлення середовища виконання. -
Який діапазон оцінок CVSS вважається “Критичним”?
Відповідь
9.0-10.0. Критичні вразливості зазвичай потребують негайних дій через високий вплив та легкість експлуатації. -
Чому символи підстановки (*) в RBAC вважаються вразливістю?
Відповідь
Символи підстановки надають доступ до всіх ресурсів або дій, включно з тими, які ще не існують. Це порушує принцип найменших привілеїв і може відкрити непередбачений доступ до нових типів ресурсів. -
Який тип вразливостей зустрічається частіше: CVE чи неправильні конфігурації?
Відповідь
Неправильні конфігурації зустрічаються значно частіше. Більшість проблем безпеки Kubernetes виникають через небезпечні налаштування, а не через вразливості коду.
Практична вправа: Оцінка вразливостей
Розділ «Практична вправа: Оцінка вразливостей»Сценарій: Ви отримали цей звіт сканування вразливостей. Визначте пріоритети:
CRITICAL: CVE-2019-5736 in runc (container escape)HIGH: Privileged containers in production namespaceHIGH: CVE-2021-44228 (Log4Shell) in app imageMEDIUM: No network policies definedMEDIUM: Default ServiceAccount token mountedLOW: Container image using :latest tagLOW: CVE-2020-XXXX in unused libraryРанжуйте їх за пріоритетом та поясніть:
Пріоритизація
-
CVE-2019-5736 (КРИТИЧНА) — Втеча з контейнера, активна експлуатація
- Виправлення: Негайно оновити runc
- Вплив: Втеча з контейнера на хост
-
CVE-2021-44228 Log4Shell (ВИСОКА) — Віддалене виконання коду
- Виправлення: Терміново оновити образ застосунку
- Вплив: RCE в контейнері
-
Привілейовані контейнери (ВИСОКА) — Неправильна конфігурація
- Виправлення: Видалити прапорець privileged, використовувати конкретні capabilities
- Вплив: Легка втеча з контейнера при компрометації
-
Відсутність мережевих політик (СЕРЕДНЯ) — Неправильна конфігурація
- Виправлення: Реалізувати заборону за замовчуванням + явний дозвіл
- Вплив: Можливе горизонтальне переміщення
-
Стандартний токен SA (СЕРЕДНЯ) — Неправильна конфігурація
- Виправлення: Вимкнути автомонтування, використовувати спеціалізовані SA
- Вплив: Доступ до API з компрометованого поду
-
Тег :latest (НИЗЬКА) — Порушення найкращих практик
- Виправлення: Використовувати незмінні теги з дайджестами
- Вплив: Непередбачувані версії
-
CVE невикористаної бібліотеки (НИЗЬКА) — Низький вплив
- Виправлення: Видалити невикористану залежність
- Вплив: Мінімальний (бібліотека не використовується)
Підсумок
Розділ «Підсумок»Вразливості Kubernetes бувають різних видів:
| Тип | Приклади | Реагування |
|---|---|---|
| Критичні CVE | Втеча runc, підвищення привілеїв K8s | Негайне оновлення |
| Високі CVE | Log4Shell, обхід API | Термінове оновлення |
| Неправильні конфігурації | Привілейовані поди, відсутність RBAC | Виправлення конфігурації |
| Небезпечні значення за замовчуванням | Анонімна автентифікація, відсутність політик | Проактивне зміцнення |
Ключові практики:
- Регулярне сканування (образи, конфігурації, час виконання)
- Пріоритизація за серйозністю та можливістю експлуатації
- Виправляйте неправильні конфігурації — це найпоширеніша проблема
- Тримайте компоненти оновленими
- Майте визначений процес реагування на вразливості
Наступний модуль
Розділ «Наступний модуль»Модуль 4.3: Втеча з контейнера — Розуміння та запобігання сценаріям виходу з контейнера.