**Azure Cosmos DB** ni **hifadhidata ya NoSQL, ya uhusiano, na ya vector** inayosimamiwa kikamilifu inayo toa nyakati za majibu za milisekunde moja, upanuzi wa kiotomatiki, na upatikanaji unaoungwa mkono na SLA kwa usalama wa kiwango cha biashara. Inaruhusu maendeleo ya programu kwa haraka kupitia usambazaji wa data wa mikoa mingi, APIs za chanzo wazi, SDKs za lugha maarufu, na vipengele vya hifadhidata vya AI kama vile msaada wa vector uliojumuishwa na uunganisho wa Azure AI usio na mshono.
**Azure Cosmos DB** ni **hifadhidata ya NoSQL, ya uhusiano, na ya vector** inayosimamiwa kikamilifu inayo toa nyakati za majibu za milisekunde moja, upanuzi wa kiotomatiki, na upatikanaji unaoungwa mkono na SLA pamoja na usalama wa kiwango cha biashara. Inaruhusu maendeleo ya programu kwa haraka kupitia usambazaji wa data wa mikoa mingi, APIs za chanzo wazi, SDKs za lugha maarufu, na vipengele vya hifadhidata vya AI kama vile msaada wa vector uliojumuishwa na uunganisho usio na mshono wa Azure AI.
Azure Cosmos DB inatoa APIs nyingi za hifadhidata ili kuunda mfano wa data halisi kwa kutumia nyaraka, uhusiano, modeli za data za funguo-thamani, grafu, na familia za safu, ambapo hizi APIs ni NoSQL, MongoDB, PostgreSQL, Cassandra, Gremlin na Table.
Moja ya vipengele muhimu vya CosmosDB ni Akaunti ya Azure Cosmos. **Akaunti ya Azure Cosmos**, inafanya kazi kama lango la kuingia kwenye hifadhidata. Akaunti inamua mipangilio muhimu kama vile usambazaji wa kimataifa, viwango vya usawa, na API maalum itakayotumika, kama vile NoSQL. Kupitia akaunti, unaweza kuunda upya wa kimataifa ili kuhakikisha data inapatikana katika mikoa mingi kwa ufikiaji wa chini wa latency. Zaidi ya hayo, unaweza kuchagua kiwango cha usawa kinacholingana kati ya utendaji na usahihi wa data, ikiwa na chaguzi zinazotofautiana kutoka kwa Usawa Imara hadi Usawa wa Hatimaye.
### NoSQL (sql)
API ya NoSQL ya Azure Cosmos DB ni API inayotumia nyaraka ambayo inatumia JSON kama muundo wake wa data. Inatoa sintaksia ya kuhoji inayofanana na SQL kwa kuhoji vitu vya JSON, na kuifanya iweze kutumika kwa kazi na data iliyopangwa na isiyo na mpangilio. Kituo cha huduma ni:
API ya NoSQL ya Azure Cosmos DB ni API inayotegemea nyaraka inayotumia JSON kama muundo wake wa data. Inatoa sintaksia ya kuhoji inayofanana na SQL kwa kuhoji vitu vya JSON, na kuifanya iweze kutumika kwa kufanya kazi na data iliyopangwa na isiyo na mpangilio. Kituo cha huduma ni:
Katika akaunti, unaweza kuunda moja au zaidi ya hifadhidata, ambazo hutumikia kama makundi ya mantiki ya kontena. Hifadhidata inafanya kazi kama mpaka wa usimamizi wa rasilimali na ruhusa za mtumiaji. Hifadhidata zinaweza kushiriki kupitia uwezo wa kupangwa kati ya kontena zao au kugawa uwezo maalum kwa kontena binafsi.
#### Hifadhidata
Ndani ya akaunti, unaweza kuunda hifadhidata moja au zaidi, ambazo hutumikia kama makundi ya mantiki ya kontena. Hifadhidata inafanya kazi kama mpaka wa usimamizi wa rasilimali na ruhusa za mtumiaji. Hifadhidata zinaweza kushiriki kupitia iliyotolewa kupitia kontena zao au kugawa kupitia iliyotolewa kwa kontena binafsi.
#### Containers
Kitengo cha msingi cha uhifadhi wa data ni kontena, ambacho kinashikilia hati za JSON na kimepangwa kiotomatiki kwa ajili ya uchunguzi wa ufanisi. Kontena zinaweza kupanuliwa kwa urahisi na kusambazwa kati ya sehemu, ambazo zinatolewa na ufunguo wa sehemu ulioelezwa na mtumiaji. Ufunguo wa sehemu ni muhimu kwa kuhakikisha utendaji bora na usambazaji sawa wa data. Kwa mfano, kontena inaweza kuhifadhi data za wateja, huku "customerId" ikiwa kama ufunguo wa sehemu.
#### Kontena
Kitengo cha msingi cha uhifadhi wa data ni kontena, ambacho kinashikilia hati za JSON na kimepangwa kiotomatiki kwa ajili ya uchunguzi wa ufanisi. Kontena zinaweza kupanuliwa kwa urahisi na kusambazwa katika sehemu, ambazo zinatolewa na ufunguo wa sehemu ulioelezwa na mtumiaji. Ufunguo wa sehemu ni muhimu kwa kuhakikisha utendaji bora na usambazaji sawa wa data. Kwa mfano, kontena inaweza kuhifadhi data za wateja, huku "customerId" ikiwa kama ufunguo wa sehemu.
#### Enumeration
#### Uhesabu
{% tabs %}
{% tab title="az cli" %}
@@ -203,7 +203,7 @@ print("Document inserted.")
{% endcode %}
### MongoDB
API ya MongoDB NoSQL ni API inayotumia hati ambayo inatumia BSON (Binary JSON) kama muundo wake wa data. Inatoa lugha ya kuuliza yenye uwezo wa kujumlisha, na kuifanya iweze kutumika kwa kazi na data iliyopangwa, nusu iliyopangwa, na isiyo na muundo. Kituo cha huduma kwa kawaida kinafuata muundo huu:
API ya MongoDB NoSQL ni API inayotegemea hati ambayo inatumia BSON (Binary JSON) kama muundo wake wa data. Inatoa lugha ya kuuliza yenye uwezo wa kujumlisha, na kuifanya iweze kutumika kwa kazi na data iliyopangwa, nusu iliyopangwa, na isiyo na muundo. Kituo cha huduma kwa kawaida kinafuata muundo huu:
Katika MongoDB, unaweza kuunda hifadhidata moja au zaidi ndani ya mfano. Kila hifadhidata inatumika kama kundi la kimantiki la makusanyo na inatoa mipaka kwa ajili ya shirika na usimamizi wa rasilimali. Hifadhidata husaidia kutenganisha na kusimamia data kwa kimantiki, kama vile kwa programu au miradi tofauti.
#### Makusanyo
Kitengo cha msingi cha uhifadhi wa data katika MongoDB ni makusanyo, ambayo yanaweka hati na yameundwa kwa ajili ya uchunguzi mzuri na muundo wa skimu unaoweza kubadilishwa. Makusanyo yanaweza kupanuka kwa urahisi na yanaweza kusaidia operesheni zenye kiwango kikubwa katika nodi nyingi katika mpangilio wa kusambazwa.
Kitengo cha msingi cha uhifadhi wa data katika MongoDB ni makusanyo, ambayo yanaweka hati na yameundwa kwa ajili ya uchunguzi wa ufanisi na muundo wa skimu unaoweza kubadilishwa. Makusanyo yanaweza kupanuliwa kwa urahisi na yanaweza kusaidia operesheni zenye kiwango kikubwa katika nodi nyingi katika mpangilio wa kusambazwa.
Hapa ndivyo nenosiri unavyoweza kuyapata kwa funguo au kwa njia iliyoelezwa katika sehemu ya privesc.
Hapa neno la siri unaweza kulipata na funguo au kwa njia iliyoelezwa katika sehemu ya privesc.
{% code overflow="wrap" %}
```python
frompymongoimportMongoClient
@@ -348,7 +348,7 @@ print(f"Inserted document with ID: {result.inserted_id}")
## Kitu cha Kufanya
* Sehemu nyingine ya DB hapa, meza, cassandra, gremlin...
* Sehemu nyingine za DB hapa, meza, cassandra, gremlin...
* Angalia utekelezaji wa "Microsoft.DocumentDB/databaseAccounts/mongodbUserDefinitions/write" && "Microsoft.DocumentDB/databaseAccounts/mongodbUserDefinitions/read" na ufafanuzi wa majukumu kwa sababu hapa kunaweza kuwa na privesc
Hapa unaweza kupata baadhi ya mipangilio ya Roles na ClusterRoles ambayo inaweza kuwa hatari.\
Kumbuka kwamba unaweza kupata rasilimali zote zinazoungwa mkono kwa `kubectl api-resources`
Kumbuka kwamba unaweza kupata rasilimali zote zinazoungwa mkono kwa kutumia `kubectl api-resources`
## **Privilege Escalation**
Inarejelea sanaa ya kupata **ufikiaji wa principal tofauti** ndani ya klasta **ikiwa na mamlaka tofauti** (ndani ya klasta ya kubernetes au kwa mawingu ya nje) kuliko zile ulizo nazo tayari, katika Kubernetes kuna k基本**mbinu 4 kuu za kupandisha mamlaka**:
Inarejelea sanaa ya kupata **ufikiaji wa principal tofauti** ndani ya klasta **ikiwa na mamlaka tofauti** (ndani ya klasta ya kubernetes au kwa mawingu ya nje) kuliko zile ulizo nazo tayari, katika Kubernetes kuna kimsingi**mbinu 4 kuu za kupandisha mamlaka**:
- Kuwa na uwezo wa **kujifanya** mtumiaji/katika makundi/SAs wengine wenye mamlaka bora ndani ya klasta ya kubernetes au kwa mawingu ya nje
- Kuwa na uwezo wa **kuunda/kurekebisha/kutekeleza pods** ambapo unaweza **kupata au kuunganisha SAs** wenye mamlaka bora ndani ya klasta ya kubernetes au kwa mawingu ya nje
- Kuwa na uwezo wa **kusoma siri** kwani token za SAs zimehifadhiwa kama siri
- Kuwa na uwezo wa **kutoroka hadi kwenye node** kutoka kwenye kontena, ambapo unaweza kuiba siri zote za kontena zinazotembea kwenye node, akidi za node, na ruhusa za node ndani ya wingu inayoendesha (ikiwa ipo)
- Kuwa na uwezo wa **kutoroka hadi kwenye node** kutoka kwenye kontena, ambapo unaweza kuiba siri zote za kontena zinazofanya kazi kwenye node, akidi za node, na ruhusa za node ndani ya wingu inayoendesha (ikiwa ipo)
- Mbinu ya tano ambayo inastahili kutajwa ni uwezo wa **kukimbia port-forward** katika pod, kwani unaweza kuwa na uwezo wa kufikia rasilimali za kuvutia ndani ya pod hiyo.
### Access Any Resource or Verb (Wildcard)
@@ -29,13 +29,13 @@ rules:
resources:["*"]
verbs:["*"]
```
### Access Any Resource with a specific verb
### Upata Rasilimali Yoyote kwa Kitenzi Maalum
In RBAC, certain permissions pose significant risks:
Katika RBAC, ruhusa fulani zina hatari kubwa:
1.**`create`:** Inaruhusu uwezo wa kuunda rasilimali yoyote ya klasta, ikihatarisha kupanda kwa mamlaka.
1.**`create`:** Inatoa uwezo wa kuunda rasilimali yoyote ya klasta, ikihatarisha kupanda kwa mamlaka.
2.**`list`:** Inaruhusu kuorodhesha rasilimali zote, ikihatarisha kuvuja kwa data nyeti.
3.**`get`:** Inaruhusu kufikia siri kutoka kwa akaunti za huduma, ikihatarisha usalama.
3.**`get`:** Inaruhusu kufikia siri kutoka kwa akaunti za huduma, ikileta tishio la usalama.
Mshambuliaji mwenye ruhusa za kuunda pod, anaweza kuunganisha Akaunti ya Huduma yenye mamlaka ndani ya pod na kuiba token ili kujifanya kuwa Akaunti ya Huduma. Kwa ufanisi inainua mamlaka kwake.
Mshambuliaji mwenye ruhusa za kuunda pod, anaweza kuunganisha Akaunti ya Huduma yenye mamlaka ndani ya pod na kuiba token ili kujifanya kuwa Akaunti ya Huduma. Kwa ufanisi anapandisha mamlaka kwake.
Mfano wa pod ambayo itaiba token ya akaunti ya huduma `bootstrap-signer` na kuisafirisha kwa mshambuliaji:
Mfano wa pod ambayo itakuwa na uwezo wa kuiba token ya akaunti ya huduma ya `bootstrap-signer` na kuisafirisha kwa mshambuliaji:
```yaml
apiVersion:v1
kind:Pod
@@ -127,7 +127,7 @@ Sasa kwamba unaweza kukimbia kwenye node angalia mbinu za baada ya unyakuzi kati
#### Stealth
Huenda unataka kuwa **stealthier**, katika kurasa zinazofuata unaweza kuona kile ambacho unaweza kufikia ikiwa utaunda pod kwa kuwezesha baadhi ya ruhusa zilizotajwa katika kigezo kilichopita:
Huenda unataka kuwa **stealthier**, katika kurasa zinazofuata unaweza kuona kile ambacho unaweza kufikia ikiwa utaunda pod kwa kuwezesha baadhi ya ruhusa zilizotajwa katika kiolezo kilichopita:
- **Privileged + hostPID**
- **Privileged tu**
@@ -136,12 +136,12 @@ Huenda unataka kuwa **stealthier**, katika kurasa zinazofuata unaweza kuona kile
- **hostNetwork**
- **hostIPC**
_Unaweza kupata mfano wa jinsi ya kuunda/kutumia vibaya mipangilio ya pods zilizopatiwa ruhusa katika_ [_https://github.com/BishopFox/badPods_](https://github.com/BishopFox/badPods)
_Unaweza kupata mfano wa jinsi ya kuunda/kutumia vibaya usanidi wa pods wenye ruhusa zilizotangulia katika_ [_https://github.com/BishopFox/badPods_](https://github.com/BishopFox/badPods)
### Pod Create - Hamia kwenye wingu
Ikiwa unaweza **kuunda** **pod** (na hiari **akaunti ya huduma**) huenda ukawa na uwezo wa **kupata ruhusa katika mazingira ya wingu** kwa **kuteua majukumu ya wingu kwa pod au akaunti ya huduma** na kisha kuifikia.\
Zaidi ya hayo, ikiwa unaweza kuunda **pod yenye nafasi ya mtandao wa mwenyeji** unaweza **kuiba IAM** jukumu la **node** mfano.
Zaidi ya hayo, ikiwa unaweza kuunda **pod yenye namespace ya mtandao wa mwenyeji** unaweza **kuiba IAM** jukumu la **node** instance.
Kwa maelezo zaidi angalia:
@@ -149,11 +149,11 @@ Kwa maelezo zaidi angalia:
pod-escape-privileges.md
{{#endref}}
### **Unda/Patch Utekelezaji, Daemonsets, Statefulsets, Replicationcontrollers, Replicasets, Jobs na Cronjobs**
### **Create/Patch Deployment, Daemonsets, Statefulsets, Replicationcontrollers, Replicasets, Jobs na Cronjobs**
Inawezekana kutumia vibaya ruhusa hizi ili **kuunda pod mpya** na kuanzisha ruhusa kama katika mfano wa awali.
Yaml ifuatayo **inaunda daemonset na inatoa token ya SA** ndani ya pod:
YAML ifuatayo **inaunda daemonset na inatoa token ya SA** ndani ya pod:
Kama [**ilivyosemwa katika utafiti huu**](https://jackleadford.github.io/containers/2020/03/06/pvpost.html), ikiwa unaweza kufikia au kuunda pod yenye **hosts `/var/log/` directory mounted** juu yake, unaweza **kutoroka kutoka kwenye kontena**.\
Kama [**ilivyoonyeshwa katika utafiti huu**](https://jackleadford.github.io/containers/2020/03/06/pvpost.html), ikiwa unaweza kufikia au kuunda pod yenye **hosts `/var/log/` directory mounted** juu yake, unaweza **kutoroka kutoka kwenye kontena**.\
Hii ni kwa sababu wakati **Kube-API inajaribu kupata logi** za kontena (kwa kutumia `kubectl logs <pod>`), inafanya **ombwe la `0.log`** la pod kwa kutumia `/logs/` endpoint ya huduma ya **Kubelet**.\
Huduma ya Kubelet inatoa `/logs/` endpoint ambayo kimsingi ni **kuonyesha mfumo wa faili wa `/var/log` wa kontena**.
Hivyo, mshambuliaji mwenye **ufikiaji wa kuandika katika folda /var/log/** ya kontena anaweza kutumia tabia hii kwa njia 2:
Kwa hivyo, mshambuliaji mwenye **ufikiaji wa kuandika katika folda /var/log/** ya kontena anaweza kutumia tabia hii kwa njia 2:
- Kubadilisha faili ya `0.log` ya kontena yake (ambayo kawaida iko katika `/var/logs/pods/namespace_pod_uid/container/0.log`) kuwa **symlink inayoelekeza kwenye `/etc/shadow`** kwa mfano. Kisha, utaweza kutoa faili la kivuli cha mwenyeji kwa kufanya:
- Kubadilisha faili `0.log` la kontena lake (ambalo kawaida liko katika `/var/logs/pods/namespace_pod_uid/container/0.log`) kuwa **symlink inayoelekeza kwenye `/etc/shadow`** kwa mfano. Kisha, utaweza kuhamasisha faili la kivuli cha mwenyeji kwa kufanya:
```bash
kubectl logs escaper
failed to get parse function: unsupported log format: "root::::::::\n"
Kuna aina maalum ya siri ya Kubernetes ya aina **kubernetes.io/service-account-token** ambayo inahifadhi token za akaunti ya huduma. Ikiwa una ruhusa za kuunda na kusoma siri, na pia unajua jina la akaunti ya huduma, unaweza kuunda siri kama ifuatavyo na kisha kuiba token ya akaunti ya huduma ya mwathirika kutoka kwake:
Kuna aina maalum ya siri ya Kubernetes ya aina **kubernetes.io/service-account-token** ambayo inahifadhi token za akaunti za huduma. Ikiwa una ruhusa za kuunda na kusoma siri, na pia unajua jina la akaunti ya huduma, unaweza kuunda siri kama ifuatavyo na kisha kuiba token ya akaunti ya huduma ya mwathirika kutoka kwake:
```yaml
apiVersion:v1
kind:Secret
@@ -381,9 +381,9 @@ Kumbuka kwamba ikiwa unaruhusiwa kuunda na kusoma siri katika eneo fulani, akaun
### Kusoma siri – kulazimisha vitambulisho vya tokeni
Wakati mshambuliaji mwenye tokeni yenye ruhusa za kusoma anahitaji jina sahihi la siri ili kuitumia, tofauti na ruhusa pana ya _**kuorodhesha siri**_, bado kuna udhaifu. Akaunti za huduma za default katika mfumo zinaweza kuorodheshwa, kila moja ikihusishwa na siri. Siri hizi zina muundo wa jina: kiambatisho kisichobadilika kinachofuatiwa na tokeni ya alphanumeric ya herufi tano za nasibu (bila wahusika fulani) kulingana na [source code](https://github.com/kubernetes/kubernetes/blob/8418cccaf6a7307479f1dfeafb0d2823c1c37802/staging/src/k8s.io/apimachinery/pkg/util/rand/rand.go#L83).
Wakati mshambuliaji mwenye tokeni yenye ruhusa za kusoma anahitaji jina sahihi la siri ili kuitumia, tofauti na ruhusa pana ya _**kuorodhesha siri**_, bado kuna udhaifu. Akaunti za huduma za default katika mfumo zinaweza kuorodheshwa, kila moja ikihusishwa na siri. Siri hizi zina muundo wa jina: kiambatisho kisichobadilika kinachofuatiwa na tokeni ya alphanumeric ya herufi tano za nasibu (bila herufi fulani) kulingana na [source code](https://github.com/kubernetes/kubernetes/blob/8418cccaf6a7307479f1dfeafb0d2823c1c37802/staging/src/k8s.io/apimachinery/pkg/util/rand/rand.go#L83).
Tokeni inazalishwa kutoka kwa seti ndogo ya wahusika 27 (`bcdfghjklmnpqrstvwxz2456789`), badala ya anuwai kamili ya alphanumeric. Kizuizi hiki kinapunguza jumla ya mchanganyiko unaowezekana kuwa 14,348,907 (27^5). Kwa hivyo, mshambuliaji anaweza kutekeleza shambulio la kulazimisha kwa urahisi ili kubaini tokeni hiyo ndani ya masaa machache, ambayo yanaweza kusababisha kupandishwa vyeo kwa kufikia akaunti za huduma nyeti.
Tokeni inazalishwa kutoka seti ndogo ya herufi 27 (`bcdfghjklmnpqrstvwxz2456789`), badala ya anuwai kamili ya alphanumeric. Kizuizi hiki kinapunguza jumla ya mchanganyiko unaowezekana kuwa 14,348,907 (27^5). Kwa hivyo, mshambuliaji anaweza kutekeleza shambulio la kulazimisha kwa urahisi ili kubaini tokeni hiyo ndani ya masaa machache, ambayo yanaweza kusababisha kupandishwa vyeo kwa kufikia akaunti za huduma nyeti.
### Maombi ya Kusaini Cheti
@@ -424,7 +424,7 @@ verbs:
```
Hivyo, na CSR mpya ya node iliyothibitishwa, unaweza **kudhulumu** ruhusa maalum za nodes ili **kuiba siri** na **kuinua mamlaka**.
Katika [**post hii**](https://www.4armed.com/blog/hacking-kubelet-on-gke/) na [**hii moja**](https://rhinosecuritylabs.com/cloud-security/kubelet-tls-bootstrap-privilege-escalation/) usanidi wa GKE K8s TLS Bootstrap umewekwa na **kusainiwa kiotomatiki** na unatumika vibaya kuzalisha akreditif za Node mpya ya K8s na kisha kuzitumia kuimarisha mamlaka kwa kuiba siri.\
Katika [**post hii**](https://www.4armed.com/blog/hacking-kubelet-on-gke/) na [**hii moja**](https://rhinosecuritylabs.com/cloud-security/kubelet-tls-bootstrap-privilege-escalation/) usanidi wa GKE K8s TLS Bootstrap umewekwa na **kusainiwa kiotomatiki** na unatumika vibaya kuzalisha akreditif za Node mpya ya K8s na kisha kudhulumu hizo ili kuinua mamlaka kwa kuiba siri.\
Ikiwa **una mamlaka zilizotajwa unaweza kufanya jambo hilo hilo**. Kumbuka kwamba mfano wa kwanza unazidi kosa linalozuia node mpya kufikia siri ndani ya kontena kwa sababu **node inaweza kufikia tu siri za kontena zilizowekwa juu yake.**
Njia ya kupita hii ni tu **kuunda akreditif za node kwa jina la node ambapo kontena lenye siri za kuvutia limewekwa** (lakini angalia tu jinsi ya kufanya hivyo katika post ya kwanza):
@@ -484,7 +484,7 @@ groups:
Kuna **njia 2 za kutoa ruhusa za K8s kwa wakuu wa GCP**. Katika hali yoyote mkuu pia anahitaji ruhusa **`container.clusters.get`** ili kuwa na uwezo wa kukusanya akidi za kuingia kwenye klasta, au utahitaji **kuunda faili yako ya kubectl config** (fuata kiungo kinachofuata).
> [!WARNING]
> Wakati wa kuzungumza na kiunganishi cha K8s api, **token ya uthibitisho ya GCP itatumwa**. Kisha, GCP, kupitia kiunganishi cha K8s api, kwanza itachunguza **kama mkuu** (kwa barua pepe) **ana ufikiaji wowote ndani ya klasta**, kisha itachunguza kama ana **ufikiaji wowote kupitia GCP IAM**.\
> Wakati wa kuzungumza na kiunganishi cha K8s api, **token ya uthibitisho ya GCP itatumwa**. Kisha, GCP, kupitia kiunganishi cha K8s api, kwanza **itaangalia kama mkuu** (kwa barua pepe) **ana ufikiaji wowote ndani ya klasta**, kisha itaangalia kama ana **ufikiaji wowote kupitia GCP IAM**.\
> Ikiwa **yoyote** kati ya hizo ni **kweli**, atajibiwa. Ikiwa **siyo** makosa **yanayopendekeza kutoa** **ruhusa kupitia GCP IAM** yatatolewa.
Kisha, njia ya kwanza ni kutumia **GCP IAM**, ruhusa za K8s zina **ruhusa sawa za GCP IAM**, na ikiwa mkuu ana hiyo, ataweza kuitumia.
### ValidatingWebhookConfigurations au MutatingWebhookConfigurations
Wakuu wenye mojawapo ya vitenzi `create`, `update` au `patch` juu ya `validatingwebhookconfigurations` au `mutatingwebhookconfigurations` wanaweza kuwa na uwezo wa **kuunda mojawapo ya webhookconfigurations hizo** ili waweze **kuongeza mamlaka**.
Wakuu wenye mojawapo ya vitenzi `create`, `update` au `patch` juu ya `validatingwebhookconfigurations` au `mutatingwebhookconfigurations` wanaweza kuwa na uwezo wa **kuunda moja ya webhookconfigurations hizo** ili waweze **kuongeza mamlaka**.
Kwa mfano wa [`mutatingwebhookconfigurations` angalia sehemu hii ya chapisho hili](#malicious-admission-controller).
Kwa [`mfano wa mutatingwebhookconfigurations angalia sehemu hii ya chapisho hili`](#malicious-admission-controller).
### Pandisha
Kama unavyoweza kusoma katika sehemu inayofuata: [**Kuzuia Pandisha Mamlaka ya Kijengwa Ndani**](#built-in-privileged-escalation-prevention), mkuu cannot update wala kuunda roles au clusterroles bila kuwa na ruhusa hizo mpya. Isipokuwa ikiwa ana **kitenzi `escalate`** juu ya **`roles`** au **`clusterroles`.**\
Kama unavyoweza kusoma katika sehemu inayofuata: [**Kuzuia Kuongeza Mamlaka ya Kijadi**](#built-in-privileged-escalation-prevention), mkuu cannot update wala kuunda roles au clusterroles bila kuwa na ruhusa hizo mpya. Isipokuwa ikiwa ana **kitenzi `escalate`** juu ya **`roles`** au **`clusterroles`.**\
Kisha anaweza kuupdate/kuunda roles mpya, clusterroles zenye ruhusa bora kuliko zile alizonazo.
### Nodes proxy
@@ -524,9 +524,9 @@ Wakuu wenye ufikiaji wa **`nodes/proxy`** subresource wanaweza **kutekeleza msim
Una mfano wa jinsi ya kupata [**RCE kwa kuzungumza na Kubelet API hapa**](../pentesting-kubernetes-services/index.html#kubelet-rce).
### Futa pods + nodes zisizoweza kuwekewa ratiba
### Futa pods + nodes zisizoweza kupanga
Wakuu wanaoweza **kufuta pods** (`delete` verb juu ya `pods` resource), au **kuhamasisha pods** (`create` verb juu ya `pods/eviction` resource), au **kubadilisha hali ya pod** (ufikiaji wa `pods/status`) na wanaweza **kufanya nodes nyingine zisizoweza kuwekewa ratiba** (ufikiaji wa `nodes/status`) au **kufuta nodes** (`delete` verb juu ya `nodes` resource) na ana udhibiti juu ya pod, wanaweza **kuiba pods kutoka nodes nyingine** ili ziwe **zinatekelezwa** katika **node iliyoathirika** na mshambuliaji anaweza **kuiba token** kutoka kwa pods hizo.
Wakuu wanaoweza **kufuta pods** (`delete` verb juu ya `pods` resource), au **kuhamasisha pods** (`create` verb juu ya `pods/eviction` resource), au **kubadilisha hali ya pod** (ufikiaji wa `pods/status`) na wanaweza **kufanya nodes nyingine zisizoweza kupanga** (ufikiaji wa `nodes/status`) au **kufuta nodes** (`delete` verb juu ya `nodes` resource) na ana udhibiti juu ya pod, wanaweza **kuiba pods kutoka nodes nyingine** ili ziwe **zinatekelezwa** katika **node iliyoathirika** na mshambuliaji anaweza **kuiba token** kutoka kwa pods hizo.
Wajibu wanaoweza **kubadilisha****`services/status`** wanaweza kuweka uwanja wa `status.loadBalancer.ingress.ip` ili kutumia **CVE-2020-8554 isiyorekebishwa** na kuanzisha **shambulio la MiTM dhidi ya kluster**. Mitihani mingi ya CVE-2020-8554 inazuia tu huduma za ExternalIP (kulingana na [**hii**](https://github.com/PaloAltoNetworks/rbac-police/blob/main/lib/modify_service_status_cve_2020_8554.rego)).
Wajibu wanaoweza **kubadilisha****`services/status`** wanaweza kuweka uwanja wa `status.loadBalancer.ingress.ip` ili kutumia **CVE-2020-8554 isiyorekebishwa** na kuanzisha **MiTM attacks dhidi ya kluster**. Mitihani mingi ya CVE-2020-8554 inazuia tu huduma za ExternalIP (kulingana na [**hii**](https://github.com/PaloAltoNetworks/rbac-police/blob/main/lib/modify_service_status_cve_2020_8554.rego)).
### Hali za Nodes na Pods
Wajibu wenye ruhusa za **`update`** au **`patch`** juu ya `nodes/status` au `pods/status`, wanaweza kubadilisha lebo ili kuathiri vikwazo vya kupanga vilivyowekwa.
Wajibu wenye ruhusa za **`update`** au **`patch`** juu ya `nodes/status` au `pods/status`, wanaweza kubadilisha lebo ili kuathiri vikwazo vya kupanga vinavyotekelezwa.
## Kinga ya Kukuza Privilege iliyojengwa ndani
Kubernetes ina [mekanismu iliyojengwa ndani](https://kubernetes.io/docs/reference/access-authn-authz/rbac/#privilege-escalation-prevention-and-bootstrapping) ya kuzuia kukuza privilege.
Mfumo huu unahakikisha kwamba **watumiaji hawawezi kuongeza privileges zao kwa kubadilisha majukumu au uhusiano wa majukumu**. Utekelezaji wa sheria hii unafanyika katika ngazi ya API, ukitoa kinga hata wakati mthibitishaji wa RBAC haupo.
Mfumo huu unahakikisha kwamba **watumiaji hawawezi kuongeza privileges zao kwa kubadilisha roles au role bindings**. Utekelezaji wa sheria hii unafanyika katika ngazi ya API, ukitoa kinga hata wakati RBAC authorizer haifanyi kazi.
Sheria inasema kwamba **mtumiaji anaweza tu kuunda au kuboresha jukumu ikiwa ana ruhusa zote zinazohitajika na jukumu hilo**. Aidha, upeo wa ruhusa za mtumiaji zilizopo lazima ulingane na ule wa jukumu wanalojaribu kuunda au kubadilisha: ama kwa kiwango cha kluster kwa ClusterRoles au kufungwa kwenye namespace sawa (au kwa kiwango cha kluster) kwa Roles.
Sheria inasema kwamba **mtumiaji anaweza tu kuunda au kubadilisha role ikiwa ana ruhusa zote zinazohusiana na role hiyo**. Aidha, upeo wa ruhusa za mtumiaji zilizopo lazima ulingane na ule wa role wanayojaribu kuunda au kubadilisha: ama kwa kiwango cha kluster kwa ClusterRoles au kufungwa kwenye namespace sawa (au kwa kiwango cha kluster) kwa Roles.
> [!WARNING]
> Kuna ubaguzi wa sheria ya awali. Ikiwa wajibu ana **kitenzi `escalate`** juu ya **`roles`** au **`clusterroles`** anaweza kuongeza privileges za majukumu na clusterroles hata bila kuwa na ruhusa hizo mwenyewe.
> Kuna ubaguzi wa sheria ya awali. Ikiwa wajibu ana **verb `escalate`** juu ya **`roles`** au **`clusterroles`** anaweza kuongeza privileges za roles na clusterroles hata bila kuwa na ruhusa hizo mwenyewe.
> **Kwa kweli, mbinu hii ilifanya kazi hapo awali, lakini kulingana na majaribio yangu haifanyi kazi tena kwa sababu ile ile iliyoelezwa katika sehemu ya awali. Huwezi kuunda/kubadilisha rolebinding ili kujipa wewe mwenyewe au SA tofauti baadhi ya privileges ikiwa tayari huna.**
> **Kwa kweli, mbinu hii ilifanya kazi hapo awali, lakini kulingana na majaribio yangu haifanyi kazi tena kwa sababu ile ile iliyoelezwa katika sehemu ya awali. Huwezi kuunda/kubadilisha rolebinding ili kujipa wewe au SA tofauti baadhi ya privileges ikiwa tayari huna.**
Ruhusa ya kuunda Rolebindings inamruhusu mtumiaji **kuunganisha majukumu na akaunti ya huduma**. Ruhusa hii inaweza kupelekea kukuza privilege kwa sababu inaruhusu mtumiaji kuunganisha ruhusa za admin kwa akaunti ya huduma iliyovunjwa.
Ruhusa ya kuunda Rolebindings inamruhusu mtumiaji **kuunganisha roles na akaunti ya huduma**. Ruhusa hii inaweza kupelekea kukuza privilege kwa sababu inaruhusu mtumiaji kuunganisha ruhusa za admin kwa akaunti ya huduma iliyovunjwa.
## Mashambulizi Mengine
@@ -619,7 +619,7 @@ An admission controller **intercepts requests to the Kubernetes API server** bef
If an attacker somehow manages to **inject a Mutationg Admission Controller**, he will be able to **modify already authenticated requests**. Being able to potentially privesc, and more usually persist in the cluster.
Snipet iliyo hapo juu inabadilisha picha ya kwanza ya kontena katika kila pod na`rewanthtammana/malicious-image`.
The above snippet replaces the first container image in every pod with`rewanthtammana/malicious-image`.
## OPA Gatekeeper bypass
@@ -669,16 +669,16 @@ Snipet iliyo hapo juu inabadilisha picha ya kwanza ya kontena katika kila pod na
### **Kuzima Automount ya Tokens za Akaunti ya Huduma**
- **Pods na Akaunti za Huduma**: Kwa default, pods zina mount token ya akaunti ya huduma. Ili kuboresha usalama, Kubernetes inaruhusu kuzima kipengele hiki cha automount.
- **Pods na Akaunti za Huduma**: Kwa kawaida, pods huweka token ya akaunti ya huduma. Ili kuboresha usalama, Kubernetes inaruhusu kuzima kipengele hiki cha automount.
- **Jinsi ya Kutumia**: Weka `automountServiceAccountToken: false` katika usanidi wa akaunti za huduma au pods kuanzia toleo la Kubernetes 1.6.
### **Kuteua Watumiaji kwa Uangalifu katika RoleBindings/ClusterRoleBindings**
- **Injilisha Chaguo**: Hakikisha kuwa watumiaji muhimu pekee wanajumuishwa katika RoleBindings au ClusterRoleBindings. Kagua mara kwa mara na uondoe watumiaji wasiohusika ili kudumisha usalama mkali.
- **Injini ya Uchaguzi**: Hakikisha kuwa watumiaji muhimu pekee wanajumuishwa katika RoleBindings au ClusterRoleBindings. Kagua mara kwa mara na uondoe watumiaji wasiokuwa na umuhimu ili kudumisha usalama mkali.
### **Majukumu Maalum ya Namespace Juu ya Majukumu ya Cluster-Wide**
### **Majukumu Maalum ya Namespace Badala ya Majukumu ya Kiwango cha Klasta**
- **Majukumu vs. ClusterRoles**: Prefer kutumia Majukumu na RoleBindings kwa ruhusa maalum za namespace badala ya ClusterRoles na ClusterRoleBindings, ambazo zinatumika kwa kiwango cha cluster. Njia hii inatoa udhibiti wa kina na inapunguza wigo wa ruhusa.
- **Majukumu dhidi ya ClusterRoles**: Prefer kutumia Majukumu na RoleBindings kwa ruhusa maalum za namespace badala ya ClusterRoles na ClusterRoleBindings, ambazo zinatumika kwa kiwango cha klasta. Njia hii inatoa udhibiti wa kina na inapunguza wigo wa ruhusa.
@@ -37,11 +37,11 @@ Sasa kwamba una token, unaweza kupata seva ya API ndani ya variable ya mazingira
Token ya akaunti ya huduma inasainiwa na funguo iliyoko katika faili **sa.key** na kuthibitishwa na **sa.pub**.
Mahali pa default kwenye **Kubernetes**:
Mahali pa kawaida kwenye **Kubernetes**:
- /etc/kubernetes/pki
Mahali pa default kwenye **Minikube**:
Mahali pa kawaida kwenye **Minikube**:
- /var/lib/localkube/certs
@@ -55,7 +55,7 @@ Ikiwa hujui ni nini **RBAC**, **soma sehemu hii**.
## GUI Applications
- **k9s**: GUI inayoorodhesha klasta ya kubernetes kutoka terminal. Angalia amri katika [https://k9scli.io/topics/commands/](https://k9scli.io/topics/commands/). Andika `:namespace` na uchague yote ili kisha kutafuta rasilimali katika namespaces zote.
- **k9s**: GUI inayoorodhesha klasta ya kubernetes kutoka kwa terminal. Angalia amri katika [https://k9scli.io/topics/commands/](https://k9scli.io/topics/commands/). Andika `:namespace` na uchague yote ili kisha kutafuta rasilimali katika namespaces zote.
- **k8slens**: Inatoa siku chache za majaribio bure: [https://k8slens.dev/](https://k8slens.dev/)
# if kurl is still got cert Error, using -k option to solve this.
```
> [!WARNING]
> Kwa kawaida pod inaweza **kufikia** **kube-api server** katika jina la kikoa **`kubernetes.default.svc`** na unaweza kuona mtandao wa kube katika **`/etc/resolv.config`** kwani hapa utapata anwani ya seva ya DNS ya kubernetes (".1" ya safu hiyo ni kiunganishi cha kube-api).
> Kwa default, pod inaweza **kufikia** **kube-api server** katika jina la domain **`kubernetes.default.svc`** na unaweza kuona mtandao wa kube katika **`/etc/resolv.config`** kwani hapa utaona anwani ya seva ya DNS ya kubernetes (".1" ya safu hiyo ni kiunganishi cha kube-api).
### Kutumia kubectl
Ili kuwa na token na anwani ya seva ya API unatumia kubectl au curl kufikia hiyo kama ilivyoonyeshwa hapa:
Kuwa na token na anwani ya seva ya API unatumia kubectl au curl kufikia hiyo kama ilivyoonyeshwa hapa:
Kwa kawaida, APISERVER inawasiliana na muundo wa `https://`
Kwa default, APISERVER inawasiliana na muundo wa `https://`
```bash
aliask='kubectl --token=$TOKEN --server=https://$APISERVER --insecure-skip-tls-verify=true [--all-namespaces]'# Use --all-namespaces to always search in all namespaces
```
> ikiwa hakuna `https://` katika url, unaweza kupata Kosa Kama Ombi Mbaya.
> ikiwa hakuna `https://` katika url, unaweza kupata Hitilafu Kama Ombi Mbaya.
Unaweza kupata [**karatasi ya udanganyifu rasmi ya kubectl hapa**](https://kubernetes.io/docs/reference/kubectl/cheatsheet/). Lengo la sehemu zifuatazo ni kuwasilisha kwa mpangilio tofauti chaguzi za kuhesabu na kuelewa K8s mpya ambayo umepata ufikiaji nayo.
Unaweza kupata [**cheatsheet rasmi ya kubectl hapa**](https://kubernetes.io/docs/reference/kubectl/cheatsheet/). Lengo la sehemu zifuatazo ni kuwasilisha kwa mpangilio chaguzi tofauti za kuhesabu na kuelewa K8s mpya ambayo umepata ufikiaji nayo.
Ili kupata ombi la HTTP ambalo `kubectl` inatuma unaweza kutumia parameter `-v=8`
@@ -205,7 +205,7 @@ Unaweza kujifunza zaidi kuhusu **Kubernetes RBAC** katika:
kubernetes-role-based-access-control-rbac.md
{{#endref}}
**Mara tu unavyojua ni haki zipi** unazo, angalia ukurasa ufuatao ili kubaini **kama unaweza kuzitumia vibaya** ili kupandisha haki:
**Mara tu unavyojua ni haki gani** ulizonazo, angalia ukurasa ufuatao ili kubaini **kama unaweza kuzitumia vibaya** ili kupandisha haki:
Kubernetes inasaidia **vikundi vingi vya virtual** vinavyoungwa mkono na klasta moja ya kimwili. Vikundi hivi vya virtual vinaitwa **majina ya maeneo**.
Kubernetes inasaidia **vikundi vingi vya virtual** vinavyoungwa mkono na kundi moja la kimwili. Vikundi hivi vya virtual vinaitwa **majina ya maeneo**.
Kubernetes **huduma** zinatumika ili**kuweka huduma wazi katika bandari na IP maalum** (ambayo itakuwa kama balancer ya mzigo kwa pods ambazo kwa kweli zinatoa huduma). Hii ni ya kuvutia kujua ambapo unaweza kupata huduma nyingine za kujaribu kushambulia.
Kubernetes **huduma** zinatumika ku**onyesha huduma katika bandari na IP maalum** (ambayo itakuwa kama balancer ya mzigo kwa pods ambazo kwa kweli zinatoa huduma). Hii ni ya kuvutia kujua mahali ambapo unaweza kupata huduma nyingine za kujaribu kushambulia.
configMap kila wakati ina habari nyingi na configfile ambazo zinatoa kwa programu zinazotembea katika kubernetes. Kawaida unaweza kupata nywila nyingi, siri, tokens ambazo zinatumika kuungana na kuthibitisha huduma nyingine za ndani/nje.
configMap kila wakati ina habari nyingi na configfile ambazo zinatoa kwa programu zinazotumia kubernetes. Kawaida unaweza kupata nywila nyingi, siri, tokens ambazo zinatumika kuungana na kuthibitisha huduma nyingine za ndani/za nje.
{{#tabs }}
{{#tab name="kubectl" }}
@@ -461,11 +461,11 @@ k top pod --all-namespaces
## Kuingiliana na klasta bila kutumia kubectl
Kwa kuwa jukwaa la kudhibiti la Kubernetes linaonyesha API ya REST-ful, unaweza kuunda maombi ya HTTP kwa mikono na kuyatumia na zana nyingine, kama **curl** au **wget**.
Kwa kuwa mpango wa udhibiti wa Kubernetes unatoa API ya REST-ful, unaweza kuunda maombi ya HTTP kwa mikono na kuyatumia na zana nyingine, kama **curl** au **wget**.
### Kutoroka kutoka kwa pod
### Kutoroka kutoka kwenye pod
Ikiwa unaweza kuunda pods mpya unaweza kuwa na uwezo wa kutoroka kutoka kwao hadi kwenye node. Ili kufanya hivyo unahitaji kuunda pod mpya kwa kutumia faili ya yaml, kubadilisha kwenda kwenye pod iliyoundwa na kisha chroot kwenye mfumo wa node. Unaweza kutumia pods zilizopo kama rejeleo kwa faili ya yaml kwani zinaonyesha picha na njia zilizopo.
Ikiwa unaweza kuunda pods mpya unaweza kuwa na uwezo wa kutoroka kutoka kwao hadi kwenye node. Ili kufanya hivyo unahitaji kuunda pod mpya kwa kutumia faili ya yaml, kubadilisha kwenda kwenye pod iliyoundwa na kisha chroot ndani ya mfumo wa node. Unaweza kutumia pods zilizopo kama rejea kwa faili ya yaml kwani zinaonyesha picha na njia zilizopo.
```bash
kubectl get pod <name> [-n <namespace>] -o yaml
```
@@ -549,7 +549,7 @@ volumes:
hostPath:
path:/
```
Unda pod kwa kutumia curl:
Tengeneza pod kwa kutumia curl:
```bash
CONTROL_PLANE_HOST=""
TOKEN=""
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.