
Terraform का उपयोग करके अपना खुद का डिज़ाइन द्वारा कमजोर AWS IAM विशेषाधिकार वृद्धि प्लेग्राउंड बनाएं।
टेराफॉर्म का उपयोग करके अपना स्वयं का डिज़ाइन द्वारा असुरक्षित AWS IAM विशेषाधिकार वृद्धि खेल का मैदान बनाएं।

IAM Vulnerable आपके AWS खाते में 250 से अधिक IAM संसाधनों को तैनात करने के लिए टेराफॉर्म बाइनरी और आपकी AWS क्रेडेंशियल्स का उपयोग करता है। मिनटों में, आप असुरक्षित IAM कॉन्फ़िगरेशन की पहचान करना और उनका शोषण करना सीखना शुरू कर सकते हैं जो विशेषाधिकार वृद्धि की अनुमति देते हैं।
नमस्ते सभी। IAM Vulnerable AWS IAM विशेषाधिकार वृद्धि के मूल निर्माण ब्लॉकों को समझने के लिए अभी भी अत्यंत उपयोगी है। हालाँकि, IAM vulnerable बनाने के कुछ साल बाद, मैंने CloudFoxable बनाया, जो एक CTF शैली का संस्करण है जो आपको क्लाउड पैठ परीक्षण की मूल बातें अधिक समग्र रूप से सिखाता है। - @sethsec
हमसे RedSec डिस्कॉर्ड सर्वर पर जुड़ें।
🦊 वर्तमान में समर्थित विशेषाधिकार वृद्धि पथ: 31
ब्लॉग पोस्ट: IAM Vulnerable - एक AWS IAM विशेषाधिकार वृद्धि खेल का मैदान
यह त्वरित आरंभ आपके AWS खाते में IAM Vulnerable को यथाशीघ्र चालू करने के लिए एक निश्चित दृष्टिकोण की रूपरेखा प्रस्तुत करता है। हो सकता है कि आपने इनमें से कई चरण पहले ही पूरे कर लिए हों, या आप अपने वर्तमान कॉन्फ़िगरेशन के साथ काम करने के लिए चीजों को ट्वीक करना चाहते हों। कुछ अतिरिक्त कॉन्फ़िगरेशन विकल्पों के लिए इस रिपॉजिटरी में अन्य उपयोग के मामले अनुभाग देखें।
aws sts get-caller-identity निष्पादित करके पुष्टि करें कि आपका CLI अपेक्षित रूप से काम कर रहा है।git clone https://github.com/BishopFox/iam-vulnerablecd iam-vulnerable/terraform initexport TF_VAR_aws_local_profile=PROFILE_IN_AWS_CREDENTIALS_FILE_IF_OTHER_THAN_DEFAULTexport TF_VAR_aws_local_creds_file=FILE_LOCATION_IF_NON_DEFAULTterraform planसफाई
जब भी आप IAM Vulnerable-निर्मित सभी संसाधनों को हटाना चाहते हैं, तो आप ये कमांड चला सकते हैं:
cd iam-vulnerable/terraform destroyवैकल्पिक सफाई (जब टेराफॉर्म स्थिति खो गई हो)
ऐसी स्थिति में जहां आपने टेराफॉर्म का उपयोग करके iam-vulnerable को तैनात किया है लेकिन अब आपके पास स्थिति फ़ाइल तक पहुंच नहीं है (और terraform destroy काम नहीं करता है), तो आप निम्नलिखित सफाई स्क्रिप्ट का उपयोग कर सकते हैं:```bash
./cleanup-scripts/cleanup_iam_vulnerable.py --dry-run
./cleanup-scripts/cleanup_iam_vulnerable.sh --dry-run
These scripts will:
- स्वचालित रूप से आपके AWS खाते में सभी IAM संवेदनशील संसाधनों की पहचान करेंगे
- आपको आगे बढ़ने से पहले वास्तव में क्या हटाया जाएगा, यह दिखाएंगे
- निर्भरता संघर्षों से बचने के लिए संसाधनों को उचित क्रम में हटाएंगे
- AWS प्रोफाइल का समर्थन करेंगे और विस्तृत लॉगिंग प्रदान करेंगे
**महत्वपूर्ण**: पहले `--dry-run` के साथ चलाएं ताकि पता चले कि क्या हटाया जाएगा। विस्तृत उपयोग निर्देशों के लिए `cleanup-scripts/CLEANUP_README.md` देखें।
## अभी कौन से संसाधन बनाए गए?
Terraform बाइनरी ने आपके डिफ़ॉल्ट AWS खाता प्रोफ़ाइल क्रेडेंशियल का उपयोग करके निम्नलिखित बनाए:
* 31 उपयोगकर्ता, भूमिकाएँ और नीतियाँ, प्रत्येक में प्लेग्राउंड खाते के प्रशासनिक एक्सेस के लिए एक अद्वितीय शोषण पथ है
* कुछ अतिरिक्त उपयोगकर्ता, समूह, भूमिकाएँ और नीतियाँ जो कुछ शोषण पथों को पूरी तरह से साकार करने के लिए आवश्यक हैं
* कुछ अतिरिक्त उपयोगकर्ता, भूमिकाएँ और नीतियाँ जो अन्य उपकरणों की पहचान क्षमताओं का परीक्षण करती हैं
डिफ़ॉल्ट रूप से, इस Terraform मॉड्यूल द्वारा बनाई गई प्रत्येक भूमिका उस उपयोगकर्ता या भूमिका द्वारा ग्रहण की जा सकती है जिसका उपयोग आपने Terraform चलाने के लिए किया था।
* यदि आप चाहते हैं कि Terraform डिफ़ॉल्ट प्रोफ़ाइल के अलावा किसी अन्य प्रोफ़ाइल का उपयोग करे, या आप `assume_role_policy` ARN को हार्ड-कोड करना चाहते हैं, तो [अन्य उपयोग के मामले](#other-use-cases) देखें।
## इसकी लागत कितनी होगी?
IAM संवेदनशील को उसके **डिफ़ॉल्ट कॉन्फ़िगरेशन में तैनात करने पर कोई लागत नहीं आएगी**। अगले अनुभाग में जानें कि ऐसे गैर-डिफ़ॉल्ट मॉड्यूल को कैसे सक्षम किया जाए जिनमें लागत आती है, और यदि आप इसे तैनात करते हैं तो प्रत्येक मॉड्यूल की प्रति माह कितनी लागत होगी।
# एक मॉड्यूलर दृष्टिकोण
IAM संवेदनशील कुछ संसाधनों को मॉड्यूल में एक साथ समूहित करता है। कुछ मॉड्यूल डिफ़ॉल्ट रूप से सक्षम होते हैं (जिनका कोई लागत प्रभाव नहीं होता), और अन्य डिफ़ॉल्ट रूप से अक्षम होते हैं (जिन्हें तैनात करने पर लागत आती है)। इस तरह, आप आवश्यकतानुसार विशिष्ट मॉड्यूल को सक्षम कर सकते हैं।
उदाहरण के लिए, जब आप IAM के बाहर के संसाधनों से जुड़े `ssm:StartSession` जैसे शोषण पथों के साथ खेलने के लिए तैयार हों, तो आप `iam-vulnerable/main.tf` फ़ाइल में मॉड्यूल को अनकमेंट करके और `terraform apply` को फिर से चलाकर इन संसाधनों को मांग पर तैनात और हटा सकते हैं:```
# Uncomment the next four lines to create an ec2 instance and related resources
#module "ec2" {
# source = "./modules/non-free-resources/ec2"
# aws_assume_role_arn = (var.aws_assume_role_arn != "" ? var.aws_assume_role_arn : data.aws_caller_identity.current.arn)
#}
जब आप ec2 मॉड्यूल को अनकमेंट करते हैं, तो चलाएँ:```
terraform init
terraform apply
आपने अब SSM privesc पथों को आज़माने के लिए आवश्यक घटकों को तैनात कर दिया है।
## मुफ़्त संसाधन मॉड्यूल
`free-resources` के अंतर्गत तैनात किसी भी चीज़ की कोई लागत नहीं है:
| नाम | डिफ़ॉल्ट स्थिति | अनुमानित लागत | विवरण |
| --- | --- | --- | --- |
| privesc-paths | सक्षम | कोई नहीं | इसमें सभी IAM privesc पथ शामिल हैं |
| tool-testing | सक्षम | कोई नहीं | इसमें परीक्षण मामले शामिल हैं जो विभिन्न IAM privesc टूल की क्षमताओं का मूल्यांकन करते हैं |
## गैर-मुफ़्त संसाधन मॉड्यूल
इन अतिरिक्त मॉड्यूल को तैनात करने पर लागत आ सकती है:
| नाम | डिफ़ॉल्ट स्थिति | अनुमानित लागत | विवरण | किसके लिए आवश्यक |
| --- | --- | --- | --- | --- |
| EC2 | अक्षम | :heavy_dollar_sign: <br> $4.50/माह | एक EC2 इंस्टेंस और एक सुरक्षा समूह बनाता है जो कहीं से भी SSH की अनुमति देता है | `ssm-SendCommand` <br> `ssm-StartSession` <br> `ec2InstanceConnect-SendSSHPublicKey` |
| Lambda | अक्षम | :slightly_smiling_face: <br> मासिक लागत उपयोग पर निर्भर करती है (लागत शून्य होनी चाहिए) | एक Lambda फ़ंक्शन बनाता है | `Lambda-EditExistingLambdaFunctionWithRole` |
| Glue | अक्षम | :heavy_dollar_sign::heavy_dollar_sign::heavy_dollar_sign::heavy_dollar_sign: <br> $4/घंटा | एक Glue dev एंडपॉइंट बनाता है | `Glue-UpdateExistingGlueDevEndpoint` |
| SageMaker | अक्षम | अभी पक्का नहीं | एक SageMaker नोटबुक बनाता है | `sageMakerCreatePresignedNotebookURL` |
| CloudFormation | अक्षम | :slightly_smiling_face: <br> CloudFormation के माध्यम से बनाए गए सीक्रेट के लिए $0.40/माह। स्टैक के लिए कुछ नहीं या बहुत कम | एक CloudFormation स्टैक बनाता है जो सीक्रेट मैनेजर में एक सीक्रेट बनाता है | `privesc-cloudFormationUpdateStack` |
# समर्थित विशेषाधिकार वृद्धि पथ
| पथ का नाम | IAM संवेदनशील प्रोफ़ाइल नाम | आवश्यक गैर-डिफ़ॉल्ट मॉड्यूल | शोषण संदर्भ |
| --- | --- | --- | --- |
| **श्रेणी: अन्य उपयोगकर्ताओं पर IAM अनुमतियाँ** | | | |
| IAM-CreateAccessKey | privesc4 | कोई नहीं | :fox_face: [Well, That Escalated Quickly - Privesc 04](https://labs.bishopfox.com/tech-blog/privilege-escalation-in-aws) <br> :lock: [s3cur3.it IAMVulnerable - Part 3](https://s3cur3.it/home/practicing-aws-security-with-iamvulnerable-part-3) |
| IAM-CreateLoginProfile | privesc5 | कोई नहीं | :fox_face: [Well, That Escalated Quickly - Privesc 05](https://labs.bishopfox.com/tech-blog/privilege-escalation-in-aws) <br> :lock: [s3cur3.it IAMVulnerable - Part 3](https://s3cur3.it/home/practicing-aws-security-with-iamvulnerable-part-3) |
| IAM-UpdateLoginProfile | privesc6 | कोई नहीं | :fox_face: [Well, That Escalated Quickly - Privesc 06](https://labs.bishopfox.com/tech-blog/privilege-escalation-in-aws) <br> :lock: [s3cur3.it IAMVulnerable - Part 3](https://s3cur3.it/home/practicing-aws-security-with-iamvulnerable-part-3) |
| **श्रेणी: सेवा को PassRole** | | | |
| CloudFormation-PassExistingRoleToCloudFormation | privesc20 | कोई नहीं |:fox_face: [Well, That Escalated Quickly - Privesc 20](https://labs.bishopfox.com/tech-blog/privilege-escalation-in-aws) |
| CodeBuild-CreateProjectPassRole| privesc-codeBuildProject | कोई नहीं | |
| DataPipeline-PassExistingRoleToNewDataPipeline| privesc21 | कोई नहीं | :fox_face: [Well, That Escalated Quickly - Privesc 21](https://labs.bishopfox.com/tech-blog/privilege-escalation-in-aws) |
| EC2-CreateInstanceWithExistingProfile| privesc3 | कोई नहीं | :fox_face: [Well, That Escalated Quickly - Privesc 03](https://labs.bishopfox.com/tech-blog/privilege-escalation-in-aws) <br> :lock: [s3cur3.it IAMVulnerable - Part 2](https://s3cur3.it/home/practicing-aws-security-with-iamvulnerable-part-2) |
| Glue-PassExistingRoleToNewGlueDevEndpoint | privesc18 | कोई नहीं | :fox_face: [Well, That Escalated Quickly - Privesc 18](https://labs.bishopfox.com/tech-blog/privilege-escalation-in-aws) |
| Lambda-PassExistingRoleToNewLambdaThenInvoke | privesc15 | कोई नहीं | :fox_face: [Well, That Escalated Quickly - Privesc 15](https://labs.bishopfox.com/tech-blog/privilege-escalation-in-aws) |
| Lambda-PassRoleToNewLambdaThenTrigger | privesc16 | कोई नहीं | :fox_face: [Well, That Escalated Quickly - Privesc 16](https://labs.bishopfox.com/tech-blog/privilege-escalation-in-aws) |
| SageMaker-CreateNotebookPassRole | privesc-sageNotebook | कोई नहीं | :rhinoceros: [AWS IAM Privilege Escalation - Method 2](https://rhinosecuritylabs.com/aws/aws-privilege-escalation-methods-mitigation-part-2/) |
| SageMaker-CreateTrainingJobPassRole | privesc-sageTraining | कोई नहीं | |
| SageMaker-CreateProcessingJobPassRole | privesc-sageProcessing | कोई नहीं | |
| **श्रेणी: नीतियों पर अनुमतियाँ** | | |
| IAM-AddUserToGroup | privesc13 | कोई नहीं |:fox_face: [Well, That Escalated Quickly - Privesc 13](https://labs.bishopfox.com/tech-blog/privilege-escalation-in-aws) |
| IAM-AttachGroupPolicy| privesc8 | कोई नहीं | :fox_face: [Well, That Escalated Quickly - Privesc 08](https://labs.bishopfox.com/tech-blog/privilege-escalation-in-aws) |
| IAM-AttachRolePolicy| privesc9 | कोई नहीं | :fox_face: [Well, That Escalated Quickly - Privesc 09](https://labs.bishopfox.com/tech-blog/privilege-escalation-in-aws) |
| IAM-AttachUserPolicy| privesc7 | कोई नहीं | :fox_face: [Well, That Escalated Quickly - Privesc 07](https://labs.bishopfox.com/tech-blog/privilege-escalation-in-aws) |
| IAM-CreateNewPolicyVersion| privesc1 | कोई नहीं | :fox_face: [Well, That Escalated Quickly - Privesc 01](https://labs.bishopfox.com/tech-blog/privilege-escalation-in-aws) <br> :lock: [s3cur3.it IAMVulnerable - Part 1](https://s3cur3.it/home/practicing-aws-security-with-iamvulnerable) |
| IAM-PutGroupPolicy | privesc11 | कोई नहीं | :fox_face: [Well, That Escalated Quickly - Privesc 11](https://labs.bishopfox.com/tech-blog/privilege-escalation-in-aws) |
| IAM-PutRolePolicy | privesc12 | कोई नहीं | :fox_face: [Well, That Escalated Quickly - Privesc 12](https://labs.bishopfox.com/tech-blog/privilege-escalation-in-aws) |
| IAM-PutUserPolicy | privesc10 | कोई नहीं | :fox_face: [Well, That Escalated Quickly - Privesc 10](https://labs.bishopfox.com/tech-blog/privilege-escalation-in-aws) |
| IAM-SetExistingDefaultPolicyVersion | privesc2 | कोई नहीं | :fox_face: [Well, That Escalated Quickly - Privesc 02](https://labs.bishopfox.com/tech-blog/privilege-escalation-in-aws) <br> :lock: [s3cur3.it IAMVulnerable - Part 2](https://s3cur3.it/home/practicing-aws-security-with-iamvulnerable-part-2)|
| **श्रेणी: AWS सेवाओं का उपयोग करके विशेषाधिकार वृद्धि**| | | |
| EC2InstanceConnect-SendSSHPublicKey | privesc-instanceConnect | EC2 | 🔑 [AWS IAM privilege escalation paths](https://pswalia2u.medium.com/aws-iam-privilege-escalation-paths-cba36be1aa9e) |
| CloudFormation-UpdateStack | privesc-cfUpdateStack | CloudFormation | 🔑 [AWS IAM privilege escalation paths](https://pswalia2u.medium.com/aws-iam-privilege-escalation-paths-cba36be1aa9e) |
| Glue-UpdateExistingGlueDevEndpoint| privesc19 | Glue | :fox_face: [Well, That Escalated Quickly - Privesc 19](https://labs.bishopfox.com/tech-blog/privilege-escalation-in-aws) |
| Lambda-EditExistingLambdaFunctionWithRole| privesc17 | Lambda | :fox_face: [Well, That Escalated Quickly - Privesc 17](https://labs.bishopfox.com/tech-blog/privilege-escalation-in-aws) <br> :lock: [s3cur3.it IAMVulnerable - Part 4](https://s3cur3.it/home/practicing-aws-security-with-iamvulnerable-part-4) |
| SageMakerCreatePresignedNotebookURL | privesc-sageUpdateURL | Sagemaker | :rhinoceros: [AWS IAM Privilege Escalation - Method 3](https://rhinosecuritylabs.com/aws/aws-privilege-escalation-methods-mitigation-part-2/) |
| SSM-SendCommand| privesc-ssm-command | EC2 | 🔑 [AWS IAM privilege escalation paths](https://pswalia2u.medium.com/aws-iam-privilege-escalation-paths-cba36be1aa9e) |
| SSM-StartSession | privesc-ssm-session | EC2 | 🔑 [AWS IAM privilege escalation paths](https://pswalia2u.medium.com/aws-iam-privilege-escalation-paths-cba36be1aa9e) |
| STS-AssumeRole | privesc-assumerole | कोई नहीं | 🔑 [AWS IAM privilege escalation paths](https://pswalia2u.medium.com/aws-iam-privilege-escalation-paths-cba36be1aa9e) |
| **श्रेणी: एक AssumeRole नीति को अद्यतन करना** | | | |
| IAM-UpdatingAssumeRolePolicy | privesc14 | कोई नहीं | :fox_face: [Well, That Escalated Quickly - Privesc 14](https://labs.bishopfox.com/tech-blog/privilege-escalation-in-aws) |
# अन्य उपयोग के मामले
#### डिफ़ॉल्ट - कोई `terraform.tfvars` कॉन्फ़िगर नहीं किया गया
* अपने डिफ़ॉल्ट AWS प्रोफ़ाइल का उपयोग करके तैनात करें (डिफ़ॉल्ट)
* सभी बनाई गई भूमिकाएँ Terraform चलाने के लिए उपयोग किए जाने वाले प्रिंसिपल (आपकी डिफ़ॉल्ट प्रोफ़ाइल में निर्दिष्ट) द्वारा ग्रहण की जा सकती हैं
#### Terraform चलाने के लिए डिफ़ॉल्ट के अलावा किसी अन्य प्रोफ़ाइल का उपयोग करें
* `terraform.tfvars.example` को `terraform.tvvars` पर कॉपी करें
* लाइन `#aws_local_profile = "profile_name"` को अनकमेंट करें और वह प्रोफ़ाइल नाम दर्ज करें जिसका आप उपयोग करना चाहते हैं
* यदि आप एक गैर-डिफ़ॉल्ट प्रोफ़ाइल का उपयोग कर रहे हैं, और फिर भी `aws_credentails_file_example` फ़ाइल का उपयोग करना चाहते हैं, तो आप एक AWS क्रेडेंशियल्स फ़ाइल उत्पन्न करने के लिए इस कमांड का उपयोग कर सकते हैं जो आपके गैर-डिफ़ॉल्ट प्रोफ़ाइल नाम के साथ काम करती है (@scriptingislife को धन्यवाद)
* `nondefaultuser` को अपने द्वारा उपयोग किए जा रहे प्रोफ़ाइल नाम से बदलना याद रखें):
* `tail -n +7 aws_credentials_file_example | sed -e "s/111111111111/$(aws sts get-caller-identity | grep Account | awk -F\" '{print $4}')/g;s/default/nondefaultuser/g" >> ~/.aws/credentials`
#### कॉलर के अलावा किसी अन्य ARN का उपयोग उस प्रिंसिपल के रूप में करें जो नवनिर्मित भूमिकाओं को ग्रहण कर सकता है
* `terraform.tfvars.example` को `terraform.tvvars` पर कॉपी करें
* लाइन `#aws_assume_role_arn = "arn:aws:iam::112233445566:user/you"` को अनकमेंट करें और वह ARN दर्ज करें जिसका आप उपयोग करना चाहते हैं
एक बार बनने के बाद, प्रत्येक privesc भूमिका आपके द्वारा निर्दिष्ट प्रिंसिपल (ARN) द्वारा ग्रहण की जा सकेगी।
#### संसाधन को खाता X में बनाएँ, लेकिन खाता Y से एक ARN का उपयोग उस प्रिंसिपल के रूप में करें जो नवनिर्मित भूमिकाओं को ग्रहण कर सकता है
यदि आपने AWS CLI प्रोफ़ाइलों को कॉन्फ़िगर किया है जो अन्य खातों में भूमिकाएँ ग्रहण करती हैं, तो आप प्रोफ़ाइल नाम निर्दिष्ट करना चाहेंगे और मैन्युअल रूप से वह ARN निर्दिष्ट करना चाहेंगे जिसका उपयोग आप विभिन्न भूमिकाओं में ग्रहण करने के लिए करना चाहते हैं।
नीचे दिए गए उदाहरण में, संसाधन उस खाते में बनाए जाएंगे जो `"prod-cross-org-access-role"` से जुड़ा है, लेकिन Terraform द्वारा बनाई गई प्रत्येक भूमिका `"arn:aws:iam::112233445566:user/you"` द्वारा एक्सेस की जा सकती है, जो दूसरे खाते से संबंधित है।```
aws_local_profile = "prod-cross-org-access-role"
aws_assume_role_arn = "arn:aws:iam::112233445566:user/you"
ये सभी उपकरण AWS पर जानबूझकर कमजोर बुनियादी ढाँचा तैनात करने के लिए Terraform का उपयोग करते हैं। हालाँकि, IAM Vulnerable का ध्यान IAM विशेषाधिकार वृद्धि पर है, जबकि अन्य उपकरण या तो IAM privesc को कवर नहीं करते हैं या केवल कुछ परिदृश्यों को ही कवर करते हैं।
ये सभी उपकरण आपके AWS वातावरण में मौजूदा गलत कॉन्फ़िगरेशन की पहचान करने में मदद करते हैं। कुछ, जैसे Pacu, आपको गलत कॉन्फ़िगरेशन का शोषण करने में भी मदद करते हैं। इसके विपरीत, IAM Vulnerable जानबूझकर कमजोर बुनियादी ढाँचा बनाता है। यदि आप वास्तव में Principal Mapper (PMapper), AWSPX, Pacu, और Cloudsplaining जैसे उपकरणों का उपयोग करना सीखना चाहते हैं, तो IAM Vulnerable आपके लिए है।
यहाँ कुछ चीज़ें हैं जो आपकी चिंता कम कर सकती हैं:
terraform plan कमांड एक ड्राई रन है। यह आपको बिल्कुल दिखाता है कि यदि आप वास्तव में इसे चलाने से पहले terraform apply चलाते हैं तो क्या तैनात किया जाएगा।terraform apply की गई किसी भी चीज़ को terraform destroy कर सकते हैं।iam-vulnerable जैसी Terraform निर्देशिका में निष्पादित करें। यह उपकरण terraform plan चलाता है और वर्तमान में कॉन्फ़िगर की गई योजना से जुड़ी मासिक लागत की गणना करता है। यह वही उपकरण है जिसका उपयोग मैंने मॉड्यूल लागत अनुमान तालिका ऊपर को भरने के लिए किया था।हाँ। प्रत्येक उपकरण अपनी Terraform स्थिति को अलग-अलग रखेगा, लेकिन सभी संसाधन एक ही खाते में बनाए, अद्यतन और हटाए जाएंगे, और वे सह-अस्तित्व कर सकते हैं।
terraform applycp ~/.aws/credentials ~/.aws/credentials.backuptail -n +7 aws_credentials_file_example | sed s/111111111111/$(aws sts get-caller-identity | grep Account | awk -F\" '{print $4}')/g >> ~/.aws/credentials