web-dev-qa-db-fra.com

Une adresse IP doit-elle être automatiquement inscrite sur la liste noire pour une période donnée après autant de demandes erronées en une minute?

Cela semblait être le meilleur site pour poser cette question sur la base de la tournée, alors allez-y. J'ai un site de blog WordPress pour lequel j'ai développé un thème personnalisé et lorsque quelqu'un atterrit sur le fichier 404.php suite à une mauvaise requête, il envoie un courrier électronique avec la demande, l'adresse distante, l'identité distante et agent utilisateur (agent utilisateur n'est jamais un moteur de recherche/bot) qui est envoyé à une vieille boîte qui a un cron qui construit un fichier CSV pour examen. Parfois, je peux recevoir 50 à 200 demandes de la même adresse IP à ce moment-là en moins de deux minutes. Certaines de ces demandes sont:

url/wp-content/uploads/bc.php
url/wp-content/themes/THEME/style.php?act=1
url/wp-content/themes/THEME/adodb.class.php
url/wp-content/themes/b374k-2.8.php
url/wp-content/plugins/onleinsfay.php
url/wp-content/plugins/bc.php
url/wp-content/plugins/cache/adodb.class.php
url/wp-content/languages/cache/adodb.class.php
url/templates/_hash.php
url/templates/adodb.class.php
url/SocketIontrol.php
url/wp-content/plugins/hungred-post-thumbnail/js/hpt_ini.js
url/wp-content/plugins/invit0r/lib/php-ofc-library/ofc_upload_image.php
url/wp-content/plugins/mailpress/mp-includes/action.php
url/septii.php
url/wp-content/login.php?login=cmd
url/wp-cache.php
url/wp-content/error-log.php
url/upgrade-network.php

Je n'ai pas de plugins sur le site live, j'ai vérifié si un error_Log était généré sur le serveur et ce n'est pas le cas. Avant chaque WP mise à jour, je teste localement mon thème avec la barre de débogage pour vérifier l'absence d'erreurs PHP. J'ai vérifié l'adresse IP avec arin et l'emplacement est parfois différent. J'ai entendu dire que certains sites peuvent tester les thèmes et les plugins que vous utilisez, mais je n'en ai jamais utilisé ni je ne sais comment en identifier un. Je ne sais pas si c'est ce qu'ils font, mais je devrais le faire. J'aborde cela comme un problème?

Une solution que j’avais envisagée avec PHP consistait à définir une adresse IP pour une variable, obtenir l’heure actuelle et compter le nombre de fois que IP atteignait 404.php en une minute. S'ils frappent le fichier 404.php 10 fois, ajoutez leur adresse IP à un fichier txt et laissez le .htaccess référence le. Pour éviter des problèmes de performances sur mon site, je voudrais scripter un événement récurrent toutes les 24 heures qui utilise file_get_content() pour effacer le fichier .txt.

Cependant, je ne sais pas s'il s'agit d'un problème ou si je l'aborde correctement. Devrais-je faire quelque chose à propos de ces mauvaises demandes et y at-il un moyen de le faire qui serait mieux que ma solution?

Il y a quelque temps, j'ai remarqué de nombreux hits sur mes sites Web (Drupal) impliquant Wordpress chemins qui peuvent évidemment être ignorés (rien ne se produit sauf une énorme perte de temps générant 404 pages que le pirate informatique jettera immédiatement ...)

Pour ces sites Web, je lancerais un outil que j'ai écrit (je l'ai toujours), appelé iplock. La source se trouve sur github.com ici .

L'idée est de détecter le mauvais chemin avec n'importe quel moyen que vous avez et ensuite appeler iplock avec cette adresse IP pour le bloquer. iplock peut bloquer tous les accès ou ports spécifiques (par exemple 80 et 443 pour HTTP [S], mais les méchants peuvent être désactivés à 100% de toute façon ... pourquoi les laisseriez-vous à votre serveur de messagerie, DNS, etc. si vous savez déjà que ce sont des hackers?!)

La configuration d'Apache2 nécessite un PHP ou un autre script pouvant être exécuté sur des chemins spécifiques. Par exemple, vous pouvez envoyer ces personnes sur une "page spéciale", mais en interne (c'est-à-dire sans redirection 301 réelle).

RewriteEngine On
RewriteRule "^/wp-" "/iplock.php" [passthrough]

Maintenant, le iplock.php peut être un appel système au binaire iplock avec les paramètres corrects (veuillez tester pour vous assurer qu'il est correct, je ne me teste pas ici ...)

<?php
system("iplock --scheme all --block " . $_SERVER["REMOTE_ADDR"]);

Cela bloquera si rapidement cette adresse IP que vous ne verrez probablement pas plus de 2 occurrences provenant de la même adresse IP avant de voir votre liste iptables -nvx -L vous montrer un compteur en croissance rapide (du moins, c'est mon expérience avec ces gars-là).

Notez que l'outil iplock n'est rien de plus qu'un appel à iptables pour y ajouter une règle. Vous pouvez simplement utiliser iptables c'est un peu plus compliqué, il ne gère pas autant de possibilités et vous devez être root pour l'exécuter. Beaucoup de choses peuvent être compliquées à parcourir en fonction de votre niveau de compétence.

La commande iptables ressemble à ceci dans le all.conf de iplock:

block=[command] -I [chain] [num] -i [interface] -p tcp -m tcp -s [ip] -j DROP
  • [command] est iptables
  • [chain] est INPUT ou une chaîne que vous créez uniquement à cette fin
  • [num] est la position à laquelle la nouvelle règle sera insérée. Dans la plupart des cas, nous aimons ajouter de nouvelles règles au début. Il est plus lent à ajouter, mais beaucoup plus rapide pour bloquer cet utilisateur actuel (il apparaîtra en premier, donc il bloque l'adresse IP rapidement)
  • [interface] est quelque chose comme eth0
  • [ip] est-ce que $_SERVER["REMOTE_ADDR"] adresse

Rappelez-vous simplement que pour des raisons de sécurité, donner à Apache l'autorisation d'exécuter directement iptables est une très mauvaise idée. L'outil iplock masque cette partie, car il utilise des fichiers sécurisés pour exécuter les commandes sécurisées.

Maintenant ... si votre site est un site Wordpress, le blocage de tous les chemins /wp-* ne fonctionnera pas, mais si vous avez une adresse IP statique, vous pouvez autoriser votre adresse IP. faites-le et bloquez quelqu'un d'autre comme indiqué ici. Cela signifie une règle supplémentaire dans votre configuration Apache:

RewriteEngine On
RewriteCond %{REMOTE_ADDR} !^1\.2\.3\.4$
RewriteRule "^/wp-" "/iplock.php" [passthrough]

Cette règle RewriteCond dit: exécutez la commande Rewrite... suivante uniquement si le REMOTE_ADDR ne correspond pas à 1.2.3.4 donc si vous donnez 1.2.3.4 votre adresse IP statique, vous obtiendrez ne pas être bloqué, mais tout le monde le fera.

Vous pouvez également le faire pour les clients, mais cela risque de devenir compliqué, car ils voudront peut-être accéder à leur site Web depuis leur travail, leur domicile, leurs voyages ... Bien que si vous êtes développeur, vous pouvez contourner ce problème en leur demandant d'enregistrer l'IP. adresse de manière automatique en premier (c.-à-d. allez à la page blah.com et cela vous ouvrira la porte de votre adresse IP actuelle, vous pouvez même rendre cette porte temporaire, après environ 8h, fermez-la à nouveau ...)

AVERTISSEMENT: les utilisateurs doivent avoir accès à /wp-content et /wp-plugins pour que le modèle ci-dessus doive être plus restrictif, tel que ^/wp-admin.

Enfin, il pourrait y avoir /wp-... chemins que vous n’utilisez pas (c’est-à-dire qu’il faudrait un plug-in que vous n’avez pas installé). Ceux-ci peuvent être bloqués même sans l'astuce d'adresse IP statique ci-dessus. Ainsi, vous pourriez avoir quelque chose comme:

RewriteEngine On
RewriteRule "^/wp-(language|remote)" "/iplock.php" [passthrough]

qui bloquerait "/ wp-language" et "/ wp-remote". Cependant, je ne pense pas que cela arrive très souvent. Il pourrait également s'agir de chemins plus complexes, tels qu'un chemin de contenu spécifique ou un chemin de plug-in.

1
Alexis Wilke

Celles-ci ressemblent à un profil de vulnérabilité. Fondamentalement, ils recherchent des vulnérabilités à exploiter.

Si vous pouvez les bloquer, vous devriez.

Celles-ci proviennent probablement de procurations ouvertes. Au lieu de masquer votre fichier journal "pirate", je suggère d'utiliser un modèle de pardon. Cela signifie que toute adresse IP qui se comporte pendant une période, une longue période (jours), vous pouvez ensuite la supprimer du fichier. Les autres restent tant qu'ils restent actifs pendant la période de pardon. N'oubliez pas que vous ne bloquez pas les adresses IP dans les blocs d'utilisateurs. Ce sont des ordinateurs compromis susceptibles sur les réseaux hôtes. Il n'y a donc aucun danger à bloquer les utilisateurs. Les pirates n'utilisent plus de blocs d'utilisateurs. Il est trop facile de se faire prendre et avec des scripts automatisés (script kiddie), il est trop facile de lancer le piratage et de le laisser se débrouiller tout seul, sans remonter au pirate.

Je fais quelque chose d'un peu plus sophistiqué, cependant, on dirait que vous avez une solution solide.

4
closetnoc

Vous pouvez utiliser ou créer un fichier texte basé sur les adresses IP que vous pouvez extraire à l'aide de n'importe quel langage de base tel que PHP, puis vérifier si une requête avec une adresse IP particulière arrive également dans un délai très court. vous pouvez définir la période d'environ 300 millisecondes, puis vous pouvez simplement bloquer ce site pour qu'il soit utilisé par une adresse IP particulière

Vous pouvez le faire en donnant simplement un message d'avertissement à l'utilisateur ou au bot qui vous envoie simplement votre demande dans un délai très court.

1
Saurabh Sharma