Forense e Investigação de Intrusões em Servidores Linux

Análise de Contas e Autenticação

O primeiro passo na investigação é verificar a integridade das contas do sistema. O arquivo /etc/passwd contém as informações básicas dos usuários.

# Estrutura: usuario:senha:UID:GID:comentario:home:shell
# Identificar usuários com shell de login interativo
grep -E '/bin/bash|/bin/sh' /etc/passwd

# Localizar contas com privilégios de superusuário (UID 0)
awk -F':' '$3 == 0 { print $1 }' /etc/passwd

# Verificar usuários com permissões elevadas via sudo
grep -v '^#' /etc/sudoers | grep 'ALL=(ALL)'

O arquivo /etc/shadow armazena as senhas criptografadas e políticas de expiração.

# Extrair usuários que possuem senhas definidas (campos 1 e 6 indicam criptografia)
awk -F':' '$2 ~ /^\$[16]/ { print $1 }' /etc/shadow

Para rastrear sessões ativas e históricas de login:

# Exibir sessões ativas e processos em execução
w

# Histórico de logins bem-sucedidos (lê /var/log/wtmp)
last -F | head -n 20

# Histórico de tentativas de login falhas (lê /var/log/btmp)
sudo lastb -F | head -n 20

# Última vez que cada usuário se autenticou
lastlog

Nota de Segurança: Para impedir que invasores limpem o histórico, aplique o atributo imutável ou de append no arquivo de logs: sudo chattr +a /var/log/wtmp.

Para auditar comandos executados, configure o histórico do bash para registrar IP e timestamp:

# Aumentar o tamanho do histórico
sed -i 's/HISTSIZE=.*/HISTSIZE=20000/' /etc/profile

# Adicionar ao final de /etc/profile para registrar IP e data
cat << 'EOF' >> /etc/profile
export HISTTIMEFORMAT="%d/%m/%Y %T $(who -u am i 2>/dev/null | awk '{print $NF}' | tr -d '()') "
shopt -s histappend
export PROMPT_COMMAND="history -a"
EOF

source /etc/profile

Rastreamento de Processos e Conexões de Rede

Identifique conexões de rede suspeitas e processos em execução.

# Listar portas abertas e conexões estabelecidas com os respectivos PIDs
ss -tunap | grep ESTAB

# Alternativa usando netstat
netstat -antp | grep LISTEN

Ao identificar um PID suspeito, investigue o processo:

PID_ALVO=1234

# Verificar o caminho do executável
ls -l /proc/$PID_ALVO/exe

# Listar arquivos abertos pelo processo
lsof -p $PID_ALVO

# Verificar a data de início do processo
ps -p $PID_ALVO -o lstart=

# Encerrar processo malicioso (uso com cautela)
kill -9 $PID_ALVO

Se o executável foi deletado, o processo pode estar rodando apenas em memória. O comando ls -l /proc/$PID_ALVO/exe mostrará "(deleted)".

Persistência e Inicialização Automática

Invasores frequentemente utilizam scripts de inicialização para manter a persistência.

# Verificar o nível de execução atual
runlevel

# Inspecionar scripts de inicialização legados
cat /etc/rc.local

# Listar links simbólicos em diretórios de inicialização System-V
ls -l /etc/rc3.d/

Para adicionar ou remover serviços de inicialização no estilo System-V:

# Exemplo de criação de link para script malicioso (apenas para fins de teste/forense)
ln -s /tmp/payload.sh /etc/init.d/svc_backdoor
update-rc.d svc_backdoor defaults 99

# Remover o serviço de inicialização
update-rc.d -f svc_backdoor remove

Tarefas Agendadas e Serviços

Verifique agendamenttos do cron que podem estar executando payloads.

# Listar tarefas do usuário atual
crontab -l

# Diretórios críticos para análise de cron
cat /etc/crontab
ls -la /etc/cron.d/
ls -la /etc/cron.daily/
ls -la /var/spool/cron/crontabs/

Audite serviços instalados e seus estados de inicialização:

# Para sistemas baseados em RPM/SysVinit
chkconfig --list | grep -E '3:on|5:on'

# Para sistemas com systemd
systemctl list-unit-files --state=enabled

# Verificar serviços instalados via código-fonte (geralmente em /usr/local)
ls -l /etc/init.d/ | grep -v '^l'

Análise de Arquivos e Sistema de Arquivos

Localize arquivos suspeitos com base em metadados e atributos.

# Buscar por arquivos modificados nas últimas 24 horas
find / -type f -mtime -1 -ls 2>/dev/null

# Encontrar arquivos ocultos ou com nomes suspeitos em diretórios temporários
find /tmp /var/tmp -name ".*" -type f

# Localizar arquivos sem proprietário ou grupo válido (risco de segurança)
find / -nouser -o -nogroup

# Buscar arquivos com tamanho específico (ex: maior que 50MB)
find / -type f -size +50M -exec ls -lh {} \;

Para ordenar processos por consumo de recursos:

# Top 10 processos por uso de CPU
ps -eo pid,pcpu,pmem,comm --sort=-pcpu | head -n 11

# Top 10 processos por uso de Memória
ps -eo pid,pcpu,pmem,comm --sort=-pmem | head -n 11

Auditoria de Logs do Sistema

Os logs em /var/log/ são essenciais para reconstruir a linha do tempo do incidente.

# Principais arquivos de log:
# /var/log/secure ou /var/log/auth.log (Autenticação)
# /var/log/messages ou /var/log/syslog (Sistema geral)
# /var/log/cron (Tarefas agendadas)

Técnicas de análise para identificar ataques de força bruta e acessos bem-sucedidos:

# Identificar IPs com múltiplas falhas de autenticação (Força Bruta)
grep "Failed password" /var/log/secure | awk '{print $(NF-3)}' | sort | uniq -c | sort -nr | head

# Extrair IPs de origem das tentativas falhas usando regex
grep -oE "\b([0-9]{1,3}\.){3}[0-9]{1,3}\b" /var/log/secure | grep -F -f <(grep "Failed password" /var/log/secure) | sort | uniq -c | sort -nr

# Listar IPs que obtiveram acesso bem-sucedido via SSH
grep "Accepted publickey\|Accepted password" /var/log/secure | awk '{print $(NF-2)}' | sort | uniq -c | sort -nr

# Rastrear criação e remoção de usuários
grep -E "useradd|userdel" /var/log/secure

# Monitorar uso de su e sudo
grep -E "su:|sudo:" /var/log/secure

Tags: linux-forensics incident-response log-analysis system-security Bash-Scripting

Publicado em 9-15 08:35