Trata-se de um projeto educacional desenvolvido com Java 25 + Spring 4, focado em estudar segurança ofensiva e defensiva. Esse projeto é capaz realizar:
- Monitoramento detalhado de acessos
- Coleta de informações de origem (IP, GeoIP, User-Agent)
- Detecção de comportamentos suspeitos
- Implementação de honeypots reais
- Análise e pontuação de risco automática
- Registro persistente em arquivos .log
Este projeto foi pensado para funcionar como algo facilmente reutilizável, podendo ser inserido em praticamente qualquer aplicação Spring. (OBS: Ainda está em melhoria 🤓)
O objetivo principal é entender e observar o comportamento real de acessos maliciosos na web, como:
- Bots/Crawlers
- Tentativas de acesso em rotas sensíveis
- Exploração de paths conhecidos (
/admin,/wp-admin,/.git, etc) - Ataques via query string
- Ferramentas automatizadas e seus user-agents (sqlmap, nikto, curl, wget, etc...)
Tudo isso sem bloquear o acesso, apenas observando, classificando e registrando.
O sistema é dividido em camadas bem definidas:
Arquivo:
filter/AccessLogFilter.java
Responsável por:
- Interceptar todas as requisições
- Identificar o IP real (X-Forwarded-For, Cloudflare, etc)
- Consultar o serviço de GeoIP
- Acionar o motor de análise de risco
- Acionar a classe que faz o registro .log principal
Basicamente, este é o "coração" deste projeto, pois a classe é inicialidada antes mesmo de controllers, services, etc. Permitindo a inteceptação "crua" do que o cliente enviou.
📌 Vantagem: por conta de inicializar primeiro, pode ser reutilizada em qualquer projeto Spring apenas copiando a classe.
Arquivo:
security/HoneypotController.java
Rotas falsas monitoradas:
/admin/login/wp-admin/phpmyadmin/api/login/config/.env/.git/teste
Comportamento:
- Retorna HTML falso e convincente
- Nunca retorna 404
- Marca a requisição como HONEYPOT_HIT
- Chama o service que registra em um arquivo .log separado
Arquivo:
security/HoneypotLogService.java
Salva em:
logs/honeypot.log
Formato:
[2026-01-15T18:32:11Z] IP=1.2.3.4 | PATH=/admin | UA="sqlmap/1.7"
Arquivo:
service/RiskAnalyzerService.java
Classe responsável por analisar e calcular o risco das ações dos usuários, com base em critérios simples, mas bem definidos. Ela é chamada após a classe de filtro.
| Regra | Pontuação |
|---|---|
| User-Agent de scanner | +80 |
| Path suspeito por extensão | +50 |
| Payload em query string | +100 |
| Método HTTP incomum | +20 |
| Honeypot hit | +80 |
- Score numérico cumulativo
- Lista de motivos
- Classificação de risco
📌 Vale ressaltar que as regras estão dentro de blocos de condição com user-agents, payloads, etc. Busquei simplificar para economizar tempo, mas acredito que poderia ser facilmente ser adaptadas para uma consulta numa base de dados grande.
Arquivo:
service/GeoIPService.java
Utiliza a api ip-api:
http://ip-api.com/json/{ip}
Retorna:
- País
- Estado
- Cidade
- ISP
☝️🤓 Serviço gratuito, do jeitinho que todo mundo gosta.
Arquivo:
service/AccessLogService.java
Salva em:
logs/access.log
Formato:
[2026-01-15T18:32:11Z] IP=1.2.3.4 | PAIS=Brazil | ESTADO=PE | CIDADE=Recife | ISP=Claro | RISCO=CRITICO (160) | MOTIVO=HONEYPOT:/admin,UA_SCANNER | UA="sqlmap/1.7"
Este lab foi testado com:
- GitHub Codespaces (porta pública)
- Acesso via dados móveis
- IP's reais
- User-Agents reais
O sistema identifica corretamente:
- IP real
- País/ISP
- Acessos automatizados e ferramentas reais
/
/admin
/wp-admin
/.git
/?=' OR 1=1 -- - (colocar no formulário admin também funciona e gera risco crítico no log)
curl -A sqlmap http://sitezinho/admin
Este projeto é exclusivamente educacional. Não seja idiota de utilizar para capturar dados, violar privacidade, leis locais ou políticas de uso.
Este projeto não está totalmente finalizado, ainda estou pensando em maneiras de torná-lo bem mais fácil de ser reutilizado em outros projetos, a ideia de evoluir uma apliação real que registra logs e com a possibilidade de ser usada em outras aplicações me deixou muito animado para melhorá-lo.