
استخدم Terraform لإنشاء ساحة تدريب ضعيفة بالتصميم خاصة بتصعيد الامتيازات في AWS IAM.
استخدم Terraform لإنشاء ملعب تصعيد الصلاحيات الخاص بك في AWS IAM القابل للاختراق عن طريق التصميم.

يستخدم IAM Vulnerable ملف Terraform الثنائي وبيانات اعتماد AWS الخاصة بك لنشر أكثر من 250 موردًا من موارد IAM في حساب AWS المحدد. في غضون دقائق، يمكنك البدء في تعلم كيفية تحديد واستغلال تكوينات IAM القابلة للاختراق والتي تسمح بتصعيد الصلاحيات.
مرحبًا بالجميع. لا يزال IAM Vulnerable مفيدًا جدًا لفهم اللبنات الأساسية لتصعيد صلاحيات AWS IAM. ومع ذلك، بعد بضع سنوات من إنشاء IAM Vulnerable، قمت بإنشاء CloudFoxable، وهو إصدار بأسلوب CTF يعلمك أساسيات اختبار الاختراق السحابي بشكل أكثر شمولية. - @sethsec
انضم إلينا على خادم RedSec على Discord
🦊 مسارات تصعيد الصلاحيات المدعومة حاليًا: 31
منشور مدونة: IAM Vulnerable - ملعب تصعيد صلاحيات AWS IAM
يحدد هذا البدء السريع نهجًا رأييًا لتشغيل IAM Vulnerable في حساب AWS الخاص بك بأسرع وقت ممكن. قد تكون لديك العديد من هذه الخطوات مكتملة بالفعل، أو قد ترغب في تعديل بعض الأمور لتعمل مع تكوينك الحالي. راجع قسم حالات استخدام أخرى في هذا المستودع للحصول على بعض خيارات التكوين الإضافية.
aws sts get-caller-identity.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التنظيف البديل (عند فقدان حالة Terraform)
في حالة قمت فيها بنشر iam-vulnerable باستخدام Terraform ولكن لم يعد لديك إمكانية الوصول إلى ملف الحالة (و terraform destroy لا يعمل)، يمكنك استخدام نصوص التنظيف التالية:```bash
./cleanup-scripts/cleanup_iam_vulnerable.py --dry-run
./cleanup-scripts/cleanup_iam_vulnerable.sh --dry-run
سوف تقوم هذه البرامج النصية بـ:
- تحديد جميع موارد IAM المعرضة للخطر تلقائيًا في حساب AWS الخاص بك
- إظهار ما سيتم حذفه بالضبط قبل المتابعة
- حذف الموارد بالترتيب الصحيح لتجنب تعارضات التبعيات
- دعم ملفات تعريف AWS وتوفير تسجيل مفصل
**هام**: قم دائمًا بتشغيل الأمر `--dry-run` أولاً لرؤية ما سيتم حذفه. راجع `cleanup-scripts/CLEANUP_README.md` للحصول على تعليمات الاستخدام المفصلة.
## ما هي الموارد التي تم إنشاؤها للتو؟
لقد استخدم ثنائي Terraform بيانات اعتماد ملف التعريف الافتراضي لحساب AWS الخاص بك لإنشاء:
* **31 مستخدمًا ودورًا وسياسة** كل منها له مسار استغلال فريد للوصول الإداري إلى حساب الملعب
* بعض المستخدمين والمجموعات والأدوار والسياسات الإضافية المطلوبة لتحقيق مسارات استغلال معينة بشكل كامل
* بعض المستخدمين والأدوار والسياسات الإضافية التي تختبر قدرات الكشف للأدوات الأخرى
افتراضيًا، يمكن لكل دور تم إنشاؤه بواسطة وحدة Terraform هذه أن يتحمله المستخدم أو الدور الذي استخدمته لتشغيل Terraform.
* إذا كنت ترغب في أن يستخدم Terraform ملف تعريف آخر غير ملف التعريف الافتراضي، أو إذا كنت ترغب في ترميز ARN لسياسة `assume_role_policy` بشكل ثابت، فانظر [حالات الاستخدام الأخرى](#other-use-cases).
## كم ستتكلف؟
نشر IAM vulnerable في **تكوينه الافتراضي لن يكلف شيئًا**. راجع القسم التالي لمعرفة كيفية تمكين الوحدات غير الافتراضية التي تتسبب في تكاليف، ومقدار تكلفة كل وحدة شهريًا إذا قمت بنشرها.
# نهج معياري
تقوم IAM Vulnerable بتجميع موارد معينة معًا في وحدات. بعض الوحدات مفعلة افتراضيًا (تلك التي ليس لها أي آثار تكلفة)، والبعض الآخر معطل افتراضيًا (تلك التي تتسبب في تكاليف إذا تم نشرها). بهذه الطريقة، يمكنك تمكين وحدات محددة حسب الحاجة.
على سبيل المثال، عندما تكون مستعدًا للعب بمسارات الاستغلال مثل `ssm:StartSession` التي تتضمن موارد خارج IAM، يمكنك نشر وإزالة هذه الموارد عند الطلب عن طريق إلغاء تعليق الوحدة في ملف `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.
## وحدات الموارد المجانية
لا توجد تكلفة لأي شيء يتم نشره داخل `free-resources`:
| الاسم | الحالة الافتراضية | التكلفة المقدرة | الوصف |
| --- | --- | --- | --- |
| privesc-paths | مفعّل | لا شيء | يحتوي على جميع مسارات تصعيد الصلاحيات في IAM |
| tool-testing | مفعّل | لا شيء | يحتوي على حالات اختبار تقيّم قدرات أدوات تصعيد الصلاحيات المختلفة في IAM |
## وحدات الموارد غير المجانية
قد ينتج عن نشر هذه الوحدات الإضافية تكلفة:
| الاسم | الحالة الافتراضية | التكلفة المقدرة | الوصف | مطلوب لـ |
| --- | --- | --- | --- | --- |
| 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 | `Glue-UpdateExistingGlueDevEndpoint` |
| SageMaker | معطّل | غير متأكد بعد | ينشئ دفتر ملاحظات SageMaker | `sageMakerCreatePresignedNotebookURL` |
| CloudFormation | معطّل | :slightly_smiling_face: <br> 0.40 دولار/شهر للسر الذي تم إنشاؤه عبر CloudFormation. لا شيء أو لا يُذكر بالنسبة للـ stack نفسه | ينشئ مكدس CloudFormation يقوم بإنشاء سر في مدير الأسرار | `privesc-cloudFormationUpdateStack` |
# مسارات تصعيد الصلاحيات المدعومة
| اسم المسار | اسم الملف الشخصي الضعيف في IAM | الوحدات الإضافية المطلوبة غير الافتراضية | مراجع الاستغلال |
| --- | --- | --- | --- |
| **الفئة: صلاحيات IAM على مستخدمين آخرين** | | | |
| IAM-CreateAccessKey | privesc4 | لا شيء | :fox_face: [حسنًا، لقد تصاعدت الأمور بسرعة - Privesc 04](https://labs.bishopfox.com/tech-blog/privilege-escalation-in-aws) <br> :lock: [s3cur3.it IAMVulnerable - الجزء 3](https://s3cur3.it/home/practicing-aws-security-with-iamvulnerable-part-3) |
| IAM-CreateLoginProfile | privesc5 | لا شيء | :fox_face: [حسنًا، لقد تصاعدت الأمور بسرعة - Privesc 05](https://labs.bishopfox.com/tech-blog/privilege-escalation-in-aws) <br> :lock: [s3cur3.it IAMVulnerable - الجزء 3](https://s3cur3.it/home/practicing-aws-security-with-iamvulnerable-part-3) |
| IAM-UpdateLoginProfile | privesc6 | لا شيء | :fox_face: [حسنًا، لقد تصاعدت الأمور بسرعة - Privesc 06](https://labs.bishopfox.com/tech-blog/privilege-escalation-in-aws) <br> :lock: [s3cur3.it IAMVulnerable - الجزء 3](https://s3cur3.it/home/practicing-aws-security-with-iamvulnerable-part-3) |
| **الفئة: تمرير الدور (PassRole) إلى خدمة** | | | |
| CloudFormation-PassExistingRoleToCloudFormation | privesc20 | لا شيء |:fox_face: [حسنًا، لقد تصاعدت الأمور بسرعة - Privesc 20](https://labs.bishopfox.com/tech-blog/privilege-escalation-in-aws) |
| CodeBuild-CreateProjectPassRole| privesc-codeBuildProject | لا شيء | |
| DataPipeline-PassExistingRoleToNewDataPipeline| privesc21 | لا شيء | :fox_face: [حسنًا، لقد تصاعدت الأمور بسرعة - Privesc 21](https://labs.bishopfox.com/tech-blog/privilege-escalation-in-aws) |
| EC2-CreateInstanceWithExistingProfile| privesc3 | لا شيء | :fox_face: [حسنًا، لقد تصاعدت الأمور بسرعة - Privesc 03](https://labs.bishopfox.com/tech-blog/privilege-escalation-in-aws) <br> :lock: [s3cur3.it IAMVulnerable - الجزء 2](https://s3cur3.it/home/practicing-aws-security-with-iamvulnerable-part-2) |
| Glue-PassExistingRoleToNewGlueDevEndpoint | privesc18 | لا شيء | :fox_face: [حسنًا، لقد تصاعدت الأمور بسرعة - Privesc 18](https://labs.bishopfox.com/tech-blog/privilege-escalation-in-aws) |
| Lambda-PassExistingRoleToNewLambdaThenInvoke | privesc15 | لا شيء | :fox_face: [حسنًا، لقد تصاعدت الأمور بسرعة - Privesc 15](https://labs.bishopfox.com/tech-blog/privilege-escalation-in-aws) |
| Lambda-PassRoleToNewLambdaThenTrigger | privesc16 | لا شيء | :fox_face: [حسنًا، لقد تصاعدت الأمور بسرعة - Privesc 16](https://labs.bishopfox.com/tech-blog/privilege-escalation-in-aws) |
| SageMaker-CreateNotebookPassRole | privesc-sageNotebook | لا شيء | :rhinoceros: [تصعيد صلاحيات IAM في AWS - الطريقة 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: [حسنًا، لقد تصاعدت الأمور بسرعة - Privesc 13](https://labs.bishopfox.com/tech-blog/privilege-escalation-in-aws) |
| IAM-AttachGroupPolicy| privesc8 | لا شيء | :fox_face: [حسنًا، لقد تصاعدت الأمور بسرعة - Privesc 08](https://labs.bishopfox.com/tech-blog/privilege-escalation-in-aws) |
| IAM-AttachRolePolicy| privesc9 | لا شيء | :fox_face: [حسنًا، لقد تصاعدت الأمور بسرعة - Privesc 09](https://labs.bishopfox.com/tech-blog/privilege-escalation-in-aws) |
| IAM-AttachUserPolicy| privesc7 | لا شيء | :fox_face: [حسنًا، لقد تصاعدت الأمور بسرعة - Privesc 07](https://labs.bishopfox.com/tech-blog/privilege-escalation-in-aws) |
| IAM-CreateNewPolicyVersion| privesc1 | لا شيء | :fox_face: [حسنًا، لقد تصاعدت الأمور بسرعة - Privesc 01](https://labs.bishopfox.com/tech-blog/privilege-escalation-in-aws) <br> :lock: [s3cur3.it IAMVulnerable - الجزء 1](https://s3cur3.it/home/practicing-aws-security-with-iamvulnerable) |
| IAM-PutGroupPolicy | privesc11 | لا شيء | :fox_face: [حسنًا، لقد تصاعدت الأمور بسرعة - Privesc 11](https://labs.bishopfox.com/tech-blog/privilege-escalation-in-aws) |
| IAM-PutRolePolicy | privesc12 | لا شيء | :fox_face: [حسنًا، لقد تصاعدت الأمور بسرعة - Privesc 12](https://labs.bishopfox.com/tech-blog/privilege-escalation-in-aws) |
| IAM-PutUserPolicy | privesc10 | لا شيء | :fox_face: [حسنًا، لقد تصاعدت الأمور بسرعة - Privesc 10](https://labs.bishopfox.com/tech-blog/privilege-escalation-in-aws) |
| IAM-SetExistingDefaultPolicyVersion | privesc2 | لا شيء | :fox_face: [حسنًا، لقد تصاعدت الأمور بسرعة - Privesc 02](https://labs.bishopfox.com/tech-blog/privilege-escalation-in-aws) <br> :lock: [s3cur3.it IAMVulnerable - الجزء 2](https://s3cur3.it/home/practicing-aws-security-with-iamvulnerable-part-2)|
| **الفئة: تصعيد الصلاحيات باستخدام خدمات AWS**| | | |
| EC2InstanceConnect-SendSSHPublicKey | privesc-instanceConnect | EC2 | 🔑 [مسارات تصعيد صلاحيات IAM في AWS](https://pswalia2u.medium.com/aws-iam-privilege-escalation-paths-cba36be1aa9e) |
| CloudFormation-UpdateStack | privesc-cfUpdateStack | CloudFormation | 🔑 [مسارات تصعيد صلاحيات IAM في AWS](https://pswalia2u.medium.com/aws-iam-privilege-escalation-paths-cba36be1aa9e) |
| Glue-UpdateExistingGlueDevEndpoint| privesc19 | Glue | :fox_face: [حسنًا، لقد تصاعدت الأمور بسرعة - Privesc 19](https://labs.bishopfox.com/tech-blog/privilege-escalation-in-aws) |
| Lambda-EditExistingLambdaFunctionWithRole| privesc17 | Lambda | :fox_face: [حسنًا، لقد تصاعدت الأمور بسرعة - Privesc 17](https://labs.bishopfox.com/tech-blog/privilege-escalation-in-aws) <br> :lock: [s3cur3.it IAMVulnerable - الجزء 4](https://s3cur3.it/home/practicing-aws-security-with-iamvulnerable-part-4) |
| SageMakerCreatePresignedNotebookURL | privesc-sageUpdateURL | Sagemaker | :rhinoceros: [تصعيد صلاحيات IAM في AWS - الطريقة 3](https://rhinosecuritylabs.com/aws/aws-privilege-escalation-methods-mitigation-part-2/) |
| SSM-SendCommand| privesc-ssm-command | EC2 | 🔑 [مسارات تصعيد صلاحيات IAM في AWS](https://pswalia2u.medium.com/aws-iam-privilege-escalation-paths-cba36be1aa9e) |
| SSM-StartSession | privesc-ssm-session | EC2 | 🔑 [مسارات تصعيد صلاحيات IAM في AWS](https://pswalia2u.medium.com/aws-iam-privilege-escalation-paths-cba36be1aa9e) |
| STS-AssumeRole | privesc-assumerole | لا شيء | 🔑 [مسارات تصعيد صلاحيات IAM في AWS](https://pswalia2u.medium.com/aws-iam-privilege-escalation-paths-cba36be1aa9e) |
| **الفئة: تحديث سياسة AssumeRole** | | | |
| IAM-UpdatingAssumeRolePolicy | privesc14 | لا شيء | :fox_face: [حسنًا، لقد تصاعدت الأمور بسرعة - 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، ولكن استخدام ARN من الحساب Y كجهة رئيسية يمكنها تولي الأدوار المنشأة حديثًا
إذا كنت قد قمت بتكوين ملفات تعريف 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"
جميع هذه الأدوات تستخدم Terraform لنشر بنية تحتية ضعيفة عن قصد في AWS. ومع ذلك، يركز IAM Vulnerable على تصعيد صلاحيات IAM، بينما الأدوات الأخرى إما لا تغطي تصعيد صلاحيات IAM أو تغطي بعض السيناريوهات فقط.
تساعد كل هذه الأدوات في تحديد التكوينات الخاطئة الموجودة في بيئة AWS الخاصة بك. بعضها، مثل Pacu، يساعدك أيضًا في استغلال التكوينات الخاطئة. على النقيض من ذلك، يقوم IAM Vulnerable بإنشاء بنية تحتية ضعيفة عن قصد. إذا كنت ترغب حقًا في تعلم كيفية استخدام أدوات مثل Principal Mapper (PMapper)، وAWSPX، وPacu، وCloudsplaining، فإن IAM Vulnerable مناسب لك.
كنت أيضًا خائفًا من Terraform والمشاريع التي تنشئ موارد في حسابي قبل أن أعرف كيف يعمل Terraform. إليك بعض الأشياء التي قد تخفف من قلقك:
terraform plan هو تشغيل تجريبي. يُظهر لك بالضبط ما سيتم نشره إذا قمت بتشغيل terraform apply قبل تنفيذه فعليًا.terraform destroy لإزالة أي شيء قمت بتطبيقه باستخدام terraform apply لتحصل على لوحة نظيفة.iam-vulnerable. تقوم هذه الأداة بتشغيل 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