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/gcp
This commit is contained in:
@@ -5,52 +5,51 @@
|
||||
|
||||
## Temel Bilgiler
|
||||
|
||||
**Cloud Sync** temel olarak Azure'ın **AD'den Entra ID'ye kullanıcıları senkronize etme** için yeni yoludur.
|
||||
**Cloud Sync**, temel olarak Azure'un AD'deki kullanıcıları Entra ID'ye senkronize etme için getirdiği yeni yöntemdir.
|
||||
|
||||
[From the docs:](https://learn.microsoft.com/en-us/entra/identity/hybrid/cloud-sync/what-is-cloud-sync) Microsoft Entra Cloud Sync, kullanıcıların, grupların ve kişi listelerinin Microsoft Entra ID'ye senkronizasyonu için hibrit kimlik hedeflerinizi karşılamak üzere tasarlanmış Microsoft'tan yeni bir üründür. Bunu Microsoft Entra Connect uygulaması yerine Microsoft Entra cloud provisioning agent kullanarak gerçekleştirir. Ancak, Microsoft Entra Connect Sync ile birlikte de kullanılabilir.
|
||||
[Belgelere göre:](https://learn.microsoft.com/en-us/entra/identity/hybrid/cloud-sync/what-is-cloud-sync) Microsoft Entra Cloud Sync, kullanıcıların, grupların ve kişilerin Microsoft Entra ID'ye senkronizasyonu için hibrit kimlik hedeflerinizi karşılamak ve gerçekleştirmek üzere Microsoft tarafından sunulan yeni bir hizmettir. Bunu Microsoft Entra Connect uygulaması yerine Microsoft Entra cloud provisioning agent kullanarak başarır. Ancak, Microsoft Entra Connect Sync ile birlikte de kullanılabilir.
|
||||
|
||||
### Oluşturulan principal'lar
|
||||
### Principals Generated
|
||||
|
||||
Bunun çalışabilmesi için Entra ID ve on-premise dizinde bazı principal'lar oluşturulur:
|
||||
Bu işlemin çalışabilmesi için hem Entra ID'de hem de on-premise dizinde bazı principal'ler oluşturulur:
|
||||
|
||||
- In Entra ID the user `On-Premises Directory Synchronization Service Account` (`ADToAADSyncServiceAccount@carloshacktricks.onmicrosoft.com`) is created with the role **`Directory Synchronization Accounts`** (`d29b2b05-8046-44ba-8758-1e26182fcf32`).
|
||||
|
||||
> [!WARNING]
|
||||
> This role used to have a lot of privileged permissions and it could be used to [**escalate privileges even to global admin**](https://medium.com/tenable-techblog/stealthy-persistence-with-directory-synchronization-accounts-role-in-entra-id-63e56ce5871b). However, Microsoft decided to remove all the privileges of this role and assign it just a new one **`microsoft.directory/onPremisesSynchronization/standard/read`** which doesn't really allow to perform any privileged action (like modifying the password or atribbutes of a user or adding a new credential to a SP).
|
||||
|
||||
- In Entra ID also the group **`AAD DC Administrators`** is created without members or owners. This group is useful if [`Microsoft Entra Domain Services`](./az-domain-services.md) is used.
|
||||
- Entra ID'de ayrıca üyeleri veya sahipleri olmayan **`AAD DC Administrators`** grubu oluşturulur. Bu grup, [`Microsoft Entra Domain Services`](./az-domain-services.md) kullanıldığında faydalıdır.
|
||||
|
||||
- In the AD, either the Service Account **`provAgentgMSA`** is created with a SamAcountName like **`pGMSA_<id>$@domain.com`** (`Get-ADServiceAccount -Filter * | Select Name,SamAccountName`), or a custom one with [**these permissions is needed**](https://learn.microsoft.com/en-us/entra/identity/hybrid/cloud-sync/how-to-prerequisites?tabs=public-cloud#custom-gmsa-account). Usually the default one is created.
|
||||
- AD'de ya Service Account **`provAgentgMSA`** `SamAcountName` gibi bir isimle oluşturulur **`pGMSA_<id>$@domain.com`** (`Get-ADServiceAccount -Filter * | Select Name,SamAccountName`), ya da [**bu izinlere sahip**](https://learn.microsoft.com/en-us/entra/identity/hybrid/cloud-sync/how-to-prerequisites?tabs=public-cloud#custom-gmsa-account) özel bir hesap kullanılır. Genellikle varsayılan olan oluşturulur.
|
||||
|
||||
> [!WARNING]
|
||||
> Among other permissions the Service Account **`provAgentgMSA`** has DCSync permissions, allowing **anyone that compromises it to compromise the whole directory**. For more information about [DCSync check this](https://book.hacktricks.wiki/en/windows-hardening/active-directory-methodology/dcsync.html).
|
||||
> Diğer izinler arasında Service Account **`provAgentgMSA`**'nin DCSync izinleri bulunmaktadır; bu da onu ele geçiren birinin **tüm dizini ele geçirmesine** izin verir. DCSync hakkında daha fazla bilgi için [buraya bakın](https://book.hacktricks.wiki/en/windows-hardening/active-directory-methodology/dcsync.html).
|
||||
|
||||
> [!NOTE]
|
||||
> By default users of known privileged groups like Domain Admins with the attribute **`adminCount` to 1 are not synchronized** with Entra ID for security reasons. However, other users that are part of privileged groups without this attribute or that are assigned high privileges directly **can be synchronized**.
|
||||
> Varsayılan olarak, Domain Admins gibi bilinen ayrıcalıklı gruplara ait kullanıcılar ve **`adminCount`** özniteliği 1 olan kullanıcılar güvenlik nedeniyle Entra ID ile senkronize edilmez. Ancak, bu özniteliğe sahip olmayan ayrıcalıklı grupların üyeleri veya doğrudan yüksek ayrıcalık atanmış diğer kullanıcılar **senkronize edilebilir**.
|
||||
|
||||
## Parola Senkronizasyonu
|
||||
|
||||
The section is very similar to the one from:
|
||||
Bu bölüm şu bölümle çok benzer:
|
||||
|
||||
{{#ref}}
|
||||
az-connect-sync.md
|
||||
{{#endref}}
|
||||
|
||||
- **Password hash synchronization** etkinleştirilebilir; böylece kullanıcılar AD'deki parolalarıyla **Entra ID'ye giriş yapabilir**. Ayrıca AD'de bir parola değiştirildiğinde, Entra ID'de de güncellenir.
|
||||
- **Password writeback** ayrıca etkinleştirilebilir; bu, kullanıcıların Entra ID'de parolalarını değiştirmelerine ve bunun on-premise domain'de otomatik olarak senkronize edilmesine izin verir. Ancak [güncel dokümanlara](https://learn.microsoft.com/en-us/entra/identity/authentication/tutorial-enable-sspr-writeback#configure-password-writeback) göre bunun için Connect Agent kullanılması gerekir, bu yüzden daha fazla bilgi için [Az Connect Sync bölümü](./az-connect-sync.md)'ne bakın.
|
||||
- **Groups writeback**: Bu özellik, Entra ID'deki grup üyeliklerinin on-premises AD'ye geri senkronize edilmesine izin verir. Yani bir kullanıcı Entra ID'de bir gruba eklendiğinde, AD'deki karşılık gelen gruba da eklenir.
|
||||
|
||||
- **Password hash synchronization** etkinleştirilebilir; böylece kullanıcılar AD'deki parolalarını kullanarak **Entra ID'ye giriş yapabilirler**. Ayrıca, AD'de bir parola değiştirildiğinde bu değişiklik Entra ID'ye de güncellenir.
|
||||
- **Password writeback** da etkinleştirilebilir; bu, kullanıcıların Entra ID'de parolalarını değiştirmelerine ve parolanın on-premise domaine otomatik olarak senkronize edilmesine olanak tanır. Ancak mevcut dokümanlara göre (https://learn.microsoft.com/en-us/entra/identity/authentication/tutorial-enable-sspr-writeback#configure-password-writeback) bunun için Connect Agent kullanılması gerekmektedir; daha fazla bilgi için Az Connect Sync bölümüne bakın.
|
||||
- **Groups writeback**: Bu özellik, Entra ID'den gelen grup üyeliklerinin on-premises AD'ye geri senkronize edilmesine izin verir. Yani bir kullanıcı Entra ID'de bir gruba eklendiğinde, AD'deki karşılık gelen gruba da eklenir.
|
||||
|
||||
## Pivoting
|
||||
|
||||
### AD --> Entra ID
|
||||
|
||||
- Eğer AD kullanıcıları AD'den Entra ID'ye senkronize ediliyorsa, AD'den Entra ID'ye pivot yapmak basittir: sadece bir kullanıcının parolasını ele geçirmek, bir kullanıcının parolasını değiştirmek veya yeni bir kullanıcı oluşturup Entra ID dizinine senkronize olmasını beklemek (genellikle sadece birkaç dakika).
|
||||
- Eğer AD kullanıcıları AD'den Entra ID'ye senkronize ediliyorsa, AD'den Entra ID'ye pivot yapmak basittir: bir kullanıcının parolasını ele geçirin ya da değiştirin ya da yeni bir kullanıcı oluşturun ve Entra ID dizinine senkronize olmasını bekleyin (genellikle sadece birkaç dakika).
|
||||
|
||||
So you could for example
|
||||
- Service Account **`provAgentgMSA`**'yi ele geçirip DCSync saldırısı gerçekleştirebilir, bir kullanıcının parolasını kırabilir ve ardından bunu Entra ID'ye giriş yapmak için kullanabilirsiniz.
|
||||
- AD'de yeni bir kullanıcı oluşturup Entra ID'ye senkronize olmasını bekleyip ardından Entra ID'ye giriş için kullanabilirsiniz.
|
||||
- AD'de bir kullanıcının parolasını değiştirip Entra ID'ye senkronize olmasını bekleyip ardından Entra ID'ye giriş için kullanabilirsiniz.
|
||||
Örneğin:
|
||||
- **`provAgentgMSA`** hesabını ele geçirip DCSync saldırısı gerçekleştirebilir, bir kullanıcının parolasını kırıp sonra bunu Entra ID'ye giriş yapmak için kullanabilirsiniz.
|
||||
- AD'de yeni bir kullanıcı oluşturup, bunun Entra ID'ye senkronize olmasını bekleyip sonra bu kullanıcıyla Entra ID'ye giriş yapabilirsiniz.
|
||||
- AD'de bir kullanıcının parolasını değiştirebilir, bunun Entra ID'ye senkronize olmasını bekleyip sonra bu parola ile Entra ID'ye giriş yapabilirsiniz.
|
||||
|
||||
To compromise the **`provAgentgMSA`** credentials:
|
||||
```powershell
|
||||
@@ -74,7 +73,7 @@ $Passwordblob = (Get-ADServiceAccount -Identity pGMSA_<id>$ -Properties msDS-Man
|
||||
$decodedpwd = ConvertFrom-ADManagedPasswordBlob $Passwordblob
|
||||
ConvertTo-NTHash -Password $decodedpwd.SecureCurrentPassword
|
||||
```
|
||||
Now you could use the hash of the gMSA to perform a Pass-the-Hash attack against Entra ID using the `provAgentgMSA` account and maintain persistence being able to perform DCSync attacks against the AD.
|
||||
Artık gMSA'nın hash'ini kullanarak `provAgentgMSA` hesabı ile Entra ID'ye karşı Pass-the-Hash saldırısı gerçekleştirebilir ve AD'ye karşı DCSync saldırıları yapabilme yeteneğini koruyarak kalıcılık sağlayabilirsiniz.
|
||||
|
||||
For more information about how to compromise an Active Directory check:
|
||||
|
||||
@@ -83,7 +82,11 @@ https://book.hacktricks.wiki/en/windows-hardening/active-directory-methodology/i
|
||||
{{#endref}}
|
||||
|
||||
> [!NOTE]
|
||||
> Cloud Sync yapılandırmalarında örneğin özniteliklerine göre senkronize edilen kullanıcılara Azure veya Entra ID rolleri atamanın bir yolu olmadığını unutmayın. Ancak, senkronize edilen kullanıcılara otomatik olarak izin vermek için bazı **Entra ID groups from AD**'ye izin verilebilir, böylece o gruplardaki senkronize kullanıcılar da bu izinleri alır veya **dynamic groups might be used**; bu yüzden her zaman dynamic rules ve bunların kötüye kullanım yollarını kontrol edin:
|
||||
> Not: Azure veya EntraID rollerini, örneğin Cloud Sync yapılandırmalarında, eşitlenmiş kullanıcılara özniteliklerine göre vermenin herhangi bir yolu olmadığını unutmayın. Ancak eşitlenmiş kullanıcılara otomatik olarak izin vermek için bazı **Entra ID groups from AD**'e izin verilebilir; böylece o grupların içindeki eşitlenmiş kullanıcılar da bu izinleri alır veya **dynamic groups might be used**; bu yüzden her zaman dynamic kuralları ve kötüye kullanım olasılıklarını kontrol edin:
|
||||
|
||||
{{#ref}}
|
||||
../az-privilege-escalation/az-entraid-privesc/dynamic-groups.md
|
||||
{{#endref}}
|
||||
|
||||
Regarding persistence [this blog post](https://tierzerosecurity.co.nz/2024/05/21/ms-entra-connect-sync-mothods.html) suggest that it's possible to use [**dnSpy**](https://github.com/dnSpy/dnSpy) to backdoor the dll **`Microsoft.Online.Passwordsynchronisation.dll`** located in **`C:\Program Files\Microsoft Azure AD Sync\Bin`** that is used by the Cloud Sync agent to perform the password synchronization making it exfiltrate the password hashes of the users being synchronized to a remote server. The hashes are generated inside the class **`PasswordHashGenerator`** and the blog post suggest adding some code so the class looks like (note the `use System.Net` and the `WebClient` usage to exfiltrate the password hashes):
|
||||
```csharp
|
||||
@@ -121,14 +124,14 @@ RawHash = passwordHashData.RawHash
|
||||
```
|
||||
### Entra ID --> AD
|
||||
|
||||
- Eğer **Password Writeback** etkinse, Entra ID'den bazı kullanıcıların şifresini değiştirebilir ve AD ağına erişiminiz varsa bu kullanıcılarla bağlanabilirsiniz. Daha fazla bilgi için [Az Connect Sync section](./az-connect-sync.md) bölümüne bakın; password writeback bu agent kullanılarak yapılandırılır.
|
||||
- Eğer **Password Writeback** etkinse, Entra ID'deki bazı kullanıcıların parolalarını değiştirebilir ve AD ağına erişiminiz varsa bu hesaplarla bağlanabilirsiniz. Daha fazla bilgi için [Az Connect Sync section](./az-connect-sync.md) bölümüne bakın; çünkü **Password Writeback** bu agent kullanılarak yapılandırılır.
|
||||
|
||||
- At this point in time Cloud Sync also allows **"Microsoft Entra ID to AD"**, fakat yaptığım incelemeler sonucunda EntraID kullanıcılarını AD'ye senkronize EDEMEMEKTEDİR ve yalnızca parola hash'i ile senkronize edilmiş ve senkronize ettiğimiz domain ile aynı domain forest'a ait bir domainden gelen EntraID kullanıcılarını senkronize edebildiğini gördüm; ayrıntılar için bkz. [https://learn.microsoft.com/en-us/entra/identity/hybrid/group-writeback-cloud-sync#supported-groups-and-scale-limits](https://learn.microsoft.com/en-us/entra/identity/hybrid/group-writeback-cloud-sync#supported-groups-and-scale-limits):
|
||||
- Bu noktada Cloud Sync ayrıca **"Microsoft Entra ID to AD"**'yi destekliyor, fakat zamanla gördüm ki EntraID kullanıcılarını AD'ye senkronize edemiyor ve yalnızca password hash ile senkronize edilmiş ve senkronize etmeye çalıştığımız domain ile aynı domain forest'üne ait bir domainden gelen EntraID kullanıcılarını senkronize edebiliyor; detayları şu adreste okuyabilirsiniz: [https://learn.microsoft.com/en-us/entra/identity/hybrid/group-writeback-cloud-sync#supported-groups-and-scale-limits](https://learn.microsoft.com/en-us/entra/identity/hybrid/group-writeback-cloud-sync#supported-groups-and-scale-limits):
|
||||
|
||||
> - Bu gruplar yalnızca on-premises olarak senkronize edilmiş kullanıcıları ve/veya ek olarak bulutta oluşturulmuş güvenlik gruplarını içerebilir.
|
||||
> - Senkronize edilen ve bu bulutta oluşturulmuş güvenlik grubunun üyeleri olan on-premises kullanıcı hesapları aynı domain'den veya farklı domain'lerden olabilir, ancak hepsi aynı forest'tan olmalıdır.
|
||||
> - Bu gruplar yalnızca on-premises senkronize edilmiş kullanıcıları ve/veya ek bulutta oluşturulmuş güvenlik gruplarını içerebilir.
|
||||
> - Senkronize edilen on-premises kullanıcı hesapları ve bu bulut tarafından oluşturulan güvenlik grubunun üyeleri aynı etki alanından veya etki alanları arası olabilir, fakat hepsi aynı forest'ten olmalıdır.
|
||||
|
||||
Dolayısıyla bu servisin attack surface (ve yararlılığı) büyük ölçüde azalır; çünkü bir saldırganın diğer domain'deki bir kullanıcıyı ele geçirmek için, kullanıcıların senkronize edildiği ilk AD'yi ele geçirmesi gerekir (ve görünüşe göre her iki domain de aynı forest'ta olmalıdır).
|
||||
Bu nedenle bu servisin attack surface (ve kullanışlılığı) büyük ölçüde azalır; çünkü bir saldırganın diğer domain'deki bir kullanıcıyı compromise etmek için, kullanıcıların senkronize edildiği ilk AD'yi compromise etmesi gerekir (ve görünüşe göre her iki domain de aynı forest içinde olmalıdır).
|
||||
|
||||
|
||||
### Enumeration
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
## KMS
|
||||
|
||||
KMS ile ilgili temel bilgileri şurada bulun:
|
||||
KMS hakkında temel bilgileri şu yerde bulabilirsiniz:
|
||||
|
||||
{{#ref}}
|
||||
../gcp-services/gcp-kms-enum.md
|
||||
@@ -12,7 +12,7 @@ KMS ile ilgili temel bilgileri şurada bulun:
|
||||
|
||||
### `cloudkms.cryptoKeyVersions.destroy`
|
||||
|
||||
Bu izne sahip bir saldırgan bir KMS sürümünü yok edebilir. Bunu yapmak için önce anahtarı devre dışı bırakmanız, ardından yok etmeniz gerekir:
|
||||
Bu izne sahip bir saldırgan bir KMS sürümünü yok edebilir. Bunu yapmak için önce anahtarı devre dışı bırakmanız ve ardından onu yok etmeniz gerekir:
|
||||
|
||||
<details>
|
||||
|
||||
@@ -65,20 +65,34 @@ destroy_key_version(project_id, location_id, key_ring_id, key_id, key_version)
|
||||
|
||||
### KMS Ransomware
|
||||
|
||||
AWS'te KMS resource policy'yi değiştirerek ve sadece attackers account'un anahtarı kullanmasına izin vererek tamamen **steal a KMS key** yapmak mümkündür. Bu resource policy'ler GCP'de bulunmadığından bu mümkün değildir.
|
||||
AWS'te KMS resource policy'yi değiştirip yalnızca saldırganın hesabının anahtarı kullanmasına izin vererek bir **KMS key**'i tamamen ele geçirmek mümkündür. Bu resource policies GCP'de bulunmadığı için bu mümkün değildir.
|
||||
|
||||
Ancak, global bir KMS Ransomware gerçekleştirmek için başka bir yol daha vardır; bu şu adımları içerir:
|
||||
Ancak, küresel bir KMS Ransomware gerçekleştirmek için başka bir yol vardır; bu aşağıdaki adımları içerir:
|
||||
|
||||
- attacker tarafından içe aktarılan bir anahtar materyali ile anahtarın yeni bir **versiyonunu oluşturun**
|
||||
- Saldırgan tarafından içe aktarılan bir key material ile anahtarın yeni bir **sürümünü oluşturmak**
|
||||
```bash
|
||||
gcloud kms import-jobs create [IMPORT_JOB] --location [LOCATION] --keyring [KEY_RING] --import-method [IMPORT_METHOD] --protection-level [PROTECTION_LEVEL] --target-key [KEY]
|
||||
```
|
||||
- Bunu **varsayılan sürüm** olarak ayarla (gelecekte şifrelenecek veriler için)
|
||||
- **Önceki sürümle şifrelenmiş eski verileri yeniden şifrele** yeni sürümle.
|
||||
- **KMS anahtarını sil**
|
||||
- Artık yalnızca orijinal anahtar materyaline sahip saldırgan, şifrelenmiş veriyi çözebilir
|
||||
- Bunu **default version** olarak ayarla (ileride şifrelenecek veriler için)
|
||||
- **Re-encrypt older data** ile önceki sürümle şifrelenmiş eski verileri yeni sürümle yeniden şifrele.
|
||||
- **Delete the KMS key**
|
||||
- Artık yalnızca orijinal anahtar materyaline sahip attacker şifrelenmiş verileri çözebilecektir
|
||||
|
||||
#### Yeni bir sürümü içe aktarma ve eski verileri devre dışı bırakma/silme adımları:
|
||||
#### Cloud Storage + CMEK permission model
|
||||
|
||||
Cloud Storage'daki nesneler CMEK ile şifrelenmişse, KMS'e yapılan decrypt/encrypt çağrıları nesneyi okuyan son kullanıcı tarafından doğrudan değil, projenin **Cloud Storage service agent whose email is service-${BUCKET_PROJECT_NUMBER}@gs-project-accounts.iam.gserviceaccount.com)** tarafından yapılır.
|
||||
|
||||
Bu şu anlama gelir: CMEK ile şifrelenmiş bir şeyi okumak için:
|
||||
|
||||
- Projenin cloud storage service agent'ının kullanılan KMS anahtarı üzerinde KMS izinlerine sahip olması gerekir (genellikle `roles/cloudkms.cryptoKeyEncrypterDecrypter`).
|
||||
- Kullanıcının yalnızca nesne okuma izinlerine ihtiyacı vardır (örneğin `storage.objects.get`). KMS anahtarı üzerinde izne ihtiyacı yoktur.
|
||||
|
||||
Bu, KMS anahtarıyla şifrelenmiş verilere erişimi kontrol etmek için projenin cloud storage service agent'ına KMS izinleri eklemenin/kaldırmanın gerektiği anlamına gelir.
|
||||
|
||||
Not: Storage service agent için proje düzeyinde `roles/cloudkms.cryptoKeyEncrypterDecrypter` gibi bir binding'in olması, aynı projedeki anahtarlarla decrypt işlemlerine yine de izin verecektir.
|
||||
|
||||
|
||||
#### Here are the steps to import a new version and disable/delete the older data:
|
||||
|
||||
<details>
|
||||
|
||||
@@ -162,7 +176,7 @@ gcloud kms keys versions destroy \
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Simetrik anahtarla veriyi şifrele (Python)</summary>
|
||||
<summary>Simetrik anahtar ile veriyi şifrele (Python)</summary>
|
||||
```python
|
||||
from google.cloud import kms
|
||||
import base64
|
||||
@@ -203,7 +217,7 @@ print('Ciphertext:', ciphertext)
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Asimetrik anahtarla mesajı imzala (Python)</summary>
|
||||
<summary>Asimetrik anahtar ile mesaj imzala (Python)</summary>
|
||||
```python
|
||||
import hashlib
|
||||
from google.cloud import kms
|
||||
@@ -243,7 +257,7 @@ print('Signature:', signature)
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Asimetrik anahtar kullanarak imzayı doğrula (Python)</summary>
|
||||
<summary>Asimetrik anahtar ile imzayı doğrula (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`
|
||||
`cloudkms.cryptoKeyVersions.restore` izni, bir kimliğin daha önce yok edilmesi planlanan veya Cloud KMS'te devre dışı bırakılmış bir anahtar sürümünü geri yüklemesine izin vererek onu aktif ve kullanılabilir bir duruma getirir.
|
||||
`cloudkms.cryptoKeyVersions.restore` izni, bir kimliğin daha önce yok edilmek üzere zamanlanmış veya Cloud KMS içinde devre dışı bırakılmış bir anahtar sürümünü geri yükleyerek onu aktif ve kullanılabilir bir duruma döndürmesine izin verir.
|
||||
```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`
|
||||
`cloudkms.cryptoKeyVersions.update` izni, bir kimliğin Cloud KMS'deki belirli bir anahtar sürümünün özniteliklerini veya durumunu değiştirmesine izin verir; örneğin etkinleştirme veya devre dışı bırakma yapabilir.
|
||||
`cloudkms.cryptoKeyVersions.update` izni, bir kimliğin Cloud KMS içindeki belirli bir anahtar sürümünün özelliklerini veya durumunu değiştirmesine izin verir; örneğin onu etkinleştirmek veya devre dışı bırakmak.
|
||||
```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/) **kriptografik anahtarlar** için güvenli bir depolama alanı olarak hizmet eder; bu anahtarlar **hassas verileri şifrelemek ve şifre çözmek** gibi işlemler için gereklidir. Bu anahtarlar, yapılandırılmış yönetim sağlamak için anahtar halkaları içinde organize edilir. Ayrıca, erişim kontrolü, bireysel anahtar düzeyinde veya tüm anahtar halkası için titizlikle yapılandırılabilir, böylece izinler güvenlik gereksinimleriyle tam olarak uyumlu hale getirilir.
|
||||
The [**Cloud Key Management Service**](https://cloud.google.com/kms/docs/) serves as a secure storage for **cryptographic keys**, which are essential for operations like **encrypting and decrypting sensitive data**. These keys are organized within key rings, allowing for structured management. Furthermore, access control can be meticulously configured, either at the individual key level or for the entire key ring, ensuring that permissions are precisely aligned with security requirements.
|
||||
|
||||
KMS anahtar halkaları **varsayılan olarak küresel** olarak oluşturulur, bu da o anahtar halkasındaki anahtarların herhangi bir bölgeden erişilebilir olduğu anlamına gelir. Ancak, **belirli bölgelerde** özel anahtar halkaları oluşturmak mümkündür.
|
||||
KMS key rings are by **default created as global**, which means that the keys inside that key ring are accessible from any region. However, it's possible to create specific key rings in **specific regions**.
|
||||
|
||||
### Anahtar Koruma Seviyesi
|
||||
### Key Protection Level
|
||||
|
||||
- **Yazılım anahtarları**: Yazılım anahtarları **tamamen yazılımda KMS tarafından oluşturulur ve yönetilir**. Bu anahtarlar **herhangi bir donanım güvenlik modülü (HSM) tarafından korunmaz** ve **test ve geliştirme amaçları** için kullanılabilir. Yazılım anahtarları, düşük güvenlik sağladıkları ve saldırılara karşı hassas oldukları için **üretim** kullanımı için önerilmez.
|
||||
- **Bulut tabanlı anahtarlar**: Bulut tabanlı anahtarlar, **KMS tarafından bulutta** yüksek derecede kullanılabilir ve güvenilir bir altyapı kullanılarak oluşturulur ve yönetilir. Bu anahtarlar **HSM'ler tarafından korunur**, ancak HSM'ler **belirli bir müşteri için ayrılmamıştır**. Bulut tabanlı anahtarlar, çoğu üretim kullanım durumu için uygundur.
|
||||
- **Dış anahtarlar**: Dış anahtarlar, **KMS dışında oluşturulur ve yönetilir** ve kriptografik işlemler için KMS'ye aktarılır. Dış anahtarlar, **müşterinin tercihlerine bağlı olarak bir donanım güvenlik modülünde (HSM) veya bir yazılım kütüphanesinde saklanabilir**.
|
||||
- **Software keys**: Software keys are **created and managed by KMS entirely in software**. These keys are **not protected by any hardware security module (HSM)** and can be used for t**esting and development purposes**. Software keys are **not recommended for production** use because they provide low security and are susceptible to attacks.
|
||||
- **Cloud-hosted keys**: Cloud-hosted keys are **created and managed by KMS** in the cloud using a highly available and reliable infrastructure. These keys are **protected by HSMs**, but the HSMs are **not dedicated to a specific customer**. Cloud-hosted keys are suitable for most production use cases.
|
||||
- **External keys**: External keys are **created and managed outside of KMS**, and are imported into KMS for use in cryptographic operations. External keys **can be stored in a hardware security module (HSM) or a software library, depending on the customer's preference**.
|
||||
|
||||
### Anahtar Amaçları
|
||||
### Key Purposes
|
||||
|
||||
- **Simetrik şifreleme/şifre çözme**: **Her iki işlem için tek bir anahtar kullanarak verileri şifrelemek ve şifre çözmek** için kullanılır. Simetrik anahtarlar, büyük veri hacimlerini şifrelemek ve şifre çözmek için hızlı ve etkilidir.
|
||||
- **Desteklenen**: [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)
|
||||
- **Asimetrik İmza**: Anahtar paylaşmadan iki taraf arasında güvenli iletişim için kullanılır. Asimetrik anahtarlar, **bir açık anahtar ve bir özel anahtar** içeren bir çift olarak gelir. Açık anahtar başkalarıyla paylaşılırken, özel anahtar gizli tutulur.
|
||||
- **Desteklenen:** [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)
|
||||
- **Asimetrik Şifre Çözme**: Bir mesajın veya verinin özgünlüğünü doğrulamak için kullanılır. Bir dijital imza, bir özel anahtar kullanılarak oluşturulur ve ilgili açık anahtar kullanılarak doğrulanabilir.
|
||||
- **Desteklenen:** [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 İmzası**: **Gizli bir anahtar kullanarak bir mesaj kimlik doğrulama kodu (MAC) oluşturarak veri bütünlüğü ve özgünlüğünü sağlamak** için kullanılır. HMAC, ağ protokolleri ve yazılım uygulamalarında mesaj kimlik doğrulama için yaygın olarak kullanılır.
|
||||
- **Desteklenen:** [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**: Used to **encrypt and decrypt data using a single key for both operations**. Symmetric keys are fast and efficient for encrypting and decrypting large volumes of 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**: Used for secure communication between two parties without sharing the key. Asymmetric keys come in a pair, consisting of a **public key and a private key**. The public key is shared with others, while the private key is kept secret.
|
||||
- **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**: Used to verify the authenticity of a message or data. A digital signature is created using a private key and can be verified using the corresponding public key.
|
||||
- **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**: Used to ensure **data integrity and authenticity by creating a message authentication code (MAC) using a secret key**. HMAC is commonly used for message authentication in network protocols and software applications.
|
||||
- **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)
|
||||
|
||||
### Dönüşüm Süresi & İmha için Programlanmış Süre
|
||||
### Rotation Period & Programmed for destruction period
|
||||
|
||||
**Varsayılan olarak**, her **90 günde bir** ama **kolayca** ve **tamamen özelleştirilebilir.**
|
||||
By **default**, each **90 days** but it can be **easily** and **completely customized.**
|
||||
|
||||
"İmha için programlanmış" süre, **kullanıcının anahtarın silinmesini istemesinden itibaren geçen süre**dir ve anahtar **silinene kadar** devam eder. Anahtar oluşturulduktan sonra değiştirilemez (varsayılan 1 gün).
|
||||
The "Programmed for destruction" period is the **time since the user ask for deleting the key** and until the key is **deleted**. It cannot be changed after the key is created (default 1 day).
|
||||
|
||||
### Birincil Versiyon
|
||||
### Primary Version
|
||||
|
||||
Her KMS anahtarının birkaç versiyonu olabilir, bunlardan biri **varsayılan** olmalıdır; bu, **KMS anahtarı ile etkileşimde bulunurken bir versiyon belirtilmediğinde kullanılacak olanıdır**.
|
||||
Each KMS key can have several versions, one of them must be the **default** one, this will be the one used when a **version is not specified when interacting with the KMs key**.
|
||||
|
||||
### Sayım
|
||||
### CMEK permission model
|
||||
|
||||
**Anahtarları listeleme izinlerine sahip olduğunuzda**, onlara erişmenin yolu budur:
|
||||
When objects in Cloud Storage are encrypted with CMEK, the decrypt/encrypt calls to KMS are done by the project's **Cloud Storage service agent whose email is service-${BUCKET_PROJECT_NUMBER}@gs-project-accounts.iam.gserviceaccount.com)**, not directly by the end user reading the object.
|
||||
|
||||
This means that to read something encrypted by a CMEK:
|
||||
|
||||
- The project's cloud storage service agent must have KMS permissions over the used KMS key (typically `roles/cloudkms.cryptoKeyEncrypterDecrypter`).
|
||||
- The user only needs object read permissions (for example `storage.objects.get`). He doesn't need permissions over the KMS key.
|
||||
|
||||
Thsi means that to control acces to encrypted data with the KMS key it's needed to add/rmeove KMS permissions to the projects cloud storage service agent.
|
||||
|
||||
Note that there is a project-level binding like `roles/cloudkms.cryptoKeyEncrypterDecrypter` for the Storage service agent will still allow decrypt with the keys in the same project.
|
||||
|
||||
### Enumeration
|
||||
|
||||
Having **permissions to list the keys** this is how you can access them:
|
||||
```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
|
||||
```
|
||||
### Yetki Yükseltme
|
||||
### Privilege Escalation
|
||||
|
||||
{{#ref}}
|
||||
../gcp-privilege-escalation/gcp-kms-privesc.md
|
||||
{{#endref}}
|
||||
|
||||
### Sonrası İstismar
|
||||
### Post Exploitation
|
||||
|
||||
{{#ref}}
|
||||
../gcp-post-exploitation/gcp-kms-post-exploitation.md
|
||||
|
||||
Reference in New Issue
Block a user