Velociraptor: DFIR y Hunting a Escala con VQL
Guia practica de Velociraptor para DFIR y threat hunting. Arquitectura cliente-servidor, lenguaje VQL, artifacts, hunts masivos, offline collectors, server monitoring y artifacts de la comunidad.
Que es Velociraptor
Velociraptor es una herramienta open source de DFIR (Digital Forensics and Incident Response) y threat hunting creada por Mike Cohen, ex-ingeniero de Google. Adquirida por Rapid7 en 2023, sigue siendo completamente open source.
A diferencia de un EDR que monitoriza continuamente y genera alertas, Velociraptor funciona como un sistema de consultas: el analista formula una pregunta (en VQL), la envia a uno o miles de endpoints, y recibe los resultados. Es la diferencia entre un sistema de alarma (EDR) y un detective con lupa (Velociraptor).
Esta filosofia lo hace ideal para:
- Respuesta a incidentes: recopilar evidencia forense rapidamente de endpoints afectados
- Threat hunting: buscar indicadores de compromiso o comportamientos sospechosos en toda la infraestructura
- Triaje remoto: evaluar el alcance de un incidente sin necesidad de acceso fisico
Arquitectura
Velociraptor tiene una arquitectura cliente-servidor minimalista.
Servidor
El servidor Velociraptor es un unico binario que incluye:
- Frontend: interfaz web para gestion y analisis
- API gRPC: comunicacion con los clientes y con herramientas externas
- Datastore: almacenamiento de resultados basado en archivos (no requiere base de datos externa)
- Motor VQL: procesamiento de queries del lado del servidor
Requisitos del servidor para un despliegue tipico (hasta 10.000 endpoints):
| Recurso | Minimo | Recomendado |
|---|---|---|
| CPU | 4 vCPU | 8 vCPU |
| RAM | 4 GB | 16 GB |
| Disco | 50 GB SSD | 500 GB SSD |
El servidor puede ejecutarse en Linux, Windows o macOS. Para produccion se recomienda Linux con disco SSD (el datastore hace muchas operaciones I/O).
Cliente (agente)
El cliente es el mismo binario que el servidor, ejecutado en modo cliente. Se instala en cada endpoint y mantiene una conexion persistente con el servidor.
Caracteristicas del cliente:
- Consumo minimo: tipicamente 10-20 MB RAM en reposo
- Comunicacion cifrada con el servidor (mTLS)
- Ejecuta queries VQL localmente y devuelve resultados
- Puede funcionar en modo offline y sincronizar cuando recupera conectividad
- Soporta Windows, Linux y macOS
La comunicacion cliente-servidor usa HTTP/2 sobre TLS. El cliente hace polling periodico al servidor para comprobar si hay tareas pendientes. Cuando el servidor envia un hunt o una query, el cliente la ejecuta localmente.
Despliegue rapido
Velociraptor se despliega con un solo binario. Para levantar un servidor de pruebas:
# Descargar el binario
wget https://github.com/Velocidex/velociraptor/releases/latest/download/velociraptor-linux-amd64
# Generar configuracion interactiva
./velociraptor-linux-amd64 config generate -i
# Iniciar servidor
./velociraptor-linux-amd64 frontend -v --config server.config.yaml
# Generar paquete de cliente
./velociraptor-linux-amd64 config repack --msi client.config.yaml velociraptor-client.msi
El comando config generate -i crea la configuracion del servidor y del cliente de forma interactiva, generando los certificados TLS automaticamente.
VQL: Velociraptor Query Language
VQL es el lenguaje que hace unico a Velociraptor. Es un lenguaje similar a SQL disenado para consultar el estado de los endpoints en tiempo real.
Sintaxis basica
SELECT * FROM info()
Esta query devuelve informacion basica del endpoint (hostname, OS, version, arquitectura). Las queries VQL siguen el patron SELECT campos FROM plugin() WHERE condiciones.
Plugins VQL
VQL tiene mas de 200 plugins que actuan como fuentes de datos. Algunos ejemplos:
| Plugin | Descripcion |
|---|---|
info() | Informacion del sistema |
pslist() | Lista de procesos en ejecucion |
netstat() | Conexiones de red activas |
glob() | Buscar archivos por patron |
parse_pe() | Analizar cabeceras PE de ejecutables |
parse_evtx() | Parsear logs de Windows Event Log |
read_reg_key() | Leer claves del registro de Windows |
yara() | Escanear archivos o memoria con reglas YARA |
hash() | Calcular hashes de archivos |
upload() | Subir archivos al servidor para analisis |
wmi() | Ejecutar queries WMI |
execve() | Ejecutar comandos del sistema |
Ejemplos practicos
Buscar procesos sospechosos que se comunican con IPs externas:
SELECT Pid, Name, CommandLine, {
SELECT Raddr.IP AS RemoteIP, Raddr.Port AS RemotePort
FROM netstat()
WHERE Pid = Pid AND Status = "ESTABLISHED"
AND NOT RemoteIP =~ "^(10\\.|172\\.(1[6-9]|2[0-9]|3[01])\\.|192\\.168\\.)"
} AS Connections
FROM pslist()
WHERE Connections
Buscar persistencia en claves de autorun de Windows:
SELECT Key.FullPath, Key.Mtime, Values
FROM read_reg_key(
globs=[
"HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run\\*",
"HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\RunOnce\\*",
"HKEY_CURRENT_USER\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run\\*"
]
)
Escanear directorios con YARA:
SELECT FileName, Size, Hash, YaraMatch
FROM yara(
rules="rule suspicious { strings: $a = \"mimikatz\" nocase condition: $a }",
files=glob(globs="C:\\Users\\**\\*.exe")
)
Buscar archivos ejecutables creados en las ultimas 24 horas:
SELECT FullPath, Size, Mtime, hash(path=FullPath) AS Hash
FROM glob(globs="C:\\Users\\**\\*.{exe,dll,ps1,bat,vbs}")
WHERE Mtime > now() - 86400
ORDER BY Mtime DESC
VQL avanzado: funciones y operadores
VQL soporta funciones de agregacion, subqueries, expresiones regulares y operaciones con timestamps:
-- Contar procesos por usuario
SELECT User, count() AS ProcessCount
FROM pslist()
GROUP BY User
ORDER BY ProcessCount DESC
-- Procesos con linea de comandos sospechosa
SELECT Pid, Name, CommandLine, Ppid, Username
FROM pslist()
WHERE CommandLine =~ "(powershell|cmd).*(-enc|-e |downloadstring|iex|invoke-expression)"
AND NOT Name = "velociraptor"
Artifacts: consultas empaquetadas
Los artifacts son la forma en que Velociraptor empaqueta queries VQL reutilizables. Un artifact es un archivo YAML que define:
- Nombre y descripcion
- Parametros configurables
- Una o mas queries VQL
- Tipo (CLIENT, SERVER, CLIENT_EVENT)
Estructura de un artifact
name: Custom.Persistence.ScheduledTasks
description: |
Enumera todas las tareas programadas y detecta las sospechosas
basandose en la ubicacion del ejecutable y el patron de ejecucion.
type: CLIENT
parameters:
- name: SuspiciousPatterns
default: "(temp|appdata|public|downloads)"
description: Regex para paths sospechosos
sources:
- query: |
LET tasks = SELECT * FROM Artifact.Windows.System.TaskScheduler()
SELECT Name, ActionPath, Arguments, UserId, LastRunTime, NextRunTime,
ActionPath =~ SuspiciousPatterns AS Suspicious
FROM tasks
WHERE Suspicious
Artifacts predefinidos
Velociraptor incluye cientos de artifacts predefinidos organizados por plataforma y categoria:
Windows:
Windows.System.Pslist: procesos con detalles extendidosWindows.EventLogs.EvtxHunter: buscar patrones en Event LogsWindows.Forensics.Prefetch: analizar Prefetch para ejecucion de programasWindows.Forensics.NTFS.MFT: parsear Master File TableWindows.Registry.AutoRuns: mecanismos de persistencia en registroWindows.Detection.Amcache: historial de ejecucion de programasWindows.Forensics.Shellbags: navegacion de carpetas del usuario
Linux:
Linux.Sys.Crontab: tareas cron programadasLinux.Forensics.Journal: parsear journal de systemdLinux.Detection.AnomalousFiles: archivos con permisos anomalos
Multi-plataforma:
Generic.Detection.Yara.Glob: escaneo YARA en discoGeneric.Detection.Yara.Process: escaneo YARA en memoria de procesosGeneric.Forensic.Timeline: crear timeline forense
Hunts: busqueda a escala
Un hunt es la ejecucion de un artifact en multiples endpoints simultaneamente. Es la funcionalidad que convierte a Velociraptor en una herramienta de threat hunting real.
Crear un hunt
Desde la interfaz web:
- Ir a la seccion "Hunt Manager"
- Crear nuevo hunt: seleccionar artifact, configurar parametros
- Definir el scope: todos los clientes, un grupo, o clientes que cumplan una condicion
- Lanzar el hunt
Desde la linea de comandos (API):
./velociraptor-linux-amd64 query "
LET hunt_id = hunt(
description='Search for Mimikatz',
artifacts='Windows.Detection.Yara.Glob',
spec=dict(
`Windows.Detection.Yara.Glob`=dict(
PathGlob='C:\\Users\\**\\*.exe',
YaraRule='rule mimikatz { strings: $a = \"mimikatz\" nocase condition: $a }'
)
)
)
SELECT * FROM hunt_id
" --config server.config.yaml
Monitorizar hunts
El dashboard de hunts muestra en tiempo real:
- Numero de clientes que han completado el hunt
- Resultados encontrados (hits)
- Errores de ejecucion
- Tiempo medio de ejecucion por cliente
- Tabla de resultados agregados
Los resultados se pueden exportar como CSV, JSON o como un notebook interactivo dentro de Velociraptor.
Hunts programados
Velociraptor permite programar hunts recurrentes para deteccion continua:
- Ejecutar un artifact cada hora para detectar nuevos mecanismos de persistencia
- Escaneo YARA diario en directorios criticos
- Verificacion semanal de configuracion de seguridad
Esto acerca a Velociraptor a un modelo de deteccion continua, aunque sigue siendo fundamentalmente bajo demanda.
Offline Collectors
Los offline collectors son una funcionalidad clave para incident response. Permiten recopilar evidencia forense de endpoints que no tienen el agente instalado o no tienen conectividad con el servidor.
Como funciona
- Desde el servidor, se crea un "collector" empaquetado: un ejecutable autonomo que incluye los artifacts a ejecutar y la configuracion
- Se distribuye el ejecutable al endpoint objetivo (via USB, red, o cualquier medio)
- El operador ejecuta el collector en el endpoint
- El collector ejecuta los artifacts localmente y genera un archivo ZIP con los resultados
- El ZIP se transporta de vuelta al servidor para analisis
Crear un offline collector
./velociraptor-linux-amd64 artifacts collect \
--format zip \
--output /tmp/triage.zip \
Windows.Forensics.Prefetch \
Windows.Registry.AutoRuns \
Windows.EventLogs.EvtxHunter \
Windows.System.Pslist \
Windows.Forensics.NTFS.MFT
Para crear un ejecutable autonomo distribuible:
./velociraptor-linux-amd64 config repack \
--collector \
--config collector.config.yaml \
collector.exe
Casos de uso
- Incidentes en redes aisladas: endpoints sin conectividad a internet
- Forensics de campo: recopilacion de evidencia in situ
- Respuesta rapida: distribuir collectors antes de tener el agente desplegado
- Evidencia legal: recopilar artefactos con integridad para procedimientos legales
Server Monitoring
Velociraptor puede monitorizar eventos del servidor para deteccion continua y automatizacion.
Event Monitoring Artifacts
Los artifacts de tipo CLIENT_EVENT se ejecutan continuamente en los clientes y reportan eventos al servidor en tiempo real:
Windows.Events.ProcessCreation: monitoriza la creacion de procesosWindows.Events.DNSQueries: captura consultas DNSWindows.Events.ServiceCreation: detecta nuevos serviciosLinux.Events.ExecutableFiles: detecta nuevos ejecutables
Server Event Artifacts
Los artifacts de tipo SERVER_EVENT procesan los datos en el servidor:
name: Custom.Server.Detection.SuspiciousProcess
type: SERVER_EVENT
sources:
- query: |
SELECT * FROM watch_monitoring(artifact="Windows.Events.ProcessCreation")
WHERE CommandLine =~ "(?i)(mimikatz|cobalt|beacon|meterpreter)"
Alertas y notificaciones
Velociraptor puede enviar notificaciones cuando un server artifact detecta algo:
- Slack/Teams: notificaciones a canales
- Email: alertas por correo
- Syslog: integracion con SIEM
- Webhook: integracion con herramientas SOAR
Community Artifacts
La comunidad de Velociraptor mantiene un repositorio de artifacts compartidos que se actualiza constantemente.
Artifact Exchange
El Artifact Exchange es el repositorio oficial de artifacts contribuidos por la comunidad. Se puede navegar desde la interfaz web del servidor y los artifacts se importan con un click.
Categorias populares:
| Categoria | Ejemplos |
|---|---|
| Detection | Deteccion de Cobalt Strike, BloodHound, Mimikatz |
| Forensics | Parseo de navegadores, historial USB, artefactos cloud |
| Triage | Paquetes de triaje rapido para incident response |
| Compliance | Verificaciones CIS, controles de seguridad |
| Threat Hunting | Busqueda de LOLBins, anomalias en servicios |
Crear artifacts personalizados
La capacidad de crear artifacts personalizados es una de las mayores fortalezas de Velociraptor. El proceso es:
- Desarrollar la query VQL en la interfaz interactiva (notebook)
- Validar los resultados con datos reales
- Empaquetar como artifact YAML con parametros configurables
- Compartir con el equipo o con la comunidad
La interfaz de notebooks permite iterar rapidamente: ejecutar VQL, ver resultados, ajustar la query, repetir. Es un entorno ideal para desarrollar detecciones.
Velociraptor vs EDR: cuando usar cada uno
| Aspecto | EDR (CrowdStrike, etc.) | Velociraptor |
|---|---|---|
| Deteccion continua | Si, automatica | No, bajo demanda (salvo event monitoring) |
| Prevencion | Si, bloqueo en tiempo real | No |
| Threat hunting | Limitado a los datos recopilados | Consultas ad-hoc ilimitadas |
| Forense | Datos limitados a la retencion | Acceso completo al filesystem |
| Coste | Alto (licencias por endpoint) | Gratuito |
| Complejidad | Medio (gestion centralizada) | Alto (requiere VQL) |
| Escala | Miles de endpoints | Miles de endpoints |
| Offline | No | Si (collectors) |
| Customizacion | Reglas del vendor | Ilimitada (VQL + artifacts) |
La combinacion ideal para muchos SOC es usar un EDR enterprise para deteccion y prevencion continua, y Velociraptor para threat hunting proactivo, respuesta a incidentes y recopilacion de evidencia forense.
Conclusion
Velociraptor llena un hueco que los EDR enterprise no cubren: la capacidad de hacer preguntas arbitrarias a los endpoints en tiempo real. Con VQL, un analista puede formular hipotesis de hunting, verificarlas en miles de endpoints en minutos, y recopilar evidencia forense detallada sin depender de lo que el EDR haya decidido registrar.
No es un reemplazo del EDR: es un complemento necesario. El EDR vigila constantemente, Velociraptor investiga cuando hace falta. Juntos, cubren el espectro completo de deteccion y respuesta.
Preguntas frecuentes
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.