Chat global

Chat
Loading the chat ...
Melhorias para o so...
 
Notifications
Clear all

Melhorias para o socket do HAPPY

1 Posts
1 Usuários
5 Reactions
24 Visualizações
Iron
 Iron
(@iron)
Posts: 21
Mentor Respeitado
Topic starter
 

Proteções Anti-DDoS e Segurança do Servidor Priston Tale

📋 Resumo das Proteções Implementadas

Este documento descreve todas as proteções implementadas no código do socket do servidor Priston Tale para prevenir ataques DDoS e exploits de pacotes maliciosos.


🛡️ 1. Proteção Contra Flood de Pacotes

Limite de Pacotes por Segundo

  • MAX_PACKETS_PER_SECOND: 100 pacotes/segundo por conexão
  • PACKET_FLOOD_WINDOW: Janela de 1 segundo para contagem
  • Conexões que excedem este limite são marcadas como suspeitas e desconectadas

Implementação

struct FloodProtection {
    DWORD dwLastResetTime;
    UINT uPacketCount;
    UINT uInvalidPacketCount;
    DWORD dwLastActivityTime;
}

🚫 2. Proteção Contra Pacotes Inválidos

Validações Implementadas

  1. Tamanho Mínimo: Pacotes devem ter pelo menos sizeof(Packet)
  2. Tamanho Máximo: Pacotes não podem exceder smSOCKBUFF_SIZE
  3. Tamanho Declarado vs Recebido: Verifica consistência
  4. Limite de Pacotes Inválidos: Máximo de 10 pacotes inválidos antes de desconectar

Função de Validação

bool ValidatePacket(Packet* p, int iReceivedSize)

🌐 3. Controle de Conexões por IP

Limites Implementados

  • MAX_CONNECTIONS_PER_IP: 3 conexões simultâneas por IP
  • Conexões adicionais são rejeitadas automaticamente
  • IPs que tentam exceder o limite recebem ban temporário

Rastreamento de IPs

struct IPConnectionTracker {
    DWORD dwIP;
    UINT uConnectionCount;
    DWORD dwFirstConnectionTime;
    DWORD dwBanExpireTime;
    bool bTempBanned;
}

⏱️ 4. Sistema de Timeout de Conexão

Timeout de Inatividade

  • CONNECTION_TIMEOUT: 30 segundos sem atividade
  • Conexões inativas são automaticamente fechadas
  • Previne conexões "zumbis" que consomem recursos

Timeout de Socket

DWORD timeout = CONNECTION_TIMEOUT;
setsockopt(s->sock, SOL_SOCKET, SO_RCVTIMEO, (char*)&timeout, sizeof(timeout));

🔨 5. Sistema de Banimento (Dual)

Ban Permanente

  • IPs com comportamento extremamente malicioso
  • Muitos pacotes inválidos (>= 10)
  • Armazenado em dwaIPListBan[MAX_BANCONNECTIONS]

Ban Temporário

  • TEMP_BAN_DURATION: 5 minutos (300.000ms)
  • Aplicado automaticamente para:
    • Tentativa de múltiplas conexões simultâneas
    • Flood de pacotes
    • Comportamento suspeito moderado
  • Expira automaticamente após o tempo definido

Limpeza Automática

void CleanupExpiredBans() // Executado a cada 60 segundos

🔍 6. Detecção de Atividade Suspeita

Critérios de Suspeita

  1. Mais de 100 pacotes por segundo
  2. Mais de 10 pacotes inválidos
  3. Timeout de inatividade
  4. Pacotes com tamanhos malformados

Marcação de Conexão

bool bSuspicious; // Flag na estrutura SocketData

📊 7. Proteções em Múltiplas Camadas

Camada 1: Listener (accept)

  • Verifica se IP está banido antes de aceitar
  • Rejeita conexões de IPs banidos imediatamente
  • Limpa bans expirados periodicamente

Camada 2: SocketAccept

  • Verifica limite de conexões por IP
  • Aplica ban temporário se exceder limite
  • Registra conexão no rastreador de IPs

Camada 3: ReceivePacket

  • Valida tamanho do pacote antes de processar
  • Conta pacotes inválidos
  • Verifica flood de pacotes
  • Retorna erro específico (0x6A6A) para DDoS

Camada 4: SocketPacket

  • Verifica se conexão está marcada como suspeita
  • Log de atividades suspeitas
  • Aplica ban e fecha conexão se necessário

Camada 5: Receiver Thread

  • Detecta código de erro DDoS (0x6A6A)
  • Decide entre ban permanente ou temporário
  • Log de ataques detectados

📝 8. Sistema de Logging

Eventos Registrados

// Atividade Suspeita
std::cout << "[SECURITY] Suspicious activity from IP: " << sd->szIP << std::endl;

// DDoS Detectado
std::cout << "[SECURITY] DDoS/Flood detected from IP: " << sd->szIP << std::endl;

// Ban Permanente
std::cout << "[SECURITY] IP permanently banned: " << [IP] << std::endl;

⚙️ 9. Configurações Ajustáveis

Constantes Principais

#define MAX_PACKETS_PER_SECOND          100    // Pacotes/segundo permitidos
#define MAX_INVALID_PACKETS             10     // Pacotes inválidos antes de ban
#define PACKET_FLOOD_WINDOW             1000   // Janela de tempo (1 seg)
#define MAX_PACKET_SIZE_MULTIPLIER      3      // Multiplicador de segurança
#define CONNECTION_TIMEOUT              30000  // 30 segundos timeout
#define MAX_CONNECTIONS_PER_IP          3      // Conexões por IP
#define TEMP_BAN_DURATION               300000 // 5 minutos ban temporário

Como Ajustar

Você pode modificar estas constantes em socket.h e socketserver.h conforme necessário:

  • Servidor com muitos jogadores legítimos: Aumente MAX_CONNECTIONS_PER_IP para 5-10
  • Ataques muito agressivos: Diminua MAX_PACKETS_PER_SECOND para 50
  • Bans muito curtos: Aumente TEMP_BAN_DURATION para 600000 (10 min)

🔄 10. Compatibilidade com Cliente

Garantias de Compatibilidade

Pacotes válidos do cliente são mantidos

  • Validação apenas rejeita pacotes malformados
  • Cliente legítimo nunca envia pacotes inválidos

Handshake de conexão preservado

  • Nenhuma modificação no protocolo de conexão
  • Apenas adiciona validações de segurança

Timeouts apropriados

  • 30 segundos é suficiente para lag normal
  • Cliente mantém keepalive automático

Múltiplas contas do mesmo IP

  • 3 conexões simultâneas permitem família jogando
  • Ajustável se necessário

🚀 11. Como Compilar e Testar

Compilação

  1. Substitua os arquivos originais pelos novos
  2. Compile normalmente com seu compilador C++
  3. Certifique-se de ter suporte a std::map (C++11)

Teste de Funcionamento Normal

1. Conecte com cliente normal
2. Verifique se login funciona
3. Jogue normalmente por alguns minutos
4. Observe logs para confirmar ausência de falsos positivos

Teste de Proteção

1. Simule múltiplas conexões do mesmo IP (>3)
   - Esperado: Rejeição após 3ª conexão
   
2. Envie muitos pacotes rapidamente
   - Esperado: Desconexão após 100 pacotes/seg
   
3. Envie pacotes com tamanhos inválidos
   - Esperado: Desconexão após 10 pacotes inválidos
   
4. Verifique logs para confirmação

📈 12. Melhorias Futuras (Opcionais)

Sugestões Adicionais

  1. Whitelist de IPs

    • Lista de IPs confiáveis sem limites
    • Útil para GMs e administradores
  2. Sistema de Rate Limiting Avançado

    • Token bucket algorithm
    • Limites diferentes por tipo de pacote
  3. Detecção de Padrões

    • Machine learning para detectar bots
    • Análise de comportamento anormal
  4. Dashboard de Segurança

    • Interface web para monitorar ataques
    • Estatísticas em tempo real
  5. Integração com Firewall

    • Banimento automático no iptables/Windows Firewall
    • Proteção antes da aplicação

⚠️ 13. Avisos Importantes

Backups

⚠️ SEMPRE faça backup dos arquivos originais antes de aplicar as mudanças

Testes

⚠️ Teste em ambiente de desenvolvimento primeiro

  • Não aplique diretamente em produção
  • Verifique compatibilidade com seu cliente específico

Monitoramento

⚠️ Monitore os logs após implementação

  • Verifique se há falsos positivos
  • Ajuste as constantes se necessário

Atualização Gradual

⚠️ Recomendado aplicar em etapas:

  1. Primeiro: Validação de pacotes
  2. Segundo: Limite de conexões por IP
  3. Terceiro: Sistema de banimento
  4. Quarto: Detecção de flood

🐛 14. Troubleshooting

Problema: Jogadores legítimos sendo banidos

Solução: Aumente MAX_PACKETS_PER_SECOND para 150-200

Problema: Família não consegue jogar junto

Solução: Aumente MAX_CONNECTIONS_PER_IP para 5-10

Problema: Desconexões frequentes

Solução: Aumente CONNECTION_TIMEOUT para 60000 (60 seg)

Problema: Ataques ainda passam

Solução:

  • Diminua MAX_INVALID_PACKETS para 5
  • Diminua MAX_PACKETS_PER_SECOND para 50
  • Aumente TEMP_BAN_DURATION para 600000 (10 min)

📞 15. Suporte e Considerações Finais

Logs são Seus Amigos

Os logs implementados vão mostrar:

  • Quando um IP é banido
  • Por que foi banido (flood, pacotes inválidos, etc)
  • IPs suspeitos

Monitoramento Contínuo

  • Verifique os logs regularmente
  • Ajuste as configurações conforme necessário
  • Mantenha lista de IPs banidos atualizada

Performance

As proteções adicionam overhead mínimo:

  • Validações são O(1)
  • Mutex apenas em operações críticas
  • Map para rastreamento de IPs é eficiente

✅ Checklist de Implementação

  • [ ] Backup dos arquivos originais feito
  • [ ] socket.h atualizado
  • [ ] socket.cpp atualizado
  • [ ] socketserver.h atualizado
  • [ ] socketserver.cpp atualizado
  • [ ] Código compilado com sucesso
  • [ ] Teste de conexão normal funcionando
  • [ ] Teste de múltiplas conexões funcionando
  • [ ] Logs aparecendo corretamente
  • [ ] Sistema de ban funcionando
  • [ ] Servidor em produção monitorado

🎯 Conclusão

Estas proteções fornecem uma defesa robusta em múltiplas camadas contra:

  • ✅ Ataques DDoS
  • ✅ Flood de pacotes
  • ✅ Buffer overflow
  • ✅ Pacotes malformados
  • ✅ Múltiplas conexões maliciosas
  • ✅ Exploits de protocolo

 


 
Postado : 23/10/2025 12:48 am
miquella, Luk, Assassin and 2 people reacted
Compartilhar:

Anúncio