Piratage de mes sites persos : retour d’expérience

Quelle ne fut pas ma surprise il y a quelques jours, lorsque mon navigateur m’a affiché un joli message d’alerte alors que je me rendais sur mon site Web personnel ! Oui-oui, celui-là même sur lequel vous êtes en train de me lire… Quelques jours plus tard, c’est au tour d’un autre site Web que je gère de se faire pirater : Shorinji Kempo Le Vexin.

Quoi, ma page ! Qu'est-ce qu'elle a ma page ?!
Quoi, ma page ! Qu'est-ce qu'elle a ma page ?!

Mais pourquoi sont-ils aussi méchants ? Comment font-ils ? Qui cela impacte et comment se prémunir ? En cas de pépin, comment réparer ? Dans la suite de ce long billet (d’ailleurs ce n’est plus un billet, c’est carrément une ramette !), à travers l’exemple de ma propre expérience, je tâcherai d’expliquer tous les différents aspects de ce genre de piratage, c’est-à-dire ce que cela implique pour le hacker, les pontes du Web, les visiteurs, et bien-sûr le blogueur lui-même.

Les motivations d’un pirate

En voilà un qui s’est dit, un vendredi en fin d’après-midi :

Tiens, je m’ennuie, alors si je m’amusais à injecter un code malicieux sur un blog WordPress insignifiant ?

Rien de plus simple en fait, quand on a une idée du nombre de failles potentielles sur l’ensemble d’un système d’information, quand on dispose d’outils adaptés et quand on est déterminé. La détermination est souvent liée à deux objectifs :

  1. la rémunération par d’autres personnes mal intentionnées (hackers, publicitaires, mafias…)
  2. la prise de contrôle d’ordinateurs à distance pour commettre d’autres âneries ailleurs sur Internet.

Le cas du piratage de mes blogs entre certainement dans la deuxième catégorie, car les deux hacks (en tous points identiques) visaient à faire télécharger par les internautes (à leur insu, sinon c’est pas drôle) un programme vérolé. Le genre de programme qui aurait pu aussi bien « écouter » les actions de l’utilisateur (pratique pour choper les coordonnées bancaires notamment) que mettre à contribution le PC infecté dans une attaque massive dans le but de mettre en rade les serveurs d’une quelconque institution.

Le code malveillant injecté
Le code malveillant injecté

Mise en oeuvre du hack

Tout apprenti-hacker doit d’abord identifier une faille de sécurité sur le système cible. Certaines failles de sécurité découlent parfois de plusieurs choix (ou contraintes) techniques. C’est bien-sûr le cas ici. Le hacker a en effet attaqué mes deux blogs parce qu’ils fonctionnent sous le CMS WordPress. Je gère pourtant quatre blogs WordPress, et les deux autres n’ont pas été attaqués ; ceci certainement pour l’une de ces deux raisons :

  1. La version de WordPress utilisée sur mes sites piratés n’est plus à jour, contrairement aux deux autres. Or un logiciel non mis à jour présente la plupart du temps des failles de sécurité exploitables.
  2. Les deux blogs cibles sont hébergés sur les pages perso de Free, dont l’accès par FTP est facilement déterminable : le login de connexion est identique au nom du site Web, il ne reste plus qu’à forcer le mot de passe FTP, ce qui peut durer seulement deux ou trois heures lorsque celui-ci est trop simpliste. Cela m’est arrivé par le passé sur mon serveur perso, et d’ailleurs pas seulement le FTP, mais aussi le SSH… Oui, j’avais ouvert pas mal de trucs… C’est pas que j’apprends pas de mes erreurs, hein ! C’est juste que j’aime en faire le tour… :mrgreen:

Dans le cas présent, j’ai le sentiment que le pirate connaissait le principe d’accès aux pages perso de Free. Il peut très bien s’agir d’un p’tit Frenchy. Sa manière de procéder a certainement consisté à repérer des blogs fonctionnant sous WordPress hébergés chez Free, avant d’attaquer par force brute l’accès FTP, puis de modifier spécifiquement certains fichiers du CMS. La première chose à faire dans ces circonstances, c’est changer son mot de passe FTP !

Le site Web corrompu du point de vue de l’internaute

Un internaute ayant l’habitude de se rendre régulièrement sur un site Internet n’a de prime abord aucune raison de se méfier. C’est ainsi qu’il va se rendre sur le-dit site, sans se douter que celui-ci est corrompu, et de ce fait prendre le risque de télécharger un programme malicieux sur son ordinateur. Pourtant, avec un minimum de vigilance et quelques bons outils, ces problèmes peuvent être évités, au pire limités. Ainsi, voici ce qui peut être utilisé pour empêcher les intrusions, voire déceler un tel risque (un internaute azerty en vaut 10) :

  • Un système d’exploitation à jour, plus particulièrement lorsqu’il s’agit de Ouin-ouin, car avec 90 ou 95% d’ordinateurs personnels fonctionnant sous cet OS, c’est la cible privilégiée des hackers. Cela est aussi vrai pour les smartphones, car les internautes les utilisent de plus en plus pour surfer sur Internet.
  • Un antivirus à jour. Certains virus sont en mesure de détecter un antivirus installé, et de le désactiver. Parallèlement à la sophistication croissante des malwares, les éditeurs d’antivirus intègrent eux aussi de plus en plus de fonctionnalités dans leurs logiciels, comme par exemple la surveillance de l’activité des écritures sur le disque dur ainsi que le bon fonctionnement des pages Web en cours de consultation par l’utilisateur.
  • Un pare-feu logiciel. Celui-ci peut s’avérer un excellent complément au pare-feu matériel, ce dernier étant de nos jours incontournable et généralement intégré aux boxes de nos FAI. Non seulement le pare-feu logiciel empêchera lui aussi les intrusions, cette fois-ci au niveau de la machine elle-même, mais il va pouvoir contrôler les programmes en cours de fonctionnement et qui tentent d’envoyer des requêtes sur Internet ou sur le réseau. Cependant, là encore, des virus ont été en mesure de désactiver certains logiciels de pare-feu par le passé… D’où l’intérêt que celui-ci soit aussi à jour ! CQFD.
  • Un navigateur Internet à jour.
  • Certaines extensions disponibles pour un ou plusieurs navigateurs tels que Firefox ou Chrome, préviennent des dangers sur Internet. C’est notamment le cas de NoScript, lequel empêche tous les scripts JavaScript de s’exécuter sur une page Web : cela permet à l’internaute de décider lui-même ce qui peut être exécuté, par exemple les scripts propres au fonctionnement du site et ceux appartenant à quelque réseau social comme Facebook, et ce qui n’a pas lieu d’être exécuté, tel que des outils à des fins statistiques ou publicitaires… et ils sont légion, bon sang !!! Avec NoScript, il est donc immédiatement possible de repérer l’appel d’un script quelconque et se montrer soupçonneux si celui-ci est hébergé en Roumanie ou en Corée, sans même qu’il ait pu être exécuté.
  • Pour les curieux, les paranoïaques et les gros nerds, on peut pousser le vice jusqu’à l’emploi d’un analyseur de paquets, comme par exemple Wireshark. Ce logiciel est une tuerie, mais son utilisation s’avère extrêmement complexe et nécessite quelques notions en protocoles réseaux…

Le site Web corrompu du point de vue des acteurs d’Internet

Ces dernières années, les acteurs importants du Web, tels que le W3C, Mozilla, Google et Microsoft, ont multiplié les initiatives visant à rendre Internet plus sûr pour les utilisateurs. C’est en particulier le cas avec StopBadware. Le principe est assez simple : les moteurs de recherche, Google en tête, indexent le contenu des sites Web. Lorsqu’une page présente un fonctionnement anormal, contient l’emprunte d’un programme malicieux ou tente de faire télécharger un fichier par le navigateur de l’internaute, la page est blacklistée (i.e. mise sur liste noire). Dans les résultats de recherche de Google, un message apparaît alors pour prévenir les internautes du risque encouru.

Si un internaute arrive sur le blog corrompu sans être passé par un moteur de recherche, il peut encore être prévenu du risque qu’il court. C’est le cas notamment avec Firefox, qui affiche le joli panneau rouge vu un peu plus haut. Dans les deux cas, le visiteur est informé avant même d’avoir atteint la page infectée, est vivement mis en garde, et est invité à aller surfer un peu plus loin. Ce mécanisme a cependant quelques limites… Tout d’abord, l’idéal serait que les sites pirates soient déjà indexés par les moteurs de recherche, afin qu’ils soient automatiquement blacklistés ; or dans les faits, les hackers (loin d’être cons) demandent aux moteurs de recherche de ne pas les indexer. Ensuite, le second problème provient de la période pour laquelle le site Web piraté n’est pas encore blacklisté. En effet, Google ou Bing peuvent très bien repasser sur ce site seulement dans quelques jours, et par conséquent les internautes de passage ne peuvent pas être informés du risque pendant ce temps. Bon, ça reste toujours beaucoup mieux qu’avant, quand un site Web pouvait rester infecté pendant des mois ou des années !

Après le retrait du code malicieux, il faudra quelques jours pour que tout rentre dans l’ordre dans les résultats de recherche des moteurs.

Le site Web corrompu du point de vue de son propriétaire

Tout ce qui a été dit au sujet des internautes est évidemment vrai pour le blogueur aussi. Mais celui-ci dispose normalement d’outils supplémentaires sur son ordinateur et sur Internet, en particulier pour administrer son site, et a fortiori pour réparer ce qui a été cassé.

Si le blogueur dispose d’un compte Google avec lequel il a l’habitude de contrôler son site Web via les outils pour webmasters, il est alors informé de la corruption de son site Internet ainsi que de la nature de cette corruption.
L’utilisation d’un programme comme NoScript permet de se rendre compte immédiatement si un nouveau script JavaScript est présent sur son site. Par le passé, sur un autre de mes sites, un script hébergé en Russie avait fait son apparition. Cette fois-ci, sur le premier blog il s’agissait d’un script hébergé en Allemagne, et sur la seconde l’URL utilisait un nom de domaine espagnol : c’est fou ce qu’on peut voyager avec les pirates !

Analyse et suppression du hack

Lorsqu’on est hébergé sur les pages perso de Free, il y a peu d’outils voire aucun en-dehors du FTP pour accéder à l’arborescence de fichiers constituant le site Web. Dans le cas d’une arborescence modeste, cela peut tout à fait suffire, mais l’utilisation d’un client FTP peut devenir fastidieuse pour un site volumineux, surtout s’il a été fortement impacté par son piratage. Dans ce cas, il sera certainement nécessaire de télécharger toute l’arborescence pour pouvoir aller à la chasse aux modifications avec un terminal et/ou un éditeur de texte. Et malheureusement, les performances d’accès au FTP de Free sont loin d’un être idylliques…

A partir de la constatation du piratage, on peut normalement supposer que les derniers fichiers modifiés dans l’arborescence sont ceux qui ont en effet été corrompus. Si le client Web de Free pour l’accès au FTP ne permet pas d’afficher la date de modification des fichiers, c’est en revanche le cas des clients FTP logiciels tels que FileZilla. En évoluant parmi les répertoires, il sera par conséquent possible d’observer l’ampleur de Degas (si le hacker s’est senti l’âme d’un artiste en faisant son sale coup), et nettoyer tout fichier suspect.

En reprenant l’utilisation de NoScript, l’URL qui a été bloquée peut éventuellement nous aider à trouver le code ajouté. Ce n’est pas forcément simple, car ces petits enfoirés injectent du code très ingénieux, consistant par exemple en du PHP qui écrit sur la sortie HTML un tableau de caractères ASCII, lequel correspond à un appel JavaScript, lequel injecte du HTML au DOM de la page, lequel ouvre une iframe vers un site pirate, lequel héberge codes malicieux, virus et backdoors de tous poils… Si bien que le code exécuté sur la page Web de l’internaute ne ressemble plus du tout au code injecté sur le serveur. Cf. le gros pâté vert illustré un peu plus haut. Une vraie partie de cache-cache ! Dans ce cas-là, NoScript n’est plus suffisant, et une extension comme FireBug s’avère indispensable. En utilisant notamment le champ de recherche pour mettre la main sur l’URL pirate, on finit par découvir quelle forme prend le code malicieux. Il est alors possible de faire une recherche de ce code dans les fichiers sur le serveur, en ciblant en priorité les derniers fichiers modifiés.

Pour reprendre mon cas, le pirate avait spécifiquement modifié les fichies header.php utilisés pour chacun des thèmes WordPress et qui sont stockés dans le sous-dossier wp-content/themes. Chaque fichier header.php reprenait donc le même code malicieux, ainsi, quel que soit le thème utilisé sur le blog, ce merdeux était sûr de son coup. La même technique a été utilisée sur mes deux blogs, à deux jours d’intervalle seulement, autant dire qu’il était bien rôdé et qu’il a sûrement fait d’autres victimes !

Surveiller les modifications sur son site

Malheureusement, avec les pages perso de Free, il n’y a pas grand chose à faire en amont… L’accès FTP n’est pas ce qu’il y a de plus pratique pour pouvoir analyser de manière automatique la modification potentielle des fichiers. Cela n’empêche pas de le faire quand cela est possible, notamment lorsqu’on a un serveur auto-hébergé ! Et dans ce cas-là, les outils sont bien loin de manquer, surtout lorsqu’on gratte du côté de GNU/Linux : ligne de commande, scripts Shell / Bash, crontab, incrontab… Mais quel que soit la situation, il faut surtout ne jamais négliger les accès (FTP, SSH…) et la qualité des mots de passe employés.

‘va p’t’être falloir que j’intègre tout ça pour de bon, moi…