David Madore's WebLog: Mon serveur Web se fait massivement spammer

Index of all entries / Index de toutes les entréesXML (RSS 1.0) • Recent comments / Commentaires récents

Entry #2400 [older|newer] / Entrée #2400 [précédente|suivante]:

(jeudi)

Mon serveur Web se fait massivement spammer

Un des trucs vraiment affligeants avec Internet, c'est qu'on peut être absolument certain que, quoi qu'on y mette, appareil, application, site Web, il y a des petits cons ou des gros mafieux qui vont tenter de s'en servir, soit comme cible, soit comme arme, pour leurs attaques sur ce bien collectif qu'est Internet. Cela a d'ailleurs donné lieu à une discussion à propos de l'Internet des Objets dans les commentaires sur une entrée récente, discussion un peu hors-sujet par rapport à l'entrée principale. ((L'Internet des Objets, ou : comment le fait que tout le monde veuille avoir une télé ou une théière connectée, sans même parler de combien c'est merdique, va conduire à des attaques DDoS massives qui finiront par casser complètement Internet — et avec lui tous les services qui en dépendent, c'est-à-dire le téléphone, la télévision, le réseau de distribution de l'électricité, et avec lui les hôpitaux, les feux de circulation, le réseau de distribution de l'eau, et finalement la civilisation. Bon, sérieusement, je suis un peu moins pessimiste maintenant que je l'ai été à ce sujet, mais je trouve quand même ces questions très préoccupantes, notamment par le fait qu'en-dehors des informaticiens personne ne semble en avoir la moindre conscience. Accessoirement, immédiatement après que j'avais exprimé ce souci, on a constaté deux des plus grosses attaques DDoS jamais enregistrées, toutes deux liées à l'Internet des Objets, et ce n'est pas près de finir. Fin de la digression.)) Je ne suis généralement pas du genre violent, mais j'avoue que j'aimerais énormément avoir le super pouvoir de défoncer la gueule de tous les sales petits connards qui mènent ou participent volontairement à ce genre d'attaques, ça me donnerait un plaisir assez jouissif.

Bref. Quand on écrit des protocoles réseau ou des sites Web ou ce genre de choses, c'est qu'il ne faut pas seulement penser à la sécurité de ce qu'on écrit, il faut aussi penser à la sécurité des autres, et se méfier par exemple des attaques de type rebond/amplification, cross-site scripting, et toute une collection de tracas du même genre. Et même quand on n'a pas à faire à des attaques proprement dites, on aura au moins affaire à du spam, qui ne concerne bien sûr pas que le mail. Le spam, c'est-à-dire par exemple des robots qui postent automatiquement des commentaires superficiellement crédibles sur des entrées de blogs aléatoires dans l'espoir d'attirer des visiteurs à suivre des liens. (Je reçois un certain nombre de tentatives de ce genre, mais le fait que mon système de blog et de commentaires soient faits maison me protège au moins contre les robots ciblant les moteurs les plus standards, et j'ai mis une petite protection contre les robots génériques. Il reste un petit nombre de commentaires spammesques, probablement postés avec des coprocesseurs indiens, que je filtre à la main.)

Pourquoi je raconte tout ça, déjà ? Ah oui. Quand j'avais ouvert le système de commentaires de ce blog il y a longtemps, j'avais explicitement prévu qu'il permette de commenter non seulement les entrées de mon blog, mais n'importe quelle page de mon site et, en fait, n'importe quelle page Web (ou à vrai dire, n'importe quelle URL valable) ; je pensais même initialement mettre en place un serveur d'annotations Web, mais bon, ça s'est rapidement révélé trop pénible. Toujours est-il que cette fonctionnalité existait volontairement, même si certains ont cru y voir un trou de sécurité. Comme les commentaires sont de toute façon modérés, ce n'est pas vraiment problématique en soi, tant que je ne recevais pas des masses de commentaires bidon. (De toute façon, ce système de commentaire est un vieux bouzin dont je voudrais me débarrasser, mais que je n'ai toujours pas trouvé le temps de refaire.)

Reste quand même qu'on pouvait interroger les commentaires sur une URL quelconque : il suffisait de l'entrer dans le champ Show comments on en bas de chaque page de commentaires (vous ne le verrez pas, je l'ai retiré, de toute façon il ne marchait essentiellement plus) : si on tapait, disons, http://www.buyviagranow.spam dans ce champ, cela conduisait à une page avec une URL comme http://www.madore.org/cgi-bin/comment.pl/showcomments?href=http%3a%2f%2fwww.buyviagranow.spam (ne suivez pas ce lien !), contenant essentiellement juste un titre, Comments on http://www.buyviagranow.spam, ce dernier étant un lien vers l'adresse en question. Apparemment c'est une mauvaise idée, pas tellement en soi, mais parce que c'est quelque chose que les spammeurs recherchent (des pages Web dynamiques permettant de lier vers n'importe quelle page Web ; ou peut-être juste n'importe quelle script prenant un paramètre href qui accepte n'importe quoi ?).

Je ne sais pas exactement pourquoi. Est-ce qu'ils cherchent à les soumettre à un moteur de recherche pour faire croire qu'il y a plein de liens qui pointent vers eux ? À les envoyer à des humains un peu naïfs ? À espérer que les liens ressortent d'une analyse des logs, peut-être faite automatiquement ? Ou que ces logs soient mis en ligne directement ? Je ne sais pas précisément.

Toujours est-il que je suis inondé, depuis je ne sais combien de temps, par des requêtes (automatisées) vers des adresses comme je viens de dire ci-dessus. Les requêtes, plus exactement, ressemblent à ceci (dans le format des logs d'Apache) :

203.0.113.42 - - [13/Oct/2016:14:28:57 +0200] "GET /cgi-bin/comment.pl/showcomments?href=http://buyviagranow.spam HTTP/1.1" 200 7717 "http://www.youtube.com/redirect?q=www.madore.org/cgi-bin/comment.pl/showcomments?href=http://buyviagranow.spam" "Mozilla/5.0 (Windows NT 6.3; WOW64; rv:45.0) Gecko/20100101 Firefox/45.0"

Il y en a (ou il y en avait, avant que je prenne des mesures) environ 3 par seconde, ce qui représente quatre ou cinq fois plus que toutes les autres requêtes à mon serveur Web réunies. Je m'en suis rendu compte parce qu'à un moment ces requêtes ont saturé les accès à ma base de données (il fallait une connexion pour extraire la liste des commentaires sur chaque URL demandée — toujours vide, bien sûr). Connards.

Toutes ces requêtes ont exactement le même User-Agent annoncé, Mozilla/5.0 (Windows NT 6.3; WOW64; rv:45.0) Gecko/20100101 Firefox/45.0. Ceci fait référence à une version de Firefox qui a six mois (distribuée en mars 2016), donc je suppose qu'un petit malin a écrit et distribué un script, ou constitué un mini botnet, à ce moment-là. En tout cas, ce ne sont pas des requêtes faites légitimement par des humains utilisant vraiment un navigateur Web.

L'adresse demandée est toujours de la forme /cgi-bin/comment.pl/showcomments?href=urlurl est une URL « spammesque », et l'immense majorité des IP en question n'ont fait aucune autre sorte de requête sur mon site Web (en tout cas dans la même journée). L'adresse annoncée comme Referer est une adresse de redirection d'un site Web public bien connu, typiquement YouTube (http://www.youtube.com/redirect?q=url2) ou un moteur de recherche (http://notbig.ru/engine/redirect.php?url=url2) ou des choses de ce genre (http://bookmarks.yahoo.co.jp/url/url2). J'écris url2 ici, parce que cette URL est la totalité de celle qui est demandée (i.e., url2 = http://www.madore.org/cgi-bin/comment.pl/showcomments?href=urlurl est elle-même l'URL « spammesque »). Quant à cette URL spammesque, elle peut être très diverse : je ne vais pas donner d'exemple complet (et je n'en ai suivi aucun pour voir ce qu'il y a au bout), mais c'est généralement un peu long, presque jamais un simple domaine aussi évident que buyviagranow.spam : parfois ce sont visiblement des liens vers des profils de forums en-ligne qui ont dû être pourris de spam, parfois des requêtes vers des moteurs de recherche qui vont sans doute retourner du spam, parfois directement des pages de pub (bon, je donne juste un exemple : how-to-buy-manforce-without-prescription dans le domaine trusmiles.in).

Les adresses IP qui les émettent sont variées : sur une journée (24h) où j'ai reçu 268228 telles requêtes, elles provenaient de 15180 adresses distinctes, dont 9840 ayant émis une seule requête du genre, 2214 en ayant émis exactement deux, 602 trois, 310 quatre, 195 cinq, 552 entre six et neuf, 1062 entre dix inclus et cent exclu, 365 entre cent inclus et mille exclu, et 40 plus de mille requêtes chacune (avec la palme de 9677 requêtes pour la seule IP 46.149.95.102, située en Ukraine). Cette distribution n'est pas poissonnienne : il y a plus d'IP récurrentes qu'on en attendrait d'un processus de Poisson (je ne sais pas si cette surreprésentation des requêtes multiples vient surtout de ce qu'il y a des IP qui agrègent beaucoup de clients ou de ce que le processus est véritablement non-poissonien au niveau des sources), mais si on fait l'hypothèse qu'il l'est au moins grossièrement, on peut estimer qu'il y a quelque part entre 20000 et 60000 machines impliquées dans le spam en question.

Il y avait, incluses dans le tas de 15180 adresses, 81 adresses IPv6 distinctes (avec la palme de 87 requêtes pour l'IP 2a03:4a80:3:43d:43d:d518:4783:593f ; comme les IPv6 ne sont pas NATées et que celle-ci est visiblement tirée au hasard, c'est une machine unique, ça veut bien dire qu'il y a des sources qui insistent plus souvent que d'autres) ; j'ai quelques IPv6 non-anonymes, genre 2001:4c08:200d:0:221:5eff:fe6f:2150 (trente-huit requêtes ; c'est une machine en Allemagne, sans doute en Bavière, ayant une carte réseau IBM d'adresse MAC 00:21:5e:6f:21:50), mais je ne crois pas pouvoir en faire grand-chose.

Maintenant, je ne sais pas quel est le but de tout ça. Il va de soi que ce n'est pas une attaque au sens propre (mon serveur Web ne résisterait absolument pas à un DDoS même très modéré), mais c'est quand même agaçant, fût-ce par la pollution que ça entraîne dans mes logs HTTP.

Je ne sais pas non plus si les propriétaires des ordinateurs d'où les requêtes émanent les font volontairement ou pas (i.e., est-ce qu'ils font tourner un script dans le but de spammer, ou est-ce qu'ils font involontairement partie d'une sorte de petit botnet).

Quelques uns des liens vers mes pseudo pages de commentaires vides ont été postés en ligne, comme une recherche Google le démontre où il y a bien une certaine quantité de pages de spam ; mais l'écrasante majorité des requêtes que je reçois, comme je l'ai dit, ne vient pas d'humains qui suivaient des liens vers des pages de commentaires sur des URL spammesques, mais simplement de robots, et sans doute d'un unique script.

À défaut de comprendre, j'ai pris deux mesures. D'abord, ce qui était évident, interdire (renvoyer un 403) toute page de commentaire qui ne soit pas sur mon domaine : je ne sais pas si le script qui me spamme consulte même le code de retour, mais au moins la réponse est très courte et se fait sans consulter la base de données sur mon serveur, donc ça évitera toujours ça. D'autre part, bannir complètement, au niveau IP, toute IP qui fait plus que deux requêtes de ce type (avec le Referer que j'ai identifié comme celui du script) : ça c'est un peu plus discutable, parce que des utilisateurs légitimes peuvent être agrégés (NATés) avec les spammeurs dont je veux me débarrasser, mais bon, je ne bannis chaque IP que pour une semaine.

De façon générale, l'Internet me fait penser à un système biologique, où le parasitisme prend toute la place qu'il peut (et parfois déborde sur des hôtes que le parasite ne peut pas utiliser pour se reproduire, mais qu'il arrive quand même à incommoder, voire à tuer). Même sans compter l'« attaque » dont je parle ci-dessus, la proportion des requêtes sur mon serveur Web qui sont vraiment « intéressantes » (émanant de vrais humains qui veulent vraiment lire quelque chose que j'ai écrit) est très faible ; il en va de même de mon serveur de mails : l'écrasante majorité des connexions SMTP qui lui parviennent sont des tentatives de recherches de relais ouverts (même pas du spam pour moi : du spam pour d'autres personnes qu'on essaie de faire transiter par chez moi). Cela me fait penser un peu au fait que, si on regarde l'ensemble des cellules dans un être humain, la proportion qui sont des vraies cellules humaines est très petite (la majorité étant des cellules bactériennes — parasites, commensales ou symbiotes). Je parle là de proportion en nombre de cellules, parce que, en masse, heureusement, les cellules humaines sont quand même majoritaires. Comme il est possible que les « vrais » transferts de données légitimes soient encore majoritaires dans la bande passante de mon serveur ; c'est loin d'être certain, cependant.

↑Entry #2400 [older|newer] / ↑Entrée #2400 [précédente|suivante]

Recent entries / Entrées récentesIndex of all entries / Index de toutes les entrées