Como desacelerar um hacker

17

Alguns roteiros infantis em Delhi, na Índia, tentam hackear nosso site desde ontem à noite. Ele escreveu um script de navegador que faz solicitações de nosso servidor em loops aninhados, tentando tudo sob o sol.

Ele não está chegando a lugar nenhum e não está conseguindo ultrapassar nossas defesas básicas (mas ele está preenchendo nossos arquivos de log).

Estamos enviando de volta um 403 Unauthorized para seus pedidos quase tão logo eles entram, mas quanto mais rápido bloqueamos seus pedidos, mais rápido o script é executado.

Gostaríamos de introduzir um "atraso" de algum tipo antes de enviar de volta a resposta 403. Quanto mais tempo, melhor.

Pergunta: Como podemos atrasar tentativas de invasão sem afetar o resto do site?

  • Eu assumo que um Sleep (15000) no seu tópico seria uma má notícia para outros visitantes do site.
  • Criar um novo tópico só para ele parece um exagero.
  • Existe outra maneira de enviar uma resposta atrasada?
  • Por quanto tempo podemos forçar o navegador a esperar? Eu suponho que não me importo muito se ele receber o erro 403 Unauthorized ou eventualmente expirar, então provavelmente poderíamos fazer uma espera indefinida / infinita.
por Flipster 06.12.2010 / 23:18

10 respostas

38

Deve haver um firewall separado em algum lugar na frente do seu servidor da web. Você quer impedir que as solicitações de lá cheguem ao seu servidor, de modo que, no que diz respeito ao IP, o servidor não existe mais.

    
por 06.12.2010 / 23:22
5

Existem sistemas de detecção de invasão reais grandes e pequenos que farão isso automaticamente dependendo de vários filtros, honeypots e outros mecanismos

Por exemplo, consulte fail2ban , que pode ser configurado para realizar ações com base na análise de registros.

Desta forma você pode

  • filtrar facilmente o endereço IP único do qual um ataque está chegando sem influenciar outros usuários do seu site
  • você pode escrever sua própria regex para analisar logs
  • você pode definir suas próprias ações (aceleração ao invés de proibição, etc)

Existem outras ferramentas maiores, veja a seção também na wikipedia.

Como sua pergunta está marcada como asp.net, assumo que sua plataforma de servidor é o Windows. Ainda assim, se usar o linux firewall é uma opção, você pode tentar o seguinte

  • coloque um firewall Linux entre WAN e seu servidor
  • conceda acesso à máquina do firewall aos seus registros do IIS
  • escreva regex para analisar
  • conecte-o a modelos existentes para banir

Esse firewall pode ser executado em hardware extremamente modesto - pense até mesmo em algo como roteadores linksys (veja aqui ) para larguras de banda de links muito decentes.

    
por 07.12.2010 / 10:33
4

Se eles vierem de um endereço IP específico ou bloco de endereço, talvez você queira adicionar uma rota blackhole a ele:

ip ro add blackhole 10.69.96.0/24
ip ro flush cache

Você também pode fazer isso usando uma regra iptables, mas perceba que as regras do iptables são atravessadas linearmente, então se você começar a adicionar regras do iptables para cada descuido que aparecer, você pode começar a consumir muita CPU. As tabelas de roteamento são otimizadas para lidar com muitas entradas. Por exemplo, uma das minhas caixas tem 350 mil entradas em sua tabela de roteamento sem nenhum problema. Mas se eu tivesse 3 regras de iptables, a caixa quase certamente cairia.

Se você tentar fazer algo em que seu aplicativo durma por muitos segundos nessas conexões, poderá acabar amarrando recursos suficientes para que solicitações legítimas não obtenham recursos.

    
por 07.12.2010 / 04:52
3

Você não quer atrasá-lo porque atrasá-lo incorretamente derrubará seu site como se estivesse sob um ataque DoS porque seus threads estarão "ocupados" atendendo a solicitações dessa pessoa. O que você quer fazer é bloquear seu IP e acabar com isso. Não há razão para atrair a pessoa que o faz.

    
por 07.12.2010 / 06:39
2

O que você procura é o módulo mod_evaisve do Apache.

Em distros baseadas em Debian, instale-o usando

apt-get install libapache2-mod-evasive

CentOS / RHEL

yum install mod_evasive

O mod_evasive mantém um controle sobre as solicitações que chegam ao Apache e proíbe o IP usando iptables que passam o valor limite. É uma ferramenta definitiva contra ataques DoS baseados em HTTP e até ataques Distributed DoS quando você é visado por uma enorme botnet com milhares de IPs diferentes.

Ele é executado como um módulo do Apache carregado durante o tempo de execução e não como um daemon separado.

Embora um invasor inteligente com controle de uma enorme botnet ainda possa derrubar o seu servidor web, cronometrando as solicitações enviadas por cada zumbi na rede de bots, de forma que nenhum dos IPs ultrapasse o valor limite.

Nesse caso, você deve usar o IDS baseado em anomalias e provavelmente treinar o sistema por conta própria. Mas é altamente improvável que isso aconteça, a menos que você tenha alguns inimigos de verdade ou alguém com uma agenda corporativa.

    
por 29.10.2012 / 18:33
0

Se você estiver usando o linux, use iptables para limitar o cara a gostar de 1 byte / s com grandes atrasos e fazê-lo aceitar para sempre para obter uma solicitação. Se for distribuído, isso não ajudará muito.

Não sei ao certo como você faria isso no Windows, mas você pode encontrar algumas opções semelhantes no firewall do seu roteador ou hardware, se tiver uma.

EDIT: De acordo com o acima, isso é mais como uma questão de falha no servidor.

    
por 06.12.2010 / 23:22
0

Se o endereço IP do cara for bastante constante, você pode criar um HttpModule personalizado, conectá-lo por meio de uma alteração no arquivo web.config e ter um atraso quando for reconhecido como esse endereço IP. Ou você pode enviar-lhe de volta alguns códigos 404 ou redirecioná-lo para outro lugar.

    
por 06.12.2010 / 23:25
0

Você sabe que eles estão na Índia. Seu site tem usuários indianos significativos que impediriam simplesmente o bloqueio de todo o intervalo de IPs no nível do firewall em incrementos até que o fluxo fosse interrompido? Certamente não é uma solução firme, mas se você está lidando apenas com um típico 'script kiddie', deve ser o suficiente para desencorajá-los e enviá-los para outro alvo.

Melhor ainda, se for de um IP, você pode responder com seu próprio ataque de negação de serviço:)

    
por 06.12.2010 / 23:29
0

Além da resposta recebida, você desejará salvar sua documentação (registros, rastreios) e fornecê-los ao seu provedor de serviços. Este é o mais eficaz durante o incidente, pois o seu provedor pode testemunhar a incursão. Mesmo que você tenha sucesso em suas medidas, é importante restringir outras tentativas e ajuda seu provedor a escalar uma solicitação para o provedor de serviços do invasor. sem dúvida, a ação mais eficiente é que o provedor do invasor recuse o serviço ao seu cliente, o invasor identificado.

    
por 07.12.2010 / 01:22
0

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

    
por 07.12.2010 / 04:44