# Kubernetes SecurityContext(s)

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

## PodSecurityContext <a href="#podsecuritycontext-v1-core" id="podsecuritycontext-v1-core"></a>

[**Dalla documentazione:**](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#podsecuritycontext-v1-core)

Quando si specifica il contesto di sicurezza di un Pod, è possibile utilizzare diversi attributi. Da un punto di vista della sicurezza difensiva, dovresti considerare:

- Avere **runASNonRoot** come **True**
- Configurare **runAsUser**
- Se possibile, considera di **limitare** le **permissive** indicando **seLinuxOptions** e **seccompProfile**
- Non dare accesso al **privilege** **group** tramite **runAsGroup** e **supplementaryGroups**

| Parametro                                                                                                                                                                                                                                                                                                                                                                                                                                  | Descrizione                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#podsecuritycontext-v1-core"><strong>fsGroup</strong></a><br><em>intero</em></p>                                                                                                                                                                                                                                                 | <p>Un gruppo supplementare speciale che si applica a <strong>tutti i container in un pod</strong>. Alcuni tipi di volume consentono al Kubelet di <strong>cambiare la proprietà di quel volume</strong> per essere di proprietà del pod:<br>1. Il GID proprietario sarà l'FSGroup<br>2. Il bit setgid è impostato (i nuovi file creati nel volume saranno di proprietà dell'FSGroup)<br>3. I bit di permesso sono OR'd con rw-rw---- Se non impostato, il Kubelet non modificherà la proprietà e i permessi di alcun volume</p> |

| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#podsecuritycontext-v1-core"><strong>fsGroupChangePolicy</strong></a><br><em>stringa</em></p>                                                                                                                                                                                                                                      | Questo definisce il comportamento di **cambio di proprietà e permesso del volume** prima di essere esposto all'interno del Pod.                                                                                                                                                                                                                                                                                                                                                                         |
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#podsecuritycontext-v1-core"><strong>runAsGroup</strong></a><br><em>intero</em></p>                                                                                                                                                                                                                                              | Il **GID per eseguire l'entrypoint del processo del container**. Usa il valore predefinito di runtime se non impostato. Può anche essere impostato in SecurityContext.                                                                                                                                                                                                                                                                                                                                                        |
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#podsecuritycontext-v1-core"><strong>runAsNonRoot</strong></a><br><em>booleano</em></p>                                                                                                                                                                                                                                            | Indica che il container deve essere eseguito come un utente non root. Se vero, il Kubelet convaliderà l'immagine a runtime per assicurarsi che non venga eseguita come UID 0 (root) e non avvierà il container se lo fa.                                                                                                                                                                                                                                                                          |
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#podsecuritycontext-v1-core"><strong>runAsUser</strong></a><br><em>intero</em></p>                                                                                                                                                                                                                                               | Il **UID per eseguire l'entrypoint del processo del container**. Predefinito all'utente specificato nei metadati dell'immagine se non specificato.                                                                                                                                                                                                                                                                                                                                                              |
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#podsecuritycontext-v1-core"><strong>seLinuxOptions</strong></a><br><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#selinuxoptions-v1-core"><em>SELinuxOptions</em></a><br><em>Ulteriori informazioni su</em> <em><strong>seLinux</strong></em></p>                                                           | Il **contesto SELinux da applicare a tutti i container**. Se non specificato, il runtime del container assegnerà un contesto SELinux casuale per ogni container.                                                                                                                                                                                                                                                                                                                             |
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#podsecuritycontext-v1-core"><strong>seccompProfile</strong></a><br><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#seccompprofile-v1-core"><em>SeccompProfile</em></a><br><em>Ulteriori informazioni su</em> <em><strong>Seccomp</strong></em></p>                                                           | Le **opzioni seccomp da utilizzare dai container** in questo pod.                                                                                                                                                                                                                                                                                                                                                                                                                         |
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#podsecuritycontext-v1-core"><strong>supplementalGroups</strong></a><br><em>array di interi</em></p>                                                                                                                                                                                                                                | Un elenco di **gruppi applicati al primo processo eseguito in ciascun container**, oltre al GID primario del container.                                                                                                                                                                                                                                                                                                                                                                  |
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#podsecuritycontext-v1-core"><strong>sysctls</strong></a><br><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#sysctl-v1-core"><em>Sysctl</em></a> <em>array</em><br><em>Ulteriori informazioni su</em> <a href="https://www.garron.me/en/go2linux/sysctl-linux.html"><em><strong>sysctls</strong></em></a></p> | I sysctls contengono un elenco di **sysctls namespaced utilizzati per il pod**. I pod con sysctls non supportati (dal runtime del container) potrebbero non avviarsi.                                                                                                                                                                                                                                                                                                                                        |
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#podsecuritycontext-v1-core"><strong>windowsOptions</strong></a><br><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#windowssecuritycontextoptions-v1-core"><em>WindowsSecurityContextOptions</em></a></p>                                                                                           | Le impostazioni specifiche di Windows applicate a tutti i container. Se non specificato, verranno utilizzate le opzioni all'interno del SecurityContext di un container.                                                                                                                                                                                                                                                                                                                                               |

## SecurityContext

[**Dalla documentazione:**](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#securitycontext-v1-core)

Questo contesto è impostato all'interno delle **definizioni dei container**. Da un punto di vista della sicurezza difensiva, dovresti considerare:

- **allowPrivilegeEscalation** a **False**
- Non aggiungere **capabilities** sensibili (e rimuovere quelle di cui non hai bisogno)
- **privileged** a **False**
- Se possibile, impostare **readOnlyFilesystem** come **True**
- Impostare **runAsNonRoot** su **True** e impostare un **runAsUser**
- Se possibile, considera di **limitare** le **permissive** indicando **seLinuxOptions** e **seccompProfile**
- Non dare accesso al **privilege** **group** tramite **runAsGroup.**

Nota che gli attributi impostati in **entrambi SecurityContext e PodSecurityContext**, il valore specificato in **SecurityContext** ha **precedenza**.

| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#securitycontext-v1-core"><strong>allowPrivilegeEscalation</strong></a><br><em>booleano</em></p>                                                                                                                                                                      | **AllowPrivilegeEscalation** controlla se un processo può **acquisire più privilegi** rispetto al suo processo padre. Questo bool controlla direttamente se il flag no_new_privs sarà impostato sul processo del container. AllowPrivilegeEscalation è sempre vero quando il container è eseguito come **Privileged** o ha **CAP_SYS_ADMIN** |
| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#securitycontext-v1-core"><strong>capabilities</strong></a><br><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#capabilities-v1-core"><em>Capabilities</em></a><br><em>Ulteriori informazioni su</em> <em><strong>Capabilities</strong></em></p>  | Le **capabilities da aggiungere/rimuovere durante l'esecuzione dei container**. Predefinito al set di capabilities predefinito.                                                                                                                                                                                                                |
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#securitycontext-v1-core"><strong>privileged</strong></a><br><em>booleano</em></p>                                                                                                                                                                                    | Esegui il container in modalità privilegiata. I processi nei container privilegiati sono essenzialmente **equivalenti a root sull'host**. Predefinito a false.                                                                                                                                                                           |
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#securitycontext-v1-core"><strong>procMount</strong></a><br><em>stringa</em></p>                                                                                                                                                                                      | procMount indica il **tipo di montaggio proc da utilizzare per i container**. Il predefinito è DefaultProcMount che utilizza i valori predefiniti del runtime del container per i percorsi di sola lettura e i percorsi mascherati.                                                                                                                                |
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#securitycontext-v1-core"><strong>readOnlyRootFilesystem</strong></a><br><em>booleano</em></p>                                                                                                                                                                        | Se questo **container ha un filesystem root di sola lettura**. Il predefinito è false.                                                                                                                                                                                                                                         |
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#securitycontext-v1-core"><strong>runAsGroup</strong></a><br><em>intero</em></p>                                                                                                                                                                                    | Il **GID per eseguire l'entrypoint** del processo del container. Usa il valore predefinito di runtime se non impostato.                                                                                                                                                                                                                            |
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#securitycontext-v1-core"><strong>runAsNonRoot</strong></a><br><em>booleano</em></p>                                                                                                                                                                                  | Indica che il container deve **essere eseguito come un utente non root**. Se vero, il Kubelet convaliderà l'immagine a runtime per assicurarsi che non venga eseguita come UID 0 (root) e non avvierà il container se lo fa.                                                                                                      |
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#securitycontext-v1-core"><strong>runAsUser</strong></a><br><em>intero</em></p>                                                                                                                                                                                     | Il **UID per eseguire l'entrypoint** del processo del container. Predefinito all'utente specificato nei metadati dell'immagine se non specificato.                                                                                                                                                                                              |
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#securitycontext-v1-core"><strong>seLinuxOptions</strong></a><br><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#selinuxoptions-v1-core"><em>SELinuxOptions</em></a><br><em>Ulteriori informazioni su</em> <em><strong>seLinux</strong></em></p> | Il **contesto SELinux da applicare al container**. Se non specificato, il runtime del container assegnerà un contesto SELinux casuale per ogni container.                                                                                                                                                              |
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#securitycontext-v1-core"><strong>seccompProfile</strong></a><br><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#seccompprofile-v1-core"><em>SeccompProfile</em></a></p>                                                               | Le **opzioni seccomp** da utilizzare per questo container.                                                                                                                                                                                                                                                                     |
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#securitycontext-v1-core"><strong>windowsOptions</strong></a><br><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#windowssecuritycontextoptions-v1-core"><em>WindowsSecurityContextOptions</em></a></p>                                 | Le **impostazioni specifiche di Windows** applicate a tutti i container.                                                                                                                                                                                                                                                          |

## References

- [https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#podsecuritycontext-v1-core](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#podsecuritycontext-v1-core)
- [https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#securitycontext-v1-core](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#securitycontext-v1-core)

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