Kubernetes SecurityContext(s)

Reading time: 8 minutes

tip

Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Вивчайте та практикуйте Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Підтримка HackTricks

PodSecurityContext

З документації:

При вказуванні контексту безпеки Pod ви можете використовувати кілька атрибутів. З точки зору оборонної безпеки вам слід врахувати:

  • Мати runASNonRoot як True
  • Налаштувати runAsUser
  • Якщо можливо, розгляньте можливість обмеження дозволів, вказуючи seLinuxOptions та seccompProfile
  • НЕ надавайте доступ до привілейованої групи через runAsGroup та supplementaryGroups

| Параметр | Опис | |

fsGroup
ціле число

|

Спеціальна додаткова група, яка застосовується до всіх контейнерів у pod. Деякі типи томів дозволяють Kubelet змінювати власність цього тому на власність pod:
1. Власний GID буде FSGroup
2. Біт setgid встановлений (нові файли, створені в томі, будуть належати FSGroup)
3. Права доступу OR'd з rw-rw---- Якщо не встановлено, Kubelet не змінюватиме власність і права доступу жодного тому

|

|

fsGroupChangePolicy
рядок

| Це визначає поведінку зміни власності та прав доступу тому перед його відкриттям всередині Pod. | |

runAsGroup
ціле число

| GID для запуску точки входу процесу контейнера. Використовує значення за замовчуванням, якщо не встановлено. Може також бути встановлено в SecurityContext. | |

runAsNonRoot
логічне значення

| Вказує, що контейнер повинен працювати як не-root користувач. Якщо true, Kubelet перевірить зображення під час виконання, щоб переконатися, що воно не працює як UID 0 (root) і не зможе запустити контейнер, якщо це так. | |

runAsUser
ціле число

| UID для запуску точки входу процесу контейнера. За замовчуванням - користувач, вказаний у метаданих зображення, якщо не вказано. | |

seLinuxOptions
SELinuxOptions
Більше інформації про seLinux

| Контекст SELinux, який буде застосовано до всіх контейнерів. Якщо не вказано, контейнерний виконувальний середовище виділить випадковий контекст SELinux для кожного контейнера. | |

seccompProfile
SeccompProfile
Більше інформації про Seccomp

| Опції seccomp, які використовуються контейнерами в цьому pod. | |

supplementalGroups
масив цілих чисел

| Список груп, які застосовуються до першого процесу, запущеного в кожному контейнері, на додаток до основного GID контейнера. | |

sysctls
Sysctl масив
Більше інформації про sysctls

| Sysctls містять список namespaced sysctls, які використовуються для pod. Pods з непідтримуваними sysctls (контейнерним виконувальним середовищем) можуть не запуститися. | |

windowsOptions
WindowsSecurityContextOptions

| Специфічні для Windows налаштування, які застосовуються до всіх контейнерів. Якщо не вказано, будуть використовуватися параметри в SecurityContext контейнера. |

SecurityContext

З документації:

Цей контекст встановлюється всередині визначень контейнерів. З точки зору оборонної безпеки вам слід врахувати:

  • allowPrivilegeEscalation як False
  • Не додавайте чутливі можливості (і видаліть ті, які вам не потрібні)
  • привілейований як False
  • Якщо можливо, встановіть readOnlyFilesystem як True
  • Встановіть runAsNonRoot як True і задайте runAsUser
  • Якщо можливо, розгляньте можливість обмеження дозволів, вказуючи seLinuxOptions та seccompProfile
  • НЕ надавайте доступ до привілейованої групи через runAsGroup.

Зверніть увагу, що атрибути, встановлені в обох SecurityContext і PodSecurityContext, значення, вказане в SecurityContext, має пріоритет.

allowPrivilegeEscalation
логічне значення

AllowPrivilegeEscalation контролює, чи може процес отримати більше привілеїв, ніж його батьківський процес. Це логічне значення безпосередньо контролює, чи буде встановлено прапор no_new_privs для процесу контейнера. AllowPrivilegeEscalation завжди true, коли контейнер запускається як Privileged або має CAP_SYS_ADMIN

capabilities
Capabilities
Більше інформації про Capabilities

Можливості, які потрібно додати/видалити при запуску контейнерів. За замовчуванням - набір можливостей за замовчуванням.

privileged
логічне значення

Запустіть контейнер у привілейованому режимі. Процеси в привілейованих контейнерах фактично є еквівалентом root на хості. За замовчуванням - false.

procMount
рядок

procMount позначає тип монтування proc, який потрібно використовувати для контейнерів. За замовчуванням - DefaultProcMount, який використовує значення за замовчуванням контейнерного виконувального середовища для шляхів тільки для читання та маскованих шляхів.

readOnlyRootFilesystem
логічне значення

Чи має цей контейнер файлову систему кореня тільки для читання. За замовчуванням - false.

runAsGroup
ціле число

GID для запуску точки входу процесу контейнера. Використовує значення за замовчуванням, якщо не встановлено.

runAsNonRoot
логічне значення

Вказує, що контейнер повинен працювати як не-root користувач. Якщо true, Kubelet перевірить зображення під час виконання, щоб переконатися, що воно не працює як UID 0 (root) і не зможе запустити контейнер, якщо це так.

runAsUser
ціле число

UID для запуску точки входу процесу контейнера. За замовчуванням - користувач, вказаний у метаданих зображення, якщо не вказано.

seLinuxOptions
SELinuxOptions
Більше інформації про seLinux

Контекст SELinux, який буде застосовано до контейнера. Якщо не вказано, контейнерний виконувальний середовище виділить випадковий контекст SELinux для кожного контейнера.

seccompProfile
SeccompProfile

Опції seccomp, які використовуються цим контейнером.

windowsOptions
WindowsSecurityContextOptions

Специфічні для Windows налаштування, які застосовуються до всіх контейнерів.

References

tip

Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Вивчайте та практикуйте Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Підтримка HackTricks