Velociraptor para Threat Hunting: VQL, Artifacts y Hunts en Endpoints
Guia practica de threat hunting con Velociraptor. Consultas VQL, artifacts de hunting predefinidos, creacion de hunts masivos, offline collectors y workflows de investigacion forense en endpoints Windows y Linux.
Que es Velociraptor
Velociraptor es una herramienta open source de DFIR (Digital Forensics and Incident Response) desarrollada por Mike Cohen (anteriormente en Google). Permite ejecutar consultas forenses en miles de endpoints simultaneamente, recopilar artefactos, buscar indicadores y realizar investigaciones en profundidad.
Para el threat hunter, Velociraptor ofrece capacidades que los SIEM no tienen: acceso directo al filesystem, memoria, registro y configuracion de los endpoints en tiempo real. Mientras un SIEM busca en logs historicos, Velociraptor busca en el estado actual y los artefactos del sistema.
Arquitectura de Velociraptor
Velociraptor sigue un modelo cliente-servidor:
- Servidor. Interfaz web para gestionar hunts, revisar resultados y crear artefactos
- Agente (cliente). Se instala en cada endpoint. Conecta al servidor via HTTPS (mTLS)
- Artefactos (artifacts). Definiciones de consultas y recopilacion de datos escritas en VQL
- Hunts. Ejecucion de artefactos en multiples endpoints simultaneamente
Despliegue basico
# Generar configuracion del servidor
velociraptor config generate -i
# Iniciar el servidor
velociraptor --config server.config.yaml frontend -v
# Generar paquete de instalacion del cliente
velociraptor --config server.config.yaml config client
# Resultado: client.config.yaml
# Instalar agente en endpoint Windows
velociraptor.exe --config client.config.yaml service install
VQL: Velociraptor Query Language
VQL es el lenguaje de consulta de Velociraptor. Tiene una sintaxis similar a SQL pero con funciones especificas para forensics y hunting.
Sintaxis basica
-- Consulta basica: listar procesos
SELECT Name, Pid, Ppid, Username, Exe, CommandLine
FROM pslist()
WHERE Name =~ "powershell"
-- Funciones de filtro
SELECT * FROM pslist()
WHERE Name =~ "(?i)cmd|powershell|wscript"
AND Username != "SYSTEM"
-- Operadores
-- =~ regex match
-- = igualdad exacta
-- != distinto
-- <, >, <=, >= comparacion
-- AND, OR, NOT logicos
-- IN pertenencia a lista
Plugins esenciales para hunting
pslist(). Lista procesos activos con detalles.
-- Procesos con conexiones de red activas
SELECT Name, Pid, Username, Exe,
join(array=process_tracker_callchain(id=Pid), sep=" -> ") AS Chain
FROM pslist()
WHERE Exe =~ "Temp|AppData"
glob(). Busca archivos en el filesystem por patron.
-- Buscar ejecutables en carpetas temporales
SELECT FullPath, Size, Mtime, Btime
FROM glob(globs="C:\\Users\\*\\AppData\\Local\\Temp\\*.exe")
-- Buscar scripts en todos los perfiles de usuario
SELECT FullPath, Size, Mtime
FROM glob(globs="C:\\Users\\*\\**\\*.{ps1,bat,vbs,js,hta}")
WHERE NOT FullPath =~ "Windows\\WinSxS"
parse_evtx(). Parsea archivos de Event Log de Windows.
-- Leer eventos Sysmon directamente
SELECT EventData.Image, EventData.CommandLine,
EventData.ParentImage, System.TimeCreated.SystemTime
FROM parse_evtx(
filename="C:\\Windows\\System32\\winevt\\Logs\\Microsoft-Windows-Sysmon%4Operational.evtx"
)
WHERE System.EventID.Value = 1
AND EventData.Image =~ "(?i)powershell"
ORDER BY System.TimeCreated.SystemTime DESC
LIMIT 100
read_reg_key(). Lee claves del registro de Windows.
-- Verificar Run keys de persistencia
SELECT Name, FullPath, Data.value AS Value
FROM read_reg_key(
globs="HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run\\*"
)
netstat(). Lista conexiones de red activas.
-- Conexiones establecidas a IPs externas
SELECT Pid, Name, Status, Laddr.IP, Raddr.IP, Raddr.Port
FROM netstat()
WHERE Status = "ESTABLISHED"
AND NOT Raddr.IP =~ "^(10\\.|172\\.(1[6-9]|2|3[01])\\.|192\\.168\\.)"
AND Raddr.IP != "127.0.0.1"
Artifacts de Hunting Predefinidos
Velociraptor incluye cientos de artefactos predefinidos organizados por categoria. Los mas relevantes para hunting:
Windows.Detection
Windows.Detection.BinaryRename
- Detecta ejecutables renombrados (nombre del PE header no coincide
con el nombre del archivo)
Windows.Detection.MutantYara
- Busca mutexes con patrones YARA
Windows.Detection.Autoruns
- Equivalente a Sysinternals Autoruns: lista todos los puntos
de autoarranque
Windows.System
Windows.System.Pslist
- Procesos activos con cadena de ejecucion completa
Windows.System.Services
- Servicios instalados con estado y configuracion
Windows.System.TaskScheduler
- Tareas programadas con definicion completa
Windows.System.DLLs
- DLLs cargadas por cada proceso
Windows.System.Amcache
- Historico de ejecutables via Amcache (evidencia de ejecucion)
Windows.EventLogs
Windows.EventLogs.PowershellScriptblock
- Transcripcion completa de scripts PowerShell ejecutados
Windows.EventLogs.RDPAuth
- Sesiones RDP con IP origen y cuenta
Windows.EventLogs.ServiceCreationComspec
- Servicios que ejecutan cmd.exe o powershell
Windows.Forensics
Windows.Forensics.Prefetch
- Archivos Prefetch (evidencia de ejecucion historica)
Windows.Forensics.Shimcache
- Shimcache/AppCompatCache (evidencia de ejecucion)
Windows.Forensics.NTFS.MFT
- Entradas MFT del filesystem (metadata de archivos,
incluyendo eliminados)
Windows.Forensics.Timeline
- Timeline forense combinando multiples fuentes
Creacion de Hunts
Un hunt ejecuta un artefacto en multiples endpoints simultaneamente. Es la funcionalidad central para threat hunting a escala.
Workflow de un hunt
- Crear el hunt. Seleccionar el artefacto, configurar parametros, definir scope (todos los endpoints, un label, un OS)
- Lanzar el hunt. Los agentes reciben la tarea y la ejecutan
- Monitorizar progreso. La interfaz web muestra el progreso y los primeros resultados
- Analizar resultados. Revisar los datos recopilados de todos los endpoints
- Investigar hallazgos. Para endpoints con resultados sospechosos, lanzar artefactos adicionales
Hunt de ejemplo: buscar persistencia
Hunt: Windows.Detection.Autoruns
Scope: Todos los endpoints Windows
Parametros: IncludeUnsigned=true
Resultado esperado: lista de todos los puntos de autoarranque
en todos los endpoints. Filtrar por:
- Entries sin firma digital
- Entries en rutas temporales
- Entries que ejecutan scripts (powershell, cmd, wscript)
- Entries no presentes en el baseline corporativo
Hunt de ejemplo: buscar ejecucion de LOLBins
-- Artifact personalizado: Custom.Hunting.LOLBins
name: Custom.Hunting.LOLBins
parameters:
- name: DateAfter
default: "2026-06-01"
sources:
- query: |
SELECT EventData.Image, EventData.CommandLine,
EventData.ParentImage, EventData.User,
System.TimeCreated.SystemTime as Timestamp
FROM parse_evtx(
filename="C:\\Windows\\System32\\winevt\\Logs\\Microsoft-Windows-Sysmon%4Operational.evtx"
)
WHERE System.EventID.Value = 1
AND System.TimeCreated.SystemTime > DateAfter
AND (
(EventData.Image =~ "certutil" AND EventData.CommandLine =~ "urlcache|split") OR
(EventData.Image =~ "bitsadmin" AND EventData.CommandLine =~ "transfer") OR
(EventData.Image =~ "mshta" AND EventData.CommandLine =~ "http") OR
(EventData.Image =~ "rundll32" AND EventData.CommandLine =~ "http|javascript")
)
Offline Collectors
Los Offline Collectors son paquetes autonomos que recopilan artefactos sin necesidad de un servidor Velociraptor. Son utiles en situaciones donde no hay conectividad o cuando se necesita recopilar evidencia de sistemas que no tienen el agente instalado.
Crear un Offline Collector
- En la interfaz web de Velociraptor, ir a Server Artifacts, Build Collector
- Seleccionar los artefactos a recopilar
- Configurar parametros (rango temporal, rutas a buscar)
- Generar el paquete ejecutable (.exe para Windows, binario para Linux)
Artefactos recomendados para el collector
Recopilacion forense basica:
- Windows.System.Pslist
- Windows.Detection.Autoruns
- Windows.System.Services
- Windows.System.TaskScheduler
- Windows.EventLogs.PowershellScriptblock
- Windows.Forensics.Prefetch
- Windows.Forensics.Shimcache
- Windows.Network.Netstat
- Custom.Hunting.LOLBins (si existe)
Analizar resultados del collector
# El collector genera un ZIP con los resultados
# Importar en el servidor Velociraptor
velociraptor --config server.config.yaml unzip path/to/collection.zip
VQL Avanzado para Hunting
YARA scanning con VQL
-- Escanear procesos en memoria con regla YARA
SELECT * FROM yara(
rules="rule cobalt_strike { strings: $a = {49 27 6d 20 69 6d 6d 65 64 69 61 74 65 6c 79} condition: $a }",
files=pslist()
)
Stacking para analisis estadistico
El stacking (apilamiento) es una tecnica de hunting que agrupa valores por frecuencia. Los valores raros (outliers) son candidatos a investigacion.
-- Stacking de servicios: buscar servicios raros
SELECT ServiceName, BinaryPathName, StartType,
count() as host_count
FROM source(artifact="Windows.System.Services")
GROUP BY ServiceName
ORDER BY host_count ASC
LIMIT 20
Los servicios que aparecen en pocos hosts son candidatos a investigacion: podrian ser persistencia instalada por un adversario en hosts especificos.
Timeline forense
-- Combinar multiples fuentes en una timeline
SELECT Timestamp, Source, Description, User
FROM chain(
a={SELECT Mtime as Timestamp, "Prefetch" as Source,
Executable as Description, "" as User
FROM source(artifact="Windows.Forensics.Prefetch")},
b={SELECT System.TimeCreated.SystemTime as Timestamp,
"Sysmon" as Source,
EventData.CommandLine as Description,
EventData.User as User
FROM source(artifact="Windows.EventLogs.EvtxHunter")
WHERE System.EventID.Value = 1}
)
ORDER BY Timestamp
Velociraptor para Linux
Velociraptor funciona en Linux con artefactos especificos:
Linux.Sys.Pslist - Procesos activos
Linux.Sys.Crontab - Tareas cron
Linux.Sys.Services - Servicios systemd
Linux.Sys.Users - Usuarios del sistema
Linux.Detection.Yara - Escaneo YARA en filesystem
Linux.Forensics.Journal - Logs de journald
Linux.Network.Netstat - Conexiones de red activas
Buenas Practicas
Crear una biblioteca de artefactos personalizados. Los artefactos predefinidos cubren lo basico. Crear artefactos especificos para tu entorno (baselines, exclusiones conocidas) mejora la precision.
Usar labels para segmentar. Asignar labels a los endpoints (servers, workstations, domain_controllers) permite lanzar hunts dirigidos a segmentos especificos.
Programar hunts periodicos. Algunos hunts (autorunscheck, services check, LOLBins) son mas efectivos cuando se ejecutan periodicamente y se comparan contra el baseline anterior.
Exportar resultados al SIEM. Los resultados de Velociraptor se pueden exportar a Elastic o Splunk para correlacion con otras fuentes de datos.
Conclusion
Velociraptor es una herramienta unica en el arsenal del threat hunter. Su capacidad de ejecutar consultas forenses en tiempo real sobre miles de endpoints, combinada con una biblioteca extensa de artefactos predefinidos y un lenguaje de consulta potente (VQL), lo convierte en el complemento ideal para los SIEM tradicionales.
Donde un SIEM busca en logs historicos, Velociraptor busca en el estado actual del sistema. Los dos enfoques son complementarios: el SIEM para busqueda temporal ("que paso ayer") y Velociraptor para busqueda espacial ("que hay ahora en todos los endpoints").
Preguntas frecuentes
Libros recomendados
Artículos relacionados
Threat Hunting con Sysmon en Windows: Eventos Clave y Consultas Practicas
Hunting de Mecanismos de Persistencia: Registry, Scheduled Tasks, Services y WMI
Hunting de Acceso a Credenciales: LSASS, Kerberoasting, Password Spraying y DCSync
ELK Stack para Threat Hunting: KQL, Dashboards y Reglas de Deteccion
Herramientas DFIR Open Source: Guia Completa 2026
Cadena de Custodia Digital: Preservacion de Evidencia Electronica
Este contenido tiene fines exclusivamente educativos y de investigación en ciberseguridad defensiva. No se proporcionan binarios maliciosos ni payloads ejecutables. El uso indebido de esta información es responsabilidad exclusiva del usuario. Leer disclaimer completo.