AWS - EC2 Privesc
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
For more info about EC2 check:
AWS - EC2, EBS, ELB, SSM, VPC & VPN Enumiam:PassRole
, ec2:RunInstances
An attacker could create and instance attaching an IAM role and then access the instance to steal the IAM role credentials from the metadata endpoint.
SSH के माध्यम से पहुँचें
एक बनाई गई ssh कुंजी (--key-name
) का उपयोग करके एक नया उदाहरण चलाएँ और फिर इसमें ssh करें (यदि आप एक नया बनाना चाहते हैं तो आपको ec2:CreateKeyPair
अनुमति होनी चाहिए)।
उपयोगकर्ता डेटा में रिव शेल के माध्यम से पहुंच
आप एक नया उदाहरण चला सकते हैं जो एक उपयोगकर्ता डेटा (--user-data
) का उपयोग करेगा जो आपको एक रिव शेल भेजेगा। इस तरीके से आपको सुरक्षा समूह निर्दिष्ट करने की आवश्यकता नहीं है।
सावधान रहें GuradDuty के साथ यदि आप IAM भूमिका के क्रेडेंशियल्स का उपयोग करते हैं जो इंस्टेंस के बाहर हैं:
AWS - GuardDuty Enumसंभावित प्रभाव: किसी भी EC2 भूमिका में सीधे privesc जो मौजूदा इंस्टेंस प्रोफाइल से जुड़ी है।
इन अनुमतियों के सेट के साथ आप एक EC2 इंस्टेंस बना सकते हैं और इसे एक ECS क्लस्टर के अंदर पंजीकृत कर सकते हैं। इस तरह, ECS सेवाएँ EC2 इंस्टेंस के अंदर चलाई जाएंगी जहाँ आपके पास पहुँच है और फिर आप उन सेवाओं (डॉकर कंटेनरों) में प्रवेश कर सकते हैं और उनकी ECS भूमिकाएँ चुरा सकते हैं जो जुड़ी हुई हैं।
इस नए EC2 इंस्टेंस में ECS सेवाओं को चलाने के लिए मजबूर करने के लिए सीखने के लिए देखें:
AWS - ECS Privescयदि आप नया इंस्टेंस नहीं बना सकते लेकिन आपके पास अनुमति ecs:RegisterContainerInstance
है, तो आप क्लस्टर के अंदर इंस्टेंस को पंजीकृत कर सकते हैं और टिप्पणी की गई हमले को अंजाम दे सकते हैं।
संभावित प्रभाव: कार्यों से जुड़े ECS भूमिकाओं के लिए सीधे प्रिवेस्क।
iam:PassRole
, iam:AddRoleToInstanceProfile
पिछले परिदृश्य के समान, इन अनुमतियों के साथ एक हमलावर एक समझौता किए गए इंस्टेंस की IAM भूमिका को बदल सकता है ताकि वह नए क्रेडेंशियल चुरा सके।
चूंकि एक इंस्टेंस प्रोफ़ाइल में केवल 1 भूमिका हो सकती है, यदि इंस्टेंस प्रोफ़ाइल पहले से ही एक भूमिका है (सामान्य मामला), तो आपको iam:RemoveRoleFromInstanceProfile
की भी आवश्यकता होगी।
यदि इंस्टेंस प्रोफ़ाइल में एक भूमिका है और हमलावर इसे हटा नहीं सकता, तो एक और समाधान है। वह एक ऐसी इंस्टेंस प्रोफ़ाइल खोज सकता है जिसमें कोई भूमिका नहीं है या एक नई बना सकता है (iam:CreateInstanceProfile
), उस भूमिका को उस इंस्टेंस प्रोफ़ाइल में जोड़ सकता है (जैसा कि पहले चर्चा की गई थी), और समझौता की गई इंस्टेंस प्रोफ़ाइल को एक समझौता की गई इंस्टेंस से जोड़ सकता है:
यदि इंस्टेंस में कोई इंस्टेंस प्रोफ़ाइल नहीं है (ec2:AssociateIamInstanceProfile
) *
संभावित प्रभाव: एक अलग EC2 भूमिका के लिए सीधे प्रिवेस्क (आपको एक AWS EC2 उदाहरण से समझौता करना होगा और कुछ अतिरिक्त अनुमति या विशिष्ट उदाहरण प्रोफ़ाइल स्थिति होनी चाहिए)।
iam:PassRole
(( ec2:AssociateIamInstanceProfile
& ec2:DisassociateIamInstanceProfile
) || ec2:ReplaceIamInstanceProfileAssociation
)इन अनुमतियों के साथ, एक उदाहरण से जुड़े उदाहरण प्रोफ़ाइल को बदलना संभव है, इसलिए यदि हमले ने पहले से ही एक उदाहरण तक पहुंच प्राप्त कर ली है, तो वह इससे जुड़े उदाहरण प्रोफ़ाइल भूमिकाओं के लिए क्रेडेंशियल चुराने में सक्षम होगा।
यदि इसमें एक उदाहरण प्रोफ़ाइल है, तो आप हटाने के लिए उदाहरण प्रोफ़ाइल (ec2:DisassociateIamInstanceProfile
) कर सकते हैं और इसे संलग्न कर सकते हैं। *
या बदले इंस्टेंस प्रोफ़ाइल को समझौता किए गए इंस्टेंस (ec2:ReplaceIamInstanceProfileAssociation
). *
संभावित प्रभाव: एक अलग EC2 भूमिका के लिए सीधे privesc (आपको एक AWS EC2 उदाहरण को समझौता करना होगा और कुछ अतिरिक्त अनुमति या विशिष्ट उदाहरण प्रोफ़ाइल स्थिति होनी चाहिए)।
ec2:RequestSpotInstances
,iam:PassRole
एक हमलावर जिसके पास अनुमतियाँ ec2:RequestSpotInstances
और iam:PassRole
हैं, वह एक Spot Instance अनुरोध कर सकता है जिसमें EC2 भूमिका संलग्न है और उपयोगकर्ता डेटा में rev shell है।
एक बार जब उदाहरण चलाया जाता है, तो वह IAM भूमिका को चुरा सकता है।
ec2:ModifyInstanceAttribute
एक हमलावर जिसके पास ec2:ModifyInstanceAttribute
है, वह इंस्टेंस के गुणों को संशोधित कर सकता है। इनमें, वह उपयोगकर्ता डेटा को बदल सकता है, जिसका अर्थ है कि वह इंस्टेंस को मनमाना डेटा चलाने के लिए बना सकता है। जिसका उपयोग EC2 इंस्टेंस के लिए एक रिवर्स शेल प्राप्त करने के लिए किया जा सकता है।
ध्यान दें कि गुण केवल तब संशोधित किए जा सकते हैं जब इंस्टेंस रुका हुआ हो, इसलिए अनुमतियाँ ec2:StopInstances
और ec2:StartInstances
।
संभावित प्रभाव: किसी भी EC2 IAM भूमिका पर सीधे प्रिवेस्क।
ec2:CreateLaunchTemplateVersion
,ec2:CreateLaunchTemplate
,ec2:ModifyLaunchTemplate
एक हमलावर जिसके पास अनुमतियाँ ec2:CreateLaunchTemplateVersion
,ec2:CreateLaunchTemplate
और ec2:ModifyLaunchTemplate
हैं, वह नया लॉन्च टेम्पलेट संस्करण बना सकता है जिसमें उपयोगकर्ता डेटा में rev shell और इस पर कोई भी EC2 IAM भूमिका हो, डिफ़ॉल्ट संस्करण को बदल सकता है, और कोई भी ऑटोस्केलर समूह जो उस लॉन्च टेम्पलेट का उपयोग कर रहा है जो नवीनतम या डिफ़ॉल्ट संस्करण का उपयोग करने के लिए कॉन्फ़िगर किया गया है, वह इंस्टेंस को फिर से चलाएगा जो उस टेम्पलेट का उपयोग कर रहा है और rev shell को निष्पादित करेगा।
संभावित प्रभाव: एक अलग EC2 भूमिका में सीधे प्रिवेस्क।
autoscaling:CreateLaunchConfiguration
, autoscaling:CreateAutoScalingGroup
, iam:PassRole
एक हमलावर जिसके पास अनुमतियाँ autoscaling:CreateLaunchConfiguration
,autoscaling:CreateAutoScalingGroup
,iam:PassRole
हैं, वह एक लॉन्च कॉन्फ़िगरेशन IAM भूमिका और यूजर डेटा के अंदर रिवर्स शेल के साथ बना सकता है, फिर उस कॉन्फ़िगरेशन से एक ऑटोस्केलिंग समूह बना सकता है और रिवर्स शेल का IAM भूमिका चुराने के लिए इंतज़ार कर सकता है।
संभावित प्रभाव: एक अलग EC2 भूमिका में सीधे प्रिवेस्क।
!autoscaling
अनुमतियों का सेट ec2:CreateLaunchTemplate
और autoscaling:CreateAutoScalingGroup
IAM भूमिका में प्रिविलेजेस को बढ़ाने के लिए पर्याप्त नहीं हैं क्योंकि लॉन्च कॉन्फ़िगरेशन या लॉन्च टेम्पलेट में निर्दिष्ट भूमिका को संलग्न करने के लिए आपको अनुमतियाँ iam:PassRole
और ec2:RunInstances
की आवश्यकता है (जो एक ज्ञात प्रिवेस्क है)।
ec2-instance-connect:SendSSHPublicKey
एक हमलावर जिसके पास अनुमति ec2-instance-connect:SendSSHPublicKey
है, वह एक उपयोगकर्ता के लिए एक ssh कुंजी जोड़ सकता है और इसका उपयोग करके उसे एक्सेस कर सकता है (यदि उसके पास इंस्टेंस पर ssh एक्सेस है) या प्रिविलेजेस को बढ़ा सकता है।
संभावित प्रभाव: चल रहे उदाहरणों से जुड़े EC2 IAM भूमिकाओं के लिए सीधे प्रिवेस्क।
ec2-instance-connect:SendSerialConsoleSSHPublicKey
जिस हमलावर के पास अनुमति ec2-instance-connect:SendSerialConsoleSSHPublicKey
है, वह एक धारावाहिक कनेक्शन में ssh कुंजी जोड़ सकता है। यदि धारावाहिक सक्षम नहीं है, तो हमलावर को इसे सक्षम करने के लिए अनुमति ec2:EnableSerialConsoleAccess
की आवश्यकता होती है।
धारावाहिक पोर्ट से कनेक्ट करने के लिए आपको मशीन के अंदर एक उपयोगकर्ता का उपयोगकर्ता नाम और पासवर्ड जानना भी आवश्यक है।
यह तरीका privesc के लिए इतना उपयोगी नहीं है क्योंकि आपको इसे शोषण करने के लिए एक उपयोगकर्ता नाम और पासवर्ड जानना आवश्यक है।
संभावित प्रभाव: (अत्यधिक अप्रूव करने योग्य) चल रहे उदाहरणों से जुड़े EC2 IAM भूमिकाओं के लिए सीधे privesc।
describe-launch-templates
,describe-launch-template-versions
चूंकि लॉन्च टेम्पलेट्स में संस्करणन है, ec2:describe-launch-templates
और ec2:describe-launch-template-versions
अनुमतियों वाला एक हमलावर इनका उपयोग संवेदनशील जानकारी, जैसे उपयोगकर्ता डेटा में मौजूद क्रेडेंशियल्स, खोजने के लिए कर सकता है। इसे पूरा करने के लिए, निम्नलिखित स्क्रिप्ट उपलब्ध लॉन्च टेम्पलेट्स के सभी संस्करणों के माध्यम से लूप करती है:
उपरोक्त कमांड में, हालांकि हम कुछ पैटर्न (aws_|password|token|api
) निर्दिष्ट कर रहे हैं, आप अन्य प्रकार की संवेदनशील जानकारी के लिए खोजने के लिए एक अलग regex का उपयोग कर सकते हैं।
मान लेते हैं कि हम aws_access_key_id
और aws_secret_access_key
पाते हैं, हम इन क्रेडेंशियल्स का उपयोग AWS में प्रमाणीकरण के लिए कर सकते हैं।
संभावित प्रभाव: IAM उपयोगकर्ता(ओं) के लिए सीधे विशेषाधिकार वृद्धि।
AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE) GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE)