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)
    Atenção
    Se um rootkit for confirmado: reconstrua o servidor do zero. Tentar limpar um servidor comprometido com rootkit é arriscado — você nunca tem certeza se removeu tudo. Restaure apenas os dados (banco de dados, uploads), nunca os binários.

    $ runstack deploy --plan starter

    Não quer configurar manualmente?

    Não quer configurar manualmente? Implante o VPS em menos de 3 minutos com a Runstack. Infraestrutura da OPEN DATACENTER, com servidores no Brasil.

    Perguntas frequentes