AWS - KMS Enum

Tip

AWS Hacking’i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking’i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)
Az Hacking’i öğrenin ve pratik yapın: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks'i Destekleyin

KMS - Anahtar Yönetim Servisi

AWS Anahtar Yönetim Servisi (AWS KMS), kullanıcıların müşteri anahtarlarını oluşturmasını ve yönetmesini kolaylaştıran yönetilen bir hizmet olarak sunulmaktadır. Bu müşteri anahtarları, kullanıcı verilerinin şifrelenmesinde kritik bir rol oynamaktadır. AWS KMS’in dikkat çekici bir özelliği, müşteri anahtarlarının çoğunlukla donanım güvenlik modülleri (HSM’ler) tarafından güvence altına alınmasıdır, bu da şifreleme anahtarlarının korunmasını artırır.

KMS, simetrik kriptografi kullanır. Bu, verileri dinlenme halinde şifrelemek için kullanılır (örneğin, bir S3 içinde). Eğer verileri iletim sırasında şifrelemeniz gerekiyorsa, TLS gibi bir şey kullanmalısınız.

KMS, bölgeye özgü bir hizmettir.

Amazon’daki yöneticilerin anahtarlarınıza erişimi yoktur. Anahtarlarınızı geri alamazlar ve anahtarlarınızın şifrelenmesinde size yardımcı olamazlar. AWS, yalnızca işletim sistemini ve altında yatan uygulamayı yönetir; anahtarlarımızı yönetmek ve bu anahtarların nasıl kullanılacağını yönetmek bizim sorumluluğumuzdur.

Müşteri Anahtarları (CMK): Boyutu 4KB’ye kadar olan verileri şifreleyebilir. Genellikle, DEK’leri (Veri Şifreleme Anahtarları) oluşturmak, şifrelemek ve şifre çözmek için kullanılır. Daha sonra DEK’ler verileri şifrelemek için kullanılır.

Bir müşteri anahtarının (CMK) AWS KMS’deki anahtarın mantıksal bir temsilidir. Anahtarın tanımlayıcıları ve diğer meta verilerin yanı sıra, oluşturulma tarihi, açıklama ve anahtar durumu gibi bilgileri içerir; CMK, verileri şifrelemek ve şifre çözmek için kullanılan anahtar materyalini içerir. Bir CMK oluşturduğunuzda, varsayılan olarak AWS KMS, o CMK için anahtar materyalini oluşturur. Ancak, anahtar materyali olmadan bir CMK oluşturmayı seçebilir ve ardından kendi anahtar materyalinizi o CMK’ye içe aktarabilirsiniz.

İki tür anahtar vardır:

  • AWS yönetilen CMK’ler: Diğer hizmetler tarafından verileri şifrelemek için kullanılır. Oluşturulduğu bölgede, onu oluşturan hizmet tarafından kullanılır. Bu hizmette şifrelemeyi ilk kez uyguladığınızda oluşturulurlar. Her 3 yılda bir döner ve değiştirilmesi mümkün değildir.
  • Müşteri yönetici CMK’ler: Esneklik, döngü, yapılandırılabilir erişim ve anahtar politikası. Anahtarları etkinleştirme ve devre dışı bırakma.

Zarf Şifrelemesi, Anahtar Yönetim Servisi (KMS) bağlamında: verileri veri anahtarı ile şifrelemek ve ardından veri anahtarını anahtar ile şifrelemek için iki katmanlı hiyerarşi sistemi.

Anahtar Politikaları

Bunlar, KMS’de bir anahtarı kimin kullanabileceğini ve erişebileceğini tanımlar.

Varsayılan olarak:

  • KMS anahtarını yönetmek için KMS anahtarını sahip olan AWS hesabının IAM’ine erişim verir.

Diğer AWS kaynak politikalarından farklı olarak, bir AWS KMS anahtar politikası, hesabın herhangi bir ilkesine otomatik olarak izin vermez. Hesap yöneticilerine izin vermek için, anahtar politikasının bu izni sağlayan açık bir ifade içermesi gerekir, bu şekilde.

  • Hesaba izin vermeden ("AWS": "arn:aws:iam::111122223333:root") IAM izinleri çalışmaz.

  • Anahtar politikasına ek olarak, KMS anahtarına erişim sağlamak için IAM politikalarını kullanmasına izin verir.

Bu izin olmadan, anahtara erişimi sağlayan IAM politikaları etkisizdir, ancak anahtara erişimi reddeden IAM politikaları hala etkilidir.

  • Anahtarın yönetilemez hale gelme riskini azaltır, hesap yöneticilerine, silinemez olan hesap kök kullanıcısı da dahil olmak üzere, erişim kontrol izni vererek.

Varsayılan politika örneği:

{
"Sid": "Enable IAM policies",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::111122223333:root"
},
"Action": "kms:*",
"Resource": "*"
}

Warning

Eğer hesaba izin verilmişse ("arn:aws:iam::111122223333:root"), hesaptan bir prensip KMS anahtarını kullanmak için IAM izinlerine ihtiyaç duyacaktır. Ancak, eğer bir rolün ARN’si Anahtar Politikasında özel olarak izin verilmişse, o rol IAM izinlerine ihtiyaç duymaz.

Politika Detayları

Bir politikanın özellikleri:

  • JSON tabanlı belge
  • Kaynak –> Etkilenen kaynaklar (yıldız “*” olabilir)
  • Eylem –> kms:Encrypt, kms:Decrypt, kms:CreateGrant … (izinler)
  • Etki –> İzin Ver / Reddet
  • Prensip –> etkilenen arn
  • Koşullar (isteğe bağlı) –> izinleri vermek için koşul

İzinler:

  • AWS hesabınız içindeki başka bir AWS prensibine izinlerinizi devretmenizi sağlar. Bunları AWS KMS API’lerini kullanarak oluşturmanız gerekir. CMK tanımlayıcısı, grantee prensibi ve gerekli işlem seviyesi (Decrypt, Encrypt, GenerateDataKey…) belirtilebilir.
  • İzin oluşturulduktan sonra bir GrantToken ve GrantID verilir.

Erişim:

  • anahtar politikası aracılığıyla – Eğer bu varsa, bu IAM politikasından önceliklidir
  • IAM politikası aracılığıyla
  • izinler aracılığıyla

Anahtar Yöneticileri

Varsayılan olarak anahtar yöneticileri:

  • KMS’yi yönetme erişimine sahiptir ancak verileri şifreleme veya şifre çözme yetkisi yoktur.
  • Sadece IAM kullanıcıları ve rolleri Anahtar Yöneticileri listesine eklenebilir (gruplar değil).
  • Harici bir CMK kullanılıyorsa, Anahtar Yöneticileri anahtar materyalini içe aktarma iznine sahiptir.

CMK’ların Döngüsü

  • Aynı anahtar yerinde ne kadar uzun süre kalırsa, o anahtarla o kadar çok veri şifrelenir ve eğer o anahtar ihlal edilirse, o zaman veri için risk alanı o kadar genişler. Ayrıca, anahtar aktif kaldıkça, ihlal edilme olasılığı artar.
  • KMS, müşteri anahtarlarını her 365 günde bir döndürür (veya istediğiniz zaman süreci manuel olarak gerçekleştirebilirsiniz) ve AWS tarafından yönetilen anahtarlar her 3 yılda bir döndürülür ve bu süre değiştirilemez.
  • Eski anahtarlar, döngüden önce şifrelenmiş verileri çözmek için saklanır.
  • Bir ihlal durumunda, anahtarın döndürülmesi tehdidi ortadan kaldırmaz çünkü ihlal edilen anahtarla şifrelenmiş tüm veriler çözülebilir. Ancak, yeni veriler yeni anahtar ile şifrelenecektir.
  • Eğer CMK devre dışı veya silinme beklemede durumdaysa, KMS anahtar döngüsü gerçekleştirmeyecektir ta ki CMK yeniden etkinleştirilene veya silme iptal edilene kadar.

Manuel döngü

  • Yeni bir CMK oluşturulması gerekir, ardından yeni bir CMK-ID oluşturulur, bu nedenle uygulamanızı yeni CMK-ID’yi referans almak için güncellemeniz gerekecektir.
  • Bu süreci daha kolay hale getirmek için bir anahtar kimliğine atıfta bulunmak için takma adlar kullanabilirsiniz ve ardından sadece takma adın atıfta bulunduğu anahtarı güncelleyebilirsiniz.
  • Eski dosyaları şifrelemek için eski anahtarları saklamanız gerekir.

Kendi yerel anahtar altyapınızdan anahtarları içe aktarabilirsiniz.

Diğer ilgili KMS bilgileri

KMS, tüm hizmetlerden alınan şifreleme/şifre çözme taleplerinin sayısına göre fiyatlandırılır.

KMS, CloudTrail ile tam denetim ve uyum entegrasyonuna sahiptir; burada KMS üzerinde gerçekleştirilen tüm değişiklikleri denetleyebilirsiniz.

KMS politikası ile şunları yapabilirsiniz:

  • Veri anahtarlarını kimlerin oluşturabileceğini ve bu anahtarlara hangi hizmetlerin erişim iznine sahip olduğunu sınırlamak
  • Sistemlerin yalnızca şifreleme, yalnızca şifre çözme veya her ikisine erişimini sınırlamak
  • Sistemlerin bölgeler arasında anahtarlara erişimini sağlamak için tanımlamak (ancak bu önerilmez çünkü KMS’yi barındıran bölgede bir arıza, diğer bölgelerdeki sistemlerin kullanılabilirliğini etkiler).

Bölgeler arasında anahtarları senkronize edemez veya taşıyamaz/kopyalayamazsınız; yalnızca bölge arasında erişimi sağlamak için kurallar tanımlayabilirsiniz.

Sayım

aws kms list-keys
aws kms list-key-policies --key-id <id>
aws kms list-grants --key-id <id>
aws kms describe-key --key-id <id>
aws kms get-key-policy --key-id <id> --policy-name <name> # Default policy name is "default"
aws kms describe-custom-key-stores

# This script enumerates AWS KMS keys across all available regions.
for region in $(aws ec2 describe-regions --query "Regions[].RegionName" --output text); do
echo -e "\n### Region: $region ###"; aws kms list-keys --region $region --query "Keys[].KeyId" --output text | tr '\t' '\n';
done

Privesc

AWS - KMS Privesc

Post Exploitation

AWS - KMS Post Exploitation

Persistence

AWS - KMS Persistence

Referanslar

Tip

AWS Hacking’i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking’i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)
Az Hacking’i öğrenin ve pratik yapın: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks'i Destekleyin