Translated ['src/pentesting-cloud/azure-security/az-basic-information/az

This commit is contained in:
Translator
2025-05-11 15:09:19 +00:00
parent fb2b9e2206
commit 89c63d70d0
4 changed files with 158 additions and 91 deletions

View File

@@ -2,9 +2,9 @@
{{#include ../../../banners/hacktricks-training.md}}
## Basiese Inligting
## Basic Information
Entra ID is Microsoft se wolk-gebaseerde identiteit en toegang bestuur (IAM) platform, wat dien as die fundamentele autentikasie en magtiging stelsel vir dienste soos Microsoft 365 en Azure Resource Manager. Azure AD implementeer die OAuth 2.0 magtiging raamwerk en die OpenID Connect (OIDC) autentikasie protokol om toegang tot hulpbronne te bestuur.
Entra ID is Microsoft's cloud-based identity and access management (IAM) platform, serving as the foundational authentication and authorization system for services like Microsoft 365 and Azure Resource Manager. Azure AD implementeer die OAuth 2.0-autoriseringsraamwerk en die OpenID Connect (OIDC) autentikasieprotokol om toegang tot hulpbronne te bestuur.
### OAuth
@@ -13,46 +13,46 @@ Entra ID is Microsoft se wolk-gebaseerde identiteit en toegang bestuur (IAM) pla
1. **Hulpbronbediener (RS):** Beskerm hulpbronne wat deur die hulpbron eienaar besit word.
2. **Hulpbron Eienaar (RO):** Gewoonlik 'n eindgebruiker wat die beskermde hulpbronne besit.
3. **Kliënttoepassing (CA):** 'n Toepassing wat toegang tot hulpbronne soek namens die hulpbron eienaar.
4. **Magtigingsbediener (AS):** Gee toegangstokens aan kliënttoepassings nadat dit hulle geverifieer en gemagtig het.
4. **Autoriseringsbediener (AS):** Gee toegangstokens aan kliënttoepassings nadat dit hulle geverifieer en geautoriseer het.
**Skope en Toestemming:**
**Skoppe en Toestemming:**
- **Skope:** Fynkorrelige toestemmings wat op die hulpbronbediener gedefinieer is en toegangsvlakke spesifiseer.
- **Toestemming:** Die proses waardeur 'n hulpbron eienaar 'n kliënttoepassing toestemming gee om toegang tot hulpbronne met spesifieke skope te verkry.
- **Skoppe:** Fynkorrelige toestemmings wat op die hulpbronbediener gedefinieer is en toegangsvlakke spesifiseer.
- **Toestemming:** Die proses waardeur 'n hulpbron eienaar 'n kliënttoepassing toestemming gee om toegang tot hulpbronne met spesifieke skoppe te verkry.
**Microsoft 365 Integrasie:**
- Microsoft 365 gebruik Azure AD vir IAM en bestaan uit verskeie "eerste-party" OAuth-toepassings.
- Hierdie toepassings is diep geïntegreer en het dikwels onderling afhanklike diensverhoudings.
- Om die gebruikerservaring te vereenvoudig en funksionaliteit te handhaaf, gee Microsoft "implisiete toestemming" of "voor-toestemming" aan hierdie eerste-party toepassings.
- **Implisiete Toestemming:** Sekere toepassings word outomaties **toegestaan om toegang tot spesifieke skope te verkry sonder eksplisiete gebruiker of administrateur goedkeuring**.
- Hierdie voor-toegestemde skope is gewoonlik verborge vir beide gebruikers en administrateurs, wat dit minder sigbaar maak in standaard bestuursinterfaces.
- Om die gebruikerservaring te vereenvoudig en funksionaliteit te handhaaf, verleen Microsoft "implisiete toestemming" of "voor-toestemming" aan hierdie eerste-party toepassings.
- **Implisiete Toestemming:** Sekere toepassings word outomaties **toegelaat om toegang tot spesifieke skoppe te verkry sonder eksplisiete gebruiker of administrateur goedkeuring**.
- Hierdie voor-toegestemde skoppe is gewoonlik verborge vir beide gebruikers en administrateurs, wat dit minder sigbaar maak in standaard bestuursinterfaces.
**Tipes Kliënttoepassings:**
1. **Vertroulike Kliënte:**
- Besit hul eie geloofsbriewe (bv. wagwoorde of sertifikate).
- Kan **veilig hulself autentiseer** aan die magtigingsbediener.
- Kan **hulle veilig aan die autoriseringsbediener autentiseer**.
2. **Publieke Kliënte:**
- Het nie unieke geloofsbriewe nie.
- Kan nie veilig aan die magtigingsbediener autentiseer nie.
- **Sekuriteitsimplikasie:** 'n Aanvaller kan 'n publieke kliënttoepassing naboots wanneer hy tokens aan vra, aangesien daar geen meganisme is vir die magtigingsbediener om die legitimiteit van die toepassing te verifieer nie.
- Kan nie veilig aan die autoriseringsbediener autentiseer nie.
- **Sekuriteitsimplikasie:** 'n Aanvaller kan 'n publieke kliënttoepassing naboots wanneer hy tokens aan vra, aangesien daar geen meganisme is vir die autoriseringsbediener om die legitimiteit van die toepassing te verifieer nie.
## Autentikasie Tokens
## Authentication Tokens
Daar is **drie tipes tokens** wat in OIDC gebruik word:
- [**Toegangstokens**](https://learn.microsoft.com/en-us/azure/active-directory/develop/access-tokens)**:** Die kliënt bied hierdie token aan die hulpbronbediener voor om **toegang tot hulpbronne** te verkry. Dit kan slegs gebruik word vir 'n spesifieke kombinasie van gebruiker, kliënt, en hulpbron en **kan nie herroep** word tot vervaldatum nie - dit is 1 uur per standaard.
- **ID Tokens**: Die kliënt ontvang hierdie **token van die magtigingsbediener**. Dit bevat basiese inligting oor die gebruiker. Dit is **gebind aan 'n spesifieke kombinasie van gebruiker en kliënt**.
- **Herfris Tokens**: Verskaf aan die kliënt saam met toegangstoken. Gebruik om **nuwe toegang en ID tokens te verkry**. Dit is gebind aan 'n spesifieke kombinasie van gebruiker en kliënt en kan herroep word. Standaard vervaldatum is **90 dae** vir inaktiewe herfris tokens en **geen vervaldatum vir aktiewe tokens** (dit is moontlik om nuwe herfris tokens uit 'n herfris token te verkry).
- 'n Herfris token moet gekoppel wees aan 'n **`aud`**, aan sekere **skope**, en aan 'n **tenant** en dit moet slegs in staat wees om toegangstokens vir daardie aud, skope (en nie meer nie) en tenant te genereer. Dit is egter nie die geval met **FOCI toepassings tokens** nie.
- 'n Herfris token is versleuteld en slegs Microsoft kan dit ontsleutel.
- [**Toegangstokens**](https://learn.microsoft.com/en-us/azure/active-directory/develop/access-tokens)**:** Die kliënt bied hierdie token aan die hulpbronbediener aan om **toegang tot hulpbronne** te verkry. Dit kan slegs gebruik word vir 'n spesifieke kombinasie van gebruiker, kliënt en hulpbron en **kan nie herroep word** totdat dit verval nie - dit is 1 uur per standaard.
- **ID Tokens**: Die kliënt ontvang hierdie **token van die autoriseringsbediener**. Dit bevat basiese inligting oor die gebruiker. Dit is **gebind aan 'n spesifieke kombinasie van gebruiker en kliënt**.
- **Herfris Tokens**: Word aan die kliënt verskaf saam met toegangstoken. Gebruik om **nuwe toegang en ID tokens te verkry**. Dit is gebind aan 'n spesifieke kombinasie van gebruiker en kliënt en kan herroep word. Standaard vervaldatum is **90 dae** vir inaktiewe herfris tokens en **geen vervaldatum vir aktiewe tokens** (dit is moontlik om nuwe herfris tokens uit 'n herfris token te verkry).
- 'n Herfris token moet aan 'n **`aud`**, aan sekere **skoppe**, en aan 'n **tenant** gekoppel wees en dit moet slegs toegangstokens vir daardie aud, skoppe (en nie meer nie) en tenant kan genereer. Dit is egter nie die geval met **FOCI toepassings tokens** nie.
- 'n Herfris token is geënkripteer en slegs Microsoft kan dit dekripteer.
- Om 'n nuwe herfris token te verkry, herroep nie die vorige herfris token nie.
> [!WARNING]
> Inligting vir **voorwaardelike toegang** is **gestoor** binne die **JWT**. So, as jy die **token van 'n toegelate IP-adres** aan vra, sal daardie **IP** in die token **gestoor** word en dan kan jy daardie token van 'n **nie-toegelate IP gebruik om toegang tot die hulpbronne** te verkry.
### Toegangstokens "aud"
### Access Tokens "aud"
Die veld wat in die "aud" veld aangedui word, is die **hulpbronbediener** (die toepassing) wat gebruik word om die aanmelding uit te voer.
@@ -65,11 +65,11 @@ Die opdrag `az account get-access-token --resource-type [...]` ondersteun die vo
<summary>aud voorbeelde</summary>
- **aad-graph (Azure Active Directory Graph API)**: Gebruik om toegang te verkry tot die ouer Azure AD Graph API (verouderd), wat toepassings toelaat om gidsdata in Azure Active Directory (Azure AD) te lees en te skryf.
- **aad-graph (Azure Active Directory Graph API)**: Gebruik om toegang te verkry tot die ouer Azure AD Graph API (vervang), wat toepassings toelaat om gidsdata in Azure Active Directory (Azure AD) te lees en te skryf.
- `https://graph.windows.net/`
* **arm (Azure Resource Manager)**: Gebruik om Azure hulpbronne te bestuur deur die Azure Resource Manager API. Dit sluit operasies in soos die skep, opdateer, en verwyder van hulpbronne soos virtuele masjiene, stoor rekeninge, en meer.
- `https://management.core.windows.net/ of https://management.azure.com/`
* **arm (Azure Resource Manager)**: Gebruik om Azure hulpbronne te bestuur deur die Azure Resource Manager API. Dit sluit operasies in soos die skep, opdateer en verwyder van hulpbronne soos virtuele masjiene, stoor rekeninge, en meer.
- `https://management.core.windows.net/ or https://management.azure.com/`
- **batch (Azure Batch Services)**: Gebruik om toegang te verkry tot Azure Batch, 'n diens wat grootmaat parallelle en hoë-prestasie rekenaar toepassings doeltreffend in die wolk moontlik maak.
- `https://batch.core.windows.net/`
@@ -80,21 +80,21 @@ Die opdrag `az account get-access-token --resource-type [...]` ondersteun die vo
- **media (Azure Media Services)**: Gebruik om toegang te verkry tot Azure Media Services, wat wolk-gebaseerde media verwerking en aflewering dienste vir video en klank inhoud bied.
- `https://rest.media.azure.net`
* **ms-graph (Microsoft Graph API)**: Gebruik om toegang te verkry tot die Microsoft Graph API, die verenigde eindpunt vir Microsoft 365 dienste data. Dit laat jou toe om data en insigte van dienste soos Azure AD, Office 365, Enterprise Mobility, en Sekuriteitsdienste te verkry.
* **ms-graph (Microsoft Graph API)**: Gebruik om toegang te verkry tot die Microsoft Graph API, die verenigde eindpunt vir Microsoft 365 dienste data. Dit laat jou toe om toegang te verkry tot data en insigte van dienste soos Azure AD, Office 365, Enterprise Mobility, en Sekuriteitsdienste.
- `https://graph.microsoft.com`
- **oss-rdbms (Azure Open Source Relational Databases)**: Gebruik om toegang te verkry tot Azure Databasis dienste vir oopbron relationele databasis enjin soos MySQL, PostgreSQL, en MariaDB.
- **oss-rdbms (Azure Open Source Relational Databases)**: Gebruik om toegang te verkry tot Azure Databasisdienste vir oopbron relationele databasis enjin soos MySQL, PostgreSQL, en MariaDB.
- `https://ossrdbms-aad.database.windows.net`
</details>
### Toegangstokens Skope "scp"
### Access Tokens Skoppe "scp"
Die skoop van 'n toegangstoken word binne die scp sleutel binne die toegangstoken JWT gestoor. Hierdie skope definieer waartoe die toegangstoken toegang het.
Die skop van 'n toegangstoken word binne die scp sleutel binne die toegangstoken JWT gestoor. Hierdie skoppe definieer waartoe die toegangstoken toegang het.
As 'n JWT toegelaat word om 'n spesifieke API te kontak maar **nie die skoop** het om die aangevraagde aksie uit te voer nie, sal dit **nie in staat wees om die aksie** met daardie JWT uit te voer nie.
As 'n JWT toegelaat word om 'n spesifieke API te kontak, maar **nie die skop het** om die aangevraagde aksie uit te voer nie, sal dit **nie in staat wees om die aksie** met daardie JWT uit te voer nie.
### Kry herfris & toegang token voorbeeld
### Get refresh & access token example
```python
# Code example from https://github.com/secureworks/family-of-client-ids-research
import msal
@@ -151,7 +151,7 @@ pprint(new_azure_cli_bearer_tokens_for_graph_api)
- **acr**: Die Verifikasie Konteks Klas Verwysing eis is "0" wanneer die eindgebruiker se verifikasie nie aan die vereistes van ISO/IEC 29115 voldoen het nie.
- **amr**: Die Verifikasie metode dui aan hoe die token geverifieer is. 'n Waarde van “pwd” dui aan dat 'n wagwoord gebruik is.
- **groups**: Dui die groepe aan waar die hoofpersoon 'n lid is.
- **iss**: Die uitreiker identifiseer die sekuriteit token diens (STS) wat die token gegenereer het. bv. https://sts.windows.net/fdd066e1-ee37-49bc-b08f-d0e152119b04/ (die uuid is die huurder ID)
- **iss**: Die kwessies identifiseer die sekuriteit token diens (STS) wat die token gegenereer het. bv. https://sts.windows.net/fdd066e1-ee37-49bc-b08f-d0e152119b04/ (die uuid is die huurder ID)
- **oid**: Die objek ID van die hoofpersoon
- **tid**: Huurder ID
- **iat, nbf, exp**: Uitgereik op (wanneer dit uitgereik is), Nie voor nie (kan nie voor hierdie tyd gebruik word nie, gewoonlik dieselfde waarde as iat), Vervaldatum.
@@ -160,7 +160,7 @@ pprint(new_azure_cli_bearer_tokens_for_graph_api)
Voorheen is genoem dat verfris tokens aan die **skoppe** waaraan dit gegenereer is, aan die **toepassing** en **huurder** waaraan dit gegenereer is, gekoppel moet wees. As enige van hierdie grense oorgesteek word, is dit moontlik om voorregte te verhoog aangesien dit moontlik sal wees om toegangstokens vir ander hulpbronne en huurders te genereer waartoe die gebruiker toegang het en met meer skoppe as wat oorspronklik bedoel was.
Boonop, **dit is moontlik met alle verfris tokens** in die [Microsoft identity platform](https://learn.microsoft.com/en-us/entra/identity-platform/) (Microsoft Entra-rekeninge, Microsoft persoonlike rekeninge, en sosiale rekeninge soos Facebook en Google) omdat die [**dokumente**](https://learn.microsoft.com/en-us/entra/identity-platform/refresh-tokens) noem: "Verfris tokens is gebonde aan 'n kombinasie van gebruiker en kliënt, maar **is nie aan 'n hulpbron of huurder gekoppel nie**. 'n Kliënt kan 'n verfris token gebruik om toegangstokens **oor enige kombinasie van hulpbron en huurder** te verkry waar dit toestemming het om dit te doen. Verfris tokens is geënkripteer en slegs die Microsoft identity platform kan dit lees."
Boonop, **dit is moontlik met alle verfris tokens** in die [Microsoft identity platform](https://learn.microsoft.com/en-us/entra/identity-platform/) (Microsoft Entra-rekeninge, Microsoft persoonlike rekeninge, en sosiale rekeninge soos Facebook en Google) omdat die [**dokumentasie**](https://learn.microsoft.com/en-us/entra/identity-platform/refresh-tokens) noem: "Verfris tokens is gebonde aan 'n kombinasie van gebruiker en kliënt, maar **is nie aan 'n hulpbron of huurder gekoppel nie**. 'n Kliënt kan 'n verfris token gebruik om toegangstokens te verkry **oor enige kombinasie van hulpbron en huurder** waar dit toestemming het om dit te doen. Verfris tokens is versleuteld en slegs die Microsoft identity platform kan dit lees."
Boonop, let daarop dat die FOCI toepassings openbare toepassings is, so **geen geheim is nodig** om aan die bediener te verifieer nie.
@@ -201,6 +201,26 @@ scopes=["https://graph.microsoft.com/.default"],
# How is this possible?
pprint(microsoft_office_bearer_tokens_for_graph_api)
```
## Waar om tokens te vind
Vanuit 'n aanvaller se perspektief is dit baie interessant om te weet waar dit moontlik is om toegang en hernuwing tokens te vind wanneer byvoorbeeld die rekenaar van 'n slagoffer gecompromitteer is:
- Binne **`<HOME>/.Azure`**
- **`azureProfile.json`** bevat inligting oor ingelogde gebruikers van die verlede
- **`clouds.config bevat`** inligting oor intekeninge
- **`service_principal_entries.json`** bevat toepassings kredensiale (tenant id, kliënte en geheim). Slegs in Linux & macOS
- **`msal_token_cache.json`** bevat toegang tokens en hernuwing tokens. Slegs in Linux & macOS
- **`service_principal_entries.bin`** en msal_token_cache.bin word in Windows gebruik en is geënkripteer met DPAPI
- **`msal_http_cache.bin`** is 'n cache van HTTP versoeke
- Laai dit: `with open("msal_http_cache.bin", 'rb') as f: pickle.load(f)`
- **`AzureRmContext.json`** bevat inligting oor vorige aanmeldings met Az PowerShell (maar geen kredensiale nie)
- Binne **`C:\Users\<username>\AppData\Local\Microsoft\IdentityCache\*`** is verskeie `.bin` lêers met **toegang tokens**, ID tokens en rekeninginligting geënkripteer met die gebruikers se DPAPI.
- Dit is moontlik om meer **toegang tokens** te vind in die `.tbres` lêers binne **`C:\Users\<username>\AppData\Local\Microsoft\TokenBroken\Cache\`** wat 'n base64 geënkripteerde toegang tokens met DPAPI bevat.
- In Linux en macOS kan jy **toegang tokens, hernuwing tokens en id tokens** van Az PowerShell (indien gebruik) verkry deur `pwsh -Command "Save-AzContext -Path /tmp/az-context.json"` te loop
- In Windows genereer dit net id tokens.
- Dit is moontlik om te sien of Az PowerShell in Linux en macOS gebruik is deur te kyk of `$HOME/.local/share/.IdentityService/` bestaan (alhoewel die bevat lêers leeg en nutteloos is)
- As die gebruiker **binne Azure met die blaaier ingelog** is, volgens hierdie [**plasing**](https://www.infosecnoodle.com/p/obtaining-microsoft-entra-refresh?r=357m16&utm_campaign=post&utm_medium=web) is dit moontlik om die outentikasie vloei te begin met 'n **herleiding na localhost**, die blaaiers outomaties te laat autoriseer die aanmelding, en die hernuwing token te ontvang. Let daarop dat daar slegs 'n paar FOCI toepassings is wat herleiding na localhost toelaat (soos az cli of die powershell module), so hierdie toepassings moet toegelaat word.
## Verwysings
- [https://github.com/secureworks/family-of-client-ids-research](https://github.com/secureworks/family-of-client-ids-research)

View File

@@ -4,19 +4,19 @@
## **Pod Uittrede**
**As jy gelukkig genoeg is, mag jy in staat wees om daarvan te ontsnap na die node:**
**As jy gelukkig is, mag jy in staat wees om daarvan na die node te ontsnap:**
![](https://sickrov.github.io/media/Screenshot-161.jpg)
### Ontsnap uit die pod
### Ontsnap van die pod
Om te probeer om uit die pods te ontsnap, mag jy eers **privileges opgradeer**. Sommige tegnieke om dit te doen:
Om te probeer ontsnap van die pods, mag jy eers **privileges moet opgradeer**, sommige tegnieke om dit te doen:
{{#ref}}
https://book.hacktricks.wiki/en/linux-hardening/privilege-escalation/index.html
{{#endref}}
Jy kan hierdie **docker uittredes nagaan om te probeer ontsnap** uit 'n pod wat jy gecompromitteer het:
Jy kan hierdie **docker uittredes nagaan om te probeer ontsnap** van 'n pod wat jy gecompromitteer het:
{{#ref}}
https://book.hacktricks.wiki/en/linux-hardening/privilege-escalation/docker-security/docker-breakout-privilege-escalation/index.html
@@ -38,11 +38,11 @@ abusing-roles-clusterroles-in-kubernetes/
### Misbruik van Cloud Privileges
As die pod binne 'n **cloud omgewing** gedra word, mag jy in staat wees om 'n **token van die metadata eindpunt te lek** en privileges op te gradeer deur dit te gebruik.
As die pod binne 'n **cloud omgewing** gedra word, mag jy in staat wees om 'n **token van die metadata eindpunt te lek** en privileges daarmee op te gradeer.
## Soek kwesbare netwerkdienste
Aangesien jy binne die Kubernetes omgewing is, as jy nie privileges kan opgradeer deur die huidige pods privileges te misbruik nie en jy nie uit die houer kan ontsnap nie, moet jy **potensieel kwesbare dienste soek.**
Aangesien jy binne die Kubernetes omgewing is, as jy nie privileges kan opgradeer deur die huidige pods privileges te misbruik nie en jy nie van die houer kan ontsnap nie, moet jy **potensieel kwesbare dienste soek.**
### Dienste
@@ -50,7 +50,7 @@ Aangesien jy binne die Kubernetes omgewing is, as jy nie privileges kan opgradee
```
kubectl get svc --all-namespaces
```
Deur die standaard gebruik Kubernetes 'n plat netwerk skema, wat beteken **enige pod/dienste binne die kluster kan met ander praat**. Die **namespaces** binne die kluster **het nie enige netwerk sekuriteitsbeperkings nie**. Enige iemand in die namespace kan met ander namespaces praat.
Standaard gebruik Kubernetes 'n plat netwerk skema, wat beteken **enige pod/dienste binne die kluster kan met ander praat**. Die **namespaces** binne die kluster **het nie enige netwerk sekuriteitsbeperkings nie**. Enige iemand in die namespace kan met ander namespaces praat.
### Scanning
@@ -81,11 +81,11 @@ pentesting-kubernetes-services/
### Sniffing
In die geval waar die **gekompromitteerde pod 'n sensitiewe diens** draai waar ander pods moet autentiseer, mag jy in staat wees om die akrediteerbare inligting wat van die ander pods gestuur word te verkry deur **lokale kommunikasie te snuffel**.
In die geval waar die **gekompromitteerde pod 'n sensitiewe diens** draai waar ander pods moet autentiseer, mag jy in staat wees om die akrediteerbare wat van die ander pods gestuur word te verkry deur **lokale kommunikasie te snuffel**.
## Netwerk Spoofing
Standaard werk tegnieke soos **ARP spoofing** (en danksy dit **DNS Spoofing**) in die Kubernetes netwerk. Dan, binne 'n pod, as jy die **NET_RAW vermoë** het (wat daar is deur standaard), sal jy in staat wees om op maat gemaakte netwerkpakkette te stuur en **MitM-aanvalle via ARP Spoofing op al die pods wat in dieselfde node draai, uit te voer.**\
Standaard werk tegnieke soos **ARP spoofing** (en danksy dit **DNS Spoofing**) in die kubernetes netwerk. Dan, binne 'n pod, as jy die **NET_RAW vermoë** het (wat daar is deur standaard), sal jy in staat wees om pasgemaakte netwerkpakkette te stuur en **MitM-aanvalle via ARP Spoofing op al die pods wat in dieselfde node draai, uit te voer.**\
Boonop, as die **kwaadwillige pod** in die **dieselfde node as die DNS-server** draai, sal jy in staat wees om 'n **DNS Spoofing-aanval op al die pods in die kluster** uit te voer.
{{#ref}}
@@ -109,7 +109,7 @@ kubectl --namespace big-monolith top pod hunger-check-deployment-xxxxxxxxxx-xxxx
As jy daarin geslaag het om **uit die houer te ontsnap**, is daar 'n paar interessante dinge wat jy in die node sal vind:
- Die **Container Runtime** proses (Docker)
- Meer **pods/containers** wat in die node loop wat jy kan misbruik soos hierdie een (meer tokens)
- Meer **pods/containers** wat in die node loop wat jy soos hierdie een kan misbruik (meer tokens)
- Die hele **filesystem** en **OS** in die algemeen
- Die **Kube-Proxy** diens wat luister
- Die **Kubelet** diens wat luister. Kontroleer konfigurasie lêers:
@@ -119,6 +119,7 @@ As jy daarin geslaag het om **uit die houer te ontsnap**, is daar 'n paar intere
- `/var/lib/kubelet/config.yaml`
- `/var/lib/kubelet/kubeadm-flags.env`
- `/etc/kubernetes/kubelet-kubeconfig`
- `/etc/kubernetes/admin.conf` --> `kubectl --kubeconfig /etc/kubernetes/admin.conf get all -n kube-system`
- Ander **kubernetes algemene lêers**:
- `$HOME/.kube/config` - **User Config**
- `/etc/kubernetes/kubelet.conf`- **Regular Config**
@@ -126,9 +127,9 @@ As jy daarin geslaag het om **uit die houer te ontsnap**, is daar 'n paar intere
- `/etc/kubernetes/manifests/etcd.yaml` - **etcd Configuration**
- `/etc/kubernetes/pki` - **Kubernetes Key**
### Find node kubeconfig
### Vind node kubeconfig
As jy nie die kubeconfig lêer in een van die voorheen genoem padhouers kan vind nie, **kontroleer die argument `--kubeconfig` van die kubelet proses**:
As jy nie die kubeconfig lêer in een van die voorheen genoemde paaie kan vind nie, **kontroleer die argument `--kubeconfig` van die kubelet proses**:
```
ps -ef | grep kubelet
root 1406 1 9 11:55 ? 00:34:57 kubelet --cloud-provider=aws --cni-bin-dir=/opt/cni/bin --cni-conf-dir=/etc/cni/net.d --config=/etc/kubernetes/kubelet-conf.json --exit-on-lock-contention --kubeconfig=/etc/kubernetes/kubelet-kubeconfig --lock-file=/var/run/lock/kubelet.lock --network-plugin=cni --container-runtime docker --node-labels=node.kubernetes.io/role=k8sworker --volume-plugin-dir=/var/lib/kubelet/volumeplugin --node-ip 10.1.1.1 --hostname-override ip-1-1-1-1.eu-west-2.compute.internal
@@ -154,7 +155,7 @@ echo ""
fi
done
```
Die skrif [**can-they.sh**](https://github.com/BishopFox/badPods/blob/main/scripts/can-they.sh) sal outomaties **die tokens van ander pods verkry en kyk of hulle die toestemming het** waarna jy soek (in plaas daarvan dat jy 1 vir 1 kyk):
Die skrif [**can-they.sh**](https://github.com/BishopFox/badPods/blob/main/scripts/can-they.sh) sal outomaties **die tokens van ander pods verkry en nagaan of hulle die toestemming het** waarna jy soek (in plaas daarvan dat jy 1 vir 1 kyk):
```bash
./can-they.sh -i "--list -n default"
./can-they.sh -i "list secrets -n kube-system"// Some code
@@ -186,11 +187,11 @@ control-plane nodes het die **rol meester** en in **cloud bestuurde klusters sal
#### Lees geheime van etcd 1
As jy jou pod op 'n control-plane node kan laat loop met die `nodeName` selektor in die pod spesifikasie, mag jy maklike toegang tot die `etcd` databasis hê, wat al die konfigurasie vir die kluster bevat, insluitend al geheime.
As jy jou pod op 'n control-plane node kan laat loop met die `nodeName` selektor in die pod spesifikasie, mag jy maklike toegang tot die `etcd` databasis hê, wat al die konfigurasie vir die kluster bevat, insluitend al die geheime.
Hieronder is 'n vinnige en vuil manier om geheime van `etcd` te gryp as dit op die control-plane node is waarop jy is. As jy 'n meer elegante oplossing wil hê wat 'n pod met die `etcd` kliënt hulpmiddel `etcdctl` opstel en die control-plane node se akrediteer gebruik om met etcd te verbind waar dit ook al loop, kyk na [hierdie voorbeeld manifest](https://github.com/mauilion/blackhat-2019/blob/master/etcd-attack/etcdclient.yaml) van @mauilion.
Hieronder is 'n vinnige en vuil manier om geheime van `etcd` te gryp as dit op die control-plane node is waarop jy is. As jy 'n meer elegante oplossing wil hê wat 'n pod met die `etcd` kliënt nut `etcdctl` opstel en die control-plane node se akrediteer gebruik om met etcd te verbind waar dit ook al loop, kyk na [hierdie voorbeeld manifest](https://github.com/mauilion/blackhat-2019/blob/master/etcd-attack/etcdclient.yaml) van @mauilion.
**Kontroleer of `etcd` op die control-plane node loop en sien waar die databasis is (Dit is op 'n `kubeadm` geskepte kluster)**
**Kontroleer of `etcd` op die control-plane node loop en kyk waar die databasis is (Dit is op 'n `kubeadm` geskepte kluster)**
```
root@k8s-control-plane:/var/lib/etcd/member/wal# ps -ef | grep etcd | sed s/\-\-/\\n/g | grep data-dir
```
@@ -206,7 +207,7 @@ strings /var/lib/etcd/member/snap/db | less
```bash
db=`strings /var/lib/etcd/member/snap/db`; for x in `echo "$db" | grep eyJhbGciOiJ`; do name=`echo "$db" | grep $x -B40 | grep registry`; echo $name \| $x; echo; done
```
**Dieselfde opdrag, maar sommige greps om slegs die standaard token in die kube-system naamruimte te retourneer**
**Dieselfde opdrag, maar met 'n paar greps om slegs die standaard token in die kube-system naamruimte te retourneer**
```bash
db=`strings /var/lib/etcd/member/snap/db`; for x in `echo "$db" | grep eyJhbGciOiJ`; do name=`echo "$db" | grep $x -B40 | grep registry`; echo $name \| $x; echo; done | grep kube-system | grep default
```
@@ -231,7 +232,7 @@ etcd \ --data-dir=./restore \ --initial-cluster=state=existing \ --snapshot='./e
```bash
etcdctl get "" --prefix --keys-only | grep secret
```
6. Kry die sekrete:
6. Kry die sekretes:
```bash
etcdctl get /registry/secrets/default/my-secret
```
@@ -241,10 +242,10 @@ _Statiese Pods_ word direk deur die kubelet daemon op 'n spesifieke node bestuur
Daarom is statiese Pods altyd **gebind aan een Kubelet** op 'n spesifieke node.
Die **kubelet probeer outomaties om 'n spieël Pod op die Kubernetes API-bediener te skep** vir elke statiese Pod. Dit beteken dat die Pods wat op 'n node loop, sigbaar is op die API-bediener, maar nie van daar af beheer kan word nie. Die Pod-names sal met die node-hostnaam met 'n voorloop koppelteken gesuffikseerd word.
Die **kubelet probeer outomaties om 'n spieël Pod op die Kubernetes API-bediener** vir elke statiese Pod te skep. Dit beteken dat die Pods wat op 'n node loop, sigbaar is op die API-bediener, maar nie van daar af beheer kan word nie. Die Pod-names sal met die node-hostnaam met 'n voorafgaande koppelteken gesuffikseer word.
> [!CAUTION]
> Die **`spec` van 'n statiese Pod kan nie na ander API-objekte verwys nie** (bv., ServiceAccount, ConfigMap, Secret, ens. So **jy kan nie hierdie gedrag misbruik om 'n pod met 'n arbitrêre serviceAccount** in die huidige node te begin om die kluster te kompromitteer nie. Maar jy kan dit gebruik om pods in verskillende namespaces te laat loop (in geval dit om een of ander rede nuttig is).
> Die **`spec` van 'n statiese Pod kan nie na ander API-objekte verwys nie** (bv., ServiceAccount, ConfigMap, Secret, ens. So **jy kan nie hierdie gedrag misbruik om 'n pod met 'n arbitrêre serviceAccount** in die huidige node te begin om die kluster te kompromitteer nie. Maar jy kan dit gebruik om pods in verskillende namespaces te laat loop (indien dit om een of ander rede nuttig is).
As jy binne die node-gasheer is, kan jy dit laat 'n **statiese pod binne homself** skep. Dit is redelik nuttig omdat dit jou mag toelaat om 'n **pod in 'n ander namespace** soos **kube-system** te skep.

View File

@@ -1,72 +1,107 @@
# Kubernetes Versterking
# Kubernetes Hardening
{{#include ../../../banners/hacktricks-training.md}}
## Gereedskap om 'n kluster te analiseer
## Tools om 'n kluster te analiseer
### [**Steampipe - Kubernetes Compliance](https://github.com/turbot/steampipe-mod-kubernetes-compliance)
Dit sal **verskeie nakomingstoetsing oor die Kubernetes-kluster** uitvoer. Dit sluit ondersteuning in vir CIS, National Security Agency (NSA) en Cybersecurity and Infrastructure Security Agency (CISA) se tegniese verslag oor kubernetes-harding.
```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) is 'n K8s oopbron gereedskap wat 'n multi-cloud K8s enkele venster bied, insluitend risiko analise, sekuriteitsnakoming, RBAC visualiseerder en beeld kwesbaarhede skandering. Kubescape skandeer K8s klusters, YAML lêers, en HELM kaarte, wat miskonfigurasies volgens verskeie raamwerke (soos die [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/)), sagteware kwesbaarhede, en RBAC (rol-gebaseerde-toegang-beheer) oortredings in vroeë stadiums van die CI/CD pyplyn, bereken risiko telling onmiddellik en toon risiko tendense oor tyd.
[**Kubescape**](https://github.com/armosec/kubescape) is 'n K8s oopbron hulpmiddel wat 'n multi-cloud K8s enkele venster bied, insluitend risiko-analise, sekuriteits-nakoming, RBAC visualiseerder en beeld kwesbaarhede skandering. Kubescape skandeer K8s klusters, YAML lêers, en HELM kaarte, en detecteer miskonfigurasies volgens verskeie raamwerke (soos die [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/)), sagteware kwesbaarhede, en RBAC (rol-gebaseerde-toegang-beheer) oortredings in vroeë stadiums van die CI/CD pyplyn, bereken risiko telling onmiddellik en toon risiko tendense oor tyd.
```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) is 'n nut wat lewende Kubernetes-klusters skandeer en **rapporteer potensiële probleme met ontplooide hulpbronne en konfigurasies**. Dit sanitiseer jou kluster gebaseer op wat ontplooi is en nie wat op skyf sit nie. Deur jou kluster te skandeer, detecteer dit misconfigurasies en help jy om te verseker dat beste praktyke in plek is, wat toekomstige kopseer voorkom. Dit is daarop gemik om die kognitiewe \_over_load te verminder wat 'n mens ervaar wanneer jy 'n Kubernetes-kluster in die natuur bedryf. Verder, as jou kluster 'n metric-server gebruik, rapporteer dit potensiële hulpbron oor/onder toewysings en probeer om jou te waarsku indien jou kluster uit kapasiteit loop.
### [**Kube-bench**](https://github.com/aquasecurity/kube-bench)
Die hulpmiddel [**kube-bench**](https://github.com/aquasecurity/kube-bench) is 'n hulpmiddel wat nagaan of Kubernetes veilig ontplooi is deur die kontroles wat in die [**CIS Kubernetes Benchmark**](https://www.cisecurity.org/benchmark/kubernetes/) gedokumenteer is, uit te voer.\
Jy kan kies om:
- kube-bench van binne 'n houer te loop (wat PID-naamruimte met die gasheer deel)
- 'n houer te loop wat kube-bench op die gasheer installeer, en dan kube-bench direk op die gasheer te loop
- die nuutste binêre van die [Releases-bladsy](https://github.com/aquasecurity/kube-bench/releases) te installeer,
- dit van bron te kompileer.
- kube-bench van binne 'n houer te laat loop (wat PID-namespas met die gasheer deel)
- 'n houer te laat loop wat kube-bench op die gasheer installeer, en dan kube-bench direk op die gasheer te laat loop
- die nuutste binaire van die [Releases-bladsy](https://github.com/aquasecurity/kube-bench/releases) te installeer,
- dit van bron te compileer.
### [**Kubeaudit**](https://github.com/Shopify/kubeaudit)
Die hulpmiddel [**kubeaudit**](https://github.com/Shopify/kubeaudit) is 'n opdraglyn-hulpmiddel en 'n Go-pakket om **Kubernetes-klusters** vir verskeie verskillende sekuriteitskwessies te **audite**.
**[DEPRECATED]** Die hulpmiddel [**kubeaudit**](https://github.com/Shopify/kubeaudit) is 'n opdraglyn-hulpmiddel en 'n Go-pakket om **Kubernetes-klusters** vir verskeie verskillende sekuriteitskwessies te **audite**.
Kubeaudit kan opspoor of dit binne 'n houer in 'n kluster loop. As dit so is, sal dit probeer om al die Kubernetes-hulpbronne in daardie kluster te **audite**:
Kubeaudit kan detecteer of dit binne 'n houer in 'n kluster loop. As dit so is, sal dit probeer om al die Kubernetes-hulpbronne in daardie kluster te audite.
```
kubeaudit all
```
Hierdie hulpmiddel het ook die argument `autofix` om **automaties gedetecteerde probleme op te los.**
Hierdie hulpmiddel het ook die argument `autofix` om **automaties gedetecteerde probleme reg te stel.**
### [**Kube-hunter**](https://github.com/aquasecurity/kube-hunter)
Die hulpmiddel [**kube-hunter**](https://github.com/aquasecurity/kube-hunter) jag vir sekuriteits swakhede in Kubernetes klusters. Die hulpmiddel is ontwikkel om bewustheid en sigbaarheid vir sekuriteitskwessies in Kubernetes omgewings te verhoog.
**[DEPRECATED]** Die hulpmiddel [**kube-hunter**](https://github.com/aquasecurity/kube-hunter) jag vir sekuriteits swakhede in Kubernetes klusters. Die hulpmiddel is ontwikkel om bewustheid en sigbaarheid vir sekuriteitskwessies in Kubernetes omgewings te verhoog.
```bash
kube-hunter --remote some.node.com
```
### [Trivy](https://github.com/aquasecurity/trivy)
[Trivy](https://github.com/aquasecurity/trivy) het skandeerders wat soek na sekuriteitskwessies, en teikens waar dit daardie kwessies kan vind:
- Houer Beeld
- Lêerstelsel
- Git Repository (afgeleë)
- Virtuele Masjien Beeld
- Kubernetes
### [**Kubei**](https://github.com/Erezf-p/kubei)
[**Kubei**](https://github.com/Erezf-p/kubei) is 'n kwesbaarheidskandering en CIS Docker-benchmark hulpmiddel wat gebruikers toelaat om 'n akkurate en onmiddellike risiko-assessering van hul kubernetes klusters te verkry. Kubei skandeer alle beelde wat in 'n Kubernetes-kluster gebruik word, insluitend beelde van toepassingspods en stelselpods.
**[Lyk soos nie onderhou]**
[**Kubei**](https://github.com/Erezf-p/kubei) is 'n kwesbaarheidskandeer- en CIS Docker-benchmark hulpmiddel wat gebruikers toelaat om 'n akkurate en onmiddellike risiko-assessering van hul kubernetes klusters te kry. Kubei skandeer al die beelde wat in 'n Kubernetes-kluster gebruik word, insluitend beelde van toepassingspods en stelselpods.
### [**KubiScan**](https://github.com/cyberark/KubiScan)
[**KubiScan**](https://github.com/cyberark/KubiScan) is 'n hulpmiddel om Kubernetes-klusters te skandeer vir riskante toestemmings in Kubernetes se rol-gebaseerde toegangsbeheer (RBAC) outorisasiemodel.
[**KubiScan**](https://github.com/cyberark/KubiScan) is 'n hulpmiddel om Kubernetes-klusters te skandeer vir riskante toestemmings in Kubernetes se Rol-gebaseerde toegangbeheer (RBAC) outorisasiemodel.
### [Managed Kubernetes Auditing Toolkit](https://github.com/DataDog/managed-kubernetes-auditing-toolkit)
[**Mkat**](https://github.com/DataDog/managed-kubernetes-auditing-toolkit) is 'n hulpmiddel wat gebou is om ander tipes hoë risiko kontroles te toets in vergelyking met die ander hulpmiddels. Dit het hoofsaaklik 3 verskillende modi:
[**Mkat**](https://github.com/DataDog/managed-kubernetes-auditing-toolkit) is 'n hulpmiddel wat gebou is om ander tipes hoë risiko-toetse te toets in vergelyking met die ander hulpmiddels. Dit het hoofsaaklik 3 verskillende modi:
- **`find-role-relationships`**: Wat sal vind watter AWS rolle in watter pods loop
- **`find-secrets`**: Wat probeer om geheime in K8s hulpbronne soos Pods, ConfigMaps, en Secrets te identifiseer.
- **`test-imds-access`**: Wat sal probeer om pods te laat loop en probeer om toegang tot die metadata v1 en v2 te verkry. WAARSKUWING: Dit sal 'n pod in die kluster laat loop, wees baie versigtig omdat jy dalk nie dit wil doen nie!
- **`test-imds-access`**: Wat sal probeer om pods te laat loop en toegang tot die metadata v1 en v2 te kry. WAARSKUWING: Dit sal 'n pod in die kluster laat loop, wees baie versigtig omdat jy dalk nie dit wil doen nie!
## **Audit IaC Code**
### [**Popeye**](https://github.com/derailed/popeye)
[**Popeye**](https://github.com/derailed/popeye) is 'n nut wat lewendige Kubernetes-klusters skandeer en **rapporteer potensiële probleme met ontplooide hulpbronne en konfigurasies**. Dit sanitiseer jou kluster gebaseer op wat ontplooi is en nie wat op skyf sit nie. Deur jou kluster te skandeer, detecteer dit misconfigurasies en help jy om te verseker dat beste praktyke in plek is, wat toekomstige kopseer voorkom. Dit is daarop gemik om die kognitiewe \_over_load wat 'n mens ervaar wanneer 'n Kubernetes-kluster in die natuur bedryf word, te verminder. Verder, as jou kluster 'n metriek-bediener gebruik, rapporteer dit potensiële hulpbron oor/onder toewysings en probeer om jou te waarsku as jou kluster uit kapasiteit loop.
### [**KICS**](https://github.com/Checkmarx/kics)
[**KICS**](https://github.com/Checkmarx/kics) vind **sekuriteitskwesbaarhede**, nakomingkwessies, en infrastruktuur misconfigurasies in die volgende **Infrastruktuur as Kode oplossings**: Terraform, Kubernetes, Docker, AWS CloudFormation, Ansible, Helm, Microsoft ARM, en OpenAPI 3.0 spesifikasies
[**KICS**](https://github.com/Checkmarx/kics) vind **sekuriteitskwesbaarhede**, nakomingskwessies, en infrastruktuur miskonfigurasies in die volgende **Infrastruktuur as Kode oplossings**: Terraform, Kubernetes, Docker, AWS CloudFormation, Ansible, Helm, Microsoft ARM, en OpenAPI 3.0 spesifikasies
### [**Checkov**](https://github.com/bridgecrewio/checkov)
[**Checkov**](https://github.com/bridgecrewio/checkov) is 'n statiese kode analise hulpmiddel vir infrastruktuur-as-kode.
Dit skandeer wolkinfrastruktuur wat met [Terraform](https://terraform.io) voorsien is, 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) of [ARM Templates](https://docs.microsoft.com/en-us/azure/azure-resource-manager/templates/overview) en detecteer sekuriteits- en nakoming misconfigurasies met behulp van graf-gebaseerde skandering.
Dit skandeer wolkinfrastruktuur wat met [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) of [ARM Templates](https://docs.microsoft.com/en-us/azure/azure-resource-manager/templates/overview) voorsien is en detecteer sekuriteits- en nakomingsmisconfigurasies met behulp van graf-gebaseerde skandering.
### [**Kube-score**](https://github.com/zegl/kube-score)
@@ -85,7 +120,7 @@ Om te installeer:
### Kubernetes PodSecurityContext en SecurityContext
Jy kan die **sekuriteitskonteks van die Pods** (met _PodSecurityContext_) en van die **houers** wat gaan loop (met _SecurityContext_) konfigureer. Vir meer inligting lees:
Jy kan die **sekuriteitskonteks van die Pods** (met _PodSecurityContext_) en van die **houers** wat gaan loop (met _SecurityContext_) konfigureer. Vir meer inligting, lees:
{{#ref}}
kubernetes-securitycontext-s.md
@@ -93,11 +128,11 @@ kubernetes-securitycontext-s.md
### Kubernetes API Hardening
Dit is baie belangrik om die **toegang tot die Kubernetes Api Server** te **beskerm** aangesien 'n kwaadwillige akteur met genoeg bevoegdhede dit kan misbruik en op baie maniere die omgewing kan benadeel.\
Dit is belangrik om beide die **toegang** (**whitelist** oorspronge om toegang tot die API Server te verkry en enige ander verbinding te weier) en die [**authentisering**](https://kubernetes.io/docs/reference/command-line-tools-reference/kubelet-authentication-authorization/) (volgens die beginsel van **min** **bevoegdheid**). En beslis **nooit** **anonieme** **versoeke** **toelaat**.
Dit is baie belangrik om die **toegang tot die Kubernetes Api Server** te beskerm, aangesien 'n kwaadwillige akteur met genoeg voorregte in staat kan wees om dit te misbruik en die omgewing op baie maniere te benadeel.\
Dit is belangrik om beide die **toegang** (**whitelist** oorspronge om toegang tot die API Server te verkry en enige ander verbinding te weier) en die [**outentisering**](https://kubernetes.io/docs/reference/command-line-tools-reference/kubelet-authentication-authorization/) (volgens die beginsel van **min** **voorreg**) te beveilig. En beslis **nooit** **anonieme** **versoeke** **toelaat**.
**Algemene Versoek proses:**\
Gebruiker of K8s ServiceAccount > Authentisering > Outorisering > Toelatingsbeheer.
Gebruiker of K8s ServiceAccount > Outentisering > Outorisering > Toelatingsbeheer.
**Wenke**:
@@ -105,13 +140,13 @@ Gebruiker of K8s ServiceAccount > Authentisering > Outorisering > Toela
- Vermy Anonieme toegang.
- NodeRestriction; Geen toegang vanaf spesifieke nodes tot die API.
- [https://kubernetes.io/docs/reference/access-authn-authz/admission-controllers/#noderestriction](https://kubernetes.io/docs/reference/access-authn-authz/admission-controllers/#noderestriction)
- Basies verhoed dit dat kubelets etikette met 'n node-restriction.kubernetes.io/ voorvoegsel kan byvoeg/verwyder/opdateer. Hierdie etiketvoorvoegsel is gereserveer vir administrateurs om hul Node-objekte vir werklading-isolasie doeleindes te etiketteer, en kubelets sal nie toegelaat word om etikette met daardie voorvoegsel te wysig nie.
- Basies verhoed dit dat kubelets etikette met 'n node-restriction.kubernetes.io/ voorvoegsel kan byvoeg/verwyder/opdateer. Hierdie etiketvoorvoegsel is gereserveer vir administrateurs om hul Node-objekte vir werklading-isolasie doeleindes te etiketteer, en kubelets sal nie toegelaat word om etikette met daardie voorvoegsel te verander nie.
- En ook, laat kubelets toe om hierdie etikette en etiketvoorvoegsels by te voeg/verwyder/op te dateer.
- Verseker met etikette die veilige werklading-isolasie.
- Vermy spesifieke pods van API-toegang.
- Vermy ApiServer blootstelling aan die internet.
- Vermy ongeautoriseerde toegang RBAC.
- ApiServer poort met firewall en IP whitelisting.
- Vermy ongeoorloofde toegang RBAC.
- ApiServer poort met firewall en IP-whitelisting.
### SecurityContext Hardening
@@ -155,12 +190,19 @@ Jy moet jou Kubernetes-omgewing so gereeld as nodig opdateer om te hê:
**Die beste manier om 'n Kubernetes-kluster op te dateer is (van** [**hier**](https://kubernetes.io/docs/tasks/administer-cluster/cluster-upgrade/)**):**
- Opgradeer die Meester Node-komponente volgens hierdie volgorde:
- Opgradeer die Meester Knoop komponente volgens hierdie volgorde:
- etcd (alle instansies).
- kube-apiserver (alle kontrolevlak-gasheer).
- kube-apiserver (alle beheervlak gasheer).
- kube-controller-manager.
- kube-scheduler.
- cloud controller manager, as jy een gebruik.
- Opgradeer die Werker Node-komponente soos kube-proxy, kubelet.
- wolkbeheerder, as jy een gebruik.
- Opgradeer die Werknemer Knoop komponente soos kube-proxy, kubelet.
## Kubernetes monitering & sekuriteit:
- Kyverno Beleid Enjin
- Cilium Tetragon - eBPF-gebaseerde Sekuriteitswaak en Tydelike Handhaving
- Netwerk Sekuriteitsbeleide
- Falco - Tydelike sekuriteitsmonitering & opsporing
{{#include ../../../banners/hacktricks-training.md}}

View File

@@ -1,4 +1,4 @@
# Kubernetes Kyverno omseiling
# Kubernetes Kyverno bypass
**Die oorspronklike skrywer van hierdie bladsy is** [**Guillaume**](https://www.linkedin.com/in/guillaume-chapela-ab4b9a196)
@@ -6,14 +6,14 @@
### Lys reëls
Om 'n oorsig te hê, kan help om te weet watter reëls aktief is, op watter modus en wie dit kan omseil
Om 'n oorsig te hê, kan help om te weet watter reëls aktief is, in watter modus en wie dit kan omseil
```bash
$ kubectl get clusterpolicies
$ kubectl get policies
```
### Tel Uitsluitings
### Enumereer Uitsluitings
Vir elke ClusterPolicy en Policy kan jy 'n lys van uitgeslote entiteite spesifiseer, insluitend:
Vir elke ClusterPolicy en Beleid, kan jy 'n lys van uitgeslote entiteite spesifiseer, insluitend:
- Groepe: `excludedGroups`
- Gebruikers: `excludedUsers`
@@ -23,13 +23,13 @@ Vir elke ClusterPolicy en Policy kan jy 'n lys van uitgeslote entiteite spesifis
Hierdie uitgeslote entiteite sal vrygestel wees van die beleidsvereistes, en Kyverno sal die beleid nie vir hulle afdwing nie.
## Voorbeeld&#x20;
## Voorbeeld
Kom ons kyk na een clusterpolicy voorbeeld :&#x20;
Kom ons kyk na een clusterpolicy voorbeeld :
```
$ kubectl get clusterpolicies MYPOLICY -o yaml
```
Soek na die uitgeslote entiteite :&#x20;
Soek na die uitgeslote entiteite :
```yaml
exclude:
any:
@@ -43,12 +43,16 @@ name: system:serviceaccount:TEST:thisisatest
- kind: User
name: system:serviceaccount:AHAH:*
```
Binne 'n kluster kan verskeie bygevoegde komponente, operateurs en toepassings uitsluiting van 'n klusterbeleid vereis. Dit kan egter uitgebuit word deur te fokus op bevoorregte entiteite. In sommige gevalle kan dit voorkom asof 'n naamruimte nie bestaan nie of dat jy nie toestemming het om 'n gebruiker na te boots nie, wat 'n teken van miskonfigurasie kan wees.
Binne 'n kluster kan verskeie bygevoegde komponente, operateurs en toepassings uitsluiting van 'n klusterbeleid vereis. Dit kan egter uitgebuit word deur te fokus op bevoorregte entiteite. In sommige gevalle kan dit voorkom asof 'n naamruimte nie bestaan nie of dat jy nie toestemming het om 'n gebruiker na te volg nie, wat 'n teken van miskonfigurasie kan wees.
## Misbruik van ValidatingWebhookConfiguration
'n Ander manier om beleide te omseil, is om op die ValidatingWebhookConfiguration hulpbron te fokus :&#x20;
Nog 'n manier om beleide te omseil, is om op die ValidatingWebhookConfiguration hulpbron te fokus:
{{#ref}}
../kubernetes-validatingwebhookconfiguration.md
{{#endref}}
## Meer inligting
Vir meer inligting, kyk [https://madhuakula.com/kubernetes-goat/docs/scenarios/scenario-22/securing-kubernetes-clusters-using-kyverno-policy-engine/welcome/](https://madhuakula.com/kubernetes-goat/docs/scenarios/scenario-22/securing-kubernetes-clusters-using-kyverno-policy-engine/welcome/)