Analisando Logs de Auditoria do Linux para Intrusão
Quando Usar
- Investigar suspeitas de acesso não autorizado ou escalada de privilégio em hosts Linux
- Caçar evidências de exploração, instalação de backdoors ou mecanismos de persistência
- Auditar conformidade com linhas de base de segurança (CIS, STIG, PCI-DSS) que exigem monitoramento de chamadas de sistema
- Reconstruir uma linha do tempo das ações do atacante durante a resposta a incidentes
- Detectar adulteração de arquivos em arquivos críticos do sistema como
/etc/passwd,/etc/shadowou chaves SSH
Não use para detecção de intrusão em nível de rede; use Suricata ou Zeek para análise de tráfego de rede. O Auditd opera no nível do kernel em hosts individuais.
Pré-requisitos
- Sistema Linux com o pacote
auditdinstalado e o daemon de auditoria em execução (systemctl status auditd) - Acesso root ou sudo para configurar regras de auditoria e consultar logs
- Regras de auditoria implantadas via
/etc/audit/rules.d/*.rulesou carregadas comauditctl - Recomendado: conjunto de regras Neo23x0/auditd do GitHub para cobertura abrangente de linha de base
- Familiaridade com syscalls do Linux (
execve,open,connect,ptrace, etc.) - Armazenamento de logs com retenção suficiente (localização padrão:
/var/log/audit/audit.log)
Fluxo de Trabalho
Passo 1: Verificar o Status e a Configuração do Daemon de Auditoria
Confirme se o sistema de auditoria está em execução e verifique o conjunto atual de regras:
# Verificar o status do serviço auditd
systemctl status auditd
# Mostrar as regras de auditoria atuais carregadas no kernel
auditctl -l
# Mostrar a configuração do daemon de auditoria
cat /etc/audit/auditd.conf | grep -E "log_file|max_log_file|num_logs|space_left_action"
# Verificar se o backlog de auditoria está sendo excedido (eventos descartados)
auditctl -s
Se o limite do backlog estiver sendo atingido, aumente-o:
auditctl -b 8192
Passo 2: Implantar Regras de Auditoria Focadas em Intrusão
Adicione regras que visam indicadores comuns de intrusão. Coloque-as em /etc/audit/rules.d/intrusion.rules:
# Monitorar arquivos de credenciais para leituras ou modificações não autorizadas
-w /etc/passwd -p wa -k credential_access
-w /etc/shadow -p rwa -k credential_access
-w /etc/gshadow -p rwa -k credential_access
-w /etc/sudoers -p wa -k privilege_escalation
-w /etc/sudoers.d/ -p wa -k privilege_escalation
# Monitorar configuração SSH e chaves autorizadas
-w /etc/ssh/sshd_config -p wa -k sshd_config_change
-w /root/.ssh/authorized_keys -p wa -k ssh_key_tampering
# Monitorar comandos de gerenciamento de usuários e grupos
-w /usr/sbin/useradd -p x -k user_management
-w /usr/sbin/usermod -p x -k user_management
-w /usr/sbin/groupadd -p x -k user_management
# Detectar injeção de processo via ptrace
-a always,exit -F arch=b64 -S ptrace -F a0=0x4 -k process_injection
-a always,exit -F arch=b64 -S ptrace -F a0=0x5 -k process_injection
-a always,exit -F arch=b64 -S ptrace -F a0=0x6 -k process_injection
# Monitorar execução de programas a partir de diretórios incomuns
-a always,exit -F arch=b64 -S execve -F exe=/tmp -k exec_from_tmp
-a always,exit -F arch=b64 -S execve -F exe=/dev/shm -k exec_from_shm
# Detectar carregamento de módulos do kernel (instalação de rootkit)
-a always,exit -F arch=b64 -S init_module -S finit_module -k kernel_module_load
-a always,exit -F arch=b64 -S delete_module -k kernel_module_remove
-w /sbin/insmod -p x -k kernel_module_tool
-w /sbin/modprobe -p x -k kernel_module_tool
# Monitorar criação de sockets de rede para reverse shells
-a always,exit -F arch=b64 -S socket -F a0=2 -k network_socket_created
-a always,exit -F arch=b64 -S connect -F a0=2 -k network_connection
# Detectar modificações em cron jobs (persistência)
-w /etc/crontab -p wa -k cron_persistence
-w /etc/cron.d/ -p wa -k cron_persistence
-w /var/spool/cron/ -p wa -k cron_persistence
# Monitorar exclusão ou adulteração de logs
-w /var/log/ -p wa -k log_tampering
Recarregue as regras após a edição:
augenrules --load
auditctl -l | wc -l # Confirmar contagem de regras
Passo 3: Pesquisar Indicadores de Intrusão com ausearch
Use ausearch para consultar o log de auditoria em busca de eventos específicos:
# Pesquisar todas as tentativas de login com falha nas últimas 24 horas
ausearch -m USER_LOGIN --success no -ts recent
# Pesquisar comandos executados por um usuário específico
ausearch -ua 1001 -m EXECVE -ts today
# Pesquisar todos os eventos de acesso a arquivos em /etc/shadow
ausearch -f /etc/shadow -ts this-week
# Pesquisar por escalada de privilégio via sudo
ausearch -m USER_CMD -ts today
# Pesquisar eventos de carregamento de módulos do kernel
ausearch -k kernel_module_load -ts this-month
# Pesquisar processos executados a partir de /tmp (estágio comum de ataque)
ausearch -k exec_from_tmp -ts this-week
# Pesquisar modificações em chaves SSH
ausearch -k ssh_key_tampering -ts this-month
# Pesquisar um evento específico pelo ID do evento de auditoria
ausearch -a 12345
# Pesquisar eventos em um intervalo de tempo específico
ausearch -ts 15/03/2026 08:00:00 -te 15/03/2026 18:00:00
# Interpretar números de syscall e formatar a saída de forma legível
ausearch -k credential_access -i -ts today
Passo 4: Gerar Relatórios Resumidos com aureport
Use aureport para produzir resumos agregados para triagem:
# Resumo de todos os eventos de autenticação
aureport -au -ts this-week --summary
# Relatório de todos os eventos com falha (login, acesso, etc.)
aureport --failed --summary -ts today
# Relatório de execuções de executáveis
aureport -x --summary -ts today
# Relatório de todos os eventos de anomalia (segfaults, modo promíscuo, etc.)
aureport --anomaly -ts this-week
# Relatório de eventos de acesso a arquivos
aureport -f --summary -ts today
# Relatório de todos os eventos por chave (mapeia para suas chaves de regra personalizadas)
aureport -k --summary -ts this-month
# Relatório de todas as chamadas de sistema
aureport -s --summary -ts today
# Relatório de eventos agrupados por usuário
aureport -u --summary -ts this-week
# Relatório detalhado de eventos baseado em tempo para construção de linha do tempo
aureport -ts 15/03/2026 08:00:00 -te 15/03/2026 18:00:00 --summary
Passo 5: Reconstruir a Linha do Tempo do Ataque
Combine consultas ausearch para construir uma narrativa cronológica:
# Passo 5a: Identificar o timestamp de acesso inicial
ausearch -m USER_LOGIN -ua 0 --success yes -ts this-week -i | head -50
# Passo 5b: Rastrear o que o atacante fez após obter acesso
# Obter todos os eventos da conta comprometida dentro da janela do incidente
ausearch -ua <UID> -ts "15/03/2026 14:00:00" -te "15/03/2026 18:00:00" -i \
| aureport -f -i
# Passo 5c: Extrair todos os comandos executados durante a janela do incidente
ausearch -m EXECVE -ts "15/03/2026 14:00:00" -te "15/03/2026 18:00:00" -i
# Passo 5d: Verificar mecanismos de persistência instalados
ausearch -k cron_persistence -ts "15/03/2026 14:00:00" -i
ausearch -k ssh_key_tampering -ts "15/03/2026 14:00:00" -i
# Passo 5e: Verificar movimento lateral (conexões de saída)
ausearch -k network_connection -ts "15/03/2026 14:00:00" -i
Passo 6: Encaminhar Logs de Auditoria para o SIEM
Configure audisp-remote ou auditbeat para enviar logs para um SIEM central para correlação:
# Opção A: Usando o plugin audisp-remote
# Editar /etc/audit/plugins.d/au-remote.conf
active = yes
direction = out
path = /sbin/audisp-remote
type = always
# Configurar destino remoto em /etc/audit/audisp-remote.conf
remote_server = siem.internal.corp
port = 6514
transport = tcp
# Opção B: Usando Elastic Auditbeat
# Instalar auditbeat e configurar /etc/auditbeat/auditbeat.yml
# Auditbeat lê diretamente do framework de auditoria do kernel
Conceitos Chave
| Termo | Definição |
|---|---|
| auditd | O daemon de Auditoria do Linux que recebe eventos de auditoria do kernel e os grava em /var/log/audit/audit.log |
| auditctl | Utilitário de linha de comando para controlar o sistema de auditoria: adicionar/remover regras, verificar status, definir tamanho do backlog |
| ausearch | Ferramenta de consulta que pesquisa logs de auditoria por tipo de mensagem, usuário, arquivo, chave, intervalo de tempo ou ID de evento |
| aureport | Ferramenta de relatório que gera resumos agregados de eventos de auditoria para triagem e conformidade |
| chave de regra de auditoria (-k) | Um rótulo definido pelo usuário anexado a uma regra de auditoria, permitindo filtragem rápida de eventos relacionados com ausearch e aureport |
| auditoria de syscall | Monitoramento em nível de kernel de chamadas de sistema (execve, open, connect, ptrace) que captura atividade de processos e arquivos |
| augenrules | Utilitário que mescla todos os arquivos em /etc/audit/rules.d/ em /etc/audit/audit.rules e os carrega no kernel |
Verificação
- auditd está em execução e as regras estão carregadas (
auditctl -lretorna a contagem esperada de regras) - Nenhum estouro de backlog de auditoria (
auditctl -smostrabacklog: 0ou valor baixo, lost: 0) - ausearch retorna eventos para cada chave personalizada (
ausearch -k <chave> -ts todayretorna resultados) - aureport gera resumos não vazios para eventos de autenticação, executáveis e arquivos
- A reconstrução da linha do tempo produz uma sequência cronológica coerente das ações do atacante
- As vigias de arquivos críticos disparam alertas em modificações de teste (
touch /etc/shadowgera um evento) - Os logs estão sendo encaminhados para o SIEM central (verificar com um evento de teste e confirmar o recebimento)
- As regras de auditoria persistem após reinicialização (regras em
/etc/audit/rules.d/, não apenas viaauditctl)