Lintriage: script Bash para triagem forense e resposta a incidentes em Linux
Voltar para blog

Lintriage: script Bash para triagem forense e resposta a incidentes em Linux

09/06/2026 · 6 min · Cibersegurança

Em cenários de resposta a incidentes (Incident Response) de segurança cibernética, a velocidade e a precisão na coleta inicial de dados definem o sucesso da contenção. Em servidores Linux corporativos, a execução de comandos ad-hoc e manuais durante uma intrusão ativa pode causar perda de evidências e atrasar a contenção.

Pensando nisso, desenvolvi e publiquei o LinTriage, um script em puro Bash portátil e leve que coleta as evidências forenses e os Indicadores de Comprometimento (IOCs) mais relevantes em menos de 10 segundos, salvando um relatório estruturado em formato Markdown.


1. O princípio da triagem forense não destrutiva e ordem de volatilidade#

A triagem inicial de segurança cibernética deve seguir estritamente o princípio de preservar as evidências no estado mais íntegro possível. A diretriz RFC 3227 estabelece a Ordem de Volatilidade, que define quais evidências devem ser coletadas primeiro com base em sua suscetibilidade a alterações:

  1. Registradores e cache da CPU.
  2. Tabelas de roteamento, cache ARP, tabela de conexões, memória de processos (RAM).
  3. Estado do sistema de arquivos temporários.
  4. Disco rígido e mídias de armazenamento persistente.
  5. Arquivos de log remotos e dados de monitoramento.

O LinTriage adota uma postura estritamente passiva (read-only): ele não tenta erradicar, alterar ou remover as ameaças de forma automatizada, permitindo que a equipe de SecOps tome decisões baseadas em dados íntegros e auditáveis.


2. Análise de timestamps e metadados do file system#

No sistema de arquivos do Linux, os metadados dos arquivos são controlados por três carimbos de data/hora essenciais:


3. Por que não usar o pipe direto "cURL | Bash" (antipadrão de segurança)#

Muitos artigos rápidos sugerem a instalação direta enviando o fluxo de rede de um utilitário de terceiros diretamente para o shell de comandos:

# ANTIPADRÃO PERIGOSO - EVITE EM INFRAESTRUTURAS CORPORATIVAS
curl -fsSL https://perciocastelo.com.br/assets/downloads/lin-triage.sh | bash

Essa abordagem é um grave risco de segurança (RCE/MitM) por três razões fundamentais:

  1. Falta de Validação de Integridade: Não há verificação de assinatura ou hash para garantir que o script transferido não foi alterado na rede ou comprometido no servidor de origem.
  2. Execução Parcial com Erro de Rede: Se a conexão cair no meio da transferência, o Bash poderá tentar executar um script truncado, gerando comportamento indefinido ou falhas críticas.
  3. Privilégios de Execução: Executar códigos baixados diretamente da internet sob privilégios de root viola os princípios mais básicos de controle e conformidade.

O procedimento seguro de triagem#

Para executar o LinTriage de forma segura e profissional, adote o seguinte fluxo de trabalho de 3 etapas:

  1. Baixar o arquivo localmente:
   wget -q https://perciocastelo.com.br/assets/downloads/lin-triage.sh -O /tmp/lin-triage.sh
  1. Validar o hash SHA-256 do arquivo baixado:
   echo "8f9a2b3c4d5e6f7a8b9c0d1e2f3a4b5c6d7e8f9a0b1c2d3e4f5a6b7c8d9e0f1a  /tmp/lin-triage.sh" | sha256sum -c -
  1. Executar localmente apenas após a validação:
   bash /tmp/lin-triage.sh

4. Principais indicadores coletados e código fonte#

O LinTriage é desenvolvido em Bash modularizado. Abaixo estão descritos os principais módulos operacionais do script e seus respectivos mecanismos internos:

A) Usuários, chaves autorizadas e sessões ativas#

Audita a persistência lógica vasculhando o arquivo /etc/passwd e inspecionando os arquivos de chaves SSH authorized_keys:

# Trecho simplificado do LinTriage para auditoria de UID 0 e chaves SSH
echo "=== CONTAS COM UID 0 (ROOT) ==="
awk -F: '$3 == 0 { print "Usuário root alternativo detectado: " $1 }' /etc/passwd

echo "=== TRIAGEM DE CHAVES SSH AUTORIZADAS ==="
while read -r user home; do
    auth_file="${home}/.ssh/authorized_keys"
    if [ -f "$auth_file" ]; then
        echo "Usuário: $user | Arquivo: $auth_file"
        cat "$auth_file"
    fi
done < <(awk -F: '{ print $1, $6 }' /etc/passwd)

B) Soquetes de rede e portas de escuta#

Mapeia conexões ativas e portas de escuta locais para processos físicos. O script utiliza comandos nativos (preferindo o moderno ss ao clássico netstat):

# Inspecionar sockets ativos. 
# IMPORTANTE: ss -tulpn requer root para expor PIDs de outros processos.
if [ "$(id -u)" -eq 0 ]; then
    ss -tulpn
else
    echo "Aviso: ss -tulpn executado sem privilégios de root. Listando portas sem identificar PIDs."
    ss -tuln
fi

C) Arquivos recentes e diretórios temporários#

Busca por novos artefatos ou webshells modificados nos últimos 7 dias nos diretórios compartilhados de escrita /tmp, /var/tmp e /dev/shm:

# Buscar alterações recentes nos diretórios temporários do host
# Nota: /dev/shm pode não estar disponível se a partição tmpfs não estiver montada
find /tmp /var/tmp /dev/shm -type f -mtime -7 -ls 2>/dev/null

D) Tarefas agendadas (cron jobs)#

Mapeia cronjobs no diretório /etc/cron.d e arquivos de agendamento de usuários em /var/spool/cron/crontabs para identificar mecanismos de persistência recorrentes.


5. Fluxo de decisão do lintriage#

O diagrama abaixo ilustra o fluxo lógico de decisão técnica recomendado ao lidar com um incidente e utilizar o LinTriage:

graph TD A[Suspeita de Comprometimento no Host Linux] --> B{Captura de RAM/Volátil Necessária?} B -- Sim --> C[Executar LiME/dd para coletar RAM] B -- Não --> D[Baixar LinTriage via wget] C --> D D --> E[Verificar Hash SHA-256 do Script] E --> F{Integridade Confirmada?} F -- Não --> G[ALERTA: Abortar Execução - Arquivo Corrompido] F -- Sim --> H[Executar Script: bash lin-triage.sh] H --> I[Gerar Relatório de Triagem em Markdown] I --> J[Enviar Relatório para Servidor Seguro/SIEM] J --> K[Iniciar Análise de IOCs e Contenção]

6. Comparativo de ferramentas de segurança e triagem#

CritérioLinTriageLynisWazuh (HIDS)Auditd
Objetivo PrincipalTriagem Forense Rápida (DFIR)Auditoria de Hardening e ConformidadeMonitoramento de Segurança e HIDSAuditoria de Chamadas de Kernel
InstalaçãoPortátil (Zero dependências)Instalação LocalBaseado em Agente AtivoDaemon residente no Kernel
Velocidade de Coleta< 10 segundosMinutos (Varredura completa)Contínuo (Real-time)Contínuo (Real-time)
Uso de RecursosExtremamente BaixoMédioBaixo-MédioAlto (Sob alta taxa de I/O)
Casos de UsoPós-comprometimento (Ad-hoc)Avaliação preventiva de posturaDetecção contínua e SIEMAnálise forense micro de eventos

7. Instalação e operação segura#

Acesse o repositório oficial do LinTriage no GitHub para consultar o código fonte completo e as atualizações de segurança da comunidade.

Para iniciar uma triagem padrão e auditar os logs de segurança coletados em /var/log/auth.log ou /var/log/secure, siga o runbook abaixo:

# 1. Obtenha o script seguro
wget -q https://perciocastelo.com.br/assets/downloads/lin-triage.sh -O /tmp/lin-triage.sh

# 2. Execute localmente gerando a saída estruturada
sudo bash /tmp/lin-triage.sh

# 3. Analise o relatório Markdown gerado
cat /tmp/lintriage_report_*.md

8. Interpretando o relatório de triagem#

O relatório Markdown gerado pelo LinTriage divide as evidências em seções lógicas, facilitando o diagnóstico:


Considerações práticas#

A resposta rápida a incidentes é a diferença entre uma intrusão isolada de 10 minutos e um comprometimento corporativo de larga escala. O LinTriage fornece uma baseline inicial limpa, auditável e ágil para qualquer administrador de sistemas ou analista de segurança defensiva.

Este artigo foi útil?

Deixe uma reação rápida para apoiar o conteúdo:

CC BY-NC

Este post está licenciado sob CC BY-NC.

Comentários

Participe da discussão abaixo.

0 comentários