IntermedioVelociraptorDFIRthreat huntingVQLforenseopen source

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.

MalwareIntel Research··11 min lectura
Serie: EDR/XDR Telemetría por Vendor — Parte 10

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):

RecursoMinimoRecomendado
CPU4 vCPU8 vCPU
RAM4 GB16 GB
Disco50 GB SSD500 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:

PluginDescripcion
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 extendidos
  • Windows.EventLogs.EvtxHunter: buscar patrones en Event Logs
  • Windows.Forensics.Prefetch: analizar Prefetch para ejecucion de programas
  • Windows.Forensics.NTFS.MFT: parsear Master File Table
  • Windows.Registry.AutoRuns: mecanismos de persistencia en registro
  • Windows.Detection.Amcache: historial de ejecucion de programas
  • Windows.Forensics.Shellbags: navegacion de carpetas del usuario

Linux:

  • Linux.Sys.Crontab: tareas cron programadas
  • Linux.Forensics.Journal: parsear journal de systemd
  • Linux.Detection.AnomalousFiles: archivos con permisos anomalos

Multi-plataforma:

  • Generic.Detection.Yara.Glob: escaneo YARA en disco
  • Generic.Detection.Yara.Process: escaneo YARA en memoria de procesos
  • Generic.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:

  1. Ir a la seccion "Hunt Manager"
  2. Crear nuevo hunt: seleccionar artifact, configurar parametros
  3. Definir el scope: todos los clientes, un grupo, o clientes que cumplan una condicion
  4. 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

  1. Desde el servidor, se crea un "collector" empaquetado: un ejecutable autonomo que incluye los artifacts a ejecutar y la configuracion
  2. Se distribuye el ejecutable al endpoint objetivo (via USB, red, o cualquier medio)
  3. El operador ejecuta el collector en el endpoint
  4. El collector ejecuta los artifacts localmente y genera un archivo ZIP con los resultados
  5. 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 procesos
  • Windows.Events.DNSQueries: captura consultas DNS
  • Windows.Events.ServiceCreation: detecta nuevos servicios
  • Linux.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:

CategoriaEjemplos
DetectionDeteccion de Cobalt Strike, BloodHound, Mimikatz
ForensicsParseo de navegadores, historial USB, artefactos cloud
TriagePaquetes de triaje rapido para incident response
ComplianceVerificaciones CIS, controles de seguridad
Threat HuntingBusqueda 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:

  1. Desarrollar la query VQL en la interfaz interactiva (notebook)
  2. Validar los resultados con datos reales
  3. Empaquetar como artifact YAML con parametros configurables
  4. 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

AspectoEDR (CrowdStrike, etc.)Velociraptor
Deteccion continuaSi, automaticaNo, bajo demanda (salvo event monitoring)
PrevencionSi, bloqueo en tiempo realNo
Threat huntingLimitado a los datos recopiladosConsultas ad-hoc ilimitadas
ForenseDatos limitados a la retencionAcceso completo al filesystem
CosteAlto (licencias por endpoint)Gratuito
ComplejidadMedio (gestion centralizada)Alto (requiere VQL)
EscalaMiles de endpointsMiles de endpoints
OfflineNoSi (collectors)
CustomizacionReglas del vendorIlimitada (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.