دليل BloodHound المختصر
نظرة عامة
BloodHound هي أداة مفتوحة المصدر تستخدم نظرية الرسوم البيانية للكشف عن العلاقات المخفية وغير المقصودة داخل بيئة Active Directory (AD). تساعد المتخصصين في الأمن على تحديد مسارات الهجوم المعقدة التي يستحيل اكتشافها يدويًا. يتكون BloodHound من مكونين رئيسيين:
# Download Neo4j from https://neo4j.com/download/
# Extract the ZIP file
# Open command prompt as administrator
cd C:\path\to\neo4j\bin
neo4j.bat install-service
neo4j.bat start
```**SharpHound**: جامع البيانات الذي يجمع المعلومات من Active Directory```powershell
# Download BloodHound from https://github.com/BloodHoundAD/BloodHound/releases
# Extract the ZIP file
# Run BloodHound.exe
```**واجهة BloodHound الرسومية**: الواجهة الرسومية التي تصور وتحلل البيانات المجمعة
Would you like me to continue translating the rest of the document?```bash
sudo apt update
sudo apt install bloodhound neo4j
# Start Neo4j service
sudo neo4j start
# Launch BloodHound
bloodhound
macOS
# Install Homebrew if not already installed
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
# Install Neo4j and BloodHound
brew install neo4j bloodhound
# Start Neo4j service
brew services start neo4j
# Launch BloodHound
bloodhound
BloodHound Community Edition (Docker)
# Install BloodHound CLI
curl -L https://github.com/SpecterOps/BloodHound/releases/latest/download/bloodhound-cli-linux-amd64 -o bloodhound-cli
chmod +x bloodhound-cli
sudo mv bloodhound-cli /usr/local/bin/
# Deploy BloodHound CE
bloodhound-cli deploy
Data Collection
SharpHound (Windows Executable)
Basic Collection
# Download SharpHound
Invoke-WebRequest -Uri https://github.com/BloodHoundAD/SharpHound/releases/latest/download/SharpHound.exe -OutFile SharpHound.exe
# Run SharpHound with default collection methods
.\SharpHound.exe --CollectionMethods All
Collection Methods
| طريقة | وصف |
|---|---|
All | اجمع كل البيانات |
Group | جمع معلومات عضوية المجموعة |
LocalGroup | جمع معلومات المسؤول المحلي |
GPOLocalGroup | جمع معلومات المسؤول المحلي عبر GPO |
Session | جمع معلومات الجلسة |
LoggedOn | جمع معلومات المستخدم المسجل الدخول |
Trusts | جمع معلومات الثقة بالنطاق |
ACL | جمع معلومات ACL |
Container | جمع معلومات الحاوية |
RDP | جمع معلومات مستخدمي سطح المكتب عن بعد Remote Desktop Users |
ObjectProps | جمع خصائص الكائن |
DCOM | جمع معلومات DCOM |
SPNTargets | جمع معلومات Service Principal Name |
PSRemote | جمع معلومات PowerShell Remoting |
Advanced Collection Options
# Collect specific data types
.\SharpHound.exe --CollectionMethods Group,LocalGroup,Session,ACL
# Collect data with stealth options (slower but less noisy)
.\SharpHound.exe --CollectionMethods All --Stealth
# Collect data from specific domain
.\SharpHound.exe --CollectionMethods All --Domain example.com
# Collect data with LDAP filtering
.\SharpHound.exe --CollectionMethods All --LdapFilter "(objectClass=user)"
# Collect data from specific OU
.\SharpHound.exe --CollectionMethods All --SearchBase "OU=Servers,DC=example,DC=com"
# Collect data with specific naming context
.\SharpHound.exe --CollectionMethods All --DomainController dc01.example.com
SharpHound PowerShell Module
Basic Collection
# Import SharpHound module
Import-Module .\SharpHound.ps1
# Run SharpHound with default collection methods
Invoke-BloodHound -CollectionMethod All
Advanced Collection Options
# Collect specific data types
Invoke-BloodHound -CollectionMethod Group,LocalGroup,Session,ACL
# Collect data with stealth options
Invoke-BloodHound -CollectionMethod All -Stealth
# Collect data from specific domain
Invoke-BloodHound -CollectionMethod All -Domain example.com
# Collect data with LDAP filtering
Invoke-BloodHound -CollectionMethod All -LdapFilter "(objectClass=user)"
# Collect data from specific OU
Invoke-BloodHound -CollectionMethod All -SearchBase "OU=Servers,DC=example,DC=com"
BloodHound.py (Linux/macOS)
Installation
pip install bloodhound
Basic Collection
bloodhound-python -u username -p password -d domain.local -ns 10.10.10.10 -c All
Advanced Collection Options
# Collect specific data types
bloodhound-python -u username -p password -d domain.local -ns 10.10.10.10 -c Group,LocalAdmin,Session,ACL
# Collect data with Kerberos authentication
bloodhound-python -u username -p password -d domain.local -ns 10.10.10.10 -c All --kerberos
# Collect data with specific domain controller
bloodhound-python -u username -p password -d domain.local -ns 10.10.10.10 -c All --dns-tcp
# Collect data with LDAP SSL
bloodhound-python -u username -p password -d domain.local -ns 10.10.10.10 -c All --secure
AzureHound (Azure AD)
Installation
# Download AzureHound
Invoke-WebRequest -Uri https://github.com/BloodHoundAD/AzureHound/releases/latest/download/azurehound-windows-amd64.zip -OutFile azurehound.zip
Expand-Archive -Path azurehound.zip -DestinationPath .
Basic Collection
# Authenticate to Azure
Connect-AzAccount
# Run AzureHound
.\azurehound.exe -o azure_data.zip
Using BloodHound
Neo4j Database Connection
- Default URL: bolt://localhost:7687
- Default credentials: neo4j/neo4j (first login requires password change)
Data Import
- Launch BloodHound
- Connect to Neo4j database
- Drag and drop the ZIP file containing SharpHound data
- Wait for import to complete
Pre-Built Queries
BloodHound comes with several pre-built queries accessible from the “Queries” tab:
Finding Privileged Users
- Find all Domain Admins
- Find all Enterprise Admins
- Find Shortest Paths to Domain Admins
- Find Shortest Paths to High Value Targets
Finding Attack Paths
- Find Shortest Paths to Domain Admins
- Find Shortest Paths to High Value Targets
- Find Shortest Paths to Unconstrained Delegation Systems
Finding Vulnerable Configurations
- Find Kerberoastable Users
- Find AS-REP Roastable Users
- Find Computers with Unconstrained Delegation
- Find Computers with Constrained Delegation
- Find Domain Trusts
Custom Cypher Queries
Find Shortest Paths to Domain Admins
MATCH (n:User),(m:Group \\\\{name:'DOMAIN ADMINS@DOMAIN.LOCAL'\\\\}),p=shortestPath((n)-[*1..]->(m)) RETURN p
Find Kerberoastable Users with Path to Domain Admins
MATCH (n:User \\\\{hasspn:true\\\\}),(m:Group \\\\{name:'DOMAIN ADMINS@DOMAIN.LOCAL'\\\\}),p=shortestPath((n)-[*1..]->(m)) RETURN p
Find Computers with Local Admin Rights
MATCH (u:User),(c:Computer),p=(u)-[:AdminTo]->(c) RETURN p
Find Users with DCSync Rights
MATCH (u:User),(d:Domain),p=(u)-[:DCSync]->(d) RETURN p
Find Computers with Constrained Delegation
MATCH (c:Computer \\\\{trustedtoauth:true\\\\}) RETURN c
```#### البحث عن مسارات الهجوم من مستخدم محدد
```cypher
MATCH (n:User \\\\{name:'USER@DOMAIN.LOCAL'\\\\}),(m:Group \\\\{name:'DOMAIN ADMINS@DOMAIN.LOCAL'\\\\}),p=shortestPath((n)-[*1..]->(m)) RETURN p
```#### البحث عن جميع المستخدمين مع مسار إلى الأهداف عالية القيمة
```cypher
MATCH (u:User),(g:Group),p=shortestPath((u)-[*1..]->(g)) WHERE g.highvalue=true RETURN p
```#### البحث عن أجهزة الكمبيوتر حيث يمتلك مستخدمو النطاق حقوق المسؤول المحلي
```cypher
MATCH (g:Group \\\\{name:'DOMAIN USERS@DOMAIN.LOCAL'\\\\}),(c:Computer),p=(g)-[:AdminTo]->(c) RETURN p
```#### البحث عن أجهزة الكمبيوتر مع حقوق RDP
```cypher
MATCH (u:User),(c:Computer),p=(u)-[:CanRDP]->(c) RETURN p
```#### البحث عن المستخدمين الذين لا تنتهي كلمة المرور الخاصة بهم أبدًا
```cypher
MATCH (u:User \\\\{pwdneverexpires:true\\\\}) RETURN u
```## تقنيات الهجوم
### Kerberoasting
يستهدف حسابات الخدمة مع SPNs لاستخراج تجزئة تذكرة الخدمة للكسر دون اتصال.
#### البحث عن المستخدمين القابلين للـ Kerberoasting
```cypher
MATCH (u:User \\\\{hasspn:true\\\\}) RETURN u
البحث عن المستخدمين القابلين للـ Kerberoasting مع مسار إلى مسؤولي النطاق
MATCH (n:User \\\\{hasspn:true\\\\}),(m:Group \\\\{name:'DOMAIN ADMINS@DOMAIN.LOCAL'\\\\}),p=shortestPath((n)-[*1..]->(m)) RETURN p
AS-REP Roasting
يستهدف حسابات المستخدمين مع إعداد “عدم تطلب المصادقة المسبقة لـ Kerberos” مفعل.
البحث عن المستخدمين القابلين للـ AS-REP Roasting
MATCH (u:User \\\\{dontreqpreauth:true\\\\}) RETURN u
إساءة استخدام ACL
يستغل قوائم التحكم في الوصول المكونة بشكل خاطئ للحصول على امتيازات أعلى.
البحث عن أذونات WriteDacl
MATCH (n:User),(m:Group \\\\{name:'DOMAIN ADMINS@DOMAIN.LOCAL'\\\\}),p=(n)-[:WriteDacl]->(m) RETURN p
البحث عن أذونات GenericAll
MATCH (n:User),(m:Group \\\\{name:'DOMAIN ADMINS@DOMAIN.LOCAL'\\\\}),p=(n)-[:GenericAll]->(m) RETURN p
التفويض غير المقيد
يستغل أجهزة الكمبيوتر مع التفويض غير المقيد لسرقة تذاكر المستخدمين.
البحث عن أجهزة الكمبيوتر مع التفويض غير المقيد
MATCH (c:Computer \\\\{unconstraineddelegation:true\\\\}) RETURN c
التفويض المقيد
يستغل التفويض المقيد المكون بشكل خاطئ للتنكر كمستخدمين لخدمات محددة.
البحث عن أجهزة الكمبيوتر مع التفويض المقيد
MATCH (c:Computer \\\\{trustedtoauth:true\\\\}) RETURN c
التفويض المقيد القائم على المورد
يستغل التفويض المقيد القائم على المورد المكون بشكل خاطئ للوصول إلى الموارد.
البحث عن أجهزة الكمبيوتر مع التفويض المقيد القائم على المورد
MATCH (c:Computer)-[:AllowedToAct]->(t:Computer) RETURN c,t
DCSync
يستغل حقوق التكرار لإجراء مزامنة وحدة التحكم في النطاق واستخراج تجزئة كلمات المرور.
البحث عن المستخدمين مع حقوق DCSync
MATCH (u:User),(d:Domain),p=(u)-[:DCSync]->(d) RETURN p
أنواع حواف BloodHound
| نوع الحافة | وصف |
|---|---|
| MemberOf | المستخدم/المجموعة عضو في مجموعة |
| AdminTo | المستخدم/المجموعة لديه حقوق المسؤول المحلي على جهاز الكمبيوتر |
| HasSession | المستخدم لديه جلسة على جهاز كمبيوتر |
| CanRDP | يمكن للمستخدم RDP للاتصال بجهاز كمبيوتر |
| ExecuteDCOM | يمكن للمستخدم تنفيذ DCOM على جهاز كمبيوتر |
| AllowedToDelegate | يُسمح للكمبيوتر بالتفويض إلى خدمة |
| AddAllowedToAct | يمكن للحاسوب التصرف نيابة عن مسؤول آخر |
| AllowedToAct | يُسمح للمدير بالتصرف نيابة عن مدير آخر |
| Contains | يحتوي OU/Container على كائن |
| GpLink | GPO مرتبط بـ OU/Domain/Site |
| HasSIDHistory | الكائن لديه سجل معرّف الأمان (SID) لكائن آخر |
| TrustedBy | النطاق موثوق به من قبل نطاق آخر |
| DCSync | للمستخدم الحق في تنفيذ عملية DCSync |
| GenericAll | المستخدم لديه تحكم كامل على الكائن |
| GenericWrite | يمكن للمستخدم الكتابة على خصائص معينة لكائن |
| WriteDacl | يمكن للمستخدم تعديل وصف الأمان لكائن |
| WriteOwner | يمكن للمستخدم أخذ ملكية كائن |
| AddMember | يمكن للمستخدم إضافة أعضاء إلى مجموعة |
| ForceChangePassword | يمكن للمستخدم تغيير كلمة المرور الخاصة بمستخدم آخر |
اعتبارات الأمن التشغيلي
تقليل مخاطر الكشف
- استخدم
--Stealthللتقليل من الضوضاء - جمع البيانات خلال ساعات العمل عندما يكون النشاط الشبكي مرتفعًا
- تجنب جمع جميع البيانات دفعة واحدة؛ توزيع جمع البيانات على مدار الوقت
- استخدام تصفية LDAP لتحديد نطاق التجميع
- النظر في استخدام BloodHound.py بدلاً من SharpHound في البيئات الحساسة
التنظيف
- حذف ملفات وإخراجات SharpHound بعد الاستخدام
- مسح محفوظات PowerShell:
Clear-History - إزالة وحدة SharpHound من الذاكرة:
Remove-Module SharpHound - حذف قاعدة بيانات Neo4j عند اكتمال التحليل
استكشاف الأخطاء وإصلاحها
المشاكل الشائعة
مشاكل اتصال Neo4j
- التأكد من تشغيل خدمة Neo4j:
neo4j.bat statusأو
Would you like me to continue with the remaining empty sections?systemctl status neo4j
- تحقق من استخدام عنوان URL الصحيح لـ bolt (الافتراضي: bolt://localhost:7687)
- التحقق من بيانات الاعتماد (الافتراضي: neo4j/neo4j)
- تحقق مما إذا كانت عملية أخرى تستخدم المنفذ 7687
مشاكل تجميع SharpHound
- تأكد من امتلاكك الصلاحيات الكافية (مستخدم نطاق كحد أدنى)
- حاول التشغيل بصلاحيات مرتفعة
- تحقق من اتصال الشبكة بوحدات التحكم في النطاق
- التحقق من اتصال LDAP/LDAPS
- حاول تحديد وحدة تحكم نطاق باستخدام
--DomainController
مشاكل استيراد البيانات
- تأكد من احتواء ملف ZIP على ملفات JSON صالحة
- تحقق مما إذا كان لدى قاعدة بيانات Neo4j مساحة قرص كافية
- حاول مسح قاعدة البيانات قبل الاستيراد:
MATCH (n) DETACH DELETE n - تأكد من عدم تلف ملف ZIP