Files
hacktricks-cloud/src/pentesting-cloud/kubernetes-security/kubernetes-hardening/kubernetes-securitycontext-s.md

20 KiB

Kubernetes SecurityContext(s)

{{#include ../../../banners/hacktricks-training.md}}

PodSecurityContext

De la documentación:

Al especificar el contexto de seguridad de un Pod, puedes usar varios atributos. Desde un punto de vista de seguridad defensiva, deberías considerar:

  • Tener runASNonRoot como True
  • Configurar runAsUser
  • Si es posible, considera limitar permisos indicando seLinuxOptions y seccompProfile
  • No dar acceso de grupo de privilegios a través de runAsGroup y supplementaryGroups

| Parámetro | Descripción | |

fsGroup
entero

|

Un grupo suplementario especial que se aplica a todos los contenedores en un pod. Algunos tipos de volúmenes permiten que el Kubelet cambie la propiedad de ese volumen para que sea propiedad del pod:
1. El GID propietario será el FSGroup
2. El bit setgid está establecido (los nuevos archivos creados en el volumen serán propiedad del FSGroup)
3. Los bits de permiso se OR'd con rw-rw---- Si no se establece, el Kubelet no modificará la propiedad y los permisos de ningún volumen

|

|

fsGroupChangePolicy
cadena

| Esto define el comportamiento de cambio de propiedad y permiso del volumen antes de ser expuesto dentro del Pod. | |

runAsGroup
entero

| El GID para ejecutar el punto de entrada del proceso del contenedor. Usa el valor predeterminado de tiempo de ejecución si no se establece. | |

runAsNonRoot
booleano

| Indica que el contenedor debe ejecutarse como un usuario no root. Si es verdadero, el Kubelet validará la imagen en tiempo de ejecución para asegurarse de que no se ejecute como UID 0 (root) y fallará al iniciar el contenedor si lo hace. | |

runAsUser
entero

| El UID para ejecutar el punto de entrada del proceso del contenedor. Por defecto, se utiliza el usuario especificado en los metadatos de la imagen si no se especifica. | |

seLinuxOptions
SELinuxOptions
Más información sobre seLinux

| El contexto SELinux que se aplicará a todos los contenedores. Si no se especifica, el tiempo de ejecución del contenedor asignará un contexto SELinux aleatorio para cada contenedor. | |

seccompProfile
SeccompProfile
Más información sobre Seccomp

| Las opciones seccomp que usarán los contenedores en este pod. | |

supplementalGroups
array de enteros

| Una lista de grupos aplicados al primer proceso ejecutado en cada contenedor, además del GID principal del contenedor. | |

sysctls
Sysctl array
Más información sobre sysctls

| Los sysctls contienen una lista de sysctls con espacio de nombres utilizados para el pod. Los pods con sysctls no soportados (por el tiempo de ejecución del contenedor) podrían fallar al lanzarse. | |

windowsOptions
WindowsSecurityContextOptions

| La configuración específica de Windows aplicada a todos los contenedores. Si no se especifica, se utilizarán las opciones dentro del SecurityContext de un contenedor. |

SecurityContext

De la documentación:

Este contexto se establece dentro de las definiciones de contenedores. Desde un punto de vista de seguridad defensiva, deberías considerar:

  • allowPrivilegeEscalation como False
  • No agregar capabilities sensibles (y eliminar las que no necesites)
  • privileged como False
  • Si es posible, establecer readOnlyFilesystem como True
  • Establecer runAsNonRoot como True y establecer un runAsUser
  • Si es posible, considera limitar permisos indicando seLinuxOptions y seccompProfile
  • No dar acceso de grupo de privilegios a través de runAsGroup.

Ten en cuenta que los atributos establecidos en tanto SecurityContext como PodSecurityContext, el valor especificado en SecurityContext tiene precedencia.

allowPrivilegeEscalation
booleano

AllowPrivilegeEscalation controla si un proceso puede obtener más privilegios que su proceso padre. Este booleano controla directamente si se establecerá la bandera no_new_privs en el proceso del contenedor. AllowPrivilegeEscalation es verdadero siempre que el contenedor se ejecute como Privileged o tenga CAP_SYS_ADMIN

capabilities
Capabilities
Más información sobre Capabilities

Las capacidades para agregar/eliminar al ejecutar contenedores. Por defecto, se utiliza el conjunto predeterminado de capacidades.

privileged
booleano

Ejecutar el contenedor en modo privilegiado. Los procesos en contenedores privilegiados son esencialmente equivalentes a root en el host. Por defecto, es falso.

procMount
cadena

procMount denota el tipo de montaje proc a usar para los contenedores. El valor predeterminado es DefaultProcMount, que utiliza los valores predeterminados del tiempo de ejecución del contenedor para rutas de solo lectura y rutas enmascaradas.

readOnlyRootFilesystem
booleano

Si este contenedor tiene un sistema de archivos raíz de solo lectura. El valor predeterminado es falso.

runAsGroup
entero

El GID para ejecutar el punto de entrada del proceso del contenedor. Usa el valor predeterminado de tiempo de ejecución si no se establece.

runAsNonRoot
booleano

Indica que el contenedor debe ejecutarse como un usuario no root. Si es verdadero, el Kubelet validará la imagen en tiempo de ejecución para asegurarse de que no se ejecute como UID 0 (root) y fallará al iniciar el contenedor si lo hace.

runAsUser
entero

El UID para ejecutar el punto de entrada del proceso del contenedor. Por defecto, se utiliza el usuario especificado en los metadatos de la imagen si no se especifica.

seLinuxOptions
SELinuxOptions
Más información sobre seLinux

El contexto SELinux que se aplicará al contenedor. Si no se especifica, el tiempo de ejecución del contenedor asignará un contexto SELinux aleatorio para cada contenedor.

seccompProfile
SeccompProfile

Las opciones seccomp que usará este contenedor.

windowsOptions
WindowsSecurityContextOptions

La configuración específica de Windows aplicada a todos los contenedores.

Referencias

{{#include ../../../banners/hacktricks-training.md}}