(modifié le 17 octobre 2018 à 16:21)

J'ai été averti sur twitter il y a quelques jours par un lecteur du blog qui est tombé sur un site malveillant qui clonait Blogmotion (merci @MealinPUI!)

J'ai donc été obligé de trouver une méthode pour bloquer ce serveur. Je vous propose ici ma méthode d'analyse avec du PHP puis de blocage du serveur au niveau d'Apache.

Analyse

C'est un nom de domaine gratuit du Centreafrique en ".cf" qui est utilisé, déjà ça annonce la couleur. Mais ils le font aussi avec des ".ga", gratuits également et correspondant à l'État de Géorgie, ".gq" pour la Guinée-Équatoriale... bref!

Lorsque l'on va sur ce site on arrive sur une copie de Blogmotion, enfin si l'on y regarde de pas trop près. Au début je me suis demandé si je n'avais pas été effectivement victime d'un piratage du code source tellement l'affichage était proche. Certes on peut cloner un site en html statique avec tous les médias, mais c'est peu fréquent.

Sauf que dans la page les mots et phrases ne veulent plus rien dire, ils sont tous remplacés par des liens publicitaires. J'ai au début cru que c'était une copie hors ligne et que donc je ne pouvais rien faire, ou pas grand chose. J'ai donc cherché dans les DNS qui était l'hébergeur, mais là encore les petits malins utilisent les services de Cloudflare qui masque complètement l'hébergeur réel.

Je préfère ne pas laisser cette situation trop perdurer car cela peut porter préjudice au référencement ce genre de clones, bien que normalement Google soit assez "intelligent" pour faire la part des choses.

Je contacte donc le service abuse du registrar Freenom et de Cloudflare pour leur signaler. Cloudflare a été très rapide (quelques minutes) en me disant qu'ils ne pouvaient pas donner l'IP ou nom de l'hébergeur mais qu'ils lui transféraient mon signalement.

En attendant, je continue mon investigation. Vu le temps de chargement des pages je trouve ça trop lent pour du static, même avec un serveur en carton. Je crée donc un nouveau dossier avec une page html bidon sur Blogmotion, et je saisis le chemin de ce dossier à la fin du domaine malveillant. Surprise : la fausse page d'affiche !

Cette fois c'est clair, tout se fait à la volée, avec une bête récupération de la page (comme un wget). En gros c'est un reverse proxy avec un script qui altère le contenu HTML à la volée de balises contenant un lien.

Récupération de l'IP du serveur

S'il y a un reverse proxy alors je peux récupérer son IP en PHP avec la variable $_SERVER["remote_addr"].

Voici le code PHP qui permet ceci :

function get_client_ip_env() {
    $ipaddress = '';
    if (getenv('HTTP_CLIENT_IP'))
        $ipaddress = getenv('HTTP_CLIENT_IP');
    else if(getenv('HTTP_X_FORWARDED_FOR'))
        $ipaddress = getenv('HTTP_X_FORWARDED_FOR');
    else if(getenv('HTTP_X_FORWARDED'))
        $ipaddress = getenv('HTTP_X_FORWARDED');
    else if(getenv('HTTP_FORWARDED_FOR'))
        $ipaddress = getenv('HTTP_FORWARDED_FOR');
    else if(getenv('HTTP_FORWARDED'))
        $ipaddress = getenv('HTTP_FORWARDED');
    else if(getenv('REMOTE_ADDR'))
        $ipaddress = getenv('REMOTE_ADDR');
    else
        $ipaddress = 'UNKNOWN';
 
    return $ipaddress;
}

$ip = @get_client_ip_env();
@file_put_contents('ip.log', date('H\:i:s') . ' ' . $ip . "\r\n", FILE_APPEND);

Ensuite j'accède à mon script depuis le serveur malveillant : http://toutpourri.lol/fake/coucou.php

et je récupère l'IP du serveur dans ip.log : 212.129.39.xxx

Résultat : j'obtiens une IP sur laquelle je fais un whois (j'aime bien dawhois.com). Surprise l'IP appartient à un bloc ipv4 de chez l'hébergeur français Online. Je signale donc l'IP au service abuse de Online : https://abuse.online.net mais comme nous sommes dimanche je n'aurai pas de réponse avant lundi :

Bonjour,

Je vous signale un abus provenant du site toutpourri.lol dont l'IP du serveur est 212.129.39.xxx qui fait partie des blocs IP qui vous sont attribués.

Ce site toutpourri.lol a cloné un site (https://blogmotion.fr) et remplace des mots à la volée dans le contenu des pages.

Un blocage a été mis en place côté serveur par rapport à cette IP. Toutefois je vous remercie de bien vouloir bloquer cet hébergement malveillant.

J'ai également notifié le registrar (freenom) ainsi que cloudflare qui va également prendre contact avec vous car leur service de reverse-proxying est utilisé.

Merci par avance
Cordialement

Code plus light si besoin :

<?php
echo '<pre>';
print_r($_SERVER);
echo '</pre>';
?>

Blocage du serveur

Maintenant que je connais l'IP du serveur je peux la bloquer, mais pour rigoler un peu je préfère rediriger le serveur vers un compteur de visite (merci free et son service de pages persos qui tourne encore!) pour chaque page appelée. Au passage je connaitrais aussi le trafic qui arrive via ce site malveillant (malinx !).

Blogmotion est hébergé sur un serveur mutualisé chez Yulpa qui utilise apache pour servir le contenu web. Je décide donc de rediriger tout ce qui provient de l'IP 212.129.39.xxx grâce à une règle de ré-écriture dans un fichier .htaccess :

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REMOTE_ADDR} ^212\.129\.39\.xxx [NC]
RewriteRule ^.* http://perdu.com [R,L]
</IfModule>

Important : ce code doit être au tout début de votre fichier .htaccess si vous aviez déjà des choses dedans (WordPress ou autre), sinon il risque de ne pas être interprété à causes des directives précédents ayant déjà un drapeau de fin.

Note : Je vous conseille d'essayer la directive sur un sous-dossier créé pour cette occasion histoire de ne pas couper tout l'accès à votre site en cas d'erreur dans la directive ou de son interprétation par le serveur Apache (erreur 500...). Si vous êtes sur nginx il faudra adapter le code, n'hésitez pas à le poser en commentaire.

J'ai remarqué que ce script était inefficace pour la racine du site, probablement à cause d'un système de cache du reverse proxy. Pour s'assurer que le code fonctionne il faut créer un autre sous-dossier et y accéder depuis le domaine malveillant : ndd-pourri.lol/tototest

Astuce : si ça ne marche pas essayez avec votre propre ip (monip.org) pour vérifier si votre serveur Apache accepte la directive

Enfin, si vous placez la directive dans un vhost, pensez à bien recharger le service apache/httpd.

Conclusion

Le lundi matin vers 10h j'ai eu la réponse d'Online

Celle-ci qui contenait la réponse du client :

Hello.
All what can be copied the site deleted from site and domain. DNS problems on the server fixed.
We're apologize for the incoviniences.

Effectivement, ce n'est plus Blogmotion qui apparaît lorsque l'on va sur le site, mais c'est un autre site qui se fait piller... je ne sais pas si c'est mieux mais ça ne me concerne plus. D'ailleurs encore aujourd'hui le site est actif...

J'espère que cette petite mésaventure, son analyse et sa solution serviront à d'autres même si je ne le vous souhaite pas 🙂

Auteur : Mr Xhark

Fondateur du blog et passionné par les nouvelles techno, suivez-moi sur twitter