Para evitar que ataques como esse aconteçam novamente, você deve implementar diversas práticas de segurança, especialmente relacionadas ao upload de arquivos e à configuração do servidor web. Aqui estão as principais medidas que você pode adotar:
1. Validação e Restrição de Uploads
- Verificação de MIME Type: Não se baseie apenas na extensão do arquivo (como
.jpg
ou .png
), pois isso pode ser facilmente manipulado. Verifique o MIME type real do arquivo carregado para garantir que ele é de fato uma imagem.
- Limite de Extensões Permitidas: Permita apenas extensões absolutamente necessárias, como
.jpg
, .jpeg
, .png
, e .gif
. Bloqueie qualquer extensão que possa ser usada para scripts, como .php
, .html
, ou extensões duplas, como .php.jpg
.
- Rejeitar Extensões Duplas: Configure o sistema para recusar uploads que contenham múltiplas extensões (como
image.php.jpg
).
- Sanitização de Nomes de Arquivos: Renomeie os arquivos após o upload para algo seguro (ex.:
hash aleatório + extensão
), removendo caracteres especiais e evitando que o nome do arquivo tenha efeito sobre o servidor.
2. Configurações no Servidor Web
- Desabilitar Execução de Scripts no Diretório de Uploads:
- No Apache, use um arquivo
.htaccess
no diretório de uploads para bloquear a execução de scripts PHP:
- No Nginx, você pode configurar uma regra para impedir a execução de scripts PHP em um diretório específico:
- Desabilitar manipulação de extensões duplas: Configure o servidor para não processar arquivos com extensões duplas. Por exemplo, no Apache:
3. Restrições no Arquivo de Configuração PHP
- Desativar Funções Perigosas: No
php.ini
, desative funções que permitem execução de comandos no servidor, como:
- Limitar Uploads de Arquivos: Configure o
php.ini
para permitir apenas os tipos de arquivos necessários e limitar o tamanho máximo do upload:
4. Monitoramento e Logs
- Ativar Monitoramento: Use ferramentas de monitoramento como o Fail2Ban para detectar tentativas de invasão e bloquear IPs maliciosos.
- Registro de Logs: Ative o log detalhado de uploads e ações em diretórios sensíveis. Monitore as tentativas de upload de arquivos suspeitos e atue rapidamente em caso de anomalias.
5. Firewall de Aplicação Web (WAF)
- Um WAF (Web Application Firewall), como ModSecurity ou Cloudflare, pode detectar e bloquear atividades maliciosas automaticamente. Um WAF inspeciona as requisições HTTP e pode bloquear uploads que contenham código malicioso.
6. Permissões de Arquivos e Diretórios
- Defina as permissões corretas no sistema de arquivos. Diretórios de upload não devem ter permissões de execução.
- Diretórios de upload devem ter permissões chmod 0755 e arquivos criados pelo sistema devem ter permissões chmod 0644.
- Certifique-se de que os diretórios não permitem a listagem de arquivos (protegendo contra ataques de diretório).
7. Escaneamento de Arquivos e Backdoors
- Implemente um mecanismo para escanear automaticamente os arquivos carregados, buscando por padrões de código malicioso, com ferramentas como ClamAV ou soluções de antivírus para servidores web.
- Faça uma auditoria em seu sistema para garantir que não há backdoors instalados. Ferramentas de segurança como o rkhunter ou chkrootkit podem ajudar na detecção de rootkits.
8. Atualizações Regulares
- Mantenha seu servidor, scripts PHP e qualquer software ou biblioteca atualizados. Vulnerabilidades conhecidas em versões antigas são o principal vetor de ataque.
9. Isolamento de Ambiente
- Se possível, execute a aplicação em um ambiente isolado usando contêineres (como Docker) ou máquinas virtuais. Isso reduz o impacto de um ataque, limitando o que o atacante pode acessar.