Algum script kiddie em Delhi, na Índia, tenta invadir nosso site desde a noite passada. Ele escreveu um script de navegador que faz solicitações de nosso servidor em enormes loops aninhados, tentando tudo sob o sol.
Ele não está chegando a lugar nenhum e não está conseguindo superar nossas defesas básicas (mas está preenchendo nossos arquivos de log).
Estamos enviando um de volta 403 Unauthorized
para os pedidos dele assim que eles chegam, mas quanto mais rápido bloquearmos os pedidos, mais rápido o script será executado.
Gostaríamos de introduzir algum tipo de "atraso" antes de enviar de volta a resposta 403. Quanto mais, melhor.
Pergunta: Como podemos atrasar as tentativas de invasão sem afetar o restante do site?
- Suponho que um sono (15000) em seu segmento seria uma má notícia para outros visitantes do site.
- Girar um novo tópico apenas para ele parece um exagero.
- Existe outra maneira de enviar uma resposta atrasada?
- Quanto tempo podemos forçar o navegador a esperar? Suponho que não me importo muito se ele receber o
403 Unauthorized
erro ou eventualmente atingir o tempo limite, então provavelmente poderíamos até fazer uma espera indefinida / infinita.
Respostas:
Deve haver um firewall separado em algum lugar na frente do seu servidor web. Você deseja impedir que as solicitações cheguem ao servidor, para que, no que diz respeito ao IP dele, o servidor não exista mais.
fonte
Existem sistemas de detecção de intrusões reais, grandes e pequenos, que farão isso automaticamente para você, dependendo dos vários filtros, honeypots e outros mecanismos
Por exemplo, consulte fail2ban, que pode ser configurado para executar ações com base na análise de logs.
Dessa forma, você pode
Existem outras e maiores ferramentas, consulte a seção ver também na wikipedia.
Como sua pergunta está marcada como asp.net, suponho que sua plataforma de servidor seja o Windows. Ainda assim, se o uso do firewall linux for uma opção, você pode tentar o acima
Esse firewall pode ser executado em hardware extremamente modesto - pense em algo como roteadores Linksys (veja aqui ) para obter larguras de banda de link muito decentes.
fonte
Se eles vierem de um endereço IP ou bloco de endereços específico, convém adicionar uma rota de buraco negro:
Você também pode fazer isso usando uma regra do iptables, mas percebe que as regras do iptables são atravessadas linearmente; portanto, se você começar a adicionar regras do iptables para todos os usuários que aparecerem, poderá começar a consumir muita CPU. As tabelas de roteamento são otimizadas para lidar com muitas, muitas entradas. Por exemplo, uma das minhas caixas tem entradas de 350 mil na tabela de roteamento sem nenhum problema. Mas se eu tivesse regras de 3k iptables, a caixa quase certamente cairia.
Se você tentar fazer algo em que seu aplicativo dorme por muitos segundos nessas conexões, poderá acabar amarrando recursos suficientes para que solicitações legítimas não possam obter nenhum recurso.
fonte
iptables
em um kernel comipset
capacidade pode corresponder muito eficientemente a grandes listas de endereços IP, mas parece que nenhuma das principais distribuições permiteipset
em seus kernels.Você não deseja desacelerá-lo, porque desacelerá-lo incorretamente fará com que seu site seja desativado como se estivesse sob um ataque de negação de serviço, porque seus threads estarão "ocupados" atendendo às solicitações dessa pessoa. O que você quer fazer é bloquear o IP dele e terminar com ele. Não há razão para iscar a pessoa que está fazendo isso.
fonte
O que você está procurando é o módulo Apache mod_evaisve.
Nas distribuições baseadas no Debian, instale-o usando
CentOS / RHEL
O mod_evasive mantém um controle das solicitações que chegam ao Apache e proíbe o IP usando iptables que passam o valor limite. É uma ferramenta definitiva contra ataques de DoS baseados em HTTP e até ataques de DoS distribuídos quando você é alvo de uma enorme rede de bots com milhares de IP diferentes.
Ele é executado como um módulo Apache carregado durante o tempo de execução e não como um daemon separado.
No entanto, um invasor inteligente com controle de uma enorme rede de bots ainda pode derrubar seu servidor da Web cronometrando as solicitações enviadas por cada zumbi na rede de bots, para que nenhum IP passe o valor limite.
Nesse caso, você deve usar IDS baseado em anomalia e provavelmente treinar o sistema por conta própria. Mas é altamente improvável que isso aconteça, a menos que você tenha grandes inimigos ou alguém com uma agenda corporativa.
fonte
Se você estiver usando o Linux, use o iptables para limitar o tamanho de 1 byte / s com grandes atrasos e fazer com que ele demore uma eternidade para receber uma solicitação. Se for distribuído, isso não ajudará muito.
Não tenho certeza de como você faria isso no Windows, mas você pode encontrar algumas opções semelhantes no seu roteador ou firewall de hardware, se você tiver um.
EDIT: Concordo com o acima exposto, isso é mais como uma questão de falha do servidor.
fonte
Se o endereço IP da pessoa bastante constante for capaz de criar um HttpModule personalizado, conecte-o através de uma alteração no arquivo web.config e tenha um atraso quando for reconhecido como esse endereço IP. Ou você pode enviar de volta alguns códigos 404 ou redirecioná-lo para outro lugar.
fonte
Você sabe que eles estão na Índia. O seu site possui clientes indianos significativos, o que impediria simplesmente bloquear todo o intervalo de IPs no nível do firewall em incrementos até o fluxo parar? Certamente não é uma solução firme, mas se você está lidando apenas com um típico 'script kiddie', deve ser suficiente desencorajá-los e enviá-los para outro alvo.
Melhor ainda, se for de um IP, você poderá responder com seu próprio ataque de negação de serviço :)
fonte
Além da resposta que você recebeu, convém salvar sua documentação (logs, rastreios) e fornecê-la ao seu provedor de serviços. Isso é o mais eficaz durante o incidente, pois seu provedor pode testemunhar a incursão. Mesmo que você seja bem-sucedido em suas medidas, é importante reduzir outras tentativas e ajudar seu provedor a encaminhar uma solicitação ao provedor de serviços do invasor; indiscutivelmente, a ação mais eficiente é que o provedor do invasor recuse o serviço ao cliente, o invasor identificado.
fonte
se você é um programador, você pode trabalhar com o evento .net Begin_Request e colocar seu "sleep" lá
fonte