# Kubernetes Hardening

{{#include ../../../banners/hacktricks-training.md}}

## Alati za analizu klastera

### [**Steampipe - Kubernetes Compliance](https://github.com/turbot/steampipe-mod-kubernetes-compliance)

Izvršava **several compliance checks over the Kubernetes cluster**. Uključuje podršku za CIS, Nacionalnu bezbednosnu agenciju (NSA) i izveštaj o tehničkoj bezbednosti Cybersecurity and Infrastructure Security Agency (CISA) za učvršćivanje Kubernetes-a.
```bash
# Install Steampipe
brew install turbot/tap/powerpipe
brew install turbot/tap/steampipe
steampipe plugin install kubernetes

# Start the service
steampipe service start

# Install the module
mkdir dashboards
cd dashboards
powerpipe mod init
powerpipe mod install github.com/turbot/steampipe-mod-kubernetes-compliance

# Run the module
powerpipe server
```
### [**Kubescape**](https://github.com/armosec/kubescape)

[**Kubescape**](https://github.com/armosec/kubescape) je K8s open-source alat koji pruža jedinstveni pregled multi-cloud K8s, uključujući analizu rizika, usklađenost sa bezbednošću, vizualizaciju RBAC-a i skeniranje ranjivosti slika. Kubescape skenira K8s klastere, YAML datoteke i HELM šeme, otkrivajući pogrešne konfiguracije prema više okvira (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 kršenja RBAC-a (kontrola pristupa zasnovana na ulogama) u ranim fazama CI/CD pipeline-a, trenutno izračunava rizik 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 alat koji skenira aktivne Kubernetes klastere 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 vašeg klastera, otkriva pogrešne konfiguracije i pomaže vam da osigurate da su najbolje prakse na snazi, čime se sprečavaju budući problemi. Cilj mu je smanjenje kognitivnog \_over_load-a s kojim se suočavate prilikom upravljanja Kubernetes klasterom u stvarnom svetu. Pored toga, ako vaš klaster koristi metric-server, izveštava o potencijalnim prekomernim/podkomernim alokacijama resursa i pokušava da vas upozori ako vaš klaster ostane bez kapaciteta.

### [**Kube-bench**](https://github.com/aquasecurity/kube-bench)

Alat [**kube-bench**](https://github.com/aquasecurity/kube-bench) je alat koji proverava da li je Kubernetes bezbedno raspoređen pokretanjem provera dokumentovanih u [**CIS Kubernetes Benchmark**](https://www.cisecurity.org/benchmark/kubernetes/).\
Možete izabrati da:

- pokrenete kube-bench iznutra kontejnera (deljenje PID imenskog prostora sa hostom)
- pokrenete kontejner koji instalira kube-bench na hostu, a zatim pokrenete kube-bench direktno na hostu
- instalirate najnovije binarne datoteke sa [Releases page](https://github.com/aquasecurity/kube-bench/releases),
- kompajlirate ga iz izvora.

### [**Kubeaudit**](https://github.com/Shopify/kubeaudit)

**[DEPRECATED]** Alat [**kubeaudit**](https://github.com/Shopify/kubeaudit) je alat za komandnu liniju i Go paket za **auditovanje Kubernetes klastera** zbog različitih bezbednosnih problema.

Kubeaudit može otkriti da li se pokreće unutar kontejnera u klasteru. Ako je tako, 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.**

### [**Kube-hunter**](https://github.com/aquasecurity/kube-hunter)

**[DEPRECATED]** Alat [**kube-hunter**](https://github.com/aquasecurity/kube-hunter) traži bezbednosne slabosti u Kubernetes klasterima. Alat je razvijen kako bi povećao svest i vidljivost o bezbednosnim problemima u Kubernetes okruženjima.
```bash
kube-hunter --remote some.node.com
```
### [Trivy](https://github.com/aquasecurity/trivy)

[Trivy](https://github.com/aquasecurity/trivy) ima skener koji traži bezbednosne probleme i ciljeve gde može da pronađe te probleme:

- Slika kontejnera
- Datotečni sistem
- Git repozitorijum (daljinski)
- Slika virtuelne mašine
- Kubernetes


### [**Kubei**](https://github.com/Erezf-p/kubei)

**[Izgleda kao da nije održavan]**

[**Kubei**](https://github.com/Erezf-p/kubei) je alat za skeniranje ranjivosti i CIS Docker benchmark alat koji omogućava korisnicima da dobiju tačnu i trenutnu procenu rizika svojih kubernetes klastera. Kubei skenira sve slike koje se koriste u Kubernetes klasteru, uključujući slike aplikacionih podova i sistemskih podova.

### [**KubiScan**](https://github.com/cyberark/KubiScan)

[**KubiScan**](https://github.com/cyberark/KubiScan) je alat za skeniranje Kubernetes klastera za rizične dozvole u modelu autorizacije zasnovanom na ulogama (RBAC) Kubernetes-a.

### [Managed Kubernetes Auditing Toolkit](https://github.com/DataDog/managed-kubernetes-auditing-toolkit)

[**Mkat**](https://github.com/DataDog/managed-kubernetes-auditing-toolkit) je alat napravljen za testiranje drugih tipova visokorizičnih provera u poređenju sa drugim alatima. Ima 3 različita moda:

- **`find-role-relationships`**: Koji će pronaći koje AWS uloge se izvršavaju u kojim podovima
- **`find-secrets`**: Koji pokušava da identifikuje tajne u K8s resursima kao što su Podovi, ConfigMaps i Tajne.
- **`test-imds-access`**: Koji će pokušati da pokrene podove i pokuša da pristupi metapodacima v1 i v2. UPOZORENJE: Ovo će pokrenuti pod u klasteru, budite veoma oprezni jer možda ne želite to da uradite!

## **Revizija IaC Koda**

### [**KICS**](https://github.com/Checkmarx/kics)

[**KICS**](https://github.com/Checkmarx/kics) pronalazi **bezbednosne ranjivosti**, probleme usklađenosti i konfiguracione greške u sledećim **rešenjima infrastrukture kao koda**: Terraform, Kubernetes, Docker, AWS CloudFormation, Ansible, Helm, Microsoft ARM i OpenAPI 3.0 specifikacije

### [**Checkov**](https://github.com/bridgecrewio/checkov)

[**Checkov**](https://github.com/bridgecrewio/checkov) je alat za statičku analizu koda za infrastrukturu kao kod.

Skenira cloud infrastrukturu koja je obezbeđena 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 i usklađenosti greške koristeći skeniranje zasnovano na grafovima.

### [**Kube-score**](https://github.com/zegl/kube-score)

[**kube-score**](https://github.com/zegl/kube-score) je alat koji vrši statičku analizu koda vaših definicija Kubernetes objekata.

Da biste instalirali:

| Distribucija                                        | Komanda / Link                                                                          |
| --------------------------------------------------- | --------------------------------------------------------------------------------------- |
| Pre-izgrađeni binarni fajlovi 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 i Linux)                          | `brew install kube-score`                                                               |
| [Krew](https://krew.sigs.k8s.io/) (macOS i Linux) | `kubectl krew install score`                                                            |

## Saveti

### Kubernetes PodSecurityContext i SecurityContext

Možete konfigurisati **bezbednosni kontekst Podova** (sa _PodSecurityContext_) i **kontejnera** koji će biti pokrenuti (sa _SecurityContext_). Za više informacija pročitajte:

{{#ref}}
kubernetes-securitycontext-s.md
{{#endref}}

### Kubernetes API Ojačavanje

Veoma je važno **zaštititi pristup Kubernetes Api Serveru** jer bi zlonameran akter sa dovoljno privilegija mogao da ga zloupotrebi i na mnogo načina ošteti okruženje.\
Važno je osigurati i **pristup** (**whitelist** porekla za pristup API Serveru i odbiti sve druge veze) i [**autentifikaciju**](https://kubernetes.io/docs/reference/command-line-tools-reference/kubelet-authentication-authorization/) (prateći princip **najmanjih** **privilegija**). I definitivno **nikada** **ne dozvoliti** **anonimne** **zahteve**.

**Uobičajen proces zahteva:**\
Korisnik ili K8s ServiceAccount –> Autentifikacija –> Autorizacija –> Kontrola prijema.

**Saveti**:

- Zatvorite portove.
- Izbegavajte anonimni pristup.
- NodeRestriction; Nema pristupa sa specifičnih čvorova do API-ja.
- [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 kubelete da dodaju/uklanjaju/aktualizuju oznake sa prefiksom node-restriction.kubernetes.io. Ovaj prefiks oznake je rezervisan za administratore da označe svoje Node objekte u svrhu izolacije radnog opterećenja, a kubeleti neće moći da menjaju oznake sa tim prefiksom.
- Takođe, omogućava kubeletima da dodaju/uklanjaju/aktualizuju ove oznake i prefikse oznaka.
- Osigurajte sa oznakama sigurnu izolaciju radnog opterećenja.
- Izbegavajte specifične podove iz API pristupa.
- Izbegavajte izlaganje ApiServer-a internetu.
- Izbegavajte neovlašćen pristup RBAC.
- ApiServer port sa vatrozidom i IP whitelist-om.

### Ojačavanje SecurityContext-a

Podrazumevano će se koristiti korisnik root kada se Pod pokrene ako nije naveden nijedan drugi korisnik. Možete pokrenuti svoju aplikaciju unutar sigurnijeg konteksta koristeći šablon sličan sledećem:
```yaml
apiVersion: v1
kind: Pod
metadata:
name: security-context-demo
spec:
securityContext:
runAsUser: 1000
runAsGroup: 3000
fsGroup: 2000
volumes:
- name: sec-ctx-vol
emptyDir: {}
containers:
- name: sec-ctx-demo
image: busybox
command: [ "sh", "-c", "sleep 1h" ]
securityContext:
runAsNonRoot: true
volumeMounts:
- name: sec-ctx-vol
mountPath: /data/demo
securityContext:
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 učvršćivanje

Trebalo bi da ažurirate svoje Kubernetes okruženje koliko god je potrebno da biste imali:

- Ažurirane zavisnosti.
- Ispravke grešaka i sigurnosne zakrpe.

[**Ciklus izdanja**](https://kubernetes.io/docs/setup/release/version-skew-policy/): Svakih 3 meseca dolazi novo manje izdanje -- 1.20.3 = 1(Glavno).20(Manje).3(zakrpa)

**Najbolji način za ažuriranje Kubernetes klastera je (iz** [**ovde**](https://kubernetes.io/docs/tasks/administer-cluster/cluster-upgrade/)**):**

- Ažurirajte komponente Master Node-a prateći ovu sekvencu:
- etcd (sve instance).
- kube-apiserver (svi hostovi kontrolne ravni).
- kube-controller-manager.
- kube-scheduler.
- cloud controller manager, ako ga koristite.
- Ažurirajte komponente Worker Node-a kao što su kube-proxy, kubelet.

## Kubernetes nadzor i sigurnost:

- Kyverno Policy Engine
- Cilium Tetragon - eBPF-bazirana sigurnosna vidljivost i sprovođenje u radu
- Politike mrežne sigurnosti
- Falco - Nadzor i detekcija sigurnosti u radu

{{#include ../../../banners/hacktricks-training.md}}
