07 - Velociraptor (Caça em escala)
video: https://youtu.be/... no frontmatter da nota.Velociraptor (Caça em escala)
Nota 07 do capítulo 09 (Ferramentas e Plataformas), dedicada à caça interativa e em escala sobre endpoints com VQL.
O Velociraptor coloca o processo de hunting do capítulo 07 em execução federada sobre milhares de hosts, de forma controlada e read-only.
Dialoga com as notas 06 e 08 deste capítulo, com o controle DAT.1 e com os grupos HNT e AUT do capítulo 15.
1. Contexto e Posicionamento na Biblioteca
A nota 06 deste capítulo mostrou ferramentas que examinam um host por vez, sob demanda e com custo alto por alvo. O Velociraptor resolve o problema oposto: executar a mesma pergunta de caça sobre milhares de endpoints de uma vez, de forma read-only, com controle fino de recursos e sem obrigar o despejo de toda telemetria em um SIEM. Ele ocupa na biblioteca o papel de motor de execução do processo de hunting: hipóteses do capítulo 07 viram artifacts VQL aqui, e as descobertas voltam ao ciclo de inteligência como novas detecções, novas baselines e novas hipóteses.
Três características distinguem o Velociraptor de um agente de EDR comercial. Primeiro, é código aberto e sem licenciamento por endpoint, o que permite cobrir ativos que o EDR não cobre, como servidores legados, estações de laboratório e redes isoladas. Segundo, a unidade de trabalho é o artifact, um pacote declarativo com nome, parâmetros e consultas VQL versionável em Git, o que torna cada caça reprodutível e auditável. Terceiro, o acesso aos dados é interativo: o analista pergunta, o endpoint responde apenas o resultado, e nada precisa ser ingerido permanentemente em um data lake para isso.
2. Arquitetura: Servidor, Clientes, VQL e Artifacts
A arquitetura é cliente-servidor com TLS mútuo. O servidor expõe a GUI (porta padrão 8889) e o frontend que recebe os agentes (porta padrão 8009); cada cliente roda um binário único que persiste como serviço e puxa trabalho do servidor. O cliente executa VQL localmente e devolve só as linhas resultantes, o que mantém o tráfego de rede proporcional ao resultado e não à telemetria bruta. O servidor mantém o datastore de arquivos (FileStore local ou bucket S3), a fila de tarefas por cliente e o cadastro de hosts com client_id estável, que sobrevive a reinstalações do agente.
O VQL (Velociraptor Query Language) é uma linguagem parecida com SQL, composta por funções e plugins que leem estado do sistema: pslist() para processos, glob() para arquivos, parse_evtx() para logs de eventos, read_reg_key() para registro, parse_pe() para binários, entre dezenas de outros. Um artifact empacota uma ou mais fontes de consulta VQL com metadados: nome hierárquico, descrição, autor, parâmetros tipados e referência a MITRE ATT&CK. A biblioteca padrão traz centenas de artifacts prontos, e a prática da casa é estendê-la com artifacts Custom, versionados em repositório e revisados no mesmo fluxo de código do time.
| Componente | Papel | Observação operacional |
|---|---|---|
| Cliente (agente) | Executa VQL local e responde tarefas | binário único por SO, atualização centralizada |
| Frontend (8009) | Recebe conexões dos clientes | TLS mútuo, enrolamento de chaves por HMAC |
| GUI (8889) | Hunts, notebooks, VFS, coletores | RBAC por grupos definidos na configuração |
| Datastore | Guarda resultados e uploads | FileStore em disco ou S3, com ciclo de limpeza |
| Artifact | Unidade declarativa de caça | YAML versionado em Git, com parâmetros tipados |
3. VQL na Prática: Execução, Persistência e Acesso a Credenciais
A execução suspeita viva é a caça de partida mais comum. A consulta abaixo procura interpretadores com padrões de download cradle e execução ofuscada na linha de comando, cobrindo T1059.001 e variantes de evasion:
SELECT Pid, Name, Exe, CommandLine, CreateTime AS Inicio
FROM pslist()
WHERE Name =~ "(?i)(powershell|pwsh|mshta|rundll32|regsvr32|wscript)"
AND CommandLine =~ "(?i)(frombase64string|iex|downloadstring|downloadfile|-e?nc)"
Persistência combina três fontes clássicas, Run keys, serviços e tarefas agendadas, cada uma como artifact pronto da biblioteca padrão. O filtro por caminhos de usuário elimina a maior parte do ruído de software corporativo legítimo:
SELECT * FROM Artifact.Windows.Registry.Run()
WHERE ValueData =~ "(?i)(users|appdata|temp|powershell|wscript|mshta)"
SELECT Name, PathName, StartMode
FROM Artifact.Windows.System.Services()
WHERE PathName =~ "(?i)(users|appdata|temp|public)"
O histórico de execução via prefetch permite enxergar ferramentas que já saíram do host, o que o pslist não alcança. A caixa abaixo procura utilitários de administração remota e de manipulação de sombras de cópia, padrão associado a movimento lateral e a ações de ransomware:
SELECT Name, LastRunTimes, RunCount
FROM Artifact.Windows.Timeline.Prefetch()
WHERE Name =~ "(?i)(psexec|wmic|net|vssadmin|wbadmin)"
O acesso a credenciais é caçado por telemetria de handles, em geral via Sysmon EID 10, consultado com parse_evtx no cliente. A consulta abaixo lista processos que abriram lsass.exe com direitos de leitura de memória, excluindo os processos de sistema que têm esse direito legítimo:
SELECT EventTime, EventData.SourceImage AS Origem,
EventData.GrantedAccess AS Acesso
FROM parse_evtx(filename="C:/Windows/system32/winevt/Logs/Microsoft-Windows-Sysmon%4Operational.evtx")
WHERE System.EventID.Value = 10
AND EventData.TargetImage =~ "(?i)lsass\\.exe"
AND NOT EventData.SourceImage =~ "(?i)(csrss|winlogon|services|lsass|svchost)"
4. Exemplo de Artifact VQL Completo
O artifact abaixo é o formato declarativo completo: nome hierárquico, descrição, referência ATT&CK, parâmetro tipado com valor padrão e duas fontes independentes, uma sobre processos vivos e outra sobre histórico de execução. Salve-o como Custom.Hunting.PowerShellOfuscado e importe pela GUI em View Artifacts, ou mantenha um diretório de definições carregado no servidor:
name: Custom.Hunting.PowerShellOfuscado
description: |
Procura PowerShell com padroes de download cradle e execucao ofuscada,
apoiando as hipoteses de execucao e evasion do capitulo 08.
reference:
- https://attack.mitre.org/techniques/T1059/001/
author: time.hunting@empresa.internal
parameters:
- name: RegexSuspeito
type: regex
default: "(?i)(frombase64string|iex|downloadstring|downloadfile|-e?nc\\s)"
sources:
- name: ProcessosVivos
query: |
SELECT Pid, Name, Exe, CommandLine, CreateTime AS Inicio
FROM pslist()
WHERE Name =~ "(?i)(powershell|pwsh)"
AND CommandLine =~ RegexSuspeito
- name: PrefetchHistorico
query: |
SELECT Name, LastRunTimes, RunCount
FROM Artifact.Windows.Timeline.Prefetch()
WHERE Name =~ "(?i)(POWERSHELL|PWSH)"
A separação em fontes importa na leitura de resultados: cada fonte aparece com seu nome na saída do hunt, o que permite comparar hosts com processo vivo e hosts com histórico de execução, dois estados com implicações distintas de contenção.
5. Caça Federada em Milhares de Endpoints
O hunt é o mecanismo federado: o analista seleciona artifacts, parâmetros, rótulos de clientes e prazo de coleta, e o servidor distribui a tarefa para todo o parque elegível. Cada cliente executa quando conecta e devolve linhas ao hunt; o notebook do hunt permite correlacionar, agregar e visualizar sem exportar nada. Em frotas de milhares de endpoints, três práticas separam caça controlada de indisposição: começar por um grupo canário com dezenas de hosts, usar rótulos (labels) para delimitar frotas por criticidade e sempre limitar recursos.
Os controles de recursos do cliente são a garantia de segurança operacional: ops_per_second limita operações VQL por segundo, cpu_limit e iops_limit teto o uso percentual de CPU e de disco, e max_execution_time encerra consultas travadas. Uma hunt de disco completo sobre 10 mil servidores sem esses limites é uma autocatástrofe; com limites, a mesma hunt se espalha ao longo de horas e ninguém percebe. O padrão da casa deve ser: cpu_limit 50, iops_limit 30 e canário obrigatório para qualquer artifact novo.
6. Coleta Forense e Coletor Offline
Além de caça, o Velociraptor cumpre papel de coletor forense sob demanda. O artifact Windows.KapeFiles.Collect executa alvos de triagem no padrão KAPE, puxando prefetch, hives de registro, logs de eventos e artefatos de execução em um único upload, o que alimenta diretamente o Plaso da nota 06. O navegador VFS permite descer à árvore de arquivos de um cliente específico, baixar arquivos com hash e manter a proveniência registrada no servidor. O coletor offline fecha a lacuna de hosts sem linha com o servidor: o comando velociraptor collector gera um binário autônomo com os artifacts embutidos, que roda no host alvo e produz um zip importável de volta ao servidor, mantendo o mesmo formato de resultado.
Esse binário autônomo é a ponte entre o parque gerenciado e o parque sem conectividade: ambientes industriais, DMZs rígidas e notebooks em field service podem ser triados com o mesmo repertório de artifacts e triados depois pelo mesmo time. O zip importado entra no servidor como coleta local, com os mesmos notebooks, exportações e trilhas de auditoria, o que mantém a evidência dentro de um único fluxo auditável.
7. Integração com Hunting Programático
O servidor expõe API gRPC autenticada por certificado, e o pacote Python pyvelociraptor torna cada hunt programável. O esqueleto abaixo lista clientes e dispara uma consulta via API, base para automatização do controle AUT.4 do capítulo 15:
from pyvelociraptor import ApiClient, api_pb2, api_pb2_grpc
config = open("/etc/velociraptor/api.config.yaml").read()
conn = ApiClient(api_pb2.ApiClientConfiguration.FromString(config))
stub = api_pb2_grpc.APIStub(conn)
vql = "SELECT client_id, os_info.fqdn AS Host FROM clients()"
request = api_pb2.VQLCollectorRequest(
query=[api_pb2.VQLRequest(VQL=vql)],
max_row=1000,
)
for resposta in stub.Query(request):
if resposta.response:
print(resposta.response)
O padrão de automação recomendado nesta biblioteca é o seguinte: um agendador dispara semanalmente as hunts de alta prioridade via API; os resultados são exportados em JSON para o bucket do lake descrito na nota 08; as linhas relevantes entram no SIEM com etiqueta de fonte velociraptor; e as descobertas que viram detecção permanente migram para regras Sigma, reduzindo a dependência de hunt manual. Os notebooks do servidor também executam Python com VQL embutido, útil para prototipar antes de versar o artifact.
8. Limitações
O Velociraptor exige conectividade de volta ao servidor, e clientes offline só recebem hunts quando reconectam, o que deixa janelas cegas em frotas móveis. O VQL é read-only por desenho: contenção e erradicação exigem integração com SOAR ou ação manual, e tentar forçar o Velociraptor a agir é má prática. A curva de aprendizado do VQL é real para times acostumados a console gráfica, e a qualidade dos artifacts comunitários varia, o que impõe revisão antes de qualquer uso em produção. Por fim, o servidor é ativo de altíssimo valor: quem controla a GUI controla milhares de hosts, e por isso o acesso deve ser restrito, auditado e com MFA, e o tráfego de clientes nunca deve atravessar redes administrativas sem isolamento.
9. Erros Comuns e Pontos de Atenção
O erro mais caro é liberar hunts de coleta pesada sem canário e sem limites de recursos, tratando o parque inteiro como laboratório. O segundo é transformar o Velociraptor em SIEM: manter resultados de centenas de hunts no datastore sem política de expiração incha o armazenamento e degrada a GUI; exporte o que interessa e deixe a retenção longa para o lake da nota 08. O terceiro é copiar artifacts da internet sem leitura linha a linha, porque parâmetros mal configurados, como globs muito largos, multiplicam o custo em disco e em rede em cada cliente.
Na leitura de resultados, cuidado com a inversão de conclusão: ausência de linhas em uma hunt não prova ausência de comprometimento, apenas que aquele artifact, naquele instante e com aqueles parâmetros, não viu nada. Registre sempre a versão do artifact, os parâmetros usados e o prazo de coleta no relatório, seguindo a nota 05 do capítulo 07, para que a caça seja reprodutível por outro analista.
10. Integração com o Restante da Biblioteca
Esta nota executa em escala o que os capítulos 07 e 08 planejam: cada hipótese de caça vira artifact, cada técnica do capítulo 08 vira consulta VQL com referência ATT&CK, e cada descoberta realimenta a produção de inteligência do capítulo 05. O controle DAT.1 encontra aqui o complemento open source do inventário de telemetria, e os grupos HNT do capítulo 15 usam os controles de recursos como política de execução. A nota 08 do capítulo 09 mostra para onde vão os resultados em volume, e a nota 14 da biblioteca, sobre BAS, usa artifacts de validação para provar que a simulação deixou os rastros esperados.