Comment ralentir un pirate


17

Un script kiddie à Delhi, en Inde, tente de pirater notre site depuis la nuit dernière. Il a écrit un script de navigateur qui fait des requêtes à notre serveur en boucles imbriquées massives, essayant tout sous le soleil.

Il ne va nulle part et ne dépasse même pas nos défenses de base (mais il remplit nos fichiers journaux).

Nous renvoyons un 403 Unauthorizedà ses demandes presque dès leur entrée, mais plus vite nous bloquons ses demandes, plus vite son script s'exécute.

Nous aimerions introduire un "retard" quelconque avant de renvoyer la réponse 403. Plus c'est long, mieux c'est.

Question: Comment pouvons-nous retarder les tentatives de piratage sans affecter le reste du site?

  • Je suppose qu'un Sleep (15000) sur son fil serait une mauvaise nouvelle pour les autres visiteurs du site.
  • Faire tourner un nouveau fil juste pour lui semble exagéré.
  • Existe-t-il un autre moyen d'envoyer une réponse différée?
  • Combien de temps pouvons-nous forcer son navigateur à attendre? Je suppose que je ne me soucie pas beaucoup s'il obtient l' 403 Unauthorizederreur ou éventuellement expire, alors nous pourrions probablement même faire une attente indéfinie / infinie.

36
Y a-t-il une raison pour laquelle vous ne pouvez pas simplement configurer votre pare-feu pour supprimer le trafic provenant de son adresse IP? Ce problème serait mieux résolu au niveau du réseau qu'au niveau de l'application. La baisse du trafic signifie qu'il devra rester assis jusqu'à ce que la demande de connexion expire. Et ne pas répondre du tout est beaucoup plus efficace que de rejeter des réponses "non autorisées" car cela ne lui donne effectivement aucune information à inspecter.
cdhowie

3
Pourquoi ne pas simplement bloquer son IP?
Hogan

2
Débranchez votre serveur.
Sayed Ibrahim Hashimi

Regardez ma réponse - c'est une chose standard, je suis surpris que vous n'ayez pas obtenu de réponse qui pointe vers un système de détection d'intrusion plus tôt.
Unreason

@Dit, débrancher votre serveur est l'une des pires choses que vous puissiez faire. Outre DoSing vous-même, voir également security.stackexchange.com/q/181/33
AviD

Réponses:


37

Il devrait y avoir un pare-feu séparé quelque part devant votre serveur Web. Vous souhaitez empêcher que les demandes ne parviennent jamais à votre serveur, de sorte que, en ce qui concerne son adresse IP, votre serveur n'existe plus.


1
Salut Joel, c'est la réponse "acceptée", mais comme la question a été transférée de StackOverflow, il semble que je n'ai pas le pouvoir de l'accepter. J'ai donné ta réponse +1. C'est exactement ce que je vais faire.
Flipster

2
@flip cliquez sur votre nom puis sur le lien "comptes" en bas de la page à droite. Cela vous permettra d'associer cela à votre compte de débordement de pile et de reprendre la propriété de la question.
Joel Coel

1
mais vous voulez aussi le faire automatiquement - inutile de traiter ces questions au cas par cas. (voir ma réponse)
Unreason

5

Il existe de véritables systèmes de détection d'intrusions, petits et grands, qui le feront automatiquement pour vous en fonction des différents filtres, pots de miel et autres mécanismes

Par exemple, voir fail2ban qui peut être configuré pour prendre des actions basées sur l'analyse des journaux.

De cette façon, vous pouvez

  • filtrer facilement une seule adresse IP d'où provient une attaque sans influencer les autres utilisateurs de votre site
  • vous pouvez écrire votre propre expression régulière pour analyser les journaux
  • vous pouvez définir vos propres actions (accélérez au lieu d'interdire, etc.)

Il existe d'autres outils plus gros, voir la section voir aussi sur wikipedia.

Comme votre question est marquée comme asp.net, je suppose que votre plate-forme de serveur est Windows. Néanmoins, si l'utilisation du pare-feu Linux est une option, vous pouvez essayer ce qui précède

  • mettre un pare-feu linux entre le WAN et votre serveur
  • donner accès à la machine pare-feu à vos journaux IIS
  • écrire regex pour l'analyser
  • le brancher sur des modèles existants pour interdire

Un tel pare-feu peut être exécuté sur un matériel extrêmement modeste - pensez même à quelque chose comme des routeurs linksys (voir ici ) pour des bandes passantes de liaison très décentes.


4

S'ils proviennent d'une adresse IP ou d'un bloc d'adresses spécifique, vous pouvez y ajouter un itinéraire de trou noir:

ip ro add blackhole 10.69.96.0/24
ip ro flush cache

Vous pouvez également accomplir cela en utilisant une règle iptables, mais sachez que les règles iptables sont traversées linéairement, donc si vous commencez à ajouter des règles iptables pour chaque mécréant qui arrive, vous pouvez commencer à consommer beaucoup de CPU. Les tables de routage sont optimisées pour gérer de nombreuses entrées. Par exemple, une de mes boîtes contient 350 000 entrées dans sa table de routage sans problème. Mais si j'avais des règles iptables 3K, la boîte tomberait presque certainement.

Si vous essayez de faire quelque chose où votre application se met en veille pendant plusieurs secondes sur ces connexions, vous risquez de bloquer suffisamment de ressources pour que les demandes légitimes ne puissent pas obtenir de ressources.


1
+1. J'ai aimé vos informations sur l'efficacité relative du routage vs netfilter dans cette situation. iptablessur un noyau avec des ipsetcapacités peut correspondre très efficacement à d'énormes listes d'adresses IP, mais il semble qu'aucune des principales distributions ne soit activée ipsetdans leurs noyaux.
Steven lundi

Bon point, l'ipset est quelque chose qui semble utile pour ce genre de choses, mais qui n'est tout simplement pas facilement disponible. Il existe un autre système appelé nf-hipac qui était un optimiseur iptables plus général, mais le dernier message sur la liste de diffusion et la dernière version date de 2005.
Sean Reifschneider

3

Vous ne pas voulez le ralentir parce que le ralentissement va mal prendre votre site vers le bas comme si elle était sous une attaque DoS parce que vos fils seront « occupé » le service des demandes de cette personne. Ce que vous voulez faire, c'est bloquer son IP et en finir avec cela. Il n'y a aucune raison d'appâter la personne qui le fait.


2

Ce que vous recherchez est le module Apache mod_evaisve.

Sur les distributions basées sur Debian, installez-le en utilisant

apt-get install libapache2-mod-evasive

CentOS / RHEL

yum install mod_evasive

mod_evasive garde une trace des demandes venant d'Apache et interdit IP en utilisant iptables qui passent la valeur de seuil. C'est un outil ultime contre les attaques DoS basées sur HTTP et même les attaques DoS distribuées lorsque vous êtes ciblé par un énorme botnet avec des milliers d'IP différentes.

Il s'exécute en tant que module Apache chargé pendant l'exécution et non en tant que démon distinct.

Cependant, un attaquant intelligent avec le contrôle d'un énorme botnet peut toujours faire tomber votre serveur Web en chronométrant les demandes envoyées par chaque zombie du botnet afin qu'aucune IP ne dépasse jamais la valeur de seuil.

Dans ce cas, vous devez utiliser l'IDS basé sur les anomalies et probablement entraîner le système vous-même. Mais il est très peu probable que cela se produise à moins d'avoir de vrais gros ennemis ou quelqu'un avec un programme d'entreprise.


0

Si vous utilisez linux, utilisez iptables pour limiter le gars à aimer 1 octet / s avec de gros retards et lui faire prendre une éternité pour obtenir une seule requête. S'il est distribué, cela n'aidera pas beaucoup.

Je ne sais pas comment vous le feriez sous Windows, mais vous pouvez trouver des options similaires dans votre routeur ou pare-feu matériel, si vous en avez un.

EDIT: D'accord avec ce qui précède, cela ressemble plus à une question de panne de serveur.


2
Cette technique est parfois utilisée dans les attaques DDoS - par l'attaquant. Faire cela sur le serveur est un peu contre-productif. <_ <
p-static

Il n'est pas vraiment juste de dire qu'il est utilisé dans les attaques DDoS - ce type d'effet est le but des attaques DDoS. Le faire sur le serveur / pare-feu, mais uniquement pour attaquer les ordinateurs est la seule véritable défense (AFAIK).
Unreason

0

Si l'adresse IP du gars est assez constante, vous pouvez créer un HttpModule personnalisé, branchez-le via une modification dans le fichier web.config et ayez un retard quand il est reconnu comme cette adresse IP. Ou vous pouvez lui renvoyer quelque 404 codes ou le rediriger vers un autre endroit.


0

Vous savez qu'ils sont en Inde. Votre site a-t-il des clients indiens importants qui empêcheraient simplement de bloquer toute leur plage d'adresses IP au niveau du pare-feu par incréments jusqu'à ce que le flux s'arrête? Ce n'est certainement pas une solution ferme, mais si vous avez simplement affaire à un `` script kiddie '' typique, cela devrait suffire à les décourager et à les envoyer à une autre cible.

Encore mieux, si c'est à partir d'une seule IP, vous pouvez répondre avec votre propre attaque par déni de service :)


ce n'est pas vraiment une solution, couper la gelée avec une hache. Et B, DDOS n'est pas vraiment une bonne recommandation (même si je suppose que vous plaisantez), aucune raison de a) faire smth illagel b) mettre plus de charge sur votre serveur!
Trufa

0

En plus de la réponse que vous avez reçue, vous souhaiterez sauvegarder votre documentation (journaux, traces) et la fournir à votre prestataire de services. C'est le plus efficace pendant l'incident car votre fournisseur peut être témoin de l'incursion. Même si vous réussissez dans vos mesures, il est important de limiter les tentatives ultérieures et cela aide votre fournisseur à transmettre une demande au fournisseur de services de l'attaquant; sans doute l'action la plus efficace est que le fournisseur de l'attaquant refuse le service à son client, l'attaquant identifié.


0

si vous êtes un programmeur, vous pouvez travailler avec l'événement .net Begin_Request et y mettre votre "sommeil"

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.