Pular para o conteúdo
Categoria: OPSEC9 min de leitura

DFIR no Linux: Triagem ao Vivo com UAC e Velociraptor

Por Lucas Andrade ·

Como a equipe Basilisk monta uma triagem ao vivo em hosts Linux comprometidos usando UAC e Velociraptor, sem destruir evidencia volatil.

DFIR no Linux: Triagem ao Vivo com UAC e Velociraptor

Tres da manha, um Debian 12 expondo um cron suspeito que reescreve /etc/ld.so.preload a cada 90 segundos. O reflexo errado seria desligar a maquina; o reflexo correto e abrir o runbook de triagem e capturar o estado vivo antes que o atacante perceba a luz acesa. Na Basilisk, esse cenario aparece todo mes em laboratorios de simulacao, e a regra e simples: ordem de volatilidade primeiro, hipotese depois. Memoria, conexoes, processos, descritores de arquivo abertos e modulos do kernel sao prioridade absoluta, porque um reboot ou ate um kill -9 mal colocado destroi 80% do que importa.

A ordem de volatilidade como primeira lei

A ordem de volatilidade (RFC 3227) ordena a evidencia pela velocidade com que ela evapora: registradores de CPU e cache somem em nanossegundos, a RAM na perda de energia, as conexoes de rede em segundos, os processos vivos ate o proximo reboot, o disco e o mais lento. A consequencia pratica: voce coleta do volatil para o persistente, nunca ao contrario. Um reboot para parar o cron apaga justamente as paginas de memoria que contem o payload desempacotado e o endereco de C2.

Concretamente: primeiro ss -tunap para sockets ativos, ps auxww e /proc/[pid]/exe para processos vivos (ate binarios apagados sao reconstruidos a partir de /proc), lsof -n para descritores abertos, cat /proc/modules para modulos de kernel carregados. Cada saida e escrita com timestamp UTC e hostname em um destino read-only, nunca no disco da vitima. So depois de garantir o estado volatil e que voce pensa em isolamento.

UAC para a triagem one-shot

Nossa caixa de ferramentas padrao comeca com UAC (Unix-like Artifacts Collector) do Tulpa Security e Velociraptor da Rapid7. UAC e perfeito para triagem one-shot offline: voce sobe um tar.gz de ~6MB, executa ./uac -p ir_triage /mnt/evidencia, e em 8 a 15 minutos tem hashes, /proc dump, journald, bash_history de todos os usuarios, listagem de cron e configuracoes de SSH compactadas.

UAC e deliberadamente leve em dependencias: shell puro, roda em um host onde voce nao tem permissao de instalar nada, e respeita a ordem de volatilidade no profile embutido. A nota operacional chave: rode o UAC a partir de uma midia montada read-only e escreva a saida em um destino criptografado separado, para nao alterar um unico atime na vitima. Para quem ainda nao montou o lab base, vale revisar Pentest Web do Zero: Montando um Lab Seguro com DVWA, Juice Shop e Burp Suite antes de simular incidentes reais.

Coleta de memoria com AVML

A coleta de memoria continua sendo o ponto mais fragil no Linux. Em kernel 6.x, AVML do Microsoft Research e a opcao mais consistente quando LiME falha em compilar contra cabecalhos ausentes. Comando real: avml --compress /evidencia/memdump.lime. Reserve no minimo o dobro da RAM em disco e jamais escreva no disco da vitima; use um NFS read-write montado em /mnt/triagem ou um USB encriptado com LUKS.

A razao de AVML em vez de LiME e pratica: LiME e um modulo de kernel compilado contra os cabecalhos exatos do kernel que costumam faltar na vitima, enquanto AVML e um binario de userspace linkado estaticamente que le via /proc/kcore ou /dev/crash. Depois de capturar, a analise vai para Volatility 3 com profile autodetectado, e e ai que o pipeline conversa com Memory Forensics com Volatility 3: Analisando Dumps em Lab Reproduzivel. Sem dump de memoria, qualquer rootkit LD_PRELOAD vira lenda urbana no relatorio.

Analise no Volatility 3

Com o dump na mao voce constroi a hierarquia de processos no Volatility 3 com linux.pstree, lista conexoes de rede com linux.sockstat e caca processos ocultos ou desvinculados da arvore com linux.psscan. O achado classico em um rootkit LD_PRELOAD e uma discrepancia: ps no sistema vivo mostra menos processos que linux.psscan no dump, porque o rootkit manipula a visao de userspace mas nao as estruturas do kernel.

Para kernels modernos a tabela de simbolos (ISF, Intermediate Symbol Format) e decisiva; sem simbolos compativeis o Volatility devolve resultados incompletos. Gere o arquivo ISF a partir do vmlinux com simbolos de debug da versao exata do kernel da vitima. Por isso vale manter de antemao um repositorio de simbolos para as versoes de kernel da sua frota, para nao perder horas conseguindo simbolos no meio do incidente.

Cacar persistencia: nunca em um lugar so

Persistencia em Linux raramente vive em um lugar so. Em casos recentes de mineradores Kinsing, encontramos quatro vetores simultaneos: systemd unit em /etc/systemd/system/.cache.service, entrada no crontab do root, modificacao de /etc/rc.local e um wrapper em /usr/local/sbin/ssh com SUID. UAC pega tudo isso com o profile ir_triage, mas vale rodar manualmente find / -newermt '2026-06-01' -type f -mtime -8 2>/dev/null para fechar gaps.

Nao esqueca os cantos discretos: ~/.bashrc e /etc/profile.d/, um authorized_keys com uma chave enfiada, regras udev, modulos PAM e jobs cron-at. Um unico vetor que escapa devolve o host ao atacante em horas. Para correlacionar com tecnicas Windows equivalentes, a equipe consulta Persistencia em Windows: 10 Tecnicas Documentadas e suas Contramedidas, porque atacantes oportunistas reutilizam padroes entre plataformas.

Velociraptor: de um host para uma frota

Velociraptor muda o jogo quando saimos de um host para uma frota. Subimos um servidor em t3.medium, geramos clientes Linux com velociraptor config client, distribuimos via Ansible e em 20 minutos temos visibilidade. As hunts mais uteis no nosso playbook sao Linux.Network.NetstatEnriched para sessoes ativas, Linux.Sys.SUID para binarios suspeitos e a regra Yara compilada com assinaturas de Pupy, Sliver e Merlin.

O poder do VQL e que voce formula uma hipotese como query e a dispara de forma sincrona contra 120 hosts: mostre todo processo cujo binario esteja em /tmp ou /dev/shm e tenha uma conexao de saida. Quando o IOC bate, exportamos collection zip assinado e seguimos para analise estatica em sandbox isolada, conforme descrito em Analise de Malware em Lab Isolado: Setup Seguro com FlareVM e Remnux. O segredo e nunca pular a fase de hashing SHA-256 antes de mover artefatos.

Super-timeline com plaso

Uma vez garantida a evidencia volatil, uma super-timeline transforma artefatos dispersos em uma narrativa. Com log2timeline.py (plaso) voce parseia timestamps do filesystem, journald, bash_history, logs de cron e acessos do webserver em uma unica visao ordenada por tempo, e filtra para a janela do incidente com psort.py. De relance voce ve que o login SSH as 02:14 UTC precedeu o curl do payload as 02:15 e a escrita da unit systemd as 02:16.

O erro mais comum e misturar fusos horarios: trabalhe sempre em UTC e anote o offset do host, senao voce monta uma cadeia causal que erra por horas. Fique de olho no timestomping (mtime resetado com touch -t); o ctime, mais dificil de o atacante falsificar, revela a hora real de modificacao e desmascara a manipulacao.

Cadeia de custodia e hashing

Cada artefato recebe um hash SHA-256 no momento da coleta, e esse hash e recalculado e comparado no recebimento na estacao de analise. Se nao baterem, a evidencia nao vale para nenhum uso formal. Documentamos cada decisao em chain of custody com timestamp UTC, hash e operador, porque mesmo em lab a disciplina forma musculo para o caso real.

Na pratica isso significa um caderno append-only (idealmente em um sistema separado) que registra cada comando, cada copia e cada decisao de isolamento com timestamp. Quem aprende essa disciplina so no incidente real perde metade da noite reconstruindo o que ele mesmo fez. Automatize o logging o maximo possivel para que nao seja esquecido sob pressao.

Depois da triagem: deteccao e hardening

Threat hunting pos-triagem fecha o ciclo. Convertemos as deteccoes em regras Sigma e empurramos para o Elastic, transformando o incidente em capacidade defensiva permanente, fluxo detalhado em Threat Hunting com Sigma e Elastic: Do Indicador a Regra de Deteccao. Um unico achado de ld.so.preload vira uma deteccao em toda a frota que sinaliza a proxima tentativa em segundos.

Para hosts que sobrevivem ao incidente, aplicamos hardening seguindo Hardening de Linux Servidor: CIS Benchmark Aplicado sem Quebrar Producao e revisamos SSH conforme Hardening de SSH 2026: Algoritmos, Certificados e Bastion Hosts antes de devolver para producao simulada. Um host restaurado sem fechar o vetor de acesso inicial e re-comprometido em dias, quase sempre pela mesma campanha automatizada que achou o primeiro acesso.

Checklist para a triagem ao vivo

Antes de tocar em nada: (1) toolkit read-only montado, destino de saida criptografado e separado; (2) estado volatil capturado (sockets, processos, modulos, /proc) com timestamps UTC; (3) dump de memoria via AVML com no minimo 2x a RAM de espaco reservado; (4) UAC ir_triage mais uma varredura manual com find de arquivos recentes; (5) as quatro classes de persistencia (systemd, cron, rc.local/profile, SUID/authorized_keys) verificadas; (6) cada artefato com hash e registrado no log de custodia; (7) isolamento so depois de completar a coleta; (8) deteccao reproduzida como regra Sigma.

FAQ

Devo tirar a maquina da rede imediatamente? Depende do que voce esta protegendo. Com exfiltracao de dados ativa, sim, mas idealmente via uma regra de firewall a montante em vez de puxar o cabo no host, para que o estado de memoria e a conexao de C2 sobrevivam para a captura. Uma desconexao dura pode disparar cifragem em andamento ou um dead-man switch.

Forensia de disco basta sem dump de memoria? Nao, nao contra malware residente em memoria e rootkits LD_PRELOAD. Muita ferramenta moderna quase nao toca no disco. Sem dump de memoria voce ve metade da historia e escreve palpites no relatorio.

UAC ou Velociraptor: qual primeiro? Para um host unico e isolado, UAC e mais rapido de montar e nao precisa de servidor. Assim que voce tem mais que um punhado de hosts ou hunts repetidas, Velociraptor ganha pela orquestracao central e pelo VQL. Na pratica combinamos os dois: Velociraptor para a varredura de toda a frota, UAC para coleta profunda nos hosts marcados como comprometidos. Nao e um ou outro, e uma sequencia.

Takeaway pratico: monte hoje um pendrive LUKS com UAC, AVML e cliente Velociraptor pre-configurado para o seu servidor de hunt. Teste em uma VM Debian limpa, cronometre, ajuste o profile e versione o tar.gz no seu repositorio interno. Quando o pager tocar as 3 da manha, voce nao quer estar lendo documentacao, quer estar coletando evidencia. Triagem ao vivo nao e arte, e checklist disciplinado executado sob pressao.

Leituras relacionadas

Nenhum comentário ainda

Seja o primeiro a comentar.

Deixe seu comentário

Entre com sua conta Canverly para comentar. Você pode usar a mesma conta em qualquer site da rede.

Entrar com Canverly