Como usar auditd para rastrear eventos de segurança no Linux
1. Introdução ao auditd e sua arquitetura
O auditd (Linux Audit Daemon) é o componente central do sistema de auditoria do Linux, projetado para registrar eventos de segurança em nível de kernel. Diferente de soluções como syslog ou systemd-journald, o auditd captura chamadas de sistema (syscalls) antes mesmo que o processo alvo tome conhecimento, garantindo um registro imutável e detalhado de toda atividade no sistema.
Sua arquitetura é composta por quatro componentes principais:
- auditd: o daemon que coleta e armazena os logs no disco
- auditctl: ferramenta de linha de comando para definir regras de auditoria
- ausearch: utilitário para pesquisar eventos nos logs
- aureport: gerador de relatórios resumidos a partir dos logs
O auditd se comunica com o kernel através de um netlink socket especial, recebendo notificações em tempo real sobre syscalls específicas, acessos a arquivos e mudanças de contexto do processo. Essa integração profunda permite rastrear até mesmo eventos que ocorrem antes do sistema de arquivos ser montado.
2. Instalação e configuração inicial do auditd
A instalação varia conforme a distribuição, mas o pacote é o mesmo:
# Debian/Ubuntu
sudo apt update && sudo apt install auditd audispd-plugins
# RHEL/CentOS/Fedora
sudo yum install audit audit-libs
# ou
sudo dnf install audit audit-libs
O arquivo de configuração principal é /etc/audit/auditd.conf. Uma configuração básica e segura inclui:
# /etc/audit/auditd.conf
log_file = /var/log/audit/audit.log
log_format = RAW
log_group = root
priority_boost = 4
flush = INCREMENTAL
freq = 50
num_logs = 5
max_log_file = 8
max_log_file_action = ROTATE
space_left = 75
space_left_action = SYSLOG
admin_space_left = 50
admin_space_left_action = SUSPEND
disk_full_action = SUSPEND
disk_error_action = SUSPEND
Após a configuração, inicie e habilite o serviço:
sudo systemctl start auditd
sudo systemctl enable auditd
sudo systemctl status auditd
3. Criando regras de auditoria com auditctl
A sintaxe básica do auditctl segue o padrão:
auditctl -a <lista>,<ação> -S <syscall> -F <campo>=<valor> -k <chave>
Monitoramento de arquivos e diretórios críticos:
# Monitorar alterações em arquivos sensíveis
sudo auditctl -w /etc/passwd -p wa -k passwd_changes
sudo auditctl -w /etc/shadow -p wa -k shadow_changes
sudo auditctl -w /etc/ssh/sshd_config -p wa -k sshd_config
sudo auditctl -w /etc/sudoers -p wa -k sudoers
# Monitorar diretórios de binários
sudo auditctl -w /usr/bin -p x -k bin_exec
sudo auditctl -w /usr/sbin -p x -k sbin_exec
Rastreamento de syscalls específicas:
# Capturar execução de qualquer programa
sudo auditctl -a always,exit -S execve -k command_exec
# Monitorar tentativas de conexão de rede
sudo auditctl -a always,exit -S connect -F arch=b64 -k network_connect
# Rastrear aberturas de arquivos para escrita
sudo auditctl -a always,exit -S openat -F a2&0100 -k file_write
Para persistir as regras entre reinicializações, adicione-as em /etc/audit/rules.d/:
sudo auditctl -R /etc/audit/rules.d/custom.rules
Exemplo de arquivo de regras persistente (/etc/audit/rules.d/security.rules):
-w /etc/passwd -p wa -k passwd_changes
-w /etc/shadow -p wa -k shadow_changes
-w /etc/ssh/sshd_config -p wa -k sshd_config
-a always,exit -S execve -k command_exec
-a always,exit -S connect -F arch=b64 -k network_connect
4. Monitoramento de arquivos e diretórios sensíveis
O monitoramento de arquivos críticos é essencial para detectar ataques de escalonamento de privilégio e modificações não autorizadas.
Exemplo prático: rastreando alterações no /etc/passwd
sudo auditctl -w /etc/passwd -p wa -k passwd_monitor
Sempre que alguém adicionar ou modificar um usuário, o evento será registrado. Para verificar:
sudo ausearch -k passwd_monitor -ts today
Filtros por UID e GID:
# Monitorar apenas quando o usuário 1000 acessar um diretório
sudo auditctl -w /home/usuario/secret -p rwxa -k user1000_access -F uid=1000
# Monitorar acesso ao /etc/shadow apenas por processos com GID específico
sudo auditctl -w /etc/shadow -p r -k shadow_read -F gid=0
5. Rastreamento de execução de processos e comandos
A regra -S execve é uma das mais poderosas para segurança, pois captura toda execução de binários no sistema.
Regra para capturar todas as execuções:
sudo auditctl -a always,exit -S execve -k command_exec
Identificando comandos suspeitos:
Para detectar execuções de shells reversos ou ferramentas de pós-exploração:
sudo ausearch -k command_exec -ts today | grep -E "nc |bash -i|python -c 'import pty"
Monitoramento de sudo e su:
# Regra específica para sudo
sudo auditctl -w /usr/bin/sudo -p x -k sudo_exec
sudo auditctl -w /usr/bin/su -p x -k su_exec
# Ou via syscall com filtro de UID efetivo
sudo auditctl -a always,exit -S execve -F euid=0 -k root_exec
Para testar, execute sudo ls e depois consulte:
sudo ausearch -k sudo_exec -ts today
6. Consulta e análise de logs com ausearch e aureport
O ausearch permite buscas precisas nos logs, enquanto o aureport gera resumos estatísticos.
Buscas com ausearch:
# Buscar por chave específica
sudo ausearch -k passwd_changes -ts 2024-01-01
# Buscar por syscall e UID
sudo ausearch -sc execve -ui 1000 -ts yesterday
# Buscar por tipo de evento (SYSCALL, PATH, CWD)
sudo ausearch -m SYSCALL -ts 09:00:00 -te 18:00:00
# Buscar por arquivo específico
sudo ausearch -f /etc/shadow -ts today
Relatórios com aureport:
# Relatório de execuções de programas
sudo aureport -x -ts today
# Relatório de logins e autenticações
sudo aureport -l -ts this-week
# Relatório de eventos por usuário
sudo aureport -u -ts today
# Relatório de alterações de arquivos
sudo aureport -f -ts today
# Relatório resumido de todos os eventos
sudo aureport -a -ts today
7. Cenários práticos de detecção de incidentes
Cenário 1: Tentativa de escalonamento de privilégio
Um atacante tenta explorar um binário SUID. Regra para detectar:
sudo auditctl -a always,exit -S execve -F euid=0 -F uid!=0 -k privilege_escalation
Para consultar:
sudo ausearch -k privilege_escalation -ts today
Cenário 2: Acesso não autorizado a arquivos de configuração
Um insider tenta ler o /etc/shadow. Regra:
sudo auditctl -w /etc/shadow -p r -k shadow_read
Para detectar:
sudo ausearch -k shadow_read -ts today | grep -v "UID=0"
Cenário 3: Conexões de rede suspeitas
Monitorar syscall connect para detectar beacons de C2:
sudo auditctl -a always,exit -S connect -F arch=b64 -k network_connect
Para analisar:
sudo ausearch -k network_connect -ts today | grep -v "127.0.0.1" | grep -v "::1"
8. Boas práticas e manutenção do auditd
Gerenciamento de logs:
- Configure rotação automática no
auditd.confcommax_log_file_action = ROTATE - Mantenha
num_logsentre 5 e 10 para balancear armazenamento e retenção - Use
space_left_action = SYSLOGpara alertas precoces
Integração com SIEM:
Para enviar logs para um SIEM via syslog, configure o plugin audisp-syslog:
# /etc/audit/audisp/plugins.d/syslog.conf
active = yes
direction = out
path = /sbin/audisp-syslog
type = builtin
args = LOG_LOCAL6
format = string
Dicas de performance:
- Evite regras genéricas como
-a always,exit -S all - Use chaves de contexto (
-k) para facilitar a consulta - Prefira monitorar syscalls específicas em vez de arquivos quando possível
- Teste regras em ambiente de staging antes de aplicar em produção
Manutenção periódica:
# Verificar status do auditd
sudo systemctl status auditd
# Listar todas as regras ativas
sudo auditctl -l
# Verificar tamanho dos logs
sudo du -sh /var/log/audit/
# Forçar rotação manual
sudo systemctl kill -s USR1 auditd
Referências
- Documentação Oficial do Linux Audit — Página de manual completa do auditd com todas as opções de configuração e uso
- Red Hat Enterprise Linux Audit System Reference — Guia oficial da Red Hat sobre auditoria de sistemas no RHEL
- Linux Audit Quick-Start Guide — Tutorial prático para iniciar com auditd, incluindo exemplos de regras comuns
- CIS Benchmark for Linux Auditing — Recomendações de segurança do CIS para configuração de auditoria no Linux
- SUSE Linux Enterprise Security and Auditing — Documentação detalhada da SUSE sobre configuração e uso do auditd
- DigitalOcean: How to Use auditd on Ubuntu 22.04 — Tutorial passo a passo com exemplos práticos para Ubuntu