AWS - KMS Enum

HackTricks को समर्थन दें

KMS - Key Management Service

AWS Key Management Service (AWS KMS) को एक प्रबंधित सेवा के रूप में प्रस्तुत किया गया है, जो उपयोगकर्ताओं के लिए customer master keys (CMKs) बनाने और प्रबंधित करने की प्रक्रिया को सरल बनाता है। ये CMKs उपयोगकर्ता डेटा के एन्क्रिप्शन में महत्वपूर्ण हैं। AWS KMS की एक उल्लेखनीय विशेषता यह है कि CMKs मुख्य रूप से hardware security modules (HSMs) द्वारा सुरक्षित होते हैं, जो एन्क्रिप्शन कुंजियों की सुरक्षा को बढ़ाते हैं।

KMS symmetric cryptography का उपयोग करता है। इसका उपयोग जानकारी को स्थिर रूप में एन्क्रिप्ट करने के लिए किया जाता है (उदाहरण के लिए, एक S3 के अंदर)। यदि आपको जानकारी को ट्रांज़िट में एन्क्रिप्ट करने की आवश्यकता है तो आपको TLS जैसी किसी चीज़ का उपयोग करना होगा।

KMS एक क्षेत्र विशिष्ट सेवा है।

Amazon के प्रशासकों को आपकी कुंजियों तक पहुंच नहीं है। वे आपकी कुंजियों को पुनर्प्राप्त नहीं कर सकते हैं और वे आपकी कुंजियों के एन्क्रिप्शन में आपकी मदद नहीं करते हैं। AWS केवल ऑपरेटिंग सिस्टम और अंतर्निहित एप्लिकेशन का प्रशासन करता है, यह हमारे ऊपर है कि हम अपनी एन्क्रिप्शन कुंजियों का प्रशासन करें और उन कुंजियों का उपयोग कैसे किया जाए।

Customer Master Keys (CMK): 4KB आकार तक के डेटा को एन्क्रिप्ट कर सकते हैं। इन्हें आमतौर पर DEKs (Data Encryption Keys) बनाने, एन्क्रिप्ट करने और डिक्रिप्ट करने के लिए उपयोग किया जाता है। फिर DEKs का उपयोग डेटा को एन्क्रिप्ट करने के लिए किया जाता है।

एक customer master key (CMK) AWS KMS में एक मास्टर कुंजी का तार्किक प्रतिनिधित्व है। मास्टर कुंजी के पहचानकर्ताओं और अन्य मेटाडेटा के अलावा, जिसमें इसकी निर्माण तिथि, विवरण और कुंजी स्थिति शामिल है, एक CMK में कुंजी सामग्री होती है जिसका उपयोग डेटा को एन्क्रिप्ट और डिक्रिप्ट करने के लिए किया जाता है। जब आप एक CMK बनाते हैं, तो डिफ़ॉल्ट रूप से, AWS KMS उस CMK के लिए कुंजी सामग्री उत्पन्न करता है। हालाँकि, आप बिना कुंजी सामग्री के CMK बनाने का विकल्प चुन सकते हैं और फिर उस CMK में अपनी कुंजी सामग्री आयात कर सकते हैं।

मास्टर कुंजियों के 2 प्रकार हैं:

  • AWS managed CMKs: अन्य सेवाओं द्वारा डेटा एन्क्रिप्ट करने के लिए उपयोग किया जाता है। इसका उपयोग उस सेवा द्वारा किया जाता है जिसने इसे एक क्षेत्र में बनाया है। जब आप उस सेवा में एन्क्रिप्शन लागू करते हैं तो वे पहली बार बनाए जाते हैं। हर 3 साल में घुमाया जाता है और इसे बदलना संभव नहीं है।

  • Customer manager CMKs: लचीलापन, रोटेशन, कॉन्फ़िगर करने योग्य एक्सेस और कुंजी नीति। कुंजियों को सक्षम और अक्षम करें।

Key Management Service (KMS) के संदर्भ में Envelope Encryption: डेटा कुंजी के साथ डेटा को एन्क्रिप्ट करने और फिर मास्टर कुंजी के साथ डेटा कुंजी को एन्क्रिप्ट करने के लिए दो-स्तरीय पदानुक्रम प्रणाली।

Key Policies

ये परिभाषित करते हैं कौन KMS में कुंजी का उपयोग और एक्सेस कर सकता है

डिफ़ॉल्ट रूप से:

  • यह KMS कुंजी के लिए KMS कुंजी का मालिक AWS खाता पूर्ण पहुंच देता है।

अन्य AWS संसाधन नीतियों के विपरीत, AWS KMS कुंजी नीति स्वचालित रूप से खाते या उसके किसी भी उपयोगकर्ता को अनुमति नहीं देती है। खाता प्रशासकों को अनुमति देने के लिए, कुंजी नीति में एक स्पष्ट कथन शामिल होना चाहिए जो इस अनुमति को प्रदान करता है, जैसे यह।

  • खाते को अनुमति दिए बिना ("AWS": "arn:aws:iam::111122223333:root") IAM अनुमतियाँ काम नहीं करेंगी।

  • यह कुंजी नीति के अतिरिक्त KMS कुंजी तक पहुंच की अनुमति देने के लिए खाते को IAM नीतियों का उपयोग करने की अनुमति देता है

इस अनुमति के बिना, कुंजी तक पहुंच की अनुमति देने वाली IAM नीतियाँ अप्रभावी हैं, हालांकि कुंजी तक पहुंच से इनकार करने वाली IAM नीतियाँ अभी भी प्रभावी हैं।

  • यह खाता प्रशासकों, जिसमें खाता रूट उपयोगकर्ता शामिल है, जिसे हटाया नहीं जा सकता, को एक्सेस नियंत्रण अनुमति देकर कुंजी के अप्रबंधनीय होने के जोखिम को कम करता है

डिफ़ॉल्ट नीति उदाहरण:

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

यदि खाता अनुमति प्राप्त है ("arn:aws:iam::111122223333:root") तो खाते से एक प्रिंसिपल को KMS कुंजी का उपयोग करने के लिए IAM अनुमतियों की आवश्यकता होगी। हालांकि, यदि Key Policy में किसी भूमिका का ARN विशेष रूप से अनुमति प्राप्त है, तो उस भूमिका को IAM अनुमतियों की आवश्यकता नहीं है

Policy Details

नीति की विशेषताएँ:

  • JSON आधारित दस्तावेज़

  • Resource --> प्रभावित संसाधन (हो सकता है "*")

  • Action --> kms:Encrypt, kms:Decrypt, kms:CreateGrant ... (अनुमतियाँ)

  • Effect --> Allow/Deny

  • Principal --> प्रभावित arn

  • Conditions (वैकल्पिक) --> अनुमति देने की शर्त

Grants:

  • आपके AWS खाते के भीतर किसी अन्य AWS प्रिंसिपल को आपकी अनुमतियाँ सौंपने की अनुमति देता है। आपको उन्हें AWS KMS APIs का उपयोग करके बनाना होगा। इसमें CMK पहचानकर्ता, ग्रांटी प्रिंसिपल और आवश्यक संचालन स्तर (Decrypt, Encrypt, GenerateDataKey...) को इंगित किया जा सकता है।

  • ग्रांट बनने के बाद एक GrantToken और एक GrantID जारी किए जाते हैं।

Access:

  • key policy के माध्यम से -- यदि यह मौजूद है, तो यह IAM नीति पर प्राथमिकता लेता है

  • IAM policy के माध्यम से

  • grants के माध्यम से

Key Administrators

डिफ़ॉल्ट रूप से Key administrator:

  • KMS को प्रबंधित करने की पहुंच रखते हैं लेकिन डेटा को एन्क्रिप्ट या डिक्रिप्ट करने की नहीं

  • केवल IAM उपयोगकर्ता और भूमिकाएँ Key Administrators सूची में जोड़ी जा सकती हैं (समूह नहीं)

  • यदि बाहरी CMK का उपयोग किया जाता है, तो Key Administrators को कुंजी सामग्री आयात करने की अनुमति होती है

CMKs का Rotation

  • जितनी देर तक एक ही कुंजी को रखा जाता है, उतना ही अधिक डेटा उस कुंजी के साथ एन्क्रिप्ट किया जाता है, और यदि वह कुंजी भंग हो जाती है, तो डेटा का व्यापक क्षेत्र जोखिम में होता है। इसके अलावा, जितनी देर तक कुंजी सक्रिय रहती है, उसके भंग होने की संभावना बढ़ जाती है।

  • KMS ग्राहक कुंजियों को हर 365 दिनों में घुमाता है (या आप जब चाहें मैन्युअल रूप से प्रक्रिया कर सकते हैं) और AWS द्वारा प्रबंधित कुंजियों को हर 3 साल में और इस समय को बदला नहीं जा सकता।

  • पुरानी कुंजियाँ रखी जाती हैं उस डेटा को डिक्रिप्ट करने के लिए जो रोटेशन से पहले एन्क्रिप्ट किया गया था।

  • एक भंग में, कुंजी को घुमाने से खतरा नहीं हटेगा क्योंकि समझौता की गई कुंजी के साथ एन्क्रिप्ट किए गए सभी डेटा को डिक्रिप्ट करना संभव होगा। हालांकि, नया डेटा नई कुंजी के साथ एन्क्रिप्ट किया जाएगा

  • यदि CMK अक्षम या हटाने के लंबित स्थिति में है, तो KMS कुंजी रोटेशन नहीं करेगा जब तक कि CMK को पुनः सक्षम नहीं किया जाता या हटाने को रद्द नहीं किया जाता।

Manual rotation

  • एक नई CMK बनाने की आवश्यकता है, फिर, एक नया CMK-ID बनाया जाता है, इसलिए आपको किसी भी एप्लिकेशन को अपडेट करने की आवश्यकता होगी ताकि वह नए CMK-ID को संदर्भित कर सके।

  • इस प्रक्रिया को आसान बनाने के लिए आप कुंजी-id को संदर्भित करने के लिए उपनामों का उपयोग कर सकते हैं और फिर बस उस कुंजी को अपडेट कर सकते हैं जिसे उपनाम संदर्भित कर रहा है।

  • आपको पुरानी कुंजियों को रखना होगा ताकि पुराने फाइलों को डिक्रिप्ट किया जा सके जो इसके साथ एन्क्रिप्ट की गई थीं।

आप अपने ऑन-प्रिमाइसेस कुंजी अवसंरचना से कुंजियों को आयात कर सकते हैं।

अन्य प्रासंगिक KMS जानकारी

KMS की कीमत प्रति माह सभी सेवाओं से प्राप्त एन्क्रिप्शन/डिक्रिप्शन अनुरोधों की संख्या पर आधारित है।

KMS का पूर्ण ऑडिट और अनुपालन CloudTrail के साथ एकीकरण है; यहाँ आप KMS पर किए गए सभी परिवर्तनों का ऑडिट कर सकते हैं।

KMS नीति के साथ आप निम्नलिखित कर सकते हैं:

  • कौन डेटा कुंजियाँ बना सकता है और किन सेवाओं को इन कुंजियों का उपयोग करने की अनुमति है, इसे सीमित करें

  • सिस्टम की पहुंच को केवल एन्क्रिप्ट, केवल डिक्रिप्ट या दोनों तक सीमित करें

  • सिस्टम को क्षेत्रों के पार कुंजियों तक पहुंचने की अनुमति देने के लिए परिभाषित करें (हालांकि यह अनुशंसित नहीं है क्योंकि KMS की मेजबानी करने वाले क्षेत्र में विफलता अन्य क्षेत्रों में सिस्टम की उपलब्धता को प्रभावित करेगी)।

आप क्षेत्रों के पार कुंजियों को सिंक्रनाइज़ या स्थानांतरित/कॉपी नहीं कर सकते; आप केवल क्षेत्रों के पार पहुंच की अनुमति देने के लिए नियम परिभाषित कर सकते हैं।

Enumeration

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

Privesc

AWS - KMS Privesc

Post Exploitation

AWS - KMS Post Exploitation

Persistence

AWS - KMS Persistence

References

HackTricks को समर्थन दें

Last updated