تخطَّ إلى المحتوى

دليل 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

  1. Launch BloodHound
  2. Connect to Neo4j database
  3. Drag and drop the ZIP file containing SharpHound data
  4. 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 على كائن
GpLinkGPO مرتبط بـ 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

الموارد