Translated ['', 'src/pentesting-cloud/gcp-security/gcp-post-exploitation

This commit is contained in:
Translator
2026-03-04 11:27:27 +00:00
parent b68bf932af
commit a7ad6d37f5
2 changed files with 67 additions and 40 deletions

View File

@@ -12,11 +12,11 @@ Pata taarifa za msingi kuhusu KMS katika:
### `cloudkms.cryptoKeyVersions.destroy`
An attacker with this permission could destroy a KMS version. Ili kufanya hivyo unahitaji kwanza ku-disable key kisha ku-destroy:
Mshambuliaji mwenye ruhusa hii anaweza kuharibu toleo la KMS. Ili kufanya hivyo kwanza unahitaji kuzima ufunguo kisha kuuharibu:
<details>
<summary>Disable and destroy key version (Python)</summary>
<summary>Lemaza na uharibu toleo la ufunguo (Python)</summary>
```python
# pip install google-cloud-kms
@@ -65,24 +65,38 @@ destroy_key_version(project_id, location_id, key_ring_id, key_id, key_version)
### KMS Ransomware
Katika AWS inawezekana kabisa **steal a KMS key** kwa kubadilisha KMS resource policy na kuruhusu akaunti ya mshambuliaji pekee kutumia key hiyo. Kwa kuwa resource policies hizi hazipo katika GCP, hii haiwezekani.
Katika AWS inawezekana kabisa **steal a KMS key** kwa kubadilisha KMS resource policy na kuruhusu akaunti ya mshambuliaji tu kutumia key. Kwa kuwa sera za rasilimali hizi hazipo kwenye GCP, hili haliwezekani.
Hata hivyo, kuna njia nyingine ya kufanya KMS Ransomware ya kimataifa, ambayo ingejumuisha hatua zifuatazo:
Hata hivyo, kuna njia nyingine ya kutekeleza KMS Ransomware ya kimataifa, ambayo ingehusisha hatua zifuatazo:
- Unda toleo jipya la **version of the key with a key material** lililoingizwa na mshambuliaji
- Unda toleo jipya la **version of the key with a key material** ambalo limeingizwa na mshambuliaji
```bash
gcloud kms import-jobs create [IMPORT_JOB] --location [LOCATION] --keyring [KEY_RING] --import-method [IMPORT_METHOD] --protection-level [PROTECTION_LEVEL] --target-key [KEY]
```
- Weka kama **default version** (kwa ajili ya data zijazo zitakazokuwa encrypted)
- **Re-encrypt older data** zilizokuwa encrypted na version ya awali kwa kutumia ile mpya.
- **Delete the KMS key**
- Sasa ni attacker pekee, ambaye ana original key material, atakuwa na uwezo wa decrypt the encrypted data
- Weka kama **toleo chaguo-msingi** (kwa data zijazo zitakazofichwa)
- **Fichia tena data za zamani** zilizofichwa kwa toleo la awali kwa kutumia toleo jipya.
- **Futa KMS key**
- Sasa ni mshambuliaji pekee, ambaye anamiliki nyenzo za awali za ufunguo, atakayekuwa na uwezo wa kufungua data iliyofichwa
#### Hapa kuna hatua za ku-import version mpya na ku-disable/delete data za zamani:
#### Cloud Storage + CMEK mfumo wa ruhusa
Wakati vitu katika Cloud Storage vinapofichwa kwa CMEK, miito ya decrypt/encrypt kwa KMS hufanywa na wakala wa huduma wa Cloud Storage wa mradi (barua pepe ni service-${BUCKET_PROJECT_NUMBER}@gs-project-accounts.iam.gserviceaccount.com)), sio moja kwa moja na mtumiaji wa mwisho anayesoma kitu hicho.
Hii ina maana kwamba ili kusoma kitu kilichofichwa kwa CMEK:
- Wakala wa huduma wa Cloud Storage wa mradi lazima awe na ruhusa za KMS juu ya ufunguo wa KMS unaotumika (kwa kawaida `roles/cloudkms.cryptoKeyEncrypterDecrypter`).
- Mtumiaji anahitaji tu ruhusa za kusoma object (kwa mfano `storage.objects.get`). Hapana haja ya ruhusa juu ya ufunguo wa KMS.
Hii ina maana kwamba ili kudhibiti upatikanaji wa data iliyofichwa kwa kutumia ufunguo wa KMS, ni lazima kuongeza/kuondoa ruhusa za KMS kwa wakala wa huduma wa Cloud Storage wa mradi.
Kumbuka kuwa kufunga binding ya ngazi ya mradi kama `roles/cloudkms.cryptoKeyEncrypterDecrypter` kwa wakala wa Storage bado itaruhusu decrypt kwa kutumia funguo katika mradi huo huo.
#### Hapa kuna hatua za kuingiza toleo jipya na kuzima/kufuta data za zamani:
<details>
<summary>Import version mpya ya key na delete version ya zamani</summary>
<summary>Ingiza toleo jipya la ufunguo na futa toleo la zamani</summary>
```bash
# Encrypt something with the original key
echo "This is a sample text to encrypt" > /tmp/my-plaintext-file.txt
@@ -162,7 +176,7 @@ gcloud kms keys versions destroy \
<details>
<summary>Kuficha data kwa kutumia funguo simetriki (Python)</summary>
<summary>Fichia data kwa kutumia ufunguo wa simetriki (Python)</summary>
```python
from google.cloud import kms
import base64
@@ -203,7 +217,7 @@ print('Ciphertext:', ciphertext)
<details>
<summary>Saini ujumbe kwa kiufunguo asymmetriki (Python)</summary>
<summary>Saini ujumbe kwa kutumia asymmetric key (Python)</summary>
```python
import hashlib
from google.cloud import kms
@@ -243,7 +257,7 @@ print('Signature:', signature)
<details>
<summary>Thibitisha saini kwa kutumia ufunguo wa asymmetric (Python)</summary>
<summary>Thibitisha saini kwa kutumia ufunguo wa asimetri (Python)</summary>
```python
from google.cloud import kms
import hashlib
@@ -271,7 +285,7 @@ verified = verify_asymmetric_signature(project_id, location_id, key_ring_id, key
print('Verified:', verified)
```
### `cloudkms.cryptoKeyVersions.restore`
Ruhusa ya `cloudkms.cryptoKeyVersions.restore` inaruhusu kitambulisho kurejesha toleo la ufunguo ambalo lilikuwa limepangwa kuharibiwa au lilizimwa katika Cloud KMS, likirejeshwa katika hali ya kazi na inayoweza kutumika.
Ruhusa `cloudkms.cryptoKeyVersions.restore` inaruhusu kitambulisho kurejesha toleo la ufunguo ambalo awali lilikuwa limepangwa kuharibiwa au limezimwa katika Cloud KMS, likirejeshwa katika hali hai na inayoweza kutumika.
```bash
gcloud kms keys versions restore <VERSION_ID> \
--key=<KEY_NAME> \
@@ -280,7 +294,7 @@ gcloud kms keys versions restore <VERSION_ID> \
--project=<PROJECT_ID>
```
### `cloudkms.cryptoKeyVersions.update`
Ruhusa ya `cloudkms.cryptoKeyVersions.update` inamruhusu mtambulisho kubadilisha sifa au hali ya toleo maalum la ufunguo katika Cloud KMS, kwa mfano, kwa kuiwezesha au kuizima.
Ruhusa `cloudkms.cryptoKeyVersions.update` inamruhusu mtambulisho kubadilisha sifa au hali ya toleo maalum la ufunguo katika Cloud KMS, kwa mfano kuamilisha au kuzima.
```bash
# Disable key
gcloud kms keys versions disable <VERSION_ID> \

View File

@@ -4,40 +4,53 @@
## KMS
The [**Cloud Key Management Service**](https://cloud.google.com/kms/docs/) inatoa hifadhi salama kwa **funguo za kificho**, ambazo ni muhimu kwa shughuli kama **kuandika na kufungua data nyeti**. Funguo hizi zimepangwa ndani ya pete za funguo, kuruhusu usimamizi wa muundo. Zaidi ya hayo, udhibiti wa ufikiaji unaweza kuundwa kwa usahihi, iwe kwa kiwango cha funguo binafsi au kwa pete nzima ya funguo, kuhakikisha kuwa ruhusa zinaendana kwa usahihi na mahitaji ya usalama.
The [**Cloud Key Management Service**](https://cloud.google.com/kms/docs/) inahudumia kama hifadhi salama ya **cryptographic keys**, ambazo ni muhimu kwa shughuli kama **encrypting and decrypting sensitive data**. Keys hizi zimepangwa ndani ya key rings, kuruhusu usimamizi wa muundo. Zaidi ya hayo, udhibiti wa ufikiaji unaweza kusanifiwa kwa umakini, iwe kwa kiwango cha key moja kwa moja au kwa nzima key ring, kuhakikisha ruhusa zinaendana kabisa na mahitaji ya usalama.
Pete za funguo za KMS kwa **default huundwa kama za kimataifa**, ambayo inamaanisha kuwa funguo ndani ya pete hiyo zinapatikana kutoka eneo lolote. Hata hivyo, inawezekana kuunda pete maalum za funguo katika **mikoa maalum**.
KMS key rings kwa **default huundwa kama global**, ambayo ina maana kuwa keys zilizo ndani ya key ring hiyo zinapatikana kutoka mkoa wowote. Hata hivyo, inawezekana kuunda key rings maalum katika **specific regions**.
### Kiwango cha Ulinzi wa Funguo
### Key Protection Level
- **Funguo za programu**: Funguo za programu zina **undwa na kusimamiwa na KMS kabisa katika programu**. Funguo hizi **hazilindwi na moduli yoyote ya usalama wa vifaa (HSM)** na zinaweza kutumika kwa **majaribio na maendeleo**. Funguo za programu **hazipendekezwi kwa matumizi ya uzalishaji** kwa sababu zinatoa usalama wa chini na zinaweza kushambuliwa.
- **Funguo za wingu**: Funguo za wingu zina **undwa na kusimamiwa na KMS** katika wingu kwa kutumia miundombinu inayopatikana kwa urahisi na ya kuaminika. Funguo hizi **zinalindwa na HSMs**, lakini HSMs hazijitolea kwa mteja maalum. Funguo za wingu zinafaa kwa matumizi mengi ya uzalishaji.
- **Funguo za nje**: Funguo za nje zina **undwa na kusimamiwa nje ya KMS**, na zinaingizwa katika KMS kwa matumizi katika shughuli za kificho. Funguo za nje **zinaweza kuhifadhiwa katika moduli ya usalama wa vifaa (HSM) au maktaba ya programu, kulingana na mapendeleo ya mteja**.
- **Software keys**: Software keys zinaundwa na kusimamiwa na KMS kabisa kwa software. Keys hizi **hazitingwi na hardware security module (HSM)** na zinaweza kutumika kwa madhumuni ya majaribio na maendeleo. Software keys **hazipendekezwi kwa matumizi ya production** kwa sababu zinatoa usalama mdogo na zinaweza kushambuliwa.
- **Cloud-hosted keys**: Cloud-hosted keys zinaundwa na kusimamiwa na KMS katika cloud kwa kutumia miundombinu yenye high availability na reliabilty. Keys hizi zinalindwa na HSMs, lakini HSMs hazijatengwa kwa mteja fulani. Cloud-hosted keys zinafaa kwa matumizi mengi ya production.
- **External keys**: External keys zinaundwa na kusimamiwa nje ya KMS, na huingizwa ndani ya KMS kwa matumizi ya shughuli za cryptography. External keys zinaweza kuhifadhiwa katika hardware security module (HSM) au maktaba ya software, kulingana na mapendeleo ya mteja.
### Malengo ya Funguo
### Key Purposes
- **Kuandika/kufungua kwa kutumia funguo sawa**: Inatumika ku **andika na kufungua data kwa kutumia funguo moja kwa shughuli zote mbili**. Funguo sawa ni za haraka na zenye ufanisi kwa kuandika na kufungua kiasi kikubwa cha data.
- **Imepokelewa**: [cryptoKeys.encrypt](https://cloud.google.com/kms/docs/reference/rest/v1/projects.locations.keyRings.cryptoKeys/encrypt), [cryptoKeys.decrypt](https://cloud.google.com/kms/docs/reference/rest/v1/projects.locations.keyRings.cryptoKeys/decrypt)
- **Saini isiyo sawa**: Inatumika kwa mawasiliano salama kati ya pande mbili bila kushiriki funguo. Funguo zisizo sawa zinakuja katika jozi, zinajumuisha **funguo ya umma na funguo ya faragha**. Funguo ya umma inashirikiwa na wengine, wakati funguo ya faragha inahifadhiwa kwa siri.
- **Imepokelewa:** [cryptoKeyVersions.asymmetricSign](https://cloud.google.com/kms/docs/reference/rest/v1/projects.locations.keyRings.cryptoKeys.cryptoKeyVersions/asymmetricSign), [cryptoKeyVersions.getPublicKey](https://cloud.google.com/kms/docs/reference/rest/v1/projects.locations.keyRings.cryptoKeys.cryptoKeyVersions/getPublicKey)
- **Kufungua isiyo sawa**: Inatumika kuthibitisha uhalali wa ujumbe au data. Sahihi ya dijitali inaundwa kwa kutumia funguo ya faragha na inaweza kuthibitishwa kwa kutumia funguo ya umma inayolingana.
- **Imepokelewa:** [cryptoKeyVersions.asymmetricDecrypt](https://cloud.google.com/kms/docs/reference/rest/v1/projects.locations.keyRings.cryptoKeys.cryptoKeyVersions/asymmetricDecrypt), [cryptoKeyVersions.getPublicKey](https://cloud.google.com/kms/docs/reference/rest/v1/projects.locations.keyRings.cryptoKeys.cryptoKeyVersions/getPublicKey)
- **Saini ya MAC**: Inatumika kuhakikisha **uaminifu na uhalali wa data kwa kuunda msimbo wa uthibitishaji wa ujumbe (MAC) kwa kutumia funguo ya siri**. HMAC inatumika mara nyingi kwa uthibitishaji wa ujumbe katika itifaki za mtandao na programu za programu.
- **Imepokelewa:** [cryptoKeyVersions.macSign](https://cloud.google.com/kms/docs/reference/rest/v1/projects.locations.keyRings.cryptoKeys.cryptoKeyVersions/macSign), [cryptoKeyVersions.macVerify](https://cloud.google.com/kms/docs/reference/rest/v1/projects.locations.keyRings.cryptoKeys.cryptoKeyVersions/macVerify)
- **Symmetric encryption/decryption**: Inatumika **kuficha na kufungua (encrypt na decrypt) data kwa kutumia key moja kwa shughuli zote mbili**. Symmetric keys ni za haraka na zenye ufanisi kwa kusimba na kusimba/sanua kiasi kikubwa cha data.
- **Inayounga mkono:** [cryptoKeys.encrypt](https://cloud.google.com/kms/docs/reference/rest/v1/projects.locations.keyRings.cryptoKeys/encrypt), [cryptoKeys.decrypt](https://cloud.google.com/kms/docs/reference/rest/v1/projects.locations.keyRings.cryptoKeys/decrypt)
- **Asymmetric Signing**: Inatumika kwa mawasiliano salama kati ya pande mbili bila kushirikisha key. Asymmetric keys huja kwa jozi, zikiwa na **public key na private key**. Public key inashirikiwa kwa wengine, wakati private key inabaki siri.
- **Inayounga mkono:** [cryptoKeyVersions.asymmetricSign](https://cloud.google.com/kms/docs/reference/rest/v1/projects.locations.keyRings.cryptoKeys.cryptoKeyVersions/asymmetricSign), [cryptoKeyVersions.getPublicKey](https://cloud.google.com/kms/docs/reference/rest/v1/projects.locations.keyRings.cryptoKeys.cryptoKeyVersions/getPublicKey)
- **Asymmetric Decryption**: Inatumika kuthibitisha uhalisi wa ujumbe au data. Sahihi ya kidigitali (digital signature) inaundwa kwa private key na inaweza kuthibitishwa kwa public key inayolingana.
- **Inayounga mkono:** [cryptoKeyVersions.asymmetricDecrypt](https://cloud.google.com/kms/docs/reference/rest/v1/projects.locations.keyRings.cryptoKeys.cryptoKeyVersions/asymmetricDecrypt), [cryptoKeyVersions.getPublicKey](https://cloud.google.com/kms/docs/reference/rest/v1/projects.locations.keyRings.cryptoKeys.cryptoKeyVersions/getPublicKey)
- **MAC Signing**: Inatumika kuhakikisha **integrity na authenticity ya data kwa kuunda message authentication code (MAC) kwa kutumia secret key**. HMAC hutumika sana kwa uthibitishaji wa ujumbe kwenye protocol za mtandao na programu za software.
- **Inayounga mkono:** [cryptoKeyVersions.macSign](https://cloud.google.com/kms/docs/reference/rest/v1/projects.locations.keyRings.cryptoKeys.cryptoKeyVersions/macSign), [cryptoKeyVersions.macVerify](https://cloud.google.com/kms/docs/reference/rest/v1/projects.locations.keyRings.cryptoKeys.cryptoKeyVersions/macVerify)
### Kipindi cha Mzunguko & Kipindi kilichopangwa kwa uharibifu
### Rotation Period & Programmed for destruction period
Kwa **default**, kila **siku 90** lakini inaweza **kubadilishwa kwa urahisi** na **kikamilifu**.
Kwa **default**, kila **90 days** lakini inaweza kubadilishwa kwa urahisi na kabisa kulingana na mahitaji.
Kipindi cha "Kimepangwa kwa uharibifu" ni **wakati tangu mtumiaji aombe kufuta funguo** na hadi funguo hiyo **ifutwe**. Haliwezi kubadilishwa baada ya funguo kuundwa (default siku 1).
"Kipindi cha Programmed for destruction" ni muda **tangu mtumiaji akuombe kufuta key** hadi key itakapotoweka kabisa. Haiwezi kubadilishwa baada ya key kuundwa (default ni siku 1).
### Toleo Kuu
### Primary Version
Kila funguo ya KMS inaweza kuwa na matoleo kadhaa, moja yao lazima iwe **ya default**, hii itakuwa ile inayotumika wakati **toleo halijabainishwa wakati wa kuingiliana na funguo za KMS**.
Kila KMS key inaweza kuwa na toleo kadhaa; moja yao lazima iwe toleo la **default**, ambalo ndio litatumika wakati toleo halitatajwa unapotumia KMS key.
### Uhesabuji
### CMEK permission model
Kuwa na **ruhusa ya kuorodhesha funguo** hii ndiyo njia unavyoweza kuzipata:
Wakati vitu katika Cloud Storage vimesimbwa kwa CMEK, wito za decrypt/encrypt kwa KMS zinafanywa na project's **Cloud Storage service agent whose email is service-${BUCKET_PROJECT_NUMBER}@gs-project-accounts.iam.gserviceaccount.com)**, sio moja kwa moja na mtumiaji anayesoma kitu hicho.
Hii ina maana kwamba kusoma kitu kilichosimbwa kwa CMEK:
- Cloud storage service agent wa project lazima awe na ruhusa za KMS kuhusu KMS key iliyotumika (kawaida `roles/cloudkms.cryptoKeyEncrypterDecrypter`).
- Mtumiaji anahitaji tu ruhusa za kusoma object (kwa mfano `storage.objects.get`). Hajatakiwa ruhusa juu ya KMS key.
Hii ina maana kwamba kudhibiti ufikiaji wa data iliyosimbwa kwa KMS key inahitaji kuongeza/kutoa ruhusa za KMS kwa cloud storage service agent wa project.
Kumbuka kwamba kuwepo kwa binding kwenye level ya project kama `roles/cloudkms.cryptoKeyEncrypterDecrypter` kwa Storage service agent bado kutawezesha decrypt kwa keys ndani ya project ileile.
### Enumeration
Kuwa na **permissions to list the keys** hivi ndivyo unavyoweza kuzipata:
```bash
# List the global keyrings available
gcloud kms keyrings list --location global
@@ -61,13 +74,13 @@ gcloud kms decrypt --ciphertext-file=[INFILE] \
--keyring [KEYRING] \
--location global
```
### Kuinua Mamlaka
### Privilege Escalation
{{#ref}}
../gcp-privilege-escalation/gcp-kms-privesc.md
{{#endref}}
### Baada ya Kutekeleza
### Post Exploitation
{{#ref}}
../gcp-post-exploitation/gcp-kms-post-exploitation.md