AWS - EC2 Privesc
EC2
अधिक EC2 के बारे में जानकारी के लिए देखें:
pageAWS - EC2, EBS, ELB, SSM, VPC & VPN Enumiam:PassRole
, ec2:RunInstances
iam:PassRole
, ec2:RunInstances
एक हमलावता एक IAM रोल जोड़कर एक इंस्टेंस बना सकता है और फिर इंस्टेंस तक पहुंच सकता है ताकि IAM रोल क्रेडेंशियल्स को मेटाडेटा एंडपॉइंट से चुरा सके।
SSH के माध्यम से पहुंचें
एक नए इंस्टेंस को चलाएं जिसमें एक बनाया गया ssh कुंजी (--key-name
) लगाया गया है और फिर उसमें ssh करें (यदि आप एक नया बनाना चाहते हैं तो आपको अनुमति ec2:CreateKeyPair
हो सकती है)।
उपयोक्ता डेटा में रेव शैल के माध्यम से पहुंच
आप एक नए इंस्टेंस चला सकते हैं जिसमें एक उपयोक्ता डेटा (--user-data
) होगा जो आपको एक रेव शैल भेजेगा। इस तरीके से आपको सुरक्षा समूह को निर्दिष्ट करने की आवश्यकता नहीं है।
सावधान रहें अगर आप इंस्टेंस के बाहर IAM रोल के क्रेडेंशियल का उपयोग करते हैं:
pageAWS - GuardDuty Enumसंभावित प्रभाव: मौजूदा इंस्टेंस प्रोफाइल में जुड़े किसी भी EC2 रोल की सीधी प्रिवेस्क।
ECS को प्रिवेस्क करें
इस अनुमति सेट के साथ आप भी एक EC2 इंस्टेंस बना सकते हैं और इसे एक ECS क्लस्टर के अंदर रजिस्टर कर सकते हैं। इस तरह, ECS सेवाएं उस EC2 इंस्टेंस के अंदर चलाई जाएंगी जहां आपका पहुंच है और फिर आप उन सेवाओं (डॉकर कंटेनर) में प्रवेश कर सकते हैं और उनके ECS रोल्स को चुरा सकते हैं।
इस नए EC2 इंस्टेंस में ECS सेवाएं चलाने को मजबूर करने के लिए सीखने के लिए निम्न जांच करें:
pageAWS - ECS Privescअगर आप नया इंस्टेंस नहीं बना सकते हैं लेकिन आपके पास ecs:RegisterContainerInstance
अनुमति है, तो आप इंस्टेंस को क्लस्टर के अंदर रजिस्टर कर सकते हैं और कमेंट किया गया हमला कर सकते हैं।
संभावित प्रभाव: ECS रोल्स जो टास्क्स से जुड़े होते हैं, को सीधे वृद्धि।
iam:PassRole
, iam:AddRoleToInstanceProfile
iam:PassRole
, iam:AddRoleToInstanceProfile
पिछले स्थिति के समान, इन अनुमतियों के साथ एक हमलावर किसी भी कंप्रोमाइज़्ड इंस्टेंस की IAM रोल बदल सकता है ताकि वह नए क्रेडेंशियल्स चुरा सके।
जैसा कि एक इंस्टेंस प्रोफ़ाइल केवल 1 रोल हो सकता है, अगर इंस्टेंस प्रोफ़ाइल पहले से ही एक रोल है (सामान्य मामला), तो आपको भी iam:RemoveRoleFromInstanceProfile
की आवश्यकता होगी।
यदि इंस्टेंस प्रोफाइल में एक रोल है और हमलावर उसे हटा नहीं सकता, तो एक और उपाय है। वह बिना किसी रोल वाले इंस्टेंस प्रोफाइल को खोज सकता है या नया बना सकता है (iam:CreateInstanceProfile
), उस इंस्टेंस प्रोफाइल में रोल जोड़ सकता है (जैसा पहले चर्चा की गई है), और कंप्रोमाइज़ किए गए इंस्टेंस को एक कंप्रोमाइज़ किए गए इंस्टेंस प्रोफाइल से जोड़ सकता है:
यदि इंस्टेंस के पास कोई इंस्टेंस प्रोफाइल नहीं है (
ec2:AssociateIamInstanceProfile
) *
संभावित प्रभाव: एक विभिन्न EC2 भूमिका की सीधी प्रिवेस्क (आपको एक AWS EC2 इंस्टेंस को कंप्रोमाइज़ करना होगा और कुछ अतिरिक्त अनुमति या विशेष इंस्टेंस प्रोफ़ाइल स्थिति होनी चाहिए)।
iam:PassRole
(( ec2:AssociateIamInstanceProfile
& ec2:DisassociateIamInstanceProfile
) || ec2:ReplaceIamInstanceProfileAssociation
)
iam:PassRole
(( ec2:AssociateIamInstanceProfile
& ec2:DisassociateIamInstanceProfile
) || ec2:ReplaceIamInstanceProfileAssociation
)इन अनुमतियों के साथ एक इंस्टेंस से जुड़े प्रोफ़ाइल को बदलना संभव है, इसलिए अगर हमले को पहले से ही इंस्टेंस तक पहुंच होती है तो वह इसके साथ जुड़े अधिक इंस्टेंस प्रोफ़ाइल भूमिकाओं के लिए क्रेडेंशियल चुरा सकता है जो इसके साथ जुड़ा होता है।
अगर इसमें एक इंस्टेंस प्रोफ़ाइल है, तो आप इंस्टेंस प्रोफ़ाइल को हटा सकते हैं (
ec2:DisassociateIamInstanceProfile
) और इसे जोड़ सकते हैं *
या बदलें करें इंस्टेंस प्रोफाइल को कंप्रोमाइज़ हुए इंस्टेंस का (
ec2:ReplaceIamInstanceProfileAssociation
). *
संभावित प्रभाव: एक विभिन्न EC2 भूमिका की सीधी प्रिवेस्क (आपको एक AWS EC2 इंस्टेंस को कंप्रोमाइज़ करना होगा और कुछ अतिरिक्त अनुमति या विशेष इंस्टेंस प्रोफ़ाइल स्थिति होनी चाहिए)।
ec2:RequestSpotInstances
,iam:PassRole
ec2:RequestSpotInstances
,iam:PassRole
एक हमलावर जिसके पास ec2:RequestSpotInstances
और iam:PassRole
अनुमतियाँ हैं, वह एक Spot Instance का अनुरोध कर सकता है जिसमें एक EC2 भूमिका संलग्न है और उपयोगकर्ता डेटा में एक रिवर्स शैल है।
एक बार इंस्टेंस चलाया जाता है, वह IAM भूमिका चुरा सकता है।
ec2:ModifyInstanceAttribute
ec2:ModifyInstanceAttribute
एक हमलावर ec2:ModifyInstanceAttribute
के साथ उपयोगकर्ता उपकरण की विशेषताएँ संशोधित कर सकता है। उनमें से एक है कि वह उपयोगकर्ता डेटा को बदल सकता है, जिससे वह उपकरण को विचारशील डेटा चला सकता है। जिसका उपयोग EC2 उपकरण पर रिवर्स शैल को प्राप्त करने के लिए किया जा सकता है।
ध्यान दें कि विशेषताएँ केवल जब उपकरण बंद है तो संशोधित की जा सकती है, इसलिए अनुमतियाँ ec2:StopInstances
और ec2:StartInstances
होना चाहिए।
संभावित प्रभाव: एक निर्मित इंस्टेंस पर जुड़े किसी भी EC2 IAM रोल को सीधे वृद्धि।
ec2:CreateLaunchTemplateVersion
,ec2:CreateLaunchTemplate
,ec2:ModifyLaunchTemplate
ec2:CreateLaunchTemplateVersion
,ec2:CreateLaunchTemplate
,ec2:ModifyLaunchTemplate
ec2:CreateLaunchTemplateVersion
,ec2:CreateLaunchTemplate
और ec2:ModifyLaunchTemplate
अनुमतियों के साथ एक हमलावर एक नया लॉन्च टेम्पलेट संस्करण बना सकता है जिसमें उपयोगकर्ता डेटा में रेव शैल हो और उस पर कोई भी EC2 IAM रोल हो, डिफ़ॉल्ट संस्करण बदल सकता है, और उस लॉन्च टेम्पलेट का उपयोग करने वाले किसी भी ऑटोस्केलर समूह को उपयोग करने के लिए कॉन्फ़िगर किया गया है जो नवीनतम या डिफ़ॉल्ट संस्करण का उपयोग करेगा और उस टेम्पलेट का उपयोग करके उस रेव शैल को चलाएगा।
संभावित प्रभाव: एक विभिन्न EC2 भूमिका में सीधा वृद्धि।
autoscaling:CreateLaunchConfiguration
, autoscaling:CreateAutoScalingGroup
, iam:PassRole
autoscaling:CreateLaunchConfiguration
, autoscaling:CreateAutoScalingGroup
, iam:PassRole
एक हमलावर जिसके पास autoscaling:CreateLaunchConfiguration
, autoscaling:CreateAutoScalingGroup
, iam:PassRole
अनुमतियाँ हैं, वह एक Launch Configuration बना सकता है जिसमें एक IAM Role और एक rev shell होता है और फिर user data में इसे डाल सकता है, फिर उस कॉन्फ़िगरेशन से एक autoscaling समूह बना सकता है और फिर वहाँ तक rev shell का इंतजार कर सकता है ताकि IAM Role चुरा सके।
संभावित प्रभाव: एक विभिन्न EC2 भूमिका में सीधा उन्नयन।
!autoscaling
!autoscaling
ec2:CreateLaunchTemplate
और autoscaling:CreateAutoScalingGroup
अनुमतियों का सेट आईएएम भूमिका में उन्नयन करने के लिए पर्याप्त नहीं है क्योंकि उन्हें लॉन्च कॉन्फ़िगरेशन या लॉन्च टेम्पलेट में निर्दिष्ट भूमिका जोड़ने के लिए आपको अनुमतियाँ iam:PassRole
और ec2:RunInstances
की आवश्यकता है (जो एक जाना-माना प्रिवेस्क है)।
ec2-instance-connect:SendSSHPublicKey
ec2-instance-connect:SendSSHPublicKey
एक हमलावर जिसके पास अनुमति है ec2-instance-connect:SendSSHPublicKey
एक एसएसएच कुंजी को एक उपयोगकर्ता के पास जोड़ सकता है और इसका उपयोग करके इसे एक्सेस करने के लिए कर सकता है (अगर उसके पास इंस्टेंस का एसएसएच एक्सेस है) या उन्नयन करने के लिए।
संभावित प्रभाव: चल रहे इंस्टेंसेज के साथ जुड़े EC2 IAM रोल्स में सीधा प्रिविलेज इस्केलेशन।
ec2-instance-connect:SendSerialConsoleSSHPublicKey
ec2-instance-connect:SendSerialConsoleSSHPublicKey
एक हमलावर जिसके पास अनुमति है ec2-instance-connect:SendSerialConsoleSSHPublicKey
एक ssh कुंजी को एक सीरियल कनेक्शन में जोड़ सकता है। यदि सीरियल सक्षम नहीं है, तो हमलावर को इसे सक्षम करने के लिए अनुमति ec2:EnableSerialConsoleAccess
की आवश्यकता है।
सीरियल पोर्ट से कनेक्ट करने के लिए आपको भी मशीन के अंदर के एक उपयोगकर्ता के उपयोगकर्ता नाम और पासवर्ड पता होना चाहिए।
यह तरीका प्राइवेसी के लिए उपयोगी नहीं है क्योंकि इसे एक उपयोक्ता नाम और पासवर्ड की आवश्यकता होती है ताकि इसका शोध किया जा सके।
संभावित प्रभाव: (अत्यधिक अप्रमाणिक) चल रहे इंस्टेंसेज के साथ जुड़े EC2 IAM भूमिकाओं के लिए सीधा प्राइवेसी उन्नति।
संदर्भ
Last updated