Translated ['', 'src/pentesting-cloud/kubernetes-security/kubernetes-har

This commit is contained in:
Translator
2025-11-17 12:19:07 +00:00
parent 80bf2ecde7
commit 2e9aad3d45

View File

@@ -1,12 +1,12 @@
# Kubernetes Hardening
# Endurecimento do Kubernetes
{{#include ../../../banners/hacktricks-training.md}}
## Ferramentas para analisar um cluster
### [**Steampipe - Kubernetes Compliance](https://github.com/turbot/steampipe-mod-kubernetes-compliance)
### [Steampipe - Kubernetes Compliance](https://github.com/turbot/steampipe-mod-kubernetes-compliance)
Ele fará **vários checks de conformidade sobre o cluster Kubernetes**. Inclui suporte para CIS, Agência de Segurança Nacional (NSA) e o relatório técnico de cibersegurança da Agência de Segurança Cibernética e Infraestrutura (CISA) para o endurecimento do Kubernetes.
Ele realiza **várias verificações de conformidade no cluster Kubernetes**. Inclui suporte para CIS, National Security Agency (NSA) e para o relatório técnico de Cybersecurity da Cybersecurity and Infrastructure Security Agency (CISA) sobre hardening do Kubernetes.
```bash
# Install Steampipe
brew install turbot/tap/powerpipe
@@ -27,47 +27,47 @@ powerpipe server
```
### [**Kubescape**](https://github.com/armosec/kubescape)
[**Kubescape**](https://github.com/armosec/kubescape) é uma ferramenta de código aberto K8s que fornece uma visão única multi-nuvem do K8s, incluindo análise de risco, conformidade de segurança, visualizador de RBAC e verificação de vulnerabilidades de imagem. O Kubescape escaneia clusters K8s, arquivos YAML e gráficos HELM, detectando configurações incorretas de acordo com múltiplos frameworks (como o [NSA-CISA](https://www.armosec.io/blog/kubernetes-hardening-guidance-summary-by-armo), [MITRE ATT\&CK®](https://www.microsoft.com/security/blog/2021/03/23/secure-containerized-environments-with-updated-threat-matrix-for-kubernetes/)), vulnerabilidades de software e violações de RBAC (controle de acesso baseado em função) nas primeiras etapas do pipeline CI/CD, calcula a pontuação de risco instantaneamente e mostra tendências de risco ao longo do tempo.
[**Kubescape**](https://github.com/armosec/kubescape) é uma ferramenta K8s de código aberto que fornece um único painel K8s multi-cloud, incluindo análise de risco, compliance de segurança, visualizador de RBAC e varredura de vulnerabilidades em imagens. Kubescape escaneia clusters K8s, arquivos YAML e HELM charts, detectando misconfigurações de acordo com múltiplos frameworks (como o [NSA-CISA](https://www.armosec.io/blog/kubernetes-hardening-guidance-summary-by-armo) , [MITRE ATT\&CK®](https://www.microsoft.com/security/blog/2021/03/23/secure-containerized-environments-with-updated-threat-matrix-for-kubernetes/)), vulnerabilidades de software e violações de RBAC (role-based-access-control) em estágios iniciais do pipeline CI/CD, calcula a pontuação de risco instantaneamente e mostra tendências de risco ao longo do tempo.
```bash
curl -s https://raw.githubusercontent.com/kubescape/kubescape/master/install.sh | /bin/bash
kubescape scan --verbose
```
### [**Popeye**](https://github.com/derailed/popeye)
[**Popeye**](https://github.com/derailed/popeye) é uma ferramenta que escaneia clusters Kubernetes ativos e **relata problemas potenciais com recursos e configurações implantados**. Ele sanitiza seu cluster com base no que está implantado e não no que está armazenado em disco. Ao escanear seu cluster, ele detecta configurações incorretas e ajuda a garantir que as melhores práticas estejam em vigor, prevenindo assim dores de cabeça futuras. Seu objetivo é reduzir a sobrecarga cognitiva que se enfrenta ao operar um cluster Kubernetes no ambiente. Além disso, se seu cluster empregar um metric-server, ele relata potenciais alocações de recursos excessivas ou insuficientes e tenta avisá-lo caso seu cluster fique sem capacidade.
[**Popeye**](https://github.com/derailed/popeye) é uma utilidade que escaneia clusters Kubernetes ao vivo e **relata problemas potenciais com recursos e configurações implantadas**. Ele sanitiza seu cluster com base no que está implantado e não no que está no disco. Ao escanear seu cluster, detecta misconfigurações e ajuda a garantir que as melhores práticas estejam em vigor, evitando dores de cabeça futuras. Tem como objetivo reduzir a \_over_load que se enfrenta ao operar um cluster Kubernetes em ambiente real. Além disso, se seu cluster empregar um metric-server, ele relata potenciais alocações de recursos em excesso/falta e tenta alertar caso seu cluster fique sem capacidade.
### [**Kube-bench**](https://github.com/aquasecurity/kube-bench)
A ferramenta [**kube-bench**](https://github.com/aquasecurity/kube-bench) é uma ferramenta que verifica se o Kubernetes está implantado de forma segura, executando as verificações documentadas no [**CIS Kubernetes Benchmark**](https://www.cisecurity.org/benchmark/kubernetes/).\
A ferramenta [**kube-bench**](https://github.com/aquasecurity/kube-bench) é uma ferramenta que verifica se o Kubernetes está implantado de forma segura executando as verificações documentadas no [**CIS Kubernetes Benchmark**].\
Você pode escolher:
- executar kube-bench de dentro de um contêiner (compartilhando o namespace PID com o host)
- executar um contêiner que instala kube-bench no host e, em seguida, executar kube-bench diretamente no host
- instalar os binários mais recentes da [página de Releases](https://github.com/aquasecurity/kube-bench/releases),
- compilá-lo a partir do código-fonte.
- run kube-bench from inside a container (sharing PID namespace with the host)
- run a container that installs kube-bench on the host, and then run kube-bench directly on the host
- install the latest binaries from the [Releases page](https://github.com/aquasecurity/kube-bench/releases),
- compile it from source.
### [**Kubeaudit**](https://github.com/Shopify/kubeaudit)
**[DEPRECATED]** A ferramenta [**kubeaudit**](https://github.com/Shopify/kubeaudit) é uma ferramenta de linha de comando e um pacote Go para **auditar clusters Kubernetes** em relação a várias preocupações de segurança diferentes.
**[DEPRECATED]** A ferramenta [**kubeaudit**](https://github.com/Shopify/kubeaudit) é uma ferramenta de linha de comando e um pacote Go para **auditar clusters Kubernetes** por várias preocupações diferentes.
Kubeaudit pode detectar se está sendo executado dentro de um contêiner em um cluster. Se sim, tentará auditar todos os recursos Kubernetes nesse cluster:
Kubeaudit pode detectar se está sendo executado dentro de um container em um cluster. Se sim, ele tentará auditar todos os recursos Kubernetes nesse cluster:
```
kubeaudit all
```
Esta ferramenta também possui o argumento `autofix` para **corrigir automaticamente problemas detectados.**
Esta ferramenta também possui o argumento `autofix` para **corrigir automaticamente os problemas detectados.**
### [**Kube-hunter**](https://github.com/aquasecurity/kube-hunter)
**[DEPRECADO]** A ferramenta [**kube-hunter**](https://github.com/aquasecurity/kube-hunter) busca por fraquezas de segurança em clusters Kubernetes. A ferramenta foi desenvolvida para aumentar a conscientização e a visibilidade sobre problemas de segurança em ambientes Kubernetes.
**[DEPRECADO]** A ferramenta [**kube-hunter**](https://github.com/aquasecurity/kube-hunter) procura por vulnerabilidades de segurança em clusters Kubernetes. A ferramenta foi desenvolvida para aumentar a conscientização e a visibilidade sobre problemas de segurança em ambientes Kubernetes.
```bash
kube-hunter --remote some.node.com
```
### [Trivy](https://github.com/aquasecurity/trivy)
[Trivy](https://github.com/aquasecurity/trivy) possui scanners que procuram por problemas de segurança e alvos onde podem encontrar esses problemas:
[Trivy](https://github.com/aquasecurity/trivy) possui scanners que procuram por problemas de segurança, e alvos onde ele pode encontrar esses problemas:
- Imagem de Contêiner
- Sistema de Arquivos
- Imagem de Container
- Sistema de arquivos
- Repositório Git (remoto)
- Imagem de Máquina Virtual
- Kubernetes
@@ -75,52 +75,98 @@ kube-hunter --remote some.node.com
### [**Kubei**](https://github.com/Erezf-p/kubei)
**[Parece não estar mantido]**
**[Parece descontinuado]**
[**Kubei**](https://github.com/Erezf-p/kubei) é uma ferramenta de escaneamento de vulnerabilidades e benchmark CIS Docker que permite aos usuários obter uma avaliação de risco precisa e imediata de seus clusters Kubernetes. Kubei escaneia todas as imagens que estão sendo usadas em um cluster Kubernetes, incluindo imagens de pods de aplicação e pods de sistema.
[**Kubei**](https://github.com/Erezf-p/kubei) é uma ferramenta de scanning de vulnerabilidades e CIS Docker benchmark que permite aos usuários obter uma avaliação de risco precisa e imediata de seus clusters kubernetes. Kubei escaneia todas as imagens que estão sendo usadas em um cluster Kubernetes, incluindo imagens de pods de aplicação e pods do sistema.
### [**KubiScan**](https://github.com/cyberark/KubiScan)
[**KubiScan**](https://github.com/cyberark/KubiScan) é uma ferramenta para escanear clusters Kubernetes em busca de permissões arriscadas no modelo de autorização de controle de acesso baseado em função (RBAC) do Kubernetes.
[**KubiScan**](https://github.com/cyberark/KubiScan) é uma ferramenta para escanear clusters Kubernetes em busca de permissões arriscadas no modelo de autorização Role-based access control (RBAC) do Kubernetes.
### [Managed Kubernetes Auditing Toolkit](https://github.com/DataDog/managed-kubernetes-auditing-toolkit)
[**Mkat**](https://github.com/DataDog/managed-kubernetes-auditing-toolkit) é uma ferramenta construída para testar outros tipos de verificações de alto risco em comparação com as outras ferramentas. Ela possui principalmente 3 modos diferentes:
- **`find-role-relationships`**: Que encontrará quais funções AWS estão sendo executadas em quais pods
- **`find-secrets`**: Que tenta identificar segredos em recursos K8s, como Pods, ConfigMaps e Secrets.
- **`test-imds-access`**: Que tentará executar pods e tentar acessar os metadados v1 e v2. AVISO: Isso executará um pod no cluster, tenha muito cuidado porque talvez você não queira fazer isso!
- **`find-role-relationships`**: Que encontrará quais AWS roles estão sendo executadas em quais pods
- **`find-secrets`**: Que tenta identificar Secrets em recursos K8s, como Pods, ConfigMaps e Secrets.
- **`test-imds-access`**: Que tentará executar pods e acessar o metadata v1 e v2. AVISO: Isto executará um pod no cluster; tenha muito cuidado, pois talvez você não queira fazer isso!
## **Auditar Código IaC**
## **Auditar código IaC**
### [**KICS**](https://github.com/Checkmarx/kics)
[**KICS**](https://github.com/Checkmarx/kics) encontra **vulnerabilidades de segurança**, problemas de conformidade e configurações incorretas de infraestrutura nas seguintes **soluções de Infraestrutura como Código**: Terraform, Kubernetes, Docker, AWS CloudFormation, Ansible, Helm, Microsoft ARM e especificações OpenAPI 3.0
[**KICS**](https://github.com/Checkmarx/kics) encontra vulnerabilidades de segurança, problemas de conformidade e más configurações de infraestrutura nas seguintes soluções de Infraestrutura como Código: Terraform, Kubernetes, Docker, AWS CloudFormation, Ansible, Helm, Microsoft ARM, e especificações OpenAPI 3.0
### [**Checkov**](https://github.com/bridgecrewio/checkov)
[**Checkov**](https://github.com/bridgecrewio/checkov) é uma ferramenta de análise de código estático para infraestrutura como código.
[**Checkov**](https://github.com/bridgecrewio/checkov) é uma ferramenta de análise estática de código para infraestrutura como código.
Ela escaneia a infraestrutura em nuvem provisionada usando [Terraform](https://terraform.io), plano Terraform, [Cloudformation](https://aws.amazon.com/cloudformation/), [AWS SAM](https://aws.amazon.com/serverless/sam/), [Kubernetes](https://kubernetes.io), [Dockerfile](https://www.docker.com), [Serverless](https://www.serverless.com) ou [ARM Templates](https://docs.microsoft.com/en-us/azure/azure-resource-manager/templates/overview) e detecta configurações incorretas de segurança e conformidade usando escaneamento baseado em grafo.
Ele escaneia infraestrutura de nuvem provisionada usando [Terraform](https://terraform.io), Terraform plan, [Cloudformation](https://aws.amazon.com/cloudformation/), [AWS SAM](https://aws.amazon.com/serverless/sam/), [Kubernetes](https://kubernetes.io), [Dockerfile](https://www.docker.com), [Serverless](https://www.serverless.com) ou [ARM Templates](https://docs.microsoft.com/en-us/azure/azure-resource-manager/templates/overview) e detecta más configurações de segurança e conformidade usando varredura baseada em grafo.
### [**Kube-score**](https://github.com/zegl/kube-score)
[**kube-score**](https://github.com/zegl/kube-score) é uma ferramenta que realiza análise de código estático das definições de objetos do Kubernetes.
[**kube-score**](https://github.com/zegl/kube-score) é uma ferramenta que realiza análise estática de código das definições de objetos do seu Kubernetes.
Para instalar:
To install:
| Distribuição | Comando / Link |
| Distribution | Command / Link |
| --------------------------------------------------- | --------------------------------------------------------------------------------------- |
| Binários pré-compilados para macOS, Linux e Windows | [Lançamentos do GitHub](https://github.com/zegl/kube-score/releases) |
| Pre-built binaries for macOS, Linux, and Windows | [GitHub releases](https://github.com/zegl/kube-score/releases) |
| Docker | `docker pull zegl/kube-score` ([Docker Hub)](https://hub.docker.com/r/zegl/kube-score/) |
| Homebrew (macOS e Linux) | `brew install kube-score` |
| [Krew](https://krew.sigs.k8s.io/) (macOS e Linux) | `kubectl krew install score` |
| Homebrew (macOS and Linux) | `brew install kube-score` |
| [Krew](https://krew.sigs.k8s.io/) (macOS and Linux) | `kubectl krew install score` |
## Ferramentas para analisar arquivos YAML & Helm Charts
### [**Kube-linter**](https://github.com/stackrox/kube-linter)
```bash
# Install Kube-linter
brew install kube-linter
# Run Kube-linter
## lint ./path/to/yaml/or/chart
```
### [Checkov](https://github.com/bridgecrewio/checkov)
```bash
# Install Checkov
pip install checkov
# Run Checkov
checkov -d ./path/to/yaml/or/chart
```
### [kubescore](https://github.com/zegl/kube-score)
```bash
# Install kube-score
brew install kube-score
# Run kube-score
kube-score score ./path/to/yaml
# or
helm template chart /path/to/chart | kube-score score -
# or if the chart needs some values
helm template chart /path/to/chart \
--set 'config.urls[0]=https://dummy.backend.internal' \
| kube-score score -
```
### [Kubesec](https://github.com/controlplaneio/kubesec)
```bash
# Install Kubesec
## Download from https://github.com/controlplaneio/kubesec/releases
# Run Kubesec in a yaml
kubesec scan ./path/to/yaml
# or
helm template chart /path/to/chart | kubesec scan -
# or if the chart needs some values
helm template chart /path/to/chart \
--set 'config.urls[0]=https://dummy.backend.internal' \
| kubesec scan -
```
## Dicas
### Kubernetes PodSecurityContext e SecurityContext
### Kubernetes PodSecurityContext and SecurityContext
Você pode configurar o **contexto de segurança dos Pods** (com _PodSecurityContext_) e dos **contêineres** que serão executados (com _SecurityContext_). Para mais informações, leia:
Você pode configurar o **contexto de segurança dos Pods** (com _PodSecurityContext_) e dos **containers** que serão executados (com _SecurityContext_). Para mais informações leia:
{{#ref}}
kubernetes-securitycontext-s.md
@@ -128,29 +174,29 @@ kubernetes-securitycontext-s.md
### Endurecimento da API do Kubernetes
É muito importante **proteger o acesso ao Kubernetes Api Server**, pois um ator malicioso com privilégios suficientes pode ser capaz de abusar dele e causar danos de várias maneiras ao ambiente.\
É importante garantir tanto o **acesso** (**whitelist** de origens para acessar o API Server e negar qualquer outra conexão) quanto a [**autenticação**](https://kubernetes.io/docs/reference/command-line-tools-reference/kubelet-authentication-authorization/) (seguindo o princípio do **menor** **privilégio**). E definitivamente **nunca** **permitir** **requisições** **anônimas**.
É muito importante **proteger o acesso ao Kubernetes Api Server**, pois um ator malicioso com privilégios suficientes poderia abusar dele e causar muitos danos ao ambiente.
É importante proteger tanto o **acesso** (**whitelist** as origens que podem acessar o API Server e negar qualquer outra conexão) quanto a [**autenticação**](https://kubernetes.io/docs/reference/command-line-tools-reference/kubelet-authentication-authorization/) (seguindo o princípio do **mínimo** **privilégio**). E definitivamente **nunca** **permita** **requisições** **anônimas**.
**Processo Comum de Requisição:**\
Usuário ou K8s ServiceAccount > Autenticação > Autorização > Controle de Admissão.
Processo comum de requisição:
User or K8s ServiceAccount > Authentication > Authorization > Admission Control.
**Dicas**:
- Fechar portas.
- Evitar acesso anônimo.
- NodeRestriction; Sem acesso de nós específicos ao API.
- Feche portas.
- Evite acesso anônimo.
- NodeRestriction; Sem acesso de nós específicos à API.
- [https://kubernetes.io/docs/reference/access-authn-authz/admission-controllers/#noderestriction](https://kubernetes.io/docs/reference/access-authn-authz/admission-controllers/#noderestriction)
- Basicamente impede que kubelets adicionem/removam/atualizem rótulos com um prefixo node-restriction.kubernetes.io/. Este prefixo de rótulo é reservado para administradores rotularem seus objetos Node para fins de isolamento de carga de trabalho, e kubelets não poderão modificar rótulos com esse prefixo.
- E também, permite que kubelets adicionem/removam/atualizem esses rótulos e prefixos de rótulo.
- Assegure com rótulos o isolamento seguro de carga de trabalho.
- Evite que pods específicos acessem a API.
- Evite a exposição do ApiServer à internet.
- Evite acesso não autorizado RBAC.
- Porta do ApiServer com firewall e whitelist de IP.
- Basicamente previne que kubelets adicionem/removam/atualizem labels com o prefixo node-restriction.kubernetes.io/. Esse prefixo de label é reservado para administradores rotularem seus objetos Node para fins de isolamento de workload, e os kubelets não poderão modificar labels com esse prefixo.
- E também, permite que kubelets adicionem/removam/atualizem esses labels e prefixos de label.
- Assegure, com labels, o isolamento seguro das workloads.
- Evite que pods específicos tenham acesso à API.
- Evite a exposição do ApiServer à Internet.
- Evite acesso não autorizado via RBAC.
- Proteja a porta do ApiServer com firewall e whitelist de IPs.
### Endurecimento do SecurityContext
Por padrão, o usuário root será usado quando um Pod for iniciado, se nenhum outro usuário for especificado. Você pode executar sua aplicação dentro de um contexto mais seguro usando um template semelhante ao seguinte:
Por padrão o usuário root será usado quando um Pod for iniciado se nenhum outro usuário for especificado. Você pode executar sua aplicação dentro de um contexto mais seguro usando um template similar ao seguinte:
```yaml
apiVersion: v1
kind: Pod
@@ -184,25 +230,25 @@ allowPrivilegeEscalation: true
Você deve atualizar seu ambiente Kubernetes com a frequência necessária para ter:
- Dependências atualizadas.
- Correções de bugs e segurança.
- Correções de bugs e de segurança.
[**Ciclos de lançamento**](https://kubernetes.io/docs/setup/release/version-skew-policy/): A cada 3 meses há um novo lançamento menor -- 1.20.3 = 1(Maior).20(Menor).3(patch)
[**Release cycles**](https://kubernetes.io/docs/setup/release/version-skew-policy/): A cada 3 meses há um novo minor release -- 1.20.3 = 1(Major).20(Minor).3(patch)
**A melhor maneira de atualizar um Cluster Kubernetes é (a partir de** [**aqui**](https://kubernetes.io/docs/tasks/administer-cluster/cluster-upgrade/)**):**
**A melhor forma de atualizar um Kubernetes Cluster é (a partir de** [**here**](https://kubernetes.io/docs/tasks/administer-cluster/cluster-upgrade/)**):**
- Atualize os componentes do Master seguindo esta sequência:
- etcd (todas as instâncias).
- kube-apiserver (todos os hosts do plano de controle).
- Atualize os componentes do Master Node seguindo esta sequência:
- etcd (all instances).
- kube-apiserver (all control plane hosts).
- kube-controller-manager.
- kube-scheduler.
- cloud controller manager, se você usar um.
- Atualize os componentes do Worker, como kube-proxy, kubelet.
- cloud controller manager, if you use one.
- Atualize os componentes dos Worker Nodes como kube-proxy, kubelet.
## Monitoramento e segurança do Kubernetes:
## Kubernetes monitoring & security:
- Kyverno Policy Engine
- Cilium Tetragon - Observabilidade de Segurança e Aplicação em Tempo de Execução baseada em eBPF
- Políticas de Segurança de Rede
- Falco - Monitoramento e detecção de segurança em tempo de execução
- Cilium Tetragon - eBPF-based Security Observability and Runtime Enforcement
- Network Security Policies
- Falco - Runtime security monitoring & detection
{{#include ../../../banners/hacktricks-training.md}}