82 votes

Gérer les attaques HTTP w00tw00t

J'ai un serveur avec apache et j'ai récemment installé mod_security2 parce que je suis souvent attaqué par cela :

Ma version d'apache est apache v2.2.3 et j'utilise mod_security2.c

Voici les entrées du journal des erreurs :

[Wed Mar 24 02:35:41 2010] [error] 
[client 88.191.109.38] client sent HTTP/1.1 request without hostname 
(see RFC2616 section 14.23): /w00tw00t.at.ISC.SANS.DFind:)

[Wed Mar 24 02:47:31 2010] [error] 
[client 202.75.211.90] client sent HTTP/1.1 request without hostname 
(see RFC2616 section 14.23): /w00tw00t.at.ISC.SANS.DFind:)

[Wed Mar 24 02:47:49 2010] [error]
[client 95.228.153.177] client sent HTTP/1.1 request without hostname
(see RFC2616 section 14.23): /w00tw00t.at.ISC.SANS.DFind:)

[Wed Mar 24 02:48:03 2010] [error] 
[client 88.191.109.38] client sent HTTP/1.1 request without hostname
(see RFC2616 section 14.23): /w00tw00t.at.ISC.SANS.DFind:)

Voici les erreurs du journal d'accès :

202.75.211.90 - - 
[29/Mar/2010:10:43:15 +0200] 
"GET /w00tw00t.at.ISC.SANS.DFind:) HTTP/1.1" 400 392 "-" "-"
211.155.228.169 - - 
[29/Mar/2010:11:40:41 +0200] 
"GET /w00tw00t.at.ISC.SANS.DFind:) HTTP/1.1" 400 392 "-" "-"
211.155.228.169 - - 
[29/Mar/2010:12:37:19 +0200] 
"GET /w00tw00t.at.ISC.SANS.DFind:) HTTP/1.1" 400 392 "-" "-" 

J'ai essayé de configurer le mod_security2 comme ceci :

SecFilterSelective REQUEST_URI "w00tw00t\.at\.ISC\.SANS\.DFind"
SecFilterSelective REQUEST_URI "\w00tw00t\.at\.ISC\.SANS"
SecFilterSelective REQUEST_URI "w00tw00t\.at\.ISC\.SANS"
SecFilterSelective REQUEST_URI "w00tw00t\.at\.ISC\.SANS\.DFind:"
SecFilterSelective REQUEST_URI "w00tw00t\.at\.ISC\.SANS\.DFind:\)"

Le problème dans le mod_security2 est que SecFilterSelective ne peut pas être utilisé, cela me donne des erreurs. À la place, j'utilise une règle comme celle-ci :

SecRule REQUEST_URI "w00tw00t\.at\.ISC\.SANS\.DFind"
SecRule REQUEST_URI "\w00tw00t\.at\.ISC\.SANS"
SecRule REQUEST_URI "w00tw00t\.at\.ISC\.SANS"
SecRule REQUEST_URI "w00tw00t\.at\.ISC\.SANS\.DFind:"
SecRule REQUEST_URI "w00tw00t\.at\.ISC\.SANS\.DFind:\)"

Même cela ne fonctionne pas. Je ne sais plus quoi faire. Quelqu'un a un conseil à me donner ?

Mise à jour 1

Je vois que personne ne peut résoudre ce problème en utilisant mod_security. Jusqu'à présent, l'utilisation de ip-tables semble être la meilleure solution, mais je pense que le fichier deviendra extrêmement volumineux, car l'adresse IP change plusieurs fois par jour.

J'ai trouvé deux autres solutions. Quelqu'un peut-il me dire si elles sont bonnes ou non ?

  1. La première solution qui me vient à l'esprit est d'exclure ces attaques de mes journaux d'erreurs apache. Cela me permettra de repérer plus facilement d'autres erreurs urgentes au fur et à mesure qu'elles se produisent et de ne pas avoir à cracher dans un long journal.

  2. La deuxième option est meilleure, je pense, et consiste à bloquer les hôtes qui ne sont pas envoyés de la bonne manière. Dans cet exemple, l'attaque w00tw00t est envoyée sans nom d'hôte, donc je pense que je peux bloquer les hôtes qui ne sont pas dans la forme correcte.

Mise à jour 2

Après avoir parcouru les réponses, je suis arrivé aux conclusions suivantes.

  1. Avoir une journalisation personnalisée pour apache consommera des ressources inutiles, et s'il y a vraiment un problème, vous voudrez probablement regarder le journal complet sans rien manquer.

  2. Il est préférable d'ignorer les résultats et de se concentrer sur une meilleure façon d'analyser vos journaux d'erreurs. L'utilisation de filtres pour vos journaux est une bonne approche pour cela.

Dernières réflexions sur le sujet

L'attaque mentionnée ci-dessus n'atteindra pas votre machine si vous disposez au moins d'un système à jour, vous n'avez donc aucun souci à vous faire.

Au bout d'un certain temps, il peut être difficile de distinguer les fausses attaques des vraies, car les journaux d'erreurs et d'accès deviennent extrêmement volumineux.

Empêcher cela de quelque manière que ce soit vous coûtera des ressources et c'est une bonne pratique de ne pas gaspiller vos ressources pour des choses sans importance.

La solution que j'utilise maintenant est Linux logwatch . Il m'envoie des résumés des journaux, qui sont filtrés et regroupés. De cette façon, vous pouvez facilement séparer l'important de l'insignifiant.

Merci à tous pour votre aide, et j'espère que cet article pourra être utile à quelqu'un d'autre.

2voto

Lee Theobald Points 2512

Je pense que la raison pour laquelle mod_security ne fonctionne pas pour vous est qu'Apache n'a pas été capable d'analyser les requêtes elles-mêmes, elles sont hors spécifications. Je ne suis pas sûr que vous ayez un problème ici - Apache enregistre les merdes bizarres qui se produisent sur le net, s'il ne les enregistre pas, vous ne serez même pas conscient qu'elles se produisent. Les ressources nécessaires pour enregistrer les requêtes sont probablement minimes. Je comprends que ce soit frustrant que quelqu'un remplisse vos journaux - mais ce sera encore plus frustrant si vous désactivez la journalisation pour découvrir que vous en avez vraiment besoin. Par exemple, quelqu'un s'est introduit dans votre serveur Web et vous avez besoin des journaux pour montrer comment il s'est introduit.

Une solution consiste à configurer la journalisation des erreurs via syslog, puis à utiliser rsyslog ou syslog-ng pour filtrer spécifiquement et écarter les violations de RFC concernant w00tw00t. Ou alternativement, vous pourriez les filtrer dans un fichier journal séparé simplement pour que votre journal d'erreurs principal soit facile à lire. Rsyslog est incroyablement puissant et flexible à cet égard.

Donc dans httpd.conf vous pourriez faire :

ErrorLog syslog:user 

alors dans rsyslog.conf vous pourriez avoir :

:msg, contains, "w00tw00t.at.ISC.SANS.DFind" /var/log/httpd/w00tw00t_attacks.log

Attention, cette approche utilisera en fait plusieurs fois plus de ressources qu'à l'origine l'enregistrement direct dans un fichier. Si votre serveur web est très occupé, cela peut devenir un problème.

De toute façon, la meilleure pratique consiste à envoyer tous les journaux à un serveur de journalisation distant dès que possible, ce qui vous sera utile en cas d'effraction, car il est beaucoup plus difficile d'effacer la piste d'audit de ce qui a été fait.

Le blocage IPTables est une idée, mais vous risquez de vous retrouver avec une liste de blocage iptables très importante, ce qui peut avoir des répercussions sur les performances en soi. Les adresses IP présentent-elles un modèle ou proviennent-elles d'un vaste botnet distribué ? Il faut qu'il y ait X % de doublons pour que vous puissiez tirer profit d'iptables.

1voto

Cœur Points 325

Vous dites dans la mise à jour 2 :

Problème qui subsiste Le problème qui subsiste est le suivant. Ces attaques proviennent de bots qui recherchent certains fichiers sur votre serveur. Cet analyseur particulier recherche le fichier /w00tw00t.at.ISC.SANS.DFind :).

Maintenant, vous pouvez simplement l'ignorer, ce qui est le plus recommandé. Le problème reste que si ce fichier se trouve un jour sur votre serveur, vous aurez des problèmes.

D'après ma réponse précédente, nous avons compris qu'Apache renvoie un message d'erreur en raison d'une requête HTML 1.1 mal formée. Tous les serveurs web supportant HTTP/1.1 devraient probablement retourner une erreur lorsqu'ils reçoivent ce message (je n'ai pas vérifié la RFC - peut-être que la RFC2616 nous le dit).

Avoir w00tw00t.at.ISC.SANS.DFind : sur votre serveur quelque part ne signifie pas mystiquement "vous avez des problèmes"... Si vous créez le fichier w00tw00t.at.ISC.SANS.DFind : dans votre DocumentRoot ou même DefaultDocumentRoot, cela n'a pas d'importance... le scanner envoie une requête HTTP/1.1 cassée et Apache dit "non, c'est une mauvaise requête... au revoir". Les données contenues dans le fichier w00tw00t.at.ISC.SANS.DFind : ne seront pas servies.

L'utilisation de mod_security dans ce cas n'est pas nécessaire, sauf si vous le voulez vraiment (aucun intérêt ?)... dans ce cas, vous pouvez regarder Parcheando manuellement (lien dans l'autre réponse).

Vous pouvez également envisager d'utiliser la fonction RBL du module Security. Il existe peut-être une RBL en ligne qui fournit des adresses IP w00tw00t (ou d'autres adresses IP malveillantes connues). Cela signifie toutefois que mod_security effectue une recherche DNS pour chaque requête.

1voto

Kreker Points 408

Pourquoi ne pas ajouter une règle à la modsécurité ? Quelque chose comme ceci :

   SecRule REQUEST_URI "@rx (?i)\/(php-?My-?Admin[^\/]*|mysqlmanager
   |myadmin|pma2005|pma\/scripts|w00tw00t[^\/]+)\/"
   "severity:alert,id:'0000013',deny,log,status:400,
   msg:'Unacceptable folder.',severity:'2'"

1voto

Yaros Points 3

Je constate que la plupart des solutions sont déjà couvertes ci-dessus. le client a envoyé une requête HTTP/1.1 sans nom d'hôte Les attaques visent directement votre serveur. Il existe de nombreuses tentatives d'empreintes digitales et/ou d'exploitation du système de réseau qui précède votre serveur, par exemple en utilisant.. :

client sent HTTP/1.1 request without hostname (see RFC2616 section 14.23): /tmUnblock.cgi

pour cibler les routeurs Linksys, etc. Il est donc parfois utile d'élargir son champ d'action et de répartir ses efforts de défense entre tous les systèmes à parts égales, c'est-à-dire : mettre en place des règles pour les routeurs, mettre en place des règles pour les pare-feu (si tout va bien, votre réseau en a un), mettre en place des règles pour les pare-feu et les tables IP des serveurs et les services associés, c'est-à-dire mod_security, fail2ban, etc.

1voto

Que pensez-vous de cela ?

iptables -I INPUT -p tcp --dport 80 -m string --to 70 --algo bm --string 'GET /w00tw00t.at.ISC.SANS.DFind' -j DROP
iptables -I INPUT -p tcp --dport 80 -m string --to 70 --algo bm --string 'GET /w00tw00t.at.ISC.SANS.DFind' -j LOG --log-level 4 --log-prefix Hacktool.DFind:DROP:

fonctionne bien pour moi.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X