Hacked ?

S4LVT 4 T0VS 3T 4 T0VT3S, B4ND3 D3 G33KS Wait… Pourquoi j’écris comme ça tout d’un coup?

Vous êtes sûrement au courant de l’incident qu’à rencontré le site. Et oui, le hack, ça n’arrive pas qu’aux autres! Vous voulez en savoir plus? Laissez-mois vous raconter toute l’histoire.

Il y a un mois, un de mes lecteurs m’a signalé que mon site était reconnu comme étant dangereux par son antivirus.

Je criais alors au faux positif. C’est vrai que mon site utilise du javascript, mais seulement pour les miniatures de mes articles. Étrange, mais j’ai laissé l’incident de côté en attendant de trouver une explication logique.

Le mois passe et je ne reçoit plus aucune plainte. Jusqu’au soir du 21/10, où je décide d’aller sur mon site pour vérifier les mises à jours de mes plugins.

Et là, c’est le drame.

Google Chrome m’affiche une page rouge m’indiquant que mon site est dangereux. Selon lui, le site serait sujet à une attaque visant à rediriger les utilisateurs vers un autre site.

safe_browsing

 

En rafraîchissant la page, l’erreur disparaît. J’en déduis donc un bug de Google Chrome, et ne m’inquiète pas plus que ça. Malgré tout, je fais un scan approfondi du site vers lequel on a tenté de me rediriger, et me rend compte que c’est un site ayant un seul et unique but: rediriger ses visiteurs vers la page GooglePlay d’une application mobile coréenne. Profil typique d’un site de spam. Le site est quasiment vide, et a ses ports protégés. Pas de chance.

Le lendemain, mon père (qui héberge son site sur le même serveur que moi) m’envoie un SMS me disant que son site a été piraté! Après en avoir longtemps parlé, il m’envoie les codes suspects retrouvés à la racine de son site (carrément, oui).

  • L’Index.php a été infecté avec du code arbitraire
  • Un fichier diff15.php
  • Un fichier model75.php

Les 2 derniers sont totalement illisibles (Codage avec GLOBALS[]), et l’Index.php est encodé en Base64. Il est donc temps d’enfiler mes gants d’Ingénieur Inverse.

Après plusieurs heures à déchiffrer le code de l’index, j’ai finalement réussi à en tirer quelques chose de clair (ou presque).

Avant:

capture-du-2016-10-22-17-34-42

Après:

Le script commence par prendre toutes les infos nécessaires sur le site: Version d’OS, Version PHP, Arborescence, fichiers/répertoires modifiables, etc. Puis y écrit les 2 fichiers diff15.php et model75.php en fonction des variables précédentes. Le reste du code est très confus, et je n’ai pas les compétences nécessaires pour pouvoir comprendre l’intérêt du code à ce niveau là.

Quand aux 2 fichiers écrits à la racine, ils sont écrit de telle manière qu’il est quasiment impossible de les décoder à la main. Je n’ai cependant pas encore trouvé le moyen d’en extraire quelques informations que ce soit.

capture-du-2016-10-22-17-31-20

Les variables, les fonctions, tout est écrit dans un tel désordre… A se demander comment ce fouillis a bien pu s’exécuter correctement. Grâce à l’analyse de @Kiru_pwd (encore merci à lui!), j’ai pu finalement comprendre que les deux fichiers étaient des Backdoors (ou portes dérobées) encodées à l’aide d’Ascii Escape. Ce mode d’encodage permet de bypass la plupart des Antivirus, et rend le code très difficile à lire.

Mon fichier de configuration générale a cependant été aussi infecté. Pas de chance pour eux, le code malicieux a été placé entre 2 commentaires! 🙂

Après une journée (+nuit) à travailler d’arrache pied avec mon père (qui héberge mon site sur son serveur), nous en sommes arrivés à la douloureuse conclusion:

Le serveur entier était compromis

En effet, le serveur n’héberge pas que nos 2 sites personnels, mais d’autres sites professionnels, ne tournant pas sous WordPress. Eux aussi étaient infectés. Ce n’était donc pas une faille WordPress, ni des plugins, mais bien système.

Nous avons donc immédiatement contacté notre hébergeur, et avons nettoyé le serveur de fond en comble. Tous les sites étaient plus ou moins touchés. Certains avaient des scripts vérolés de partout, et d’autres n’en avaient même pas…

Conclusion

Il ne reste à ce jour aucune trace des pirates. Après cette péripétie des plus fatigantes, je suis persuadé que c’est un bot qui a pris la main sur le serveur. En effet, les fichiers malicieux étaient tous les mêmes, et avaient des noms générés selon un pattern bien simple:

{Nom de fichier système normal}+{Nombre aléatoire JQA 99}+ ».php »

J’ai tenu à faire cet article pour vous sensibiliser à ce problème qui touche tous les propriétaires de sites web. Faites vos mises à jours, des backups, des vérifications régulières de vos fichiers et de votre arborescence. Et si par malheur une aventure de ce genre vous arrivait, pensez à changer tous vos mots de pass immédiatement!

Le blog est maintenant 100% opérationnel, vous pouvez y naviguer sereinement! De plus, le site dispose maintenant d’un certificat HTTPS! (Merci Let’s Encrypt <3)

img_20161024_012038

encrypt-all-the-things1

Merci de votre lecture, surfez en paix et Stay Tuned! 🙂