mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2026-03-12 21:22:57 -07:00
Translated ['', 'src/pentesting-cloud/gcp-security/gcp-post-exploitation
This commit is contained in:
@@ -4,7 +4,7 @@
|
||||
|
||||
## KMS
|
||||
|
||||
Pronađite osnovne informacije o KMS u:
|
||||
Osnovne informacije o KMS pronađite u:
|
||||
|
||||
{{#ref}}
|
||||
../gcp-services/gcp-kms-enum.md
|
||||
@@ -12,11 +12,11 @@ Pronađite osnovne informacije o KMS u:
|
||||
|
||||
### `cloudkms.cryptoKeyVersions.destroy`
|
||||
|
||||
Napadač sa ovom dozvolom može uništiti verziju KMS-a. Da biste to uradili, najpre morate onemogućiti ključ, a zatim ga uništiti:
|
||||
Napadač sa ovom dozvolom može uništiti verziju KMS-a. Da biste to uradili, prvo morate onemogućiti ključ, a zatim ga uništiti:
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Onemogućite i uništite verziju ključa (Python)</summary>
|
||||
<summary>Onemogući i uništi verziju ključa (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
|
||||
|
||||
U AWS-u je moguće potpuno **steal a KMS key** promenom KMS resource policy i tako da samo nalog napadača može da koristi ključ. Pošto takve resource policies ne postoje u GCP-u, ovo nije moguće.
|
||||
U AWS-u je moguće potpuno **steal a KMS key** menjajući KMS resource policy i dozvoljavajući da samo attacker's account koristi ključ. Pošto takve resource policies ne postoje u GCP, ovo nije moguće.
|
||||
|
||||
Međutim, postoji drugi način da se izvede global KMS Ransomware, koji bi uključivao sledeće korake:
|
||||
Međutim, postoji još jedan način da se izvede globalni KMS Ransomware, koji bi uključivao sledeće korake:
|
||||
|
||||
- Napraviti novu **verziju ključa sa ključnim materijalom** koju uveze napadač
|
||||
- Kreirati novu **version of the key with a key material** koju je importovao attacker
|
||||
```bash
|
||||
gcloud kms import-jobs create [IMPORT_JOB] --location [LOCATION] --keyring [KEY_RING] --import-method [IMPORT_METHOD] --protection-level [PROTECTION_LEVEL] --target-key [KEY]
|
||||
```
|
||||
- Postavite je kao **podrazumevanu verziju** (za buduće podatke koji će biti šifrovani)
|
||||
- **Ponovo šifrujte starije podatke** koji su bili šifrovani prethodnom verzijom koristeći novu.
|
||||
- **Obrišite KMS ključ**
|
||||
- Sada samo napadač koji poseduje originalni ključni materijal može da dešifruje šifrovane podatke
|
||||
- Set it as **podrazumevana verzija** (za buduće podatke koji će biti enkriptovani)
|
||||
- **Ponovno enkriptujte starije podatke** enkriptovane prethodnom verzijom koristeći novu.
|
||||
- **Izbrišite KMS ključ**
|
||||
- Sada samo napadač, koji poseduje originalni ključni materijal, može biti u mogućnosti da dekriptuje enkriptovane podatke
|
||||
|
||||
#### Evo koraka za uvoz nove verzije i onemogućavanje/brisanje starijih podataka:
|
||||
#### Cloud Storage + CMEK permission model
|
||||
|
||||
Kada su objekti u Cloud Storage enkriptovani pomoću CMEK, pozivi za dekriptovanje/enkriptovanje ka KMS-u obavlja servisni agent Cloud Storage-a projekta čija je email adresa service-${BUCKET_PROJECT_NUMBER}@gs-project-accounts.iam.gserviceaccount.com), a ne direktno krajnji korisnik koji čita objekat.
|
||||
|
||||
To znači da, da biste pročitali nešto enkriptovano CMEK-om:
|
||||
|
||||
- Servisni agent Cloud Storage-a projekta mora imati KMS dozvole nad korišćenim KMS ključem (obično `roles/cloudkms.cryptoKeyEncrypterDecrypter`).
|
||||
- Korisniku su potrebne samo dozvole za čitanje objekta (na primer `storage.objects.get`). Ne treba mu dozvole nad KMS ključem.
|
||||
|
||||
To znači da, da biste kontrolisali pristup enkriptovanim podacima pomoću KMS ključa, potrebno je dodati/ukloniti KMS dozvole servisnom agentu Cloud Storage-a projekta.
|
||||
|
||||
Imajte na umu da projektno vezivanje kao što je `roles/cloudkms.cryptoKeyEncrypterDecrypter` za Storage servisnog agenta i dalje omogućava dekriptovanje ključeva u istom projektu.
|
||||
|
||||
|
||||
#### Here are the steps to import a new version and disable/delete the older data:
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Uvezite novu verziju ključa i obrišite staru verziju</summary>
|
||||
<summary>Uvezi novu verziju ključa i izbriši staru verziju</summary>
|
||||
```bash
|
||||
# Encrypt something with the original key
|
||||
echo "This is a sample text to encrypt" > /tmp/my-plaintext-file.txt
|
||||
@@ -203,7 +217,7 @@ print('Ciphertext:', ciphertext)
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Potpiši poruku asimetričnim ključem (Python)</summary>
|
||||
<summary>Potpisivanje poruke asimetričnim ključem (Python)</summary>
|
||||
```python
|
||||
import hashlib
|
||||
from google.cloud import kms
|
||||
@@ -243,7 +257,7 @@ print('Signature:', signature)
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Verifikuj potpis asimetričnim ključem (Python)</summary>
|
||||
<summary>Verifikujte potpis pomoću asimetričnog ključa (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`
|
||||
Dozvola `cloudkms.cryptoKeyVersions.restore` omogućava identitetu da vrati verziju ključa koja je prethodno bila zakazana za uništenje ili onemogućena u Cloud KMS, vraćajući je u aktivno i upotrebljivo stanje.
|
||||
Dozvola `cloudkms.cryptoKeyVersions.restore` omogućava identitetu da obnovi verziju ključa koja je prethodno bila zakazana za uništavanje ili onemogućena u Cloud KMS, vraćajući je u aktivno i upotrebljivo stanje.
|
||||
```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`
|
||||
Dozvola `cloudkms.cryptoKeyVersions.update` omogućava identitetu da izmeni atribute ili stanje određene verzije ključa u Cloud KMS, na primer omogućavanjem ili onemogućavanjem iste.
|
||||
Dozvola `cloudkms.cryptoKeyVersions.update` omogućava identitetu da izmeni atribute ili stanje određene verzije ključa u Cloud KMS, na primer tako što će je omogućiti ili onemogućiti.
|
||||
```bash
|
||||
# Disable key
|
||||
gcloud kms keys versions disable <VERSION_ID> \
|
||||
|
||||
@@ -4,40 +4,53 @@
|
||||
|
||||
## KMS
|
||||
|
||||
[**Cloud Key Management Service**](https://cloud.google.com/kms/docs/) služi kao sigurno skladište za **kriptografske ključeve**, koji su neophodni za operacije poput **šifrovanja i dešifrovanja osetljivih podataka**. Ovi ključevi su organizovani unutar ključnih prstenova, što omogućava strukturirano upravljanje. Pored toga, kontrola pristupa može se pažljivo konfigurisati, bilo na nivou pojedinačnog ključa ili za ceo ključni prsten, osiguravajući da su dozvole precizno usklađene sa bezbednosnim zahtevima.
|
||||
The [**Cloud Key Management Service**](https://cloud.google.com/kms/docs/) služi kao sigurno skladište za **kriptografske ključeve**, koji su neophodni za operacije kao što su **šifrovanje i dešifrovanje osetljivih podataka**. Ti ključevi su organizovani unutar key rings, što omogućava strukturisano upravljanje. Pored toga, kontrola pristupa može se precizno konfigurisati, bilo na nivou pojedinačnog ključa ili za ceo key ring, čime se obezbeđuje da su dozvole tačno usklađene sa bezbednosnim zahtevima.
|
||||
|
||||
KMS ključni prstenovi se po **defaultu kreiraju kao globalni**, što znači da su ključevi unutar tog ključnog prstena dostupni iz bilo koje regije. Međutim, moguće je kreirati specifične ključne prstenove u **specifičnim regijama**.
|
||||
KMS key rings su po **defaultu kreirani kao globalni**, što znači da su ključevi unutar tog key ring-a dostupni iz bilo koje regije. Međutim, moguće je kreirati specifične key rings u **određenim regionima**.
|
||||
|
||||
### Nivo zaštite ključeva
|
||||
### Key Protection Level
|
||||
|
||||
- **Softverski ključevi**: Softverski ključevi se **kreiraju i upravljaju isključivo putem KMS-a**. Ovi ključevi **nisu zaštićeni nijednim hardverskim bezbednosnim modulom (HSM)** i mogu se koristiti za **testiranje i razvoj**. Softverski ključevi se **ne preporučuju za proizvodnu** upotrebu jer pružaju nisku bezbednost i podložni su napadima.
|
||||
- **Ključevi u oblaku**: Ključevi u oblaku se **kreiraju i upravljaju putem KMS-a** u oblaku koristeći visoko dostupnu i pouzdanu infrastrukturu. Ovi ključevi su **zaštićeni HSM-ima**, ali HSM-ovi nisu **posvećeni određenom korisniku**. Ključevi u oblaku su pogodni za većinu proizvodnih slučajeva.
|
||||
- **Eksterni ključevi**: Eksterni ključevi se **kreiraju i upravljaju van KMS-a**, i uvoze se u KMS za korišćenje u kriptografskim operacijama. Eksterni ključevi **mogu biti pohranjeni u hardverskom bezbednosnom modulu (HSM) ili softverskoj biblioteci, u zavisnosti od preferencija korisnika**.
|
||||
- **Software keys**: Software keys su **kreirane i upravljane od strane KMS potpuno softverski**. Ovi ključevi **nisu zaštićeni nijednim hardware security module (HSM)** i mogu se koristiti za testiranje i razvoj. Software keys se **ne preporučuju za produkciju** jer pružaju nisku bezbednost i podložni su napadima.
|
||||
- **Cloud-hosted keys**: Cloud-hosted keys su **kreirane i upravljane od strane KMS** u cloudu koristeći visoko dostupnu i pouzdanu infrastrukturu. Ovi ključevi su **zaštićeni HSM-ovima**, ali HSM-ovi **nisu posvećeni određenom kupcu**. Cloud-hosted keys su pogodni za većinu produkcionih scenarija.
|
||||
- **External keys**: External keys su **kreirani i upravljani izvan KMS-a**, i uvoze se u KMS radi korišćenja u kriptografskim operacijama. External keys **mogu biti skladišteni u hardverskom sigurnosnom modulu (HSM) ili softverskoj biblioteci, u zavisnosti od preferencija kupca**.
|
||||
|
||||
### Svrhe ključeva
|
||||
### Key Purposes
|
||||
|
||||
- **Simetrično šifrovanje/dešifrovanje**: Koristi se za **šifrovanje i dešifrovanje podataka koristeći jedan ključ za obe operacije**. Simetrični ključevi su brzi i efikasni za šifrovanje i dešifrovanje velikih količina podataka.
|
||||
- **Podržano**: [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)
|
||||
- **Asimetrično potpisivanje**: Koristi se za sigurnu komunikaciju između dve strane bez deljenja ključa. Asimetrični ključevi dolaze u paru, koji se sastoji od **javnog ključa i privatnog ključa**. Javni ključ se deli sa drugima, dok se privatni ključ čuva u tajnosti.
|
||||
- **Podržano:** [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)
|
||||
- **Asimetrično dešifrovanje**: Koristi se za verifikaciju autentičnosti poruke ili podataka. Digitalni potpis se kreira koristeći privatni ključ i može se verifikovati koristeći odgovarajući javni ključ.
|
||||
- **Podržano:** [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 potpisivanje**: Koristi se za osiguranje **integriteta i autentičnosti podataka kreiranjem koda za autentifikaciju poruka (MAC) koristeći tajni ključ**. HMAC se često koristi za autentifikaciju poruka u mrežnim protokolima i softverskim aplikacijama.
|
||||
- **Podržano:** [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**: Koristi se za **šifrovanje i dešifrovanje podataka koristeći isti ključ za obe operacije**. Simetrični ključevi su brzi i efikasni za šifrovanje i dešifrovanje velikih količina podataka.
|
||||
- **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**: Koristi se za sigurnu komunikaciju između dve strane bez deljenja privatnog ključa. Asimetrični ključevi dolaze u paru, koji se sastoje od **javnog ključa i privatnog ključa**. Javni ključ se deli sa drugima, dok se privatni ključ čuva u tajnosti.
|
||||
- **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**: Koristi se za verifikaciju autentičnosti poruke ili podataka. Digitalni potpis se kreira korišćenjem privatnog ključa i može se verifikovati koristeći odgovarajući javni ključ.
|
||||
- **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**: Koristi se da obezbedi **integritet i autentičnost podataka kreiranjem message authentication code (MAC) koristeći tajni ključ**. HMAC se često koristi za autentikaciju poruka u mrežnim protokolima i softverskim aplikacijama.
|
||||
- **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)
|
||||
|
||||
### Period rotacije i period programiran za uništenje
|
||||
### Rotation Period & Programmed for destruction period
|
||||
|
||||
Po **defaultu**, svaki **90 dana**, ali se može **lako** i **potpuno prilagoditi.**
|
||||
Po **defaultu**, svaka **90 dana**, ali to može biti **lako** i **potpuno prilagođeno**.
|
||||
|
||||
Period "Programiran za uništenje" je **vreme od kada korisnik zatraži brisanje ključa** do trenutka kada je ključ **obrisan**. Ne može se promeniti nakon što je ključ kreiran (default 1 dan).
|
||||
Period "Programmed for destruction" je **vreme od trenutka kada korisnik zatraži brisanje ključa** do trenutka kada je ključ **obrisan**. Ne može se promeniti nakon što je ključ kreiran (default 1 dan).
|
||||
|
||||
### Primarna verzija
|
||||
### Primary Version
|
||||
|
||||
Svaki KMS ključ može imati nekoliko verzija, jedna od njih mora biti **default** verzija, koja će se koristiti kada **verzija nije specificirana prilikom interakcije sa KMS ključem**.
|
||||
Svaki KMS ključ može imati više verzija, jedna od njih mora biti **podrazumevana** — to će biti verzija koja se koristi kada **verzija nije specificirana pri interakciji sa KMS ključem**.
|
||||
|
||||
### Enumeracija
|
||||
### CMEK permission model
|
||||
|
||||
Imajući **dozvole za listanje ključeva**, ovako možete pristupiti njima:
|
||||
Kada su objekti u Cloud Storage-u šifrovani pomoću CMEK, decrypt/encrypt pozive ka KMS vrši servisni agent Cloud Storage projekta čiji je email service-${BUCKET_PROJECT_NUMBER}@gs-project-accounts.iam.gserviceaccount.com), a ne direktno krajnji korisnik koji čita objekat.
|
||||
|
||||
To znači da da bi se nešto pročitalo šifrovano CMEK-om:
|
||||
|
||||
- Service agent Cloud Storage projekta mora imati KMS dozvole nad korišćenim KMS ključem (tipično `roles/cloudkms.cryptoKeyEncrypterDecrypter`).
|
||||
- Korisniku su potrebne samo dozvole za čitanje objekta (na primer `storage.objects.get`). On ne treba dozvole nad KMS ključem.
|
||||
|
||||
Ovo znači da, da biste kontrolisali pristup šifrovanim podacima pomoću KMS ključa, potrebno je dodavati/uklanjati KMS dozvole servisnom agentu Cloud Storage-a projekta.
|
||||
|
||||
Napomena: ukoliko postoji vezivanje na nivou projekta kao `roles/cloudkms.cryptoKeyEncrypterDecrypter` za Storage service agenta, to će i dalje omogućiti dešifrovanje sa ključevima u istom projektu.
|
||||
|
||||
### Enumeration
|
||||
|
||||
Ako imate **dozvole za listanje ključeva**, ovako im možete pristupiti:
|
||||
```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
|
||||
```
|
||||
### Eskalacija privilegija
|
||||
### Privilege Escalation
|
||||
|
||||
{{#ref}}
|
||||
../gcp-privilege-escalation/gcp-kms-privesc.md
|
||||
{{#endref}}
|
||||
|
||||
### Post Eksploatacija
|
||||
### Post Exploitation
|
||||
|
||||
{{#ref}}
|
||||
../gcp-post-exploitation/gcp-kms-post-exploitation.md
|
||||
|
||||
Reference in New Issue
Block a user