
APT-Hunter es una herramienta de caza de amenazas (Threat Hunting) para registros de eventos de Windows, creada con mentalidad de equipo púrpura (purple team) para detectar movimientos de APT ocultos en el mar de registros de eventos de Windows, con el fin de reducir el tiempo para descubrir actividad sospechosa.
Búsqueda de amenazas en registros de eventos de Windows, creada con una mentalidad de equipo púrpura.
APT-Hunter es una herramienta de búsqueda de amenazas para registros de eventos de Windows. Utiliza reglas de detección predefinidas y estadísticas de registros para exponer actividad de APT oculta en grandes volúmenes de eventos, reduciendo el tiempo necesario para descubrir comportamiento sospechoso. Es especialmente eficaz para evaluaciones de compromiso.
Los resultados se escriben como una línea de tiempo que se puede analizar directamente en Excel, Timeline Explorer, Timesketch y herramientas similares, o explorar en el panel web integrado con triaje opcional mediante LLM local.
Descarga los binarios compilados desde la página de Releases, o ejecuta desde el código fuente (Python 3.8+):
git clone https://github.com/ahmedkhlief/APT-Hunter.git
cd APT-Hunter
python3 -m pip install -r requirements.txt
python3 APT-Hunter.py -p /opt/wineventlogs/ -o Project1 -allreport
-p acepta un directorio o un único archivo. Añade -web para abrir el panel cuando finalice el análisis.





Ejecuta python3 APT-Hunter.py -h para ver la lista completa. Opciones principales:
Analizar una carpeta de archivos EVTX (los tipos de registro se detectan automáticamente):
python3 APT-Hunter.py -p /opt/wineventlogs/ -o Project1 -allreport
Centrarse en un intervalo de tiempo:
python3 APT-Hunter.py -p /opt/wineventlogs/ -o Project1 -allreport -start 2022-04-03 -end 2022-04-05T20:56
Buscar con una cadena, una regex o un archivo de regex:
python3 APT-Hunter.py -hunt "psexec" -p /opt/wineventlogs/ -o Project2
python3 APT-Hunter.py -huntfile "(psexec|psexesvc)" -p /opt/wineventlogs/ -o Project2
python3 APT-Hunter.py -huntfile huntfile.txt -p /opt/wineventlogs/ -o Project2
Buscar con reglas Sigma:
python3 APT-Hunter.py -sigma -rules rules.json -p /opt/wineventlogs/ -o Project2
Obtener las últimas reglas de Sigma convertidas para APT-Hunter (escribe rules.json):
./Get_Latest_Sigma_Rules.sh
Explora un informe generado en el navegador: filtrado, gráficos, línea de tiempo de incidentes y exportación de informes de IR.
python3 run_webapp.py <Output>/<Output>_Report.xlsx # o pasa el directorio de salida
python3 APT-Hunter.py -p <logs> -o <Output> -web # analiza y luego abre el panel
python3 APT-Hunter.py -webview <Output> # abre un informe existente
Aceptar un hallazgo de triaje lo fija a la línea de tiempo de incidentes junto con su evidencia, adjuntada como sub-eventos plegables: se sitúan bajo el hallazgo en la tabla en lugar de intercalarse con todo lo demás, y se mantienen fuera de los gráficos de la línea de tiempo para que los gráficos sigan siendo legibles. Eliminar un hallazgo elimina también sus sub-eventos.
El servidor se enlaza a 0.0.0.0:5000 por defecto. Usa --host / --port (o -webhost / -webport) para cambiarlo, por ejemplo --host 127.0.0.1 para mantenerlo local. Los hallazgos revisados y la línea de tiempo se conservan cuando se reconstruye la caché del informe.

Panel principal: total de eventos y recuentos de severidad, desglose de severidad, reglas de detección más activadas y volumen diario de eventos. La barra lateral lista cada registro de eventos y tabla de resumen del informe.

Línea de Tiempo de Incidentes: hallazgos fijados representados por tiempo y codificados por color según severidad. Haz zoom y desplázate por los tramos más densos, genera un resumen ejecutivo con IA y exporta el informe de IR o CSV.

Línea de tiempo cronológica: una cadena de ataque se expande en sus sub-eventos, y el panel de detalles muestra la narrativa, las técnicas MITRE y la puntuación.
El gráfico de la línea de tiempo de incidentes permite zoom, de modo que las ráfagas de eventos separados por minutos o segundos siguen siendo legibles: arrastra sobre el gráfico para hacer zoom en un tramo, Shift+arrastrar para desplazarte, Ctrl/Cmd+rueda para hacer zoom alrededor del cursor, o usa la franja de vista general situada debajo. Las etiquetas nunca se superponen; las que no caben se ocultan, y al pasar el cursor sobre un punto se listan todos los eventos apilados en él.
Puntúa los eventos detectados según su grado de maliciosidad usando un modelo local, desde la línea de comandos:
python3 APT-Hunter.py -p <logs> -o <Output> -llm -llm-provider ollama -llm-model llama3 -llm-severity High
O por evento desde el panel (comprobar, explicar, correlacionar). Configura el proveedor (Ollama / LM Studio / llama.cpp), el modelo, la URL y el tiempo de espera en la página Settings del panel. Cualquier servidor local compatible con OpenAI funciona; no se envían datos a ningún servicio en la nube.
El Triaje Agéntico en la barra lateral del panel convierte miles de alertas en una lista corta de hallazgos:
La fase de investigación necesita un LLM que soporte llamadas a herramientas. Si el tuyo no lo hace, APT-Hunter recurre a una canalización fija de pivotar/correlacionar. La cobertura es idéntica en ambos casos, ya que el agente solo añade profundidad sobre la primera pasada. Las rondas de herramientas y un límite de tiempo real se configuran en Settings.

Triaje Agéntico: el historial de ejecuciones muestra el ámbito, los recuentos de alertas y grupos, los hallazgos y las llamadas al LLM por ejecución. Aquí 91 alertas críticas en un host se redujeron a 32 grupos y una única cadena de ataque con puntuación alta.

Detalle del hallazgo: la narrativa, las técnicas MITRE, la evidencia y el rastro completo de investigación (cada evento leído, ventana de línea de tiempo y búsqueda de alertas que hizo el agente), para que cada conclusión pueda auditarse.
Nota: La salida del LLM es una ayuda al triaje, no un veredicto. Revisa los hallazgos antes de confiar en ellos. Los modelos de razonamiento pueden necesitar que el tiempo de espera de la solicitud se eleve muy por encima del valor predeterminado de 200 s.
Twitter: @ahmed_khlief · LinkedIn: Ahmed Khlief
Distribuido bajo la GNU GPL v3. Consulta LICENSE.
Gracias a Joe Maccry por su increíble contribución en los casos de uso de Sysmon (más de 100 casos de uso añadidos por Joe)
| Opción | Descripción |
|---|
-p, --path | Archivo o carpeta de registros a analizar |
-o, --out | Nombre / directorio de salida |
-start, -end | Restringir la línea de tiempo (formato ISO) |
-tz | Zona horaria (local o p. ej. Asia/Dubai) |
-cores | Núcleos de CPU a usar (por defecto: la mitad de los disponibles) |
-hunt, -huntfile, -eid | Buscar por cadena/regex, archivo de regex o Event ID |
-sigma, -rules | Buscar con reglas Sigma convertidas a JSON |
-o365hunt, -o365rules, -o365raw | Búsqueda en registros de auditoría de Office 365 |
-procexec, -logon, -objaccess, -allreport | Informes adicionales |
-web, -webview, -webhost, -webport | Iniciar el panel web |
-llm, -llm-provider, -llm-url, -llm-model, -llm-key, -llm-severity, -llm-batch, -llm-context | Análisis con LLM local |
| Muestra | Descripción |
|---|
| Sample_TimeSketch.csv | Línea de tiempo que puedes subir a Timesketch para ver el panorama completo de un ataque |
| Sample_Report.xlsx | Cada evento detectado en todos los registros de Windows proporcionados |
| Sample_Logon_Events.csv | Todos los eventos de inicio de sesión con campos analizados (fecha, usuario, IP de origen, proceso de inicio de sesión, estación de trabajo, tipo de inicio de sesión, dispositivo, registro original) |
| Sample_Process_Execution_Events.csv | Todas las ejecuciones de procesos capturadas de los registros de eventos |
| Sample_Object_Access_Events.csv | Acceso a objetos capturado del Evento 4663 |
| Sample_Collected-SIDS.csv | Usuarios y sus SIDs, para ayudar en las investigaciones |
| EventID_Frequency_Analysis.xls | Análisis de frecuencia de Event ID |