diff --git a/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-kms-post-exploitation.md b/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-kms-post-exploitation.md index f99f7f3b4..a13c968e4 100644 --- a/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-kms-post-exploitation.md +++ b/src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp-kms-post-exploitation.md @@ -1,4 +1,4 @@ -# GCP - KMS Post-eksploitasie +# GCP - KMS Post Exploitation {{#include ../../../banners/hacktricks-training.md}} @@ -12,7 +12,7 @@ Vind basiese inligting oor KMS in: ### `cloudkms.cryptoKeyVersions.destroy` -'n Aanvaller met hierdie toestemming kan 'n KMS-weergawe vernietig. Om dit te doen, moet jy eers die sleutel deaktiveer en dan vernietig: +'n Aanvaller met hierdie toestemming kan 'n KMS-weergawe vernietig. Om dit te doen moet jy eers die sleutel deaktiveer en daarna vernietig:
@@ -65,24 +65,38 @@ destroy_key_version(project_id, location_id, key_ring_id, key_id, key_version) ### KMS Ransomware -In AWS is dit moontlik om heeltemal **steal a KMS key** deur die KMS resource policy te wysig en slegs die aanvaller se rekening toe te laat om die sleutel te gebruik. Aangesien hierdie resource policies nie in GCP bestaan nie, is dit nie moontlik nie. +In AWS is dit moontlik om heeltemal **steel 'n KMS-sleutel** deur die KMS hulpbronbeleid te wysig en slegs die aanvaller se rekening toe te laat om die sleutel te gebruik. Aangesien hierdie hulpbronbeleide nie in GCP bestaan nie, is dit nie moontlik nie. -Egter, daar is 'n ander manier om 'n globale KMS Ransomware uit te voer, wat die volgende stappe behels: +Daar is egter 'n ander manier om 'n globale KMS Ransomware uit te voer, wat die volgende stappe behels: -- Skep 'n nuwe **version of the key with a key material** wat deur die aanvaller ingevoer is +- Skep 'n nuwe **weergawe van die sleutel met 'n sleutelmateriaal** wat deur die aanvaller ingevoer is ```bash gcloud kms import-jobs create [IMPORT_JOB] --location [LOCATION] --keyring [KEY_RING] --import-method [IMPORT_METHOD] --protection-level [PROTECTION_LEVEL] --target-key [KEY] ``` -- Stel dit as **default version** (vir toekomstige data wat encrypted sal word) -- **Re-encrypt older data** wat met die vorige weergawe encrypted is, met die nuwe een. -- **Delete the KMS key** -- Nou sal slegs die attacker, wat die oorspronklike sleutelmateriaal het, in staat wees om die encrypted data te decrypt +- Stel dit as die **standaardweergawe** (vir toekomstige data wat geïnkripteer sal word) +- **Her-enkripteer ouer data** wat met die vorige weergawe geïnkripteer is met die nuwe een. +- **Verwyder die KMS sleutel** +- Nou kan slegs die attacker, wat die oorspronklike sleutelmateriaal het, die geïnkripteerde data kan ontsleutel -#### Hier is die stappe om 'n nuwe weergawe te import en die ouer data te deaktiveer/verwyder: +#### Cloud Storage + CMEK machtigingsmodel + +Wanneer objekte in Cloud Storage met CMEK geïnkripteer is, word die decrypt/encrypt-oproepe na KMS uitgevoer deur die projek se **Cloud Storage service agent wat se e-pos is service-${BUCKET_PROJECT_NUMBER}@gs-project-accounts.iam.gserviceaccount.com)**, nie direk deur die eindgebruiker wat die objek lees nie. + +Dit beteken dat om iets wat deur 'n CMEK geïnkripteer is te lees: + +- Die projek se cloud storage service agent moet KMS-permissies hê oor die gebruikte KMS-sleutel (tipies `roles/cloudkms.cryptoKeyEncrypterDecrypter`). +- Die gebruiker het slegs objek-leespermissies nodig (byvoorbeeld `storage.objects.get`). Hy benodig nie permissies oor die KMS-sleutel nie. + +Dit beteken dat om beheer oor toegang tot geïnkripteerde data met die KMS-sleutel te hê, dit nodig is om KMS-permissies by te voeg/verwyder vir die projek se cloud storage service agent. + +Neem kennis dat 'n projekvlak binding soos `roles/cloudkms.cryptoKeyEncrypterDecrypter` vir die Storage service agent steeds ontsleuteling met die sleutels in dieselfde projek sal toelaat. + + +#### Hier is die stappe om 'n nuwe weergawe te importeer en die ouer data te deaktiveer/verwyder:
-Import new key version and delete old version +Importeer nuwe sleutelweergawe en verwyder ou weergawe ```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 \
-Enkripteer data met simmetriese sleutel (Python) +Enkripteer data met 'n simmetriese sleutel (Python) ```python from google.cloud import kms import base64 @@ -203,7 +217,7 @@ print('Ciphertext:', ciphertext)
-Onderteken boodskap met 'n asimmetriese sleutel (Python) +Teken boodskap met asymmetriese sleutel (Python) ```python import hashlib from google.cloud import kms @@ -271,7 +285,7 @@ verified = verify_asymmetric_signature(project_id, location_id, key_ring_id, key print('Verified:', verified) ``` ### `cloudkms.cryptoKeyVersions.restore` -Die `cloudkms.cryptoKeyVersions.restore` toestemming laat 'n identiteit toe om 'n sleutelweergawe wat voorheen in Cloud KMS vir vernietiging geskeduleer is of gedeaktiveer was, te herstel en dit na 'n aktiewe en bruikbare toestand terug te bring. +Die `cloudkms.cryptoKeyVersions.restore` toestemming laat 'n identiteit toe om 'n sleutelweergawe te herstel wat voorheen geskeduleer was vir vernietiging of gedeaktiveer is in Cloud KMS, en dit na 'n aktiewe en bruikbare toestand terug te bring. ```bash gcloud kms keys versions restore \ --key= \ @@ -280,7 +294,7 @@ gcloud kms keys versions restore \ --project= ``` ### `cloudkms.cryptoKeyVersions.update` -Die `cloudkms.cryptoKeyVersions.update` toestemming laat 'n identiteit toe om die eienskappe of die toestand van 'n spesifieke sleutelweergawe in Cloud KMS te wysig, byvoorbeeld deur dit te aktiveer of te deaktiveer. +Die `cloudkms.cryptoKeyVersions.update`-toestemming laat 'n identiteit toe om eienskappe of die toestand van 'n spesifieke sleutelweergawe in Cloud KMS te wysig, byvoorbeeld deur dit in of uit te skakel. ```bash # Disable key gcloud kms keys versions disable \ diff --git a/src/pentesting-cloud/gcp-security/gcp-services/gcp-kms-enum.md b/src/pentesting-cloud/gcp-security/gcp-services/gcp-kms-enum.md index 2103438fa..a076c542d 100644 --- a/src/pentesting-cloud/gcp-security/gcp-services/gcp-kms-enum.md +++ b/src/pentesting-cloud/gcp-security/gcp-services/gcp-kms-enum.md @@ -4,40 +4,53 @@ ## KMS -Die [**Cloud Key Management Service**](https://cloud.google.com/kms/docs/) dien as 'n veilige berging vir **koderingssleutels**, wat noodsaaklik is vir operasies soos **kodering en dekodering van sensitiewe data**. Hierdie sleutels is georganiseer binne sleutelring, wat gestructureerde bestuur moontlik maak. Verder kan toegangbeheer noukeurig gekonfigureer word, hetsy op die individuele sleutelvlak of vir die hele sleutelring, wat verseker dat toestemmings presies ooreenstem met sekuriteitsvereistes. +The [**Cloud Key Management Service**](https://cloud.google.com/kms/docs/) dien as 'n veilige stoorplek vir **kriptografiese sleutels**, wat noodsaaklik is vir bedrywighede soos **die enkripteer en ontsleutel van sensitiewe data**. Hierdie sleutels is georganiseer binne key rings, wat gestruktureerde bestuur moontlik maak. Verder kan toegangsbeheer noukeurig gekonfigureer word, hetsy op individuele sleutelvlak of vir die hele key ring, wat verseker dat toestemmings presies ooreenstem met sekuriteitsvereistes. -KMS-sleutelring word **standaard as globaal** geskep, wat beteken dat die sleutels binne daardie sleutelring vanaf enige streek toeganklik is. Dit is egter moontlik om spesifieke sleutelring in **spesifieke streke** te skep. +KMS key rings word per **verstek as global geskep**, wat beteken dat die sleutels binne daardie key ring vanaf enige streek toeganklik is. Dit is egter moontlik om spesifieke key rings in **spesifieke streke** te skep. -### Sleutelbeskermingsvlak +### Key Protection Level -- **Sagteware sleutels**: Sagteware sleutels word **heeltemal in sagteware deur KMS geskep en bestuur**. Hierdie sleutels is **nie deur enige hardeware sekuriteitsmodule (HSM) beskerm** nie en kan vir **toetsing en ontwikkelingsdoeleindes** gebruik word. Sagteware sleutels word **nie aanbeveel vir produksie** gebruik nie omdat hulle lae sekuriteit bied en kwesbaar is vir aanvalle. -- **Cloud-gehoste sleutels**: Cloud-gehoste sleutels word **deur KMS in die wolk geskep en bestuur** met 'n hoogs beskikbare en betroubare infrastruktuur. Hierdie sleutels is **deur HSM's beskerm**, maar die HSM's is **nie aan 'n spesifieke klant toegewy** nie. Cloud-gehoste sleutels is geskik vir die meeste produksie-gevalle. -- **Eksterne sleutels**: Eksterne sleutels word **buiten KMS geskep en bestuur**, en word in KMS ingevoer vir gebruik in koderingsoperasies. Eksterne sleutels **kan in 'n hardeware sekuriteitsmodule (HSM) of 'n sagtewarebiblioteek gestoor word, afhangende van die klant se voorkeur**. +- **Software keys**: Software keys word **heeltemal deur KMS in sagteware geskep en bestuur**. Hierdie sleutels word **nie deur 'n hardware security module (HSM) beskerm nie** en kan gebruik word vir **toetsing en ontwikkelingsdoeleindes**. Software keys word **nie aanbeveel vir produksie** gebruik nie omdat hulle lae sekuriteit bied en vatbaar is vir aanvalle. +- **Cloud-hosted keys**: Cloud-hosted keys word **deur KMS in die wolk geskep en bestuur** met 'n hoog-beskikbare en betroubare infrastruktuur. Hierdie sleutels word **deur HSMs beskerm**, maar die HSMs is **nie aan 'n spesifieke kliënt toegewys nie**. Cloud-hosted keys is geskik vir die meeste produksiegevalle. +- **External keys**: External keys word **buite KMS geskep en bestuur**, en word in KMS ingevoer vir gebruik in kriptografiese operasies. External keys **kan in 'n hardware security module (HSM) of 'n sagtewaresentrum gestoor word, afhangend van die kliënt se voorkeur**. -### Sleuteldoeleindes +### Key Purposes -- **Simmetriese kodering/dekodering**: Gebruik om **data te kodering en dekodering met 'n enkele sleutel vir beide operasies**. Simmetriese sleutels is vinnig en doeltreffend vir die kodering en dekodering van groot hoeveelhede data. -- **Gesteun**: [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) -- **Asimmetriese Handtekening**: Gebruik vir veilige kommunikasie tussen twee partye sonder om die sleutel te deel. Asimmetriese sleutels kom in 'n paar, wat bestaan uit 'n **publieke sleutel en 'n private sleutel**. Die publieke sleutel word met ander gedeel, terwyl die private sleutel geheim gehou word. -- **Gesteun:** [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) -- **Asimmetriese Dekodering**: Gebruik om die egtheid van 'n boodskap of data te verifieer. 'n Digitale handtekening word geskep met 'n private sleutel en kan verifieer word met die ooreenstemmende publieke sleutel. -- **Gesteun:** [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 Handtekening**: Gebruik om **data-integriteit en egtheid te verseker deur 'n boodskap-authentikasiekode (MAC) te skep met 'n geheime sleutel**. HMAC word algemeen gebruik vir boodskap-authentikasie in netwerkprotokolle en sagtewaretoepassings. -- **Gesteun:** [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**: Word gebruik om **data te enkripteer en ontsleutel met 'n enkele sleutel vir albei operasies**. Symmetriese sleutels is vinnig en doeltreffend vir die enkriptering en ontsleuteling van groot volumes data. +- **Supported**: [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**: Word gebruik vir veilige kommunikasie tussen twee partye sonder om die sleutel te deel. Asimmetriese sleutels kom in 'n paar, bestaande uit 'n **publieke sleutel en 'n private sleutel**. Die publieke sleutel word gedeel, terwyl die private sleutel geheim gehou word. +- **Supported:** [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**: Word gebruik om die egtheid van 'n boodskap of data te verifieer. 'n Digitale handtekening word geskep met 'n private sleutel en kan geverifieer word met die ooreenstemmende publieke sleutel. +- **Supported:** [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**: Word gebruik om **data-integriteit en egtheid te verseker deur 'n message authentication code (MAC) te skep met 'n geheime sleutel**. HMAC word algemeen gebruik vir boodskapverifikasie in netwerkprotokolle en sagtewaretoepassings. +- **Supported:** [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) -### Rotasieperiode & Geprogrammeer vir vernietigingsperiode +### Rotation Period & Programmed for destruction period -Deur **standaard**, elke **90 dae** maar dit kan **maklik** en **volledig aangepas** word. +By **verstek** is dit elke **90 dae**, maar dit kan **maklik** en **heeltemal gepersonaliseer** word. -Die "Geprogrammeer vir vernietiging" periode is die **tyd sedert die gebruiker vra om die sleutel te verwyder** en totdat die sleutel **verwyder** is. Dit kan nie verander word nadat die sleutel geskep is nie (standaard 1 dag). +Die "Programmed for destruction" periode is die **tyd vanaf wanneer die gebruiker vir die verwydering van die sleutel versoek** totdat die sleutel **verwyder is**. Dit kan nie verander word nadat die sleutel geskep is nie (verstek 1 dag). -### Primêre Weergawe +### Primary Version -Elke KMS-sleutel kan verskeie weergawes hê, een van hulle moet die **standaard** een wees, dit sal die een wees wat gebruik word wanneer 'n **weergave nie gespesifiseer word wanneer met die KMS-sleutel geinteraksie word**. +Elke KMS-sleutel kan verskeie weergawes hê; een daarvan moet die **verstek** wees. Dit is die weergawe wat gebruik word wanneer 'n **weergawe nie gespesifiseer word tydens interaksie met die KMS-sleutel nie**. -### Enumerasie +### CMEK permission model -As jy **toestemmings het om die sleutels te lys**, is dit hoe jy toegang tot hulle kan kry: +Wanneer voorwerpe in Cloud Storage met CMEK geënkripteer is, word die decrypt/encrypt-oproepe na KMS deur die projek se **Cloud Storage service agent (e-pos service-${BUCKET_PROJECT_NUMBER}@gs-project-accounts.iam.gserviceaccount.com)** gedoen, nie direk deur die eindgebruiker wat die voorwerp lees nie. + +Dit beteken dat om iets wat deur 'n CMEK geënkripteer is te lees: + +- Die projek se Cloud Storage service agent moet KMS-magtigings hê oor die gebruikte KMS-sleutel (tipies `roles/cloudkms.cryptoKeyEncrypterDecrypter`). +- Die gebruiker benodig slegs voorwerp-lees toestemmings (byvoorbeeld `storage.objects.get`). Hy benodig nie magtigings oor die KMS-sleutel nie. + +Dit beteken dat om beheer oor toegang tot met die KMS-sleutel geënkripteerde data te hê, dit nodig is om KMS-magtigings by te voeg/verwyder vir die projek se Cloud Storage service agent. + +Let ook daarop dat 'n projekvlak binding soos `roles/cloudkms.cryptoKeyEncrypterDecrypter` vir die Storage service agent steeds ontgrendeling met sleutels in dieselfde projek sal toelaat. + +### Enumeration + +Indien jy **toestemmings het om die sleutels te lys**, is dit hoe jy toegang tot hulle kan kry: ```bash # List the global keyrings available gcloud kms keyrings list --location global @@ -73,7 +86,7 @@ gcloud kms decrypt --ciphertext-file=[INFILE] \ ../gcp-post-exploitation/gcp-kms-post-exploitation.md {{#endref}} -## References +## Verwysings - [https://about.gitlab.com/blog/2020/02/12/plundering-gcp-escalating-privileges-in-google-cloud-platform/#reviewing-stackdriver-logging](https://about.gitlab.com/blog/2020/02/12/plundering-gcp-escalating-privileges-in-google-cloud-platform/#reviewing-stackdriver-logging)