Translated ['.github/pull_request_template.md', 'src/README.md', 'src/pe

This commit is contained in:
Translator
2025-01-01 23:58:25 +00:00
parent 396dbafaf2
commit 8fb73b8cf9
216 changed files with 2011 additions and 2031 deletions

View File

@@ -6,11 +6,11 @@ Kubernetes gebruik verskeie **spesifieke netwerkdienste** wat jy mag vind **bloo
## Finding exposed pods with OSINT
Een manier kan wees om te soek na `Identity LIKE "k8s.%.com"` in [crt.sh](https://crt.sh) om subdomeine te vind wat met kubernetes verband hou. 'n Ander manier kan wees om te soek na `"k8s.%.com"` in github en te soek na **YAML-lêers** wat die string bevat.
Een manier kan wees om te soek na `Identity LIKE "k8s.%.com"` in [crt.sh](https://crt.sh) om subdomeine te vind wat verband hou met kubernetes. 'n Ander manier kan wees om te soek na `"k8s.%.com"` in github en te soek na **YAML-lêers** wat die string bevat.
## How Kubernetes Exposes Services
Dit mag nuttig wees vir jou om te verstaan hoe Kubernetes **dienste publiek kan blootstel** om hulle te vind:
Dit kan nuttig wees vir jou om te verstaan hoe Kubernetes **dienste publiek kan blootstel** om hulle te vind:
{{#ref}}
../exposing-services-in-kubernetes.md
@@ -43,7 +43,7 @@ nmap -n -T4 -p 443,2379,6666,4194,6443,8443,8080,10250,10255,10256,9099,6782-678
```
### Kube-apiserver
Dit is die **API Kubernetes diens** waarmee die administrateurs gewoonlik praat deur die hulpmiddel **`kubectl`** te gebruik.
Dit is die **API Kubernetes diens** waarmee die administrateurs gewoonlik kommunikeer deur die hulpmiddel **`kubectl`** te gebruik.
**Gewone poorte: 6443 en 443**, maar ook 8443 in minikube en 8080 as onveilig.
```bash
@@ -61,7 +61,7 @@ curl -k https://<IP Address>:(8|6)443/api/v1
Hierdie diens **loop in elke knoop van die kluster**. Dit is die diens wat die **pods** binne die **knoop** sal **beheer**. Dit praat met die **kube-apiserver**.
As jy hierdie diens blootgestel vind, het jy dalk 'n **onaangekondigde RCE** gevind.
As jy hierdie diens blootgestel vind, het jy dalk 'n **onaangetekende RCE** gevind.
#### Kubelet API
```bash
@@ -94,17 +94,17 @@ etcdctl --endpoints=http://<MASTER-IP>:2379 get / --prefix --keys-only
```bash
helm --host tiller-deploy.kube-system:44134 version
```
You could abuse this service to escalate privileges inside Kubernetes:
U kan hierdie diens misbruik om bevoegdhede binne Kubernetes te verhoog:
### cAdvisor
Diens nuttig om metrieks te versamel.
Diens nuttig om metings te versamel.
```bash
curl -k https://<IP Address>:4194
```
### NodePort
Wanneer 'n poort in al die nodes blootgestel word via 'n **NodePort**, word dieselfde poort in al die nodes oopgemaak wat die verkeer na die verklaarde **Service** proxify. Standaard sal hierdie poort in die **reeks 30000-32767** wees. So nuwe ongekontroleerde dienste mag deur daardie poorte toeganklik wees.
Wanneer 'n poort in al die nodes blootgestel word via 'n **NodePort**, word dieselfde poort in al die nodes geopen wat die verkeer na die verklaarde **Service** proxy. Standaard sal hierdie poort in die **reeks 30000-32767** wees. Dus kan nuwe ongekontroleerde dienste deur daardie poorte toeganklik wees.
```bash
sudo nmap -sS -p 30000-32767 <IP>
```
@@ -118,7 +118,7 @@ Anonieme toegang tot **kube-apiserver API eindpunte is nie toegelaat nie**. Maar
### **Kontroleer vir ETCD Anonieme Toegang**
Die ETCD stoor die kluster geheime, konfigurasie lêers en meer **sensitiewe data**. **Standaard** kan die ETCD **nie** **anoniem** toeganklik wees nie, maar dit is altyd goed om te kontroleer.
Die ETCD stoor die kluster geheime, konfigurasie lêers en meer **sensitiewe data**. Deur **standaard** kan die ETCD **nie** **anoniem** toeganklik wees nie, maar dit is altyd goed om te kontroleer.
As die ETCD anoniem toeganklik is, moet jy dalk die **[etcdctl](https://github.com/etcd-io/etcd/blob/master/etcdctl/READMEv2.md)** **instrument** gebruik. Die volgende opdrag sal al die sleutels wat gestoor is, kry:
```bash
@@ -128,15 +128,15 @@ etcdctl --endpoints=http://<MASTER-IP>:2379 get / --prefix --keys-only
Die [**Kubelet dokumentasie**](https://kubernetes.io/docs/reference/command-line-tools-reference/kubelet/) verduidelik dat **anonieme toegang** tot die diens **standaard toegelaat** word:
> Stel anonieme versoeke aan die Kubelet-bediener in staat. Versoeke wat nie deur 'n ander outentikasie metode verwerp word nie, word as anonieme versoeke behandel. Anonieme versoeke het 'n gebruikersnaam van `system:anonymous`, en 'n groepnaam van `system:unauthenticated`
> Stel anonieme versoeke aan die Kubelet bediener in. Versoeke wat nie deur 'n ander verifikasiemetode verwerp word nie, word as anonieme versoeke behandel. Anonieme versoeke het 'n gebruikersnaam van `system:anonymous`, en 'n groepnaam van `system:unauthenticated`
Om beter te verstaan hoe die **outentikasie en magtiging van die Kubelet API werk**, kyk na hierdie bladsy:
Om beter te verstaan hoe die **verifikasie en magtiging van die Kubelet API werk**, kyk na hierdie bladsy:
{{#ref}}
kubelet-authentication-and-authorization.md
{{#endref}}
Die **Kubelet** diens **API is nie gedokumenteer** nie, maar die bronkode kan hier gevind word en om die blootgestelde eindpunte te vind is so maklik soos **om te hardloop**:
Die **Kubelet** diens **API is nie gedokumenteer** nie, maar die bronnekode kan hier gevind word en om die blootgestelde eindpunte te vind is so maklik soos **om te hardloop**:
```bash
curl -s https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/kubelet/server/server.go | grep 'Path("/'
@@ -167,9 +167,9 @@ kubeletctl exec [command]
> [!NOTE]
> Om hierdie aanval te vermy, moet die _**kubelet**_ diens met `--anonymous-auth false` gedraai word en die diens moet op netwerkvlak gesegregeer word.
### **Kontroleer Kubelet (Slegs Lees Poort) Inligting Blootstelling**
### **Kontroleer Kubelet (Lees Slegs Poort) Inligting Blootstelling**
Wanneer 'n **kubelet slegs lees poort** blootgestel word, word dit moontlik vir ongeregistreerde partye om inligting van die API te verkry. Die blootstelling van hierdie poort kan lei tot die bekendmaking van verskeie **kluster konfigurasie elemente**. Alhoewel die inligting, insluitend **pod name, plekke van interne lêers, en ander konfigurasies**, dalk nie krities is nie, bly die blootstelling 'n sekuriteitsrisiko en moet vermy word.
Wanneer 'n **kubelet lees-slegs poort** blootgestel word, word dit moontlik vir ongeoorloofde partye om inligting van die API te verkry. Die blootstelling van hierdie poort kan lei tot die bekendmaking van verskeie **kluster konfigurasie-elemente**. Alhoewel die inligting, insluitend **pod name, plekke van interne lêers, en ander konfigurasies**, dalk nie krities is nie, stel die blootstelling steeds 'n sekuriteitsrisiko voor en moet vermy word.
'n Voorbeeld van hoe hierdie kwesbaarheid uitgebuit kan word, behels 'n afstandaanvaller wat toegang tot 'n spesifieke URL verkry. Deur na `http://<external-IP>:10255/pods` te navigeer, kan die aanvaller moontlik sensitiewe inligting van die kubelet verkry:

View File

@@ -1,16 +1,16 @@
# Kubelet Authentication & Authorization
# Kubelet Verifikasie & Magtiging
{{#include ../../../banners/hacktricks-training.md}}
## Kubelet Authentication <a href="#kubelet-authentication" id="kubelet-authentication"></a>
## Kubelet Verifikasie <a href="#kubelet-authentication" id="kubelet-authentication"></a>
[**Uit die dokumentasie:**](https://kubernetes.io/docs/reference/access-authn-authz/kubelet-authn-authz/)
Standaard word versoeke na die kubelet se HTTPS-eindpunt wat nie deur ander geconfigureerde autentikasie-metodes verwerp word nie, as anonieme versoeke behandel, en ontvang 'n **gebruikersnaam van `system:anonymous`** en 'n **groep van `system:unauthenticated`**.
Standaard word versoeke na die kubelet se HTTPS-eindpunt wat nie deur ander geconfigureerde verifikasie metodes verwerp word nie, as anonieme versoeke behandel, en ontvang 'n **gebruikersnaam van `system:anonymous`** en 'n **groep van `system:unauthenticated`**.
Die **3** autentikasie **metodes** is:
Die **3** verifikasie **metodes** is:
- **Anoniem** (standaard): Gebruik die instelling van die parameter **`--anonymous-auth=true` of die konfigurasie:**
- **Anoniem** (standaard): Gebruik die instelling deur die parameter **`--anonymous-auth=true` of die konfigurasie:**
```json
"authentication": {
"anonymous": {
@@ -28,10 +28,10 @@ Die **3** autentikasie **metodes** is:
},
```
> [!NOTE]
> Die kubelet roep die **`TokenReview` API** op die geconfigureerde API-bediener om **gebruikersinligting** uit draer tokens te bepaal
> Die kubelet roep die **`TokenReview` API** op die geconfigureerde API-bediener om **gebruikersinligting** uit draer tokens te bepaal.
- **X509 kliënt sertifikate:** Laat toe om te autentiseer via X509 kliënt sertifikate
- sien die [apiserver autentisering dokumentasie](https://kubernetes.io/docs/reference/access-authn-authz/authentication/#x509-client-certs) vir meer besonderhede
- sien die [apiserver authentication documentation](https://kubernetes.io/docs/reference/access-authn-authz/authentication/#x509-client-certs) vir meer besonderhede
- begin die kubelet met die `--client-ca-file` vlag, wat 'n CA-bundel verskaf om kliënt sertifikate mee te verifieer. Of met die konfigurasie:
```json
"authentication": {
@@ -40,16 +40,16 @@ Die **3** autentikasie **metodes** is:
}
}
```
## Kubelet Outeurstelling <a href="#kubelet-authentication" id="kubelet-authentication"></a>
## Kubelet Authorization <a href="#kubelet-authentication" id="kubelet-authentication"></a>
Enige versoek wat suksesvol geverifieer is (insluitend 'n anonieme versoek) **word dan geoutoriseer**. Die **verstek** outeurstellingsmodus is **`AlwaysAllow`**, wat **alle versoeke toelaat**.
Enige versoek wat suksesvol geverifieer is (insluitend 'n anonieme versoek) **word dan geoutoriseer**. Die **verstek** outorisasi-modus is **`AlwaysAllow`**, wat **alle versoeke toelaat**.
Die ander moontlike waarde is **`webhook`** (wat jy **meestal daar buite sal vind**). Hierdie modus sal **die regte van die geverifieerde gebruiker nagaan** om 'n aksie toe te laat of te weier.
> [!WARNING]
> Let daarop dat selfs al is die **anonieme verifikasie geaktiveer** die **anonieme toegang** dalk **nie enige regte** het om enige aksie uit te voer nie.
> Let daarop dat selfs al is die **anonieme outentisering geaktiveer** die **anonieme toegang** dalk **nie enige regte** het om enige aksie uit te voer.
Die outeurstelling via webhook kan gekonfigureer word met die **param `--authorization-mode=Webhook`** of via die konfigurasie lêer met:
Die outorisering via webhook kan gekonfigureer word met die **param `--authorization-mode=Webhook`** of via die konfigurasie-lêer met:
```json
"authorization": {
"mode": "Webhook",
@@ -68,14 +68,14 @@ Die kubelet autoriseer API versoeke met dieselfde [versoek eienskappe](https://k
| HTTP werkwoord | versoek werkwoord |
| -------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| POST | skep |
| GET, HEAD | kry (vir individuele hulpbronne), lys (vir versamelings, insluitend volle objekinhoud), kyk (vir die monitering van 'n individuele hulpbron of versameling hulpbronne) |
| GET, HEAD | kry (vir individuele hulpbronne), lys (vir versamelings, insluitend volle objekinhoud), kyk (vir die monitering van 'n individuele hulpbron of versameling van hulpbronne) |
| PUT | opdateer |
| PATCH | patch |
| DELETE | verwyder (vir individuele hulpbronne), verwyderversameling (vir versamelings) |
- Die **hulpbron** wat met die Kubelet API praat, is **altyd** **nodes** en **subhulpbron** word **bepaal** uit die inkomende versoek se pad:
- Die **hulpbron** wat met die Kubelet API praat, is **altyd** **nodes** en **subresource** word **bepaal** uit die inkomende versoek se pad:
| Kubelet API | hulpbron | subhulpbron |
| Kubelet API | hulpbron | subresource |
| ------------- | -------- | ----------- |
| /stats/\* | nodes | stats |
| /metrics/\* | nodes | metrics |
@@ -88,11 +88,11 @@ Byvoorbeeld, die volgende versoek het probeer om toegang te verkry tot die pods
curl -k --header "Authorization: Bearer ${TOKEN}" 'https://172.31.28.172:10250/pods'
Forbidden (user=system:node:ip-172-31-28-172.ec2.internal, verb=get, resource=nodes, subresource=proxy)
```
- Ons het 'n **Verbode** gekry, so die versoek **het die Verifikasie-toets geslaag**. As dit nie was nie, sou ons net 'n `Onbevoeg` boodskap gekry het.
- Ons het 'n **Verbode** gekry, so die versoek het die **Authentikasie kontrole** geslaag. As nie, sou ons net 'n `Onbevoeg` boodskap gekry het.
- Ons kan die **gebruikersnaam** sien (in hierdie geval van die token)
- Kyk hoe die **hulpbron** **nodes** was en die **subhulpbron** **proxy** (wat sin maak met die vorige inligting)
## References
## Verwysings
- [https://kubernetes.io/docs/reference/access-authn-authz/kubelet-authn-authz/](https://kubernetes.io/docs/reference/access-authn-authz/kubelet-authn-authz/)