Kubernetes SecurityContext(s)
Last updated
Last updated
Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE) Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Ao especificar o contexto de segurança de um Pod, você pode usar vários atributos. Do ponto de vista da segurança defensiva, você deve considerar:
Ter runASNonRoot como True
Configurar runAsUser
Se possível, considere limitar permissões indicando seLinuxOptions e seccompProfile
NÃO conceda acesso ao grupo de privilegio via runAsGroup e supplementaryGroups
fsGroup inteiro | Um grupo suplementar especial que se aplica a todos os contêineres em um pod. Alguns tipos de volume permitem que o Kubelet mude a propriedade desse volume para ser de propriedade do pod: 1. O GID proprietário será o FSGroup 2. O bit setgid está definido (novos arquivos criados no volume serão de propriedade do FSGroup) 3. Os bits de permissão são OR'd com rw-rw---- Se não definido, o Kubelet não modificará a propriedade e permissões de nenhum volume |
fsGroupChangePolicy string | Isso define o comportamento de mudança de propriedade e permissão do volume antes de ser exposto dentro do Pod. |
runAsGroup inteiro | O GID para executar o ponto de entrada do processo do contêiner. Usa o padrão de tempo de execução se não definido. |
runAsNonRoot booleano | Indica que o contêiner deve ser executado como um usuário não-root. Se verdadeiro, o Kubelet validará a imagem em tempo de execução para garantir que não seja executada como UID 0 (root) e falhará ao iniciar o contêiner se o fizer. |
runAsUser inteiro | O UID para executar o ponto de entrada do processo do contêiner. Padrão para o usuário especificado nos metadados da imagem, se não especificado. |
seLinuxOptions SELinuxOptions Mais informações sobre seLinux | O contexto SELinux a ser aplicado a todos os contêineres. Se não especificado, o tempo de execução do contêiner alocará um contexto SELinux aleatório para cada contêiner. |
seccompProfile SeccompProfile Mais informações sobre Seccomp | As opções seccomp a serem usadas pelos contêineres neste pod. |
supplementalGroups array de inteiros | Uma lista de grupos aplicados ao primeiro processo executado em cada contêiner, além do GID primário do contêiner. |
Sysctls mantém uma lista de sysctls namespaced usados para o pod. Pods com sysctls não suportados (pelo tempo de execução do contêiner) podem falhar ao iniciar. | |
As configurações específicas do Windows aplicadas a todos os contêineres. Se não especificado, as opções dentro do SecurityContext de um contêiner serão usadas. |
Este contexto é definido dentro das definições de contêineres. Do ponto de vista da segurança defensiva, você deve considerar:
allowPrivilegeEscalation como False
Não adicione capacidades sensíveis (e remova as que você não precisa)
privileged como False
Se possível, defina readOnlyFilesystem como True
Defina runAsNonRoot como True e defina um runAsUser
Se possível, considere limitar permissões indicando seLinuxOptions e seccompProfile
NÃO conceda acesso ao grupo de privilegio via runAsGroup.
Observe que os atributos definidos em ambos SecurityContext e PodSecurityContext, o valor especificado em SecurityContext tem precedência.
allowPrivilegeEscalation booleano | AllowPrivilegeEscalation controla se um processo pode ganhar mais privilégios do que seu processo pai. Este booleano controla diretamente se a flag no_new_privs será definida no processo do contêiner. AllowPrivilegeEscalation é verdadeiro sempre que o contêiner é executado como Privileged ou tem CAP_SYS_ADMIN |
capabilities Capabilities Mais informações sobre Capabilities | As capacidades a serem adicionadas/removidas ao executar contêineres. Padrão para o conjunto padrão de capacidades. |
privileged booleano | Executar contêiner em modo privilegiado. Processos em contêineres privilegiados são essencialmente equivalentes ao root no host. Padrão é falso. |
procMount string | procMount denota o tipo de montagem proc a ser usado para os contêineres. O padrão é DefaultProcMount, que usa os padrões de tempo de execução do contêiner para caminhos somente leitura e caminhos mascarados. |
readOnlyRootFilesystem booleano | Se este contêiner tem um sistema de arquivos raiz somente leitura. O padrão é falso. |
runAsGroup inteiro | O GID para executar o ponto de entrada do processo do contêiner. Usa o padrão de tempo de execução se não definido. |
runAsNonRoot booleano | Indica que o contêiner deve executar como um usuário não-root. Se verdadeiro, o Kubelet validará a imagem em tempo de execução para garantir que não seja executada como UID 0 (root) e falhará ao iniciar o contêiner se o fizer. |
runAsUser inteiro | O UID para executar o ponto de entrada do processo do contêiner. Padrão para o usuário especificado nos metadados da imagem, se não especificado. |
seLinuxOptions SELinuxOptions Mais informações sobre seLinux | O contexto SELinux a ser aplicado ao contêiner. Se não especificado, o tempo de execução do contêiner alocará um contexto SELinux aleatório para cada contêiner. |
As opções seccomp a serem usadas por este contêiner. | |
As configurações específicas do Windows aplicadas a todos os contêineres. |
Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE) Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)