Como desacelerar um hacker

17

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 Unauthorizedpara 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 Unauthorizederro ou eventualmente atingir o tempo limite, então provavelmente poderíamos até fazer uma espera indefinida / infinita.
Flipster
fonte
36
Existe um motivo para você não poder simplesmente configurar seu firewall para eliminar o tráfego proveniente do endereço IP dele? Esse problema seria melhor resolvido no nível da rede do que no nível do aplicativo. A queda do tráfego significará que ele terá que ficar sentado até que a solicitação de conexão expire. E não responder é muito mais eficaz do que retribuir respostas "não autorizadas", uma vez que não fornece efetivamente nenhuma informação a ser inspecionada.
cdhowie
3
Por que não apenas bloquear seu ip?
Hogan
2
Desconecte seu servidor.
Sayed Ibrahim Hashimi
Olhe para a minha resposta - isso é uma coisa padrão; estou surpreso que você não tenha recebido uma resposta que aponte para algum sistema de detecção de intrusão anteriormente.
Unreason
@ Disse que desconectar o servidor é uma das piores coisas que você pode fazer. Além do DoSing, consulte também security.stackexchange.com/q/181/33
AviD

Respostas:

37

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.

Joel Coel
fonte
1
Olá Joel, esta é a resposta "aceita", mas desde que a pergunta foi transferida do StackOverflow, parece que não tenho autoridade para aceitá-la. Eu dei a sua resposta +1. É exatamente isso que eu farei.
Flipster 6/12/10
2
@flip, clique no seu nome e, em seguida, no link "contas" na parte direita da página. Isso permitirá que você associe isso de volta à sua conta de pilha excedente e recupere a propriedade da pergunta.
Joel Coel
1
mas você também deseja fazer isso automaticamente - não faz sentido lidar com esses problemas caso a caso. (Veja minha resposta)
Desrazão
5

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

  • filtre com facilidade um único endereço IP do qual um ataque ocorre sem influenciar outros usuários do seu site
  • você pode escrever seu próprio regex para analisar logs
  • você pode definir suas próprias ações (acelerador em vez de banir, etc.)

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

  • coloque um firewall linux entre a WAN e seu servidor
  • conceder acesso à máquina de firewall aos seus logs do IIS
  • escreva regex para analisá-lo
  • conecte-o aos modelos existentes para banir

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.

Desrazão
fonte
4

Se eles vierem de um endereço IP ou bloco de endereços específico, convém adicionar uma rota de buraco negro:

ip ro add blackhole 10.69.96.0/24
ip ro flush cache

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.

Sean Reifschneider
fonte
1
+1. Gostei das suas informações sobre a relativa eficiência do roteamento vs netfilter nessa situação. iptablesem um kernel com ipsetcapacidade pode corresponder muito eficientemente a grandes listas de endereços IP, mas parece que nenhuma das principais distribuições permite ipsetem seus kernels.
Steven Monday
Bom ponto, o ipset é algo que parece útil para esse tipo de coisa, mas simplesmente não está prontamente disponível. Há um outro sistema chamado nf-HIPAC que era um otimizador mais geral iptables, mas a última mensagem na lista de discussão e última versão é de 2005.
Sean Reifschneider
3

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.

sybreon
fonte
2

O que você está procurando é o módulo Apache mod_evaisve.

Nas distribuições baseadas no Debian, instale-o usando

apt-get install libapache2-mod-evasive

CentOS / RHEL

yum install mod_evasive

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.

vagarwal
fonte
0

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.

Robert
fonte
2
Essa técnica às vezes é usada em ataques DDoS - pelo invasor. Fazer isso no servidor é meio contraproducente. <_ <
p-static
Não é realmente correto dizer que é usado em ataques DDoS - esse tipo de efeito é o objetivo dos ataques DDoS. Fazê-lo no servidor / firewall, mas apenas para atacar computadores é a única defesa real (AFAIK).
Unreason
0

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.

Kris van der Mast
fonte
0

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 :)

Nathan Chere
fonte
isso não é realmente uma solução, cortar geléia com um machado. E B, DDOS não é realmente uma boa recomendação (embora eu suponha que você estava brincando), não há razão para a) fazer smth illagel b) colocar mais carga no seu servidor!
Trufa
0

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.

corin
fonte
0

se você é um programador, você pode trabalhar com o evento .net Begin_Request e colocar seu "sleep" lá

Vamos almoçar
fonte