
Azure RedOps هو مجموعة أدوات أمنية هجومية لتقييم الوضع الأمني لـ Microsoft Entra ID
أداة Swiss Army لعمليات الفريق الأحمر على Azure / Entra ID.
المؤلف: Mr.Un1k0d3r (TrueCyber Inc) الإصدار: 0.1 اللغة: Python 3.12+
AzureRedOps عبارة عن مجموعة أدوات أمنية هجومية لتقييم الوضع الأمني لمستأجري Microsoft Entra ID وAzure. يغلف سير العمل الأكثر شيوعًا للفريق الأحمر — المصادقة، وإدارة الرموز، وتعداد الدليل، والتحقق من الامتيازات، ورش كلمات المرور، وإجراءات ما بعد الاستغلال ضد Microsoft Graph — خلف واجهة CLI واحدة متسقة تعتمد على --activity.
يتم تحديد كل عملية باستخدام -a/--activity. يمكن تخزين الرموز التي تم الحصول عليها أثناء المصادقة محليًا (.azure_creds) وإعادة استخدامها بالاسم عبر -l/--load-access-token، لذا نادرًا ما تضطر إلى لصق رموز JWT الخام.
تعرف على المزيد حول الأداة على مدونة CYPFER
.azure_creds). يمكن لأي تدفق حفظ رموزه تلقائيًا باستخدام -s/--save + -n/--name.auth) — مصادقة مباشرة باسم المستخدم/كلمة المرور.phish-start / phish-capture) — استغلال منح تفويض الجهاز في OAuth لالتقاط الرموز الصادرة عندما يدخل الهدف رمز المستخدم الخاص بك في microsoft.com/devicelogin. يتم الالتقاط تلقائيًا افتراضيًا.auth-app) — تدفق رمز التفويض الكامل + PKCE مقابل تسجيل تطبيق مخصص، يقدمه مستمع HTTPS محلي مدمج يستقبل إعادة التوجيه.auth-interactive) — قم بقيادة متصفح حقيقي (Playwright؛ Firefox افتراضيًا، و-br للتبديل) (يتعامل مع MFA / الوصول الشرطي / SSO)، ثم اجمع كل رمز من جلسة HAR المسجلة.refresh) — استبدل رمز التحديث برموز وصول جديدة.obo) — استبدال رمز وصول صادر مسبقًا برمز جديد مخصص لمورد نهائي (OAuth 2.0 jwt-bearer / OBO).browser-sso) — افتح متصفحًا حقيقيًا تمت مصادقته بالفعل كمستخدم مباشرة في تطبيق الويب المستهدف (Outlook على الويب، Teams، SharePoint، بوابة Azure، ...). مع -aprt/--auto-prt يقوم تلقائيًا بسك ملف تعريف ارتباط Primary Refresh Token (PRT) من رمز التحديث (تسجيل الجهاز → PRT → x-ms-RefreshTokenCredential)، بحيث يكمل متصفح جديد تسجيل الدخول الأحادي دون تسجيل دخول يدوي.gather-all الشامل.spray) ورش رموز التحديث عبر التطبيقات (spray-refresh).magic-app التطبيقات القابلة لإعادة التوجيه علنًا بموافقة AllPrincipals؛ وقوائم مدمجة بمعرّفات تطبيقات Microsoft المعروفة/المهمة.requirements.txt):
PyJWTrequestsplaywrightcryptography (مطلوب فقط لـ browser-sso -aprt، تدفق PRT التلقائي)auth-interactive، browser-sso). Firefox هو المحرك الافتراضي (-br/--browser)؛ قم بتثبيته باستخدام python -m playwright install firefox.includes/web/cert.pem وincludes/web/key.pem (مطلوبة فقط لتدفق auth-app PKCE — انظر الملاحظات).git clone AzureRedOps cd AzureRedOps
python3 -m venv AzureRedOps source AzureRedOps/bin/activate # Linux / macOS
pip install -r requirements.txt
python -m playwright install firefox
شغّل الأداة:```bash
python3 AzureRedOps.py -a <activity> [options]
النمط العام للاستدعاء هو:```bash python3 AzureRedOps.py -a [authentication] [activity options] [global options]
### تقديم رمز مميز (Token)
الأنشطة التي تستدعي Microsoft Graph تحتاج إلى رمز وصول (access token). يمكنك توفيره بطريقتين:
| الطريقة | العلامة | مثال |
|--------|------|---------|
| تمرير رمز مميز خام | `-ac, --access-token` | `-ac eyJ0eXAi...` |
| تحميل رمز مميز مخزّن بالاسم | `-l, --load-access-token` | `-l mytoken` |
عند استخدام `-l`، يتم قراءة `access_token` المطابق (وكذلك `refresh_token`
و`tenant` عند الحاجة) من مخزن `.azure_creds`.
### حفظ الرموز المميزة في ملف (`-s` / `-n`)
أي نشاط يحصل على رموز مميزة (`auth`, `auth-app`, `auth-interactive`,
`phish-start`/`phish-capture`, `refresh`) يمكنه **حفظها تلقائيًا** في
مخزن الاعتماديات المحلي (`.azure_creds`) عن طريق إضافة `-s/--save` مع
`-n/--name`:```bash
# Authenticate and save the resulting tokens under the name "victim1"
python3 AzureRedOps.py -a auth -u [email protected] -p 'P@ssw0rd!' -tid <tenant-guid> -s -n victim1
-s/--save يُفعّل الحفظ التلقائي؛ يتطلب -n/--name — يخرج البرنامج برسالة
خطأ إذا كان -n مفقودًا.-n/--name هو المفتاح الذي يُخزَّن تحته الرمز المميز (token). يمكنك لاحقًا إعادة استخدامه مع
-l victim1 بدلاً من لصق JWT الخام، أو عرضه باستخدام -a view -n victim1، أو
حذفه باستخدام -a delete -n victim1.auth-interactive يحفظ تلقائيًا دائمًا وسيطالبك بإدخال اسم
بشكل تفاعلي إذا لم يتم توفير -n.-j)معظم أنشطة التعداد (list-users, list-applications, list-principals,
gather-all, raw-url) تقبل -j/--json <filename> لكتابة استجابة API الخام
في ملف JSON بدلاً من طباعتها (أو بالإضافة إلى طباعتها):```bash
python3 AzureRedOps.py -a list-users -l victim1 -j users.json
بالنسبة إلى `gather-all`، يُستخدم اسم الملف المقدَّم كلاحقة ويُكتب ملف واحد
لكل نقطة نهاية في Graph (مثل `users-<name>`، `groups-<name>`، ...).
> ملاحظة: يتحكم `-j` في تصدير JSON المنظّم، بينما يقوم `-re/--redirect-to-file` بعكس
> مخرجات وحدة التحكم المنسّقة إلى `output.txt`. الاثنان مستقلان عن بعضهما.
### معرّفات المستأجر (Tenant)
- `-t, --tenant` يتوقع **اسم نطاق** (مثل `contoso.com`) ويُستخدم في نشاط `id`.
- `-tid, --tenant-id` يتوقع **GUID المستأجر** أو `common`، ويُستخدم في أنشطة المصادقة.
---
## خيارات سطر الأوامر