Resumo da Ocorrência
Fui acionado com urgência após múltiplos sites WordPress hospedados no mesmo servidor DirectAdmin sofrerem desfiguração (defacement), injeção de malware e criação indevida de administradores quase ao mesmo tempo.
A auditoria forense no nível do sistema operacional provou um cenário de ataque de dentro para fora. O servidor Linux e o kernel estavam limpos e isolados. O invasor operou com privilégios legítimos de administrador após roubar o token de sessão ativa (Cookie Hijacking) no computador pessoal do Gerente de Desenvolvimento. A máquina local havia sido infectada por um infostealer ao descompactar temas e plugins piratas (nulled) para testes locais. Com o cookie injetado no navegador, o atacante entrou no DirectAdmin sem precisar de login ou 2FA e fez o upload de webshells pelo próprio Gerenciador de Arquivos do painel.
Responsável técnico: Percio Andrade Castelo Branco (Infraestrutura Linux e Resposta a Incidentes).
Ambiente e Parâmetros Operacionais
- Painel de Hospedagem: DirectAdmin sob distribuição Linux corporativa (CentOS/AlmaLinux).
- Pilha Web: Apache/Nginx (Reverse Proxy), PHP-FPM e instâncias WordPress isoladas por conta.
- Impacto: Infecção transversal restrita aos diretórios web dos clientes, sem escalada para o usuário root.
- Ponto de Entrada: Exfiltração de cookies de autenticação do navegador na estação de trabalho local.
Investigação Forense Passo a Passo
Com tantas contas comprometidas de uma vez, a equipe achou que o servidor havia sido invadido ou que o DirectAdmin tinha uma falha de dia zero. Fui direto aos logs para checar os fatos antes de qualquer conclusão.
1. Triagem nos Logs de Acesso do DirectAdmin
Abri os registros de autenticação em /var/log/directadmin/login.log e os comandos do sistema em /var/log/directadmin/system.log:
# Checando tentativas de login e autenticações aceitas
grep -E "result=(failed|successful)" /var/log/directadmin/login.log | tail -n 30
# Rastreando uso do gerenciador de arquivos no painel
grep "CMD_FILE_MANAGER" /var/log/directadmin/system.log
A linha do tempo mostrou o que realmente aconteceu:
- O atacante começou com requisições automatizadas de força bruta na API do DirectAdmin. Todas falharam.
- Pouco depois, surgiu um registro de login como
adminmarcado com statussuccessful, mas sem qualquer envio prévio de formulário com usuário e senha. O painel apenas validou uma sessão que já existia.
2. Cruzamento de IPs e Identificação do Cookie Hijacking
Cruzei o ID da sessão com os registros de conexão de rede:
2026:10:01-08:14:10: admin (192.0.2.45 - IP Escritorio) login: successful session=da_sess_9a8f7c12
2026:10:01-08:42:19: admin (198.51.100.77 - IP Externo/Coreia) session validated: da_sess_9a8f7c12
O primeiro acesso foi feito às 08:14 pelo IP físico do escritório da empresa, na máquina do Gerente de Desenvolvimento. Vinte e oito minutos depois, exatamente o mesmo token de sessão (da_sess_9a8f7c12) foi usado por um IP localizado na Coreia. O invasor colou o cookie no próprio navegador e navegou direto para o painel com permissão total, contornando login e 2FA.
3. Ação Pós-Acesso: Upload de Webshells
Com a sessão administrativa nas mãos, o invasor usou o próprio File Manager do DirectAdmin para subir arquivos maliciosos nos sites:
# Localizando arquivos PHP criados recentemente nas pastas públicas
find /home/*/public_html/ -type f -name "*.php" -mtime -3 -ls
# Monitorando chamadas para a webshell nos logs do Apache
grep "POST /wp-content/uploads/cat.php" /var/log/httpd/domains/*.log
Ele subiu um arquivo chamado cat.php na pasta de uploads e disparou requisições POST para puxar mais scripts de um repositório no GitHub. A partir dessa base, infectou os arquivos de outros clientes no mesmo servidor.
Causa Raiz Confirmada (RCA)
O sistema operacional e o kernel Linux ficaram intactos. Não houve rootkit, invasão de SSH ou quebra de permissão root. O vetor veio da ponta do usuário:
- Arquivos não oficiais: Para agilizar testes, o Gerente de Desenvolvimento baixou temas e plugins WordPress piratas (nulled) em sites suspeitos.
- Infecção por Infostealer: O arquivo compactado continha um malware ladrão de dados. A empresa não utilizava antivírus padronizado nas máquinas (quando questionei certa vez quem protegia as estações locais, a resposta de um analista foi literalmente: "Deus"). Mais tarde chegaram a testar o Bitdefender gratuito, mas na ocasião o endpoint estava desprotegido.
- Roubo do banco de cookies: O malware leu os arquivos SQLite do Chrome e do Firefox, copiou as sessões ativas e enviou o cookie do DirectAdmin para o servidor de comando do atacante.
Ações Técnicas de Contenção que Executei
1. Expurgamento Imediato de Todas as Sessões
Derrubei todos os acessos abertos no servidor para cortar a conexão do invasor no mesmo minuto:
# Apagando os arquivos de sessão do DirectAdmin em disco
rm -rf /usr/local/directadmin/data/sessions/*
# Reiniciando o serviço para forçar o encerramento de conexões
systemctl restart directadmin
Orientei a equipe a limpar os navegadores e forcei a redefinição de todas as senhas administrativas.
2. Script de Auditoria em Usuários do DirectAdmin
Criei e rodei um script em Bash para checar se o atacante havia deixado contas secundárias ou revendedores ocultos:
#!/usr/bin/env bash
echo "=== AUDITANDO USUARIOS NO DIRECTADMIN ==="
for userconf in /usr/local/directadmin/data/users/*/user.conf; do
user=$(dirname "$userconf" | xargs basename)
usertype=$(grep -E "^usertype=" "$userconf" | cut -d= -f2)
creator=$(grep -E "^creator=" "$userconf" | cut -d= -f2)
suspended=$(grep -E "^suspended=" "$userconf" | cut -d= -f2)
if [ "$usertype" = "admin" ] || [ "$usertype" = "reseller" ]; then
echo "[PRIVILEGIO] Usuario: $user | Tipo: $usertype | Criador: $creator | Suspenso: $suspended"
fi
done
echo "=== FIM DA AUDITORIA ==="
O resultado confirmou que nenhuma conta backdoor havia sido criada.
3. Varredura e Quarentena com Imunify360 e Wordfence
Combinei a proteção do servidor com o scanner CLI do Wordfence Premium para isolar as infecções:
# Varredura completa do servidor com o agente do Imunify360
imunify360-agent malware user scan --all
# Varredura recursiva nos document roots dos clientes via Wordfence CLI
for dir in /home/*/public_html; do
echo "Checando $dir..."
wordfence scan --path="$dir" --output-path="/root/audit_$(basename $(dirname $dir)).log"
done
Isolei o script cat.php e todos os arquivos ofuscados em quarentena. Entreguei o relatório com a lista exata de caminhos alterados para a equipe de desenvolvimento realizar a limpeza definitiva do código dos clientes.
Mudanças Práticas Implementadas
- Proteção com EDR: Exigência de software de monitoramento de endpoint corporativo como o CrowdStrike Falcon nos computadores da equipe técnica.
- Painel Apenas via VPN: Fechei a porta 2222 do DirectAdmin no firewall do servidor. O acesso administrativo agora só passa pela VPN corporativa interna com 2FA ativo.
- Gerenciador de Senhas: Proibição de senhas repetidas e uso obrigatório de cofre de credenciais individual.
- Ambiente Isolado para Testes: Proibição de testar scripts piratas em máquinas de trabalho conectadas aos servidores de produção.
Falar sobre este serviço
Quer aplicar esse modelo de resposta a incidente no seu ambiente com execução técnica orientada por evidência?