rkhunter: detectar rootkits na VPS

Rootkits são softwares maliciosos que se ocultam no sistema, substituem binários do sistema (ls, ps, netstat), escondem processos e conexões de rede. rkhunter (Rootkit Hunter) verifica hashes de binários críticos, detecta backdoors conhecidos e identifica sinais de comprometimento que ferramentas convencionais de monitoramento não enxergam.

Instalar e configurar o rkhunter

Instalação e configuração inicial do rkhunter:

bash
# Instalar rkhunter e chkrootkit:
sudo apt install -y rkhunter chkrootkit

# IMPORTANTE: executar o update ANTES do primeiro scan
# para criar baseline dos hashes dos binários do sistema:
sudo rkhunter --update         # atualizar banco de dados de rootkits
sudo rkhunter --propupd        # criar baseline dos arquivos do sistema

# Configurar /etc/rkhunter.conf:
sudo nano /etc/rkhunter.conf

# Configurações importantes:
# MAIL-ON-WARNING=admin@seudominio.com.br
# MAIL_CMD=mail -s "[rkhunter] Warning found for ${HOST_NAME}"
# CRON_DAILY_RUN=yes            # habilitar scan diário via cron
# APT_AUTOGEN=yes               # atualizar após apt upgrade

# Executar scan completo:
sudo rkhunter --check --sk      # --sk = skip keyboard, modo não-interativo

# Ver apenas os warnings:
sudo rkhunter --check --sk --rwo  # --rwo = report warnings only

Interpretar os resultados do rkhunter

Entender os resultados e distinguir falsos positivos:

bash
# Tipos de resultado:
# [ OK ]      — sem problemas
# [ Warning ] — potencial problema (pode ser falso positivo)
# [ Not found ] — ferramenta/arquivo não encontrado

# Ver log completo:
sudo cat /var/log/rkhunter.log | grep -E "Warning|INFECTED|ROOTKIT"

# Exemplos de warnings comuns (falsos positivos):
# "Checking for hidden files and directories [ Warning ]"
# → pode ser de VPS providers que criam arquivos ocultos

# "The file properties have changed: /usr/bin/awk"
# → acontece após apt upgrade, executar --propupd depois de cada update

# Atualizar baseline após atualização do sistema:
sudo apt upgrade -y
sudo rkhunter --propupd    # obrigatório após qualquer apt upgrade!

# Se rkhunter reportar mudança em binário crítico sem apt upgrade:
# ALERTA REAL — investigar imediatamente
# Verificar hash do binário:
sha256sum /usr/bin/ls
dpkg -S /usr/bin/ls               # verificar pacote dono
dpkg --verify coreutils           # verificar integridade do pacote

chkrootkit: segunda opinião

Usar chkrootkit para complementar o rkhunter:

bash
# Executar chkrootkit:
sudo chkrootkit

# Verificar resultado limpo:
sudo chkrootkit | grep -v "not infected" | grep -v "not found"

# Interpretar resultados:
# "INFECTED" — rootkit potencialmente detectado (verificar manualmente)
# "nothing found" — sem problemas
# Falso positivo comum: "sniffer?" em interfaces legítimas de VPN

# Scan de rootkits específicos:
sudo chkrootkit -q lrk5 t0rn rexedcs

# Executar via cron semanalmente:
echo "0 4 * * 0 root /usr/sbin/chkrootkit -q 2>&1 | mail -s '[chkrootkit] Report' admin@seudominio.com.br" \
  | sudo tee /etc/cron.d/chkrootkit

# Combinação de detecção:
# rkhunter: melhor em verificar hashes de binários e configurações
# chkrootkit: melhor em detectar rootkits específicos e LKMs

Automação e alertas via cron

Configurar scan automático diário com alertas:

bash
#!/bin/bash
# /opt/scripts/scan-seguranca.sh

LOG_FILE="/var/log/security_scan.log"
TELEGRAM_TOKEN="SEU_TOKEN"
TELEGRAM_CHAT_ID="SEU_CHAT_ID"
HOSTNAME=$(hostname -f)

echo "=== Scan de Segurança — $(date) ===" > "$LOG_FILE"

# 1. rkhunter
echo "--- rkhunter ---" >> "$LOG_FILE"
sudo rkhunter --check --sk --rwo >> "$LOG_FILE" 2>&1
RKHUNTER_WARNINGS=$(grep -c "Warning" "$LOG_FILE" || true)

# 2. chkrootkit
echo "--- chkrootkit ---" >> "$LOG_FILE"
sudo chkrootkit -q >> "$LOG_FILE" 2>&1
INFECTED=$(grep -c "INFECTED" "$LOG_FILE" || true)

# Enviar alerta se houver problemas:
if [ "$RKHUNTER_WARNINGS" -gt 0 ] || [ "$INFECTED" -gt 0 ]; then
    MSG="⚠️ Scan de segurança em ${HOSTNAME}:%0A"
    MSG+="rkhunter warnings: ${RKHUNTER_WARNINGS}%0A"
    MSG+="chkrootkit infected: ${INFECTED}%0A"
    MSG+="Ver: /var/log/security_scan.log"

    curl -s -X POST \
      "https://api.telegram.org/bot$TELEGRAM_TOKEN/sendMessage" \
      -d "chat_id=$TELEGRAM_CHAT_ID" \
      -d "text=$MSG"
fi

# Cron — executar às 3h diariamente:
# 0 3 * * * root /opt/scripts/scan-seguranca.sh

O que fazer se rootkit for detectado

Procedimento de resposta a incidente de rootkit:

bash
# Procedimento de resposta a incidente — NÃO execute comandos no servidor comprometido
# pois o rootkit pode ter substituído ferramentas como ps, ls, netstat

# 1. ISOLAR — desconectar a VPS da internet (no painel do provedor)

# 2. EVIDÊNCIAS — tirar snapshot do disco antes de qualquer mudança

# 3. ANÁLISE forense via Live CD ou console do provedor:
#    - Montar o disco comprometido como somente leitura
#    - Verificar com ferramentas de um sistema limpo

# 4. VERIFICAR hashes com binários externos:
# Comparar hashes dos binários suspeitos com os do pacote original:
debsums -c coreutils       # verificar integridade de coreutils
debsums -c openssh-server  # verificar sshd

# 5. IDENTIFICAR backdoors:
sudo rkhunter --check --sk 2>&1 | grep "Warning|FOUND"
sudo netstat -tlnp          # se netstat não foi comprometido

# 6. DECISÃO: remediar vs reconstruir
# Para rootkits confirmados: SEMPRE reconstruir o servidor do zero
# Rootkits modificam múltiplos binários e você nunca tem certeza
# do que mais foi alterado.

# 7. RECONSTRUIR: destruir VPS, criar nova, restaurar dados do backup
#    (não restaurar binários ou configs da VPS comprometida)

Não quer configurar manualmente?

Implante o VPS em menos de 5 minutos com a Runstack. Infraestrutura da OPEN Datacenter, com servidores em São Paulo.

Perguntas frequentes

Scan completo: diariamente via cron durante madrugada. Atualização do banco de dados (--update): semanalmente. Update do baseline (--propupd): sempre após apt upgrade, nunca com suspeita de comprometimento. Em servidores de alta segurança: scan a cada hora e alertas imediatos para qualquer warning novo.

Sim, apt upgrade atualiza binários do sistema e o rkhunter detecta que os hashes mudaram. Solução: executar sudo rkhunter --propupd imediatamente após cada apt upgrade para atualizar o baseline. Se você não executar o --propupd: todos os pacotes atualizados vão continuar aparecendo como Warning em scans futuros.

Falso positivo: warning após apt upgrade (binários atualizados), warnings em arquivos de VPN/Docker conhecidos, arquivos ocultos de ferramentas do provedor. Alarme real: warning em binário sem apt upgrade recente, binário com hash diferente do dpkg (debsums -c), processo oculto do ps mas visível no /proc, conexão de rede oculta. Em dúvida: tratar como alarme real.

Não, rkhunter detecta rootkits conhecidos e comportamentos suspeitos. Rootkits novos ("zero-day") podem não ser detectados. Por isso: use rkhunter + chkrootkit + auditd + Fail2ban + atualizações regulares como camadas de defesa, não como solução única. A melhor prevenção: manter o sistema atualizado e minimizar a superfície de ataque.

Verifique o hash do binário após instalação e salve em local externo. Use debsums para verificar a integridade do pacote rkhunter. Idealmente: execute rkhunter de um sistema live externo montando o disco suspeito como somente leitura. Se o servidor já estiver comprometido: você não pode confiar em ferramentas instaladas nele.