Kubernetes SecurityContext(s)
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Коли ви вказуєте контекст безпеки Pod, ви можете використовувати кілька атрибутів. З точки зору оборонної безпеки ви повинні врахувати:
Мати runASNonRoot як True
Налаштувати runAsUser
Якщо можливо, розгляньте можливість обмеження дозволів, вказуючи seLinuxOptions та seccompProfile
НЕ надавайте доступ до привілейованої групи через runAsGroup та supplementaryGroups
fsGroup integer | Спеціальна додаткова група, яка застосовується до всіх контейнерів у pod. Деякі типи томів дозволяють Kubelet змінювати власність цього тому на власність pod: 1. Власний GID буде FSGroup 2. Біт setgid встановлений (нові файли, створені в томі, будуть належати FSGroup) 3. Біт дозволів OR'd з rw-rw---- Якщо не встановлено, Kubelet не змінюватиме власність і дозволи жодного тому |
fsGroupChangePolicy string | Це визначає поведінку зміни власності та дозволів тому перед його відкриттям всередині Pod. |
runAsGroup integer | GID для запуску точки входу процесу контейнера. Використовує значення за замовчуванням часу виконання, якщо не встановлено. |
runAsNonRoot boolean | Вказує, що контейнер повинен працювати як не-root користувач. Якщо true, Kubelet перевірить зображення під час виконання, щоб переконатися, що воно не працює як UID 0 (root) і не зможе запустити контейнер, якщо це так. |
runAsUser integer | UID для запуску точки входу процесу контейнера. За замовчуванням - користувач, вказаний у метаданих зображення, якщо не вказано. |
seLinuxOptions SELinuxOptions Більше інформації про seLinux | Контекст SELinux, який буде застосовано до всіх контейнерів. Якщо не вказано, контейнерний час виконання виділить випадковий контекст SELinux для кожного контейнера. |
seccompProfile SeccompProfile Більше інформації про Seccomp | Опції seccomp, які використовуються контейнерами в цьому pod. |
supplementalGroups integer array | Список груп, які застосовуються до першого процесу, запущеного в кожному контейнері, на додаток до основного GID контейнера. |
Sysctls містять список namespaced sysctls, які використовуються для pod. Pods з непідтримуваними sysctls (контейнерним часом виконання) можуть не запуститися. | |
Специфічні для Windows налаштування, які застосовуються до всіх контейнерів. Якщо не вказано, будуть використані параметри в SecurityContext контейнера. |
Цей контекст встановлюється всередині визначень контейнерів. З точки зору оборонної безпеки ви повинні врахувати:
allowPrivilegeEscalation як False
Не додавайте чутливі можливості (і видаліть ті, які вам не потрібні)
привілейований як False
Якщо можливо, встановіть readOnlyFilesystem як True
Встановіть runAsNonRoot як True і задайте runAsUser
Якщо можливо, розгляньте можливість обмеження дозволів, вказуючи seLinuxOptions та seccompProfile
НЕ надавайте доступ до привілейованої групи через runAsGroup.
Зверніть увагу, що атрибути, встановлені в обох SecurityContext і PodSecurityContext, значення, вказане в SecurityContext, має пріоритет.
allowPrivilegeEscalation boolean | AllowPrivilegeEscalation контролює, чи може процес отримати більше привілеїв, ніж його батьківський процес. Цей булевий параметр безпосередньо контролює, чи буде встановлено прапор no_new_privs для процесу контейнера. AllowPrivilegeEscalation завжди true, коли контейнер запускається як Privileged або має CAP_SYS_ADMIN |
capabilities Capabilities Більше інформації про Capabilities | Можливості, які потрібно додати/видалити при запуску контейнерів. За замовчуванням - набір можливостей за замовчуванням. |
privileged boolean | Запустіть контейнер у привілейованому режимі. Процеси в привілейованих контейнерах фактично еквівалентні root на хості. За замовчуванням - false. |
procMount string | procMount позначає тип монтування proc, який потрібно використовувати для контейнерів. За замовчуванням - DefaultProcMount, який використовує значення за замовчуванням контейнерного часу виконання для шляхів тільки для читання та маскованих шляхів. |
readOnlyRootFilesystem boolean | Чи має цей контейнер файлову систему кореня тільки для читання. За замовчуванням - false. |
runAsGroup integer | GID для запуску точки входу процесу контейнера. Використовує значення за замовчуванням часу виконання, якщо не встановлено. |
runAsNonRoot boolean | Вказує, що контейнер повинен працювати як не-root користувач. Якщо true, Kubelet перевірить зображення під час виконання, щоб переконатися, що воно не працює як UID 0 (root) і не зможе запустити контейнер, якщо це так. |
runAsUser integer | UID для запуску точки входу процесу контейнера. За замовчуванням - користувач, вказаний у метаданих зображення, якщо не вказано. |
seLinuxOptions SELinuxOptions Більше інформації про seLinux | Контекст SELinux, який буде застосовано до контейнера. Якщо не вказано, контейнерний час виконання виділить випадковий контекст SELinux для кожного контейнера. |
Опції seccomp, які використовуються цим контейнером. | |
Специфічні для Windows налаштування, які застосовуються до всіх контейнерів. |
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)