اختبار اختراق السحابة والتقييم
تعداد السحابة والاستطلاع
4 دقيقة للقراءة
الاستطلاع الفعال للسحابة يحدد مسارات الهجوم قبل الاستغلال. فهم كيفية تعداد خدمات السحابة واكتشاف الأخطاء في التكوين ورسم علاقات الثقة أساسي لاختبار أمان السحابة.
تعداد AWS
اكتشاف الهوية
# الحصول على الهوية الحالية
aws sts get-caller-identity
# الإخراج:
# {
# "UserId": "AIDAEXAMPLE123456789",
# "Account": "123456789012",
# "Arn": "arn:aws:iam::123456789012:user/compromised-user"
# }
# الحصول على أسماء الحساب المستعارة
aws iam list-account-aliases
تعداد IAM
# قائمة جميع المستخدمين
aws iam list-users
# الحصول على تفاصيل المستخدم
aws iam get-user --user-name target-user
# قائمة سياسات المستخدم (inline)
aws iam list-user-policies --user-name target-user
# قائمة السياسات المرفقة (managed)
aws iam list-attached-user-policies --user-name target-user
# الحصول على تفاصيل السياسة
aws iam get-policy-version \
--policy-arn arn:aws:iam::123456789012:policy/CustomPolicy \
--version-id v1
# قائمة الأدوار وسياسات الثقة
aws iam list-roles
aws iam get-role --role-name interesting-role
تعداد الخدمات
# EC2 instances
aws ec2 describe-instances \
--query 'Reservations[*].Instances[*].[InstanceId,State.Name,PublicIpAddress,IamInstanceProfile]'
# دوال Lambda
aws lambda list-functions
aws lambda get-function --function-name target-function
aws lambda get-policy --function-name target-function # سياسة المورد
# S3 buckets
aws s3 ls
aws s3 ls s3://bucket-name --recursive
# قواعد بيانات RDS
aws rds describe-db-instances
# Secrets Manager
aws secretsmanager list-secrets
aws secretsmanager get-secret-value --secret-id secret-name
# Parameter Store
aws ssm describe-parameters
aws ssm get-parameter --name /path/to/secret --with-decryption
اكتشاف الشبكة
# VPCs
aws ec2 describe-vpcs
# مجموعات الأمان
aws ec2 describe-security-groups \
--query 'SecurityGroups[*].[GroupId,GroupName,IpPermissions]'
# البحث عن الموارد القابلة للوصول العام
aws ec2 describe-instances \
--filters "Name=instance-state-name,Values=running" \
--query 'Reservations[*].Instances[?PublicIpAddress!=`null`].[InstanceId,PublicIpAddress]'
تعداد Azure
المصادقة والسياق
# سياق المستخدم الحالي
az account show
az ad signed-in-user show
# قائمة الاشتراكات القابلة للوصول
az account list
# تبديل الاشتراك
az account set --subscription "subscription-name"
تعداد الموارد
# قائمة جميع الموارد في الاشتراك
az resource list --output table
# الآلات الافتراضية
az vm list --output table
az vm show --name vm-name --resource-group rg-name
# حسابات التخزين
az storage account list
az storage container list --account-name storage-account
# Key Vaults
az keyvault list
az keyvault secret list --vault-name vault-name
# App Services
az webapp list
az webapp config appsettings list --name app-name --resource-group rg-name
تعداد Azure AD
# المستخدمون
az ad user list --query "[].{UPN:userPrincipalName,DisplayName:displayName}"
# المجموعات
az ad group list
az ad group member list --group "group-name"
# Service principals
az ad sp list --all
# تسجيلات التطبيقات
az ad app list --all
# تعيينات الأدوار
az role assignment list --all
تعداد GCP
سياق المصادقة
# التكوين الحالي
gcloud config list
# الحساب النشط
gcloud auth list
# معلومات المشروع
gcloud projects describe PROJECT_ID
تعداد الخدمات
# Compute instances
gcloud compute instances list
# Cloud Storage
gsutil ls
gsutil ls gs://bucket-name
# Cloud Functions
gcloud functions list
gcloud functions describe function-name
# Cloud Run
gcloud run services list
# Secret Manager
gcloud secrets list
gcloud secrets versions access latest --secret="secret-name"
# سياسات IAM
gcloud projects get-iam-policy PROJECT_ID
gcloud iam service-accounts list
التعداد بدون مصادقة
اكتشاف التخزين العام
# S3 - الوصول المجهول
aws s3 ls s3://company-bucket --no-sign-request
# Azure Blob - حاوية عامة
curl "https://storage.blob.core.windows.net/container?restype=container&comp=list"
# GCP - bucket عام
gsutil ls gs://company-bucket
# أدوات آلية
# cloud_enum - تعداد متعدد السحابات
python3 cloud_enum.py -k company-name
# S3Scanner
s3scanner scan --bucket-file buckets.txt
استغلال خدمة البيانات الوصفية
AWS EC2 metadata (من instance مخترق):
# IMDSv1 (إذا كان متاحاً)
curl http://169.254.169.254/latest/meta-data/
curl http://169.254.169.254/latest/meta-data/iam/security-credentials/role-name
# IMDSv2 (يتطلب رمز)
TOKEN=$(curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600")
curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/iam/security-credentials/role-name
Azure IMDS:
curl -H "Metadata: true" "http://169.254.169.254/metadata/instance?api-version=2021-02-01"
curl -H "Metadata: true" "http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https://management.azure.com/"
GCP metadata:
curl -H "Metadata-Flavor: Google" "http://metadata.google.internal/computeMetadata/v1/instance/"
curl -H "Metadata-Flavor: Google" "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/token"
رسم علاقات الثقة
الثقة عبر الحسابات (AWS)
# البحث عن الأدوار التي تثق بحسابات خارجية
aws iam list-roles --query 'Roles[?contains(AssumeRolePolicyDocument.Statement[0].Principal.AWS, `arn:aws:iam::`) && !contains(AssumeRolePolicyDocument.Statement[0].Principal.AWS, `'"$(aws sts get-caller-identity --query Account --output text)"'`)]'
# تحليل ثقة دور محدد
aws iam get-role --role-name CrossAccountRole \
--query 'Role.AssumeRolePolicyDocument'
العلاقات المرتبطة بالخدمة
# البحث عن أدوار تنفيذ Lambda
aws lambda list-functions \
--query 'Functions[*].[FunctionName,Role]'
# EC2 instance profiles
aws ec2 describe-instances \
--query 'Reservations[*].Instances[*].[InstanceId,IamInstanceProfile.Arn]'
مرجع سريع للتعداد
| السحابة | الهوية | الموارد | الأسرار |
|---|---|---|---|
| AWS | sts get-caller-identity |
ec2/s3/lambda list |
secretsmanager/ssm |
| Azure | az account show |
az resource list |
az keyvault |
| GCP | gcloud config list |
gcloud compute/storage |
gcloud secrets |
التالي، سنستكشف تقنيات الاستغلال وتصعيد الصلاحيات في بيئات السحابة. :::