
Analizador de EVTX post-explotación para el mapeo de BloodHound
Analizador EVTX de post-explotación para el mapeo de BloodHound
LogHound recopila y analiza los registros de eventos de seguridad de Windows (.evtx) para extraer eventos de autenticación, datos de sesión y metadatos de inicio de sesión para su ingesta en BloodHound y para una telemetría adversarial más profunda.
LogHound se creó para resolver un problema específico de los Red Teams y los probadores de penetración de redes: cómo rastrear de manera eficiente los objetivos de movimiento lateral, descifrar las sesiones de usuario activas y establecer la propiedad definitiva de las máquinas sin quemar la seguridad operacional (OpSec).
Los archivos de registro de eventos (Security.evtx) en los Controladores de Dominio de Active Directory pueden ser bestias de varios gigabytes. Las técnicas tradicionales de carga suelen agotar la memoria del sistema o provocar fallos, dejando artefactos ruidosos. LogHound aborda este problema utilizando un paradigma de transmisión basado en fragmentos sobre el robusto framework Impacket.
Mapea las estructuras de la red, establece quién "posee" realmente una máquina en función de la frecuencia de inicio de sesión, calcula las horas de trabajo precisas para identificar operaciones fuera de horario (búho nocturno) e integra esta inteligencia de forma fluida en BloodHound CE (v5+).
LogHound depende de Python 3 e Impacket. Se recomienda encarecidamente utilizar un entorno virtual.
# 1. Clonar el repositorio
git clone https://github.com/LogHound/LogHound.git
cd LogHound
# 2. (Opcional pero recomendado) Crear un entorno virtual de Python
python3 -m venv venv
source venv/bin/activate
# 3. Instalar las dependencias necesarias
pip install -r requirements.txt
La CLI de LogHound interactúa de forma idéntica a los módulos estándar de Impacket (como secretsdump.py), y requiere que especifiques un modo de operación explícito (--local o --remote).
python loghound.py [[domain/]username[:password]@]<targetName or address> [options]
--local EVTX_FILE: Analiza un archivo .evtx que ya reside en tu máquina local.--remote: Descarga Security.evtx del sistema remoto objetivo usando las credenciales proporcionadas.-hashes LMHASH:NTHASH: Utiliza hashes NTLM para la autenticación Pass-The-Hash.-k: Utiliza autenticación Kerberos. Obtiene las credenciales de un archivo .ccache especificado por la variable de entorno KRB5CCNAME.-aesKey hex_key: Utiliza una clave AES específica (128 o 256 bits) para Kerberos.-no-pass: No solicitar una contraseña de forma interactiva.-keytab KEYTAB_FILE: Utiliza un archivo keytab de Kerberos para la autenticación.-dc-ip IP: Dirección IP explícita del controlador de dominio.-target-ip IP: Dirección IP explícita de la máquina objetivo (omite los fallos de resolución de nombres NetBIOS).-format {json,csv,md,all}: Determina el formato de salida basado en texto. Nota: Un informe HTML interactivo y los archivos JSON de BloodHound se generan siempre. El valor predeterminado es json.-outputfile BASENAME: Prefijo de nombre para los informes de salida generados en los subdirectorios.-threads N: Número de hilos del analizador que se ejecutarán en paralelo (Predeterminado: 4).-chunk-size N: Número de registros de log por fragmento de análisis. Los valores más bajos reducen la sobrecarga de RAM; los valores más altos analizan ligeramente más rápido (Predeterminado: 1000).
LogHound utiliza un pipeline analítico altamente desacoplado y eficiente en memoria:
core/collector.py): Se conecta al objetivo mediante SMB y luego ejecuta wevtutil epl Security a través de WMI para exportar el registro de eventos de seguridad a un archivo temporal en el objetivo. El archivo exportado se descarga después mediante SMB en loot/YYYY-MM-DD_<target>_Security.evtx para evitar sobrescrituras.core/parser.py): Un analizador de fragmentos con subprocesos procesa en streaming el binario .evtx sin procesar y emite continuamente los eventos analizados hacia un buffer temporal de líneas JSON (jsonl/loghound_dump.jsonl). Si se interrumpe, puede reanudar desde puntos de control precisos.core/analyzer.py): Itera línea por línea sobre el flujo .jsonl para mantener un bajo consumo de RAM. Calcula diccionarios de estado intermedios (seguimiento de sesiones, puntuación de propiedad, seguimiento de lógica).core/exporter.py y core/exporter_bloodhound.py): Vuelca dinámicamente el estado en RAM del análisis a los formatos de exportación finales y .Para conocer la lógica arquitectónica profunda y los errores de ingesta ya tratados, consulta la documentación interna en ARCHITECTURE.md.
LogHound filtra de forma nativa seis IDs explícitos de Eventos de Seguridad de Windows: 4624, 4634, 4648, 4768, 4769, 4776.
Utilizando estos eventos, LogHound amplía BloodHound CE vinculando los siguientes atributos personalizados directamente a los nodos User generados a través del bloque Properties:
ObjectIdentifier se alineen perfectamente con las ingestiones existentes de SharpHound. Los usuarios de dominio de AD reciben su SID nativo de Windows (S-1-5-21-...). Para evitar el desgarro de nodos de BloodHound, las cuentas de máquina locales mantienen con precisión el estándar de respaldo USER@HOSTNAME.computers.json generado utiliza la estructura de datos nativa exacta SessionAPIResult para dibujar aristas reales "HasSession" entre máquinas y usuarios.El motor de análisis calcula las horas operativas de trabajo basándose en los eventos de inicio/cierre de sesión rastreados, omitiendo anomalías (como sesiones que abarcan varios días).
El análisis determina el propietario explícito de cualquier Workstation o dirección IP contando los inicios de sesión interactivos más frecuentes. Esto vincula un Owner primario al nodo de origen junto con un array de Other Users secundarios.
Este software se proporciona únicamente con fines educativos, de pruebas de penetración autorizadas e investigación forense. No lo utilices contra redes para las que no tengas permiso explícito para operar.
Este proyecto está licenciado bajo la Apache License 2.0 - consulta el archivo LICENSE.
html/json/| Nombre de la Propiedad | Tipo | Descripción de la Métrica |
|---|
loghound_avg_start_time | String | Calcula el promedio del primer inicio de sesión (00:00 HH:MM) registrado en todos los días válidos observados para el usuario. |
loghound_avg_end_time | String | Calcula el promedio de la última actividad (cierre de sesión o último contacto) registrada por día. |
loghound_active_days | Integer | Número total de días validados (con al menos una sesión adecuada) utilizados para calcular los arrays de tiempo promedio. |
loghound_outside_hours | Boolean | Verdadero/Falso. Identifica específicamente a un búho nocturno. Se evalúa como True si la ventana activa calculada de inicio a fin del usuario se superpone con el rango nocturno de 22:00 a 06:00. |
| Horas Promedio por Día | Float | Calculada internamente como la diferencia de tiempo exacta entre el average start time y el average end time del usuario. (Se muestra en los informes de texto/HTML). |