Saltar a contenido

Sangre Cheat Sheet

Sinopsis

BloodHound es una herramienta de código abierto que utiliza la teoría del gráfico para revelar relaciones ocultas y a menudo no deseadas dentro de un entorno Active Directory (AD). Ayuda a los profesionales de seguridad a identificar caminos complejos de ataque que de otro modo serían imposibles de encontrar manualmente. BloodHound consta de dos componentes principales:

  1. SharpHound El recopilador de datos que reúne información de Active Directory
  2. BloodHound GUI: La interfaz gráfica que visualiza y analiza los datos recogidos

Instalación

Windows

Instalación Neo4j

# 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

Instalación de sangre

# Download BloodHound from https://github.com/BloodHoundAD/BloodHound/releases
# Extract the ZIP file
# Run BloodHound.exe

Linux (Kali)

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)

Colección básica

# 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

Métodos de recogida

Method Description
All Collect all data
Group Collect group membership information
LocalGroup Collect local admin information
GPOLocalGroup Collect local admin information via GPO
Session Collect session information
LoggedOn Collect logged-on user information
Trusts Collect domain trust information
ACL Collect ACL information
Container Collect container information
RDP Collect Remote Desktop Users information
ObjectProps Collect object properties
DCOM Collect DCOM information
SPNTargets Collect Service Principal Name information
PSRemote Collect PowerShell Remoting information

Opciones de colección avanzada

# 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

Módulo SharpHound PowerShell

Colección básica

# Import SharpHound module
Import-Module .\SharpHound.ps1

# Run SharpHound with default collection methods
Invoke-BloodHound -CollectionMethod All

Opciones de colección avanzada

# 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)

Instalación

pip install bloodhound

Colección básica

bloodhound-python -u username -p password -d domain.local -ns 10.10.10.10 -c All

Opciones de colección avanzada

# 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)

Instalación

# 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 .

Colección básica

# Authenticate to Azure
Connect-AzAccount

# Run AzureHound
.\azurehound.exe -o azure_data.zip

Usando BloodHound

Conexión de base de datos Neo4j

  • URL predeterminada: bolt://localhost:7687
  • Credenciales predeterminados: neo4j/neo4j (primero login requiere cambio de contraseña)

Importación de datos

  1. Lanzamiento de sangre
  2. Conectar a la base de datos Neo4j
  3. Arrastre y suelte el archivo ZIP que contiene datos de SharpHound
  4. Espera a que la importación termine

Pre-Built Queries

BloodHound viene con varias consultas preconstruidas accesibles desde la pestaña "Preguntas":

Encontrar privilegios Usuarios

  • Encuentra todos los administradores de dominio
  • Encuentre todos los administradores de la empresa
  • Encontrar caminos más cortos a los administradores de dominio
  • Encontrar caminos más cortos a objetivos de alto valor

Encontrar caminos de ataque

  • Encontrar caminos más cortos a los administradores de dominio
  • Encontrar caminos más cortos a objetivos de alto valor
  • Encontrar los caminos más cortos para los sistemas de delegación sin restricciones

Encontrar Configuraciones Vulnerables

  • Encontrar Kerberoastable Usuarios
  • Encuentre AS-REP Usuarios estables
  • Buscar Computadoras con Delegación No Conseguida
  • Buscar Computadoras con Delegación Constrained
  • Encontrar Domain Trusts

Consultas de Cifras Aduanas

Encontrar caminos más cortos a los administradores de dominio

MATCH (n:User),(m:Group \\\\{name:'DOMAIN ADMINS@DOMAIN.LOCAL'\\\\}),p=shortestPath((n)-[*1..]->(m)) RETURN p

Encontrar Kerberoastable Usuarios con Path to Domain Admins

MATCH (n:User \\\\{hasspn:true\\\\}),(m:Group \\\\{name:'DOMAIN ADMINS@DOMAIN.LOCAL'\\\\}),p=shortestPath((n)-[*1..]->(m)) RETURN p

Buscar Computadoras con Derechos de Admin Local

MATCH (u:User),(c:Computer),p=(u)-[:AdminTo]->(c) RETURN p

Buscar Usuarios con Derechos de DCSync

MATCH (u:User),(d:Domain),p=(u)-[:DCSync]->(d) RETURN p

Buscar Computadoras con Delegación Constrained

MATCH (c:Computer \\\\{trustedtoauth:true\\\\}) RETURN c

Buscar Senderos de Ataque del Usuario Específico

MATCH (n:User \\\\{name:'USER@DOMAIN.LOCAL'\\\\}),(m:Group \\\\{name:'DOMAIN ADMINS@DOMAIN.LOCAL'\\\\}),p=shortestPath((n)-[*1..]->(m)) RETURN p

Encontrar todos los usuarios con destinos Path to High Value

MATCH (u:User),(g:Group),p=shortestPath((u)-[*1..]->(g)) WHERE g.highvalue=true RETURN p

Encontrar ordenadores Donde los usuarios de dominio tienen derechos de administrador locales

MATCH (g:Group \\\\{name:'DOMAIN USERS@DOMAIN.LOCAL'\\\\}),(c:Computer),p=(g)-[:AdminTo]->(c) RETURN p

Buscar ordenadores con derechos RDP

MATCH (u:User),(c:Computer),p=(u)-[:CanRDP]->(c) RETURN p

Buscar Usuarios con Contraseña Nunca Explora

MATCH (u:User \\\\{pwdneverexpires:true\\\\}) RETURN u

Técnicas de ataque

Kerberoasting

Las cuentas de servicio de Targets con SPNs para extraer los problemas de ticket de servicio para cracking offline.

Encontrar Kerberoastable Usuarios

MATCH (u:User \\\\{hasspn:true\\\\}) RETURN u

Encontrar Kerberoastable Usuarios con Path to Domain Admins

MATCH (n:User \\\\{hasspn:true\\\\}),(m:Group \\\\{name:'DOMAIN ADMINS@DOMAIN.LOCAL'\\\\}),p=shortestPath((n)-[*1..]->(m)) RETURN p

AS-REP Roasting

Las cuentas de usuario de objetivos con el ajuste "No requieren preauthentication Kerberos" habilitado.

Encontrar AS-REP Usuarios estables

MATCH (u:User \\\\{dontreqpreauth:true\\\\}) RETURN u

ACL Abuso

Explota listas de control de acceso mal configuradas para obtener privilegios elevados.

Encontrar permisos WriteDacl

MATCH (n:User),(m:Group \\\\{name:'DOMAIN ADMINS@DOMAIN.LOCAL'\\\\}),p=(n)-[:WriteDacl]->(m) RETURN p

Encontrar GenéricoTodas las Permisiones

MATCH (n:User),(m:Group \\\\{name:'DOMAIN ADMINS@DOMAIN.LOCAL'\\\\}),p=(n)-[:GenericAll]->(m) RETURN p

Delegación sin restricciones

Explota computadoras con delegación sin restricciones para robar entradas de usuario.

Finding Computers with Unconstrained Delegation

MATCH (c:Computer \\\\{unconstraineddelegation:true\\\\}) RETURN c

Constrained Delegation

Exploits misconfigured restricted delegation to impersonate users to specific services.

Finding Computers with Constrained Delegation

MATCH (c:Computer \\\\{trustedtoauth:true\\\\}) RETURN c

Resource-Based Constrained Delegation

Exploits misconfigured resource-based restricted delegation to gain access to resources.

Finding Computers with Resource-Based Constrained Delegation

MATCH (c:Computer)-[:AllowedToAct]->(t:Computer) RETURN c,t

DCSync

Explota derechos de replicación para realizar la sincronización del controlador de dominio y extraer los hashes de contraseña.

Encontrar usuarios con derechos DCSync

MATCH (u:User),(d:Domain),p=(u)-[:DCSync]->(d) RETURN p

Tipos de borde de sangre

Edge Type Description
MemberOf User/Group is a member of a group
AdminTo User/Group has local admin rights on a computer
HasSession User has a session on a computer
CanRDP User can RDP to a computer
ExecuteDCOM User can execute DCOM on a computer
AllowedToDelegate Computer is allowed to delegate to a service
AddAllowedToAct Computer can act on behalf of another principal
AllowedToAct Principal is allowed to act on behalf of another principal
Contains OU/Container contains an object
GpLink GPO is linked to an OU/Domain/Site
HasSIDHistory Object has SID history of another object
TrustedBy Domain is trusted by another domain
DCSync User has rights to perform DCSync operation
GenericAll User has full control over an object
GenericWrite User can write to certain properties of an object
WriteDacl User can modify the security descriptor of an object
WriteOwner User can take ownership of an object
AddMember User can add members to a group
ForceChangePassword User can change another user's password

Consideraciones de seguridad operacional

Reducción del riesgo de detección

  • Utilice el parámetro --Stealth para reducir el ruido
  • Recoger datos durante horas de trabajo cuando la actividad de red es alta
  • Evite recolectar todos los datos a la vez; difundir la colección con el tiempo
  • Use filtrado LDAP para limitar el alcance de la colección
  • Considere usar BloodHound.py en lugar de SharpHound en entornos sensibles

Limpieza arriba

  • Eliminar los binarios SharpHound y los archivos de salida después del uso
  • Clear Power Historia de Shell: Clear-History
  • Remove Sharp Módulo Hound de memoria: Remove-Module SharpHound
  • Eliminar la base de datos Neo4j cuando el análisis está completo

Solución de problemas

Cuestiones comunes

Cuestiones de conexión Neo4j

  • Asegurar que el servicio Neo4j esté funcionando: neo4j.bat status_ o systemctl status neo4j
  • Compruebe si se está utilizando la URL correcta del tornillo (por defecto: bolt://localhost:7687)
  • Verificar las credenciales (por defecto: neo4j/neo4j)
  • Compruebe si otro proceso está utilizando el puerto 7687

SharpHound Collection Issues

  • Asegúrese de tener suficientes privilegios (usuario principal al mínimo)
  • Intenta correr con privilegios elevados
  • Comprobar conectividad de red a controladores de dominio
  • Verificar la conectividad LDAP/LDAPS
  • Intente especificar un controlador de dominio con --DomainController

Cuestiones de importación de datos

  • Asegúrese de que el archivo ZIP contiene archivos JSON válidos
  • Compruebe si la base de datos Neo4j tiene suficiente espacio en disco
  • Intente limpiar la base de datos antes de importar: MATCH (n) DETACH DELETE n
  • Verifique que el archivo ZIP no está dañado

Recursos