Ir ao contido

Enumeración de Active Directory (AD) con SharpHound/BloodHound

1. Introdución

SharpHound e BloodHound son ferramentas complementarias deseñadas para analizar e visualizar a configuración de seguridade en entornos de Active Directory (AD). Permiten identificar rutas de ataque, escalada de privilexios e relacións entre obxectos de AD que poden ser explotadas.

1.1. Ferramentas de recolección de datos

Existen dúas opcións principais para recopilar datos de Active Directory:

1. SharpHound (Executable .NET para Windows)
- Execútase: Na máquina vítima (Windows) con acceso directo
- Vantaxes: Recolle máis información, incluíndo sesións activas
- Saída: Xera un ficheiro ZIP
- Cando usar: Cando xa temos acceso á máquina Windows (shell/WinRM)

2. bloodhound-python (Script Python para Linux)
- Execútase: Na máquina atacante (Kali Linux) de forma remota
- Vantaxes: Non require upload de ferramentas nin acceso directo á máquina
- Saída: Xera ficheiros JSON directamente
- Cando usar: Cando só temos credenciais válidas pero non shell na máquina
- Limitación: Non recolle sesións activas

BloodHound: Plataforma de análise

Os datos recompilados por calquera das dúas ferramentas anteriores (SharpHound ou bloodhound-python) procésanse e visualízanse mediante BloodHound, unha plataforma de análise que se executa na máquina atacante (Kali Linux). BloodHound permite visualizar graficamente as relacións e camiños de ataque dispoñibles no dominio de Active Directory.

1.2. Recomendación: Que ferramenta usar?

Situación Ferramenta recomendada Razón
Tes shell/WinRM na máquina Windows SharpHound Máis información (sesións activas)
Só tes credenciais válidas bloodhound-python Non require acceso directo
Queres evitar detección bloodhound-python Sen upload de executables
Precisas datos completos de sesións SharpHound Única opción que recolle sesións

Diferenzas entre SharpHound e bloodhound-python

SharpHound (Windows):

  • Executable .NET para Windows
  • Require acceso directo á máquina
  • Recóllese máis información (sesións activas)
  • Xerase ficheiro ZIP

bloodhound-python (Linux):

  • Script Python para Linux
  • Traballa remotamente mediante LDAP
  • Non require acceso á máquina
  • Xera ficheiros JSON directamente
  • Non recolle sesións activas

Vantaxes de bloodhound-python:

  • Execútase desde Kali
  • Non require upload de ferramentas
  • Útil cando non temos shell
  • Ideal para enumeración sen detección

1.3. Fluxos de traballo

Opción A: Usando SharpHound (con acceso á máquina)
1. Máquina atacante: Descargar e preparar SharpHound
2. Máquina vítima: Subir e executar SharpHound para recompilar datos de AD
3. Máquina vítima → Máquina atacante: Descargar o ficheiro ZIP xerado
4. Máquina atacante: Instalar, configurar e executar BloodHound
5. Máquina atacante: Importar e analizar os datos en BloodHound

Opción B: Usando bloodhound-python (sen acceso á máquina)
1. Máquina atacante: Executar bloodhound-python con credenciais válidas
2. Máquina atacante: Recoller ficheiros JSON xerados
3. Máquina atacante: Instalar, configurar e executar BloodHound
4. Máquina atacante: Importar e analizar os datos en BloodHound


2. Recolección de datos

Opción A: Recolección con SharpHound

2.1. Preparación de SharpHound

Máquina atacante (Kali Linux)
  1. Descargar SharpHound desde GitHub

    cd ~/Downloads
    wget https://github.com/SpecterOps/SharpHound/releases/download/v2.8.0/SharpHound_v2.8.0_windows_x86.zip
    

  2. Descomprimir

    7z x SharpHound_v2.8.0_windows_x86.zip
    

2.2. Upload de SharpHound á máquina vítima

Máquina vítima (Windows)

Desde unha consola winrm (por exemplo, Evil-WinRM), subir SharpHound.exe desde a máquina atacante á máquina vítima:

*Evil-WinRM* PS C:\Users\[usuario]\Documents> upload /home/kali/Downloads/SharpHound.exe

Info: Uploading /home/kali/Downloads/SharpHound.exe to C:\Users\[usuario]\Documents\SharpHound.exe
Data: 1753768 bytes of 1753768 bytes copied
Info: Upload successful!

2.3. Execución de SharpHound

Máquina vítima (Windows)

Desde a máquina vítima, dentro da consola winrm, executar SharpHound para recoller todos os datos de AD:

*Evil-WinRM* PS C:\Users\[usuario]\Documents> .\SharpHound.exe -c All

2025-11-12T10:33:09.1234567-00:00|INFORMATION|This version of SharpHound is compatible with the 5.0.0 Release of BloodHound
2025-11-12T10:33:09.2345678-00:00|INFORMATION|Resolved Collection Methods: Group, LocalAdmin, GPOLocalGroup, Session, LoggedOn, Trusts, ACL, Container, RDP, ObjectProps, DCOM, SPNTargets, PSRemote
2025-11-12T10:33:09.3456789-00:00|INFORMATION|Initializing SharpHound at 10:33 AM on 11/12/2025
2025-11-12T10:33:09.4567890-00:00|INFORMATION|Flags: Group, LocalAdmin, GPOLocalGroup, Session, LoggedOn, Trusts, ACL, Container, RDP, ObjectProps, DCOM, SPNTargets, PSRemote
2025-11-12T10:33:09.5678901-00:00|INFORMATION|Beginning LDAP search for control.nyx
2025-11-12T10:33:09.6789012-00:00|INFORMATION|Producer has finished, closing LDAP channel
2025-11-12T10:33:09.7890123-00:00|INFORMATION|LDAP channel closed, waiting for consumers
2025-11-12T10:33:40.1234567-00:00|INFORMATION|Status: 0 objects finished (+0 0)/s -- Using 38MB RAM
2025-11-12T10:34:09.2345678-00:00|INFORMATION|Consumers finished, closing output channel
Closing writers
2025-11-12T10:34:09.3456789-00:00|INFORMATION|Output channel closed, waiting for output task to complete
2025-11-12T10:34:09.4567890-00:00|INFORMATION|Status: 103 objects finished (+103 1.030)/s -- Using 43MB RAM
2025-11-12T10:34:09.5678901-00:00|INFORMATION|Enumeration finished in 00:01:00.0123456
2025-11-12T10:34:09.6789012-00:00|INFORMATION|Saving cache with stats: 59 ID to type mappings.
 0 name to SID mappings.
 1 machine sid mappings.
 3 sid to domain mappings.
 0 global catalog mappings.
2025-11-12T10:34:09.7890123-00:00|INFORMATION|SharpHound Enumeration Completed at 10:34 AM on 11/12/2025! Happy Graphing!

Ficheiro ZIP xerado: 20251112103309_BloodHound.zip

2.4. Descarga do ficheiro ZIP á máquina atacante

Máquina vítima → Máquina atacante

Desde a máquina vítima, descargar á máquina atacante o ficheiro ZIP conseguido por SharpHound con datos para importar en BloodHound:

*Evil-WinRM* PS C:\Users\[usuario]\Documents> download 20251112103309_BloodHound.zip

Info: Downloading C:\Users\[usuario]\Documents\20251112103309_BloodHound.zip to 20251112103309_BloodHound.zip
Info: Download successful!

Opción B: Recolección con bloodhound-python

2.6. Execución de bloodhound-python

Máquina atacante (Kali Linux)

Desde a máquina atacante tamén podemos recoller datos se temos credenciais dun usuario do dominio. Para iso, empregamos bloodhound-python:

bloodhound-python -c All \
                  -u '[usuario]' \
                  -p '[contrasinal]' \
                  -ns IP_AD \
                  -d domain

Ficheiros JSON xerados:
- computers.json
- domains.json
- groups.json
- users.json
- containers.json

Diferenza de saída

Con SharpHound obtemos un arquivo ZIP único, mentres que con bloodhound-python obtemos múltiples arquivos JSON que deberemos subir individualmente a BloodHound (ou todos de vez).


4. Instalación e configuración de BloodHound

4.1. Instalación de paquetes necesarios

Máquina atacante (Kali Linux)

  1. Actualizar sistema

    sudo apt update
    

  2. Instalar Neo4j

    sudo apt install -y neo4j
    

  3. Instalar BloodHound

    sudo apt install -y bloodhound
    

4.2. Configuración de Java 11

  1. Ver versións de Java dispoñibles

    sudo update-alternatives --config java
    

  2. Seleccionar Java 11

Escoller selección 1 (/usr/lib/jvm/java-11-openjdk-amd64/bin/java)

There are 2 choices for the alternative java (providing /usr/bin/java).

  Selection    Path                                         Priority   Status
------------------------------------------------------------
* 0            /usr/lib/jvm/java-21-openjdk-amd64/bin/java   2111      auto mode
  1            /usr/lib/jvm/java-11-openjdk-amd64/bin/java   1111      manual mode
  2            /usr/lib/jvm/java-21-openjdk-amd64/bin/java   2111      manual mode

Press <enter> to keep the current choice[*], or type selection number: 1

4.3. Inicio de Neo4j

  1. Iniciar servizo Neo4j
    sudo neo4j console
    

Deixar esta terminal aberta e abrir outra terminal

4.4. Configuración inicial de BloodHound

  1. Primeira execución de BloodHound:
bloodhound

Proceso de configuración inicial:

It seems it's the first time you run bloodhound

Please run bloodhound-setup first

Do you want to run bloodhound-setup now? [Y/n] Y

[*] Starting PostgreSQL service
[*] Creating Database
[*] Starting neo4j
Neo4j is running at pid 5416

[i] You need to change the default password for neo4j
    Default credentials are user:neo4j password:neo4j

[!] IMPORTANT: Once you have setup the new password, please update /etc/bhapi/bhapi.json with the new password before running bloodhound

opening http://localhost:7474/
  1. Cambiar contrasinal de Neo4j:

A. Ábrese navegador en http://localhost:7474/
B. Login con: neo4j / neo4j
Fig. Login
C. Cambiar contrasinal (exemplo: abc123.)
Fig. Login

  1. Actualizar configuración de BloodHound:

A. Editar ficheiro de configuración

sudo nano /etc/bhapi/bhapi.json

B. Modificar o campo neo4j.secret:

{
  "neo4j": {
    "addr": "localhost:7687",
    "username": "neo4j",
    "secret": "abc123."
  }
}

4.5. Reinicio e posta en marcha final

  1. Parar procesos

    sudo pkill -f bloodhound
    sudo pkill -f neo4j
    

  2. Iniciar Neo4j en background

    sudo neo4j console &
    disown
    

  3. Iniciar BloodHound

    bloodhound
    

4.6. Acceso á interface web

Interface web de BloodHound:

Ábrese automaticamente en: http://127.0.0.1:8080/ui/login

  1. Login con: admin / admin
    Fig. Login

  2. Cambiar contrasinal na primeira autenticación

  3. Requisitos: mínimo 8 caracteres, maiúsculas, minúsculas, números
    Fig. Login
    Fig. Login

5. Importación de datos en BloodHound

5.1. Subir datos á plataforma

Máquina atacante (Kali Linux)

Na interface web:

  1. Click en "Upload Data" (icona de nube arriba á dereita)

  2. Segundo a ferramenta usada:

  3. SharpHound: Seleccionar ficheiro 20251112103309_BloodHound.zip
  4. bloodhound-python: Seleccionar todos os ficheiros JSON xerados (pódense subir todos á vez)

Fig. Login

  1. Ou arrastralos directamente á interface
    Fig. Login

  2. Esperar a que se procesen os datos (1-2 minutos)


6. Análise e exploración con BloodHound

No exemplo empregado...

[DOMAIN]=CONTROL.NYX
[usuario]=[USUARIO]=Usuario do dominio

6.1. Buscar obxectos específicos

Máquina atacante (Kali Linux)

Buscar usuario [usuario]:

  1. Na barra de busca: escribir user:[usuario]
    Fig. Login

  2. Seleccionar nodo [USUARIO]@[DOMAIN]
    Fig. Login

  3. Botón dereito → Set as Starting Node
    Fig. Login

6.2. Identificar camiños de ataque

Buscar camiños a Domain Admin:

  1. Seleccionar "Pathfinding" no menú lateral

  2. En "Destination Node" escribir: ADMINISTRATOR@[DOMAIN]
    Fig. Login

Ruta identificada:

[USUARIO]@[DOMAIN]
  AllExtendedRights
[DOMAIN]

Fig. Login