Apparition des Virus Web furtifs

Autrefois, la meilleure façon d’attraper un virus informatique était d’utiliser une disquette ou une clé USB infectée. Puis ce fut les emails, avec des pièces jointes contenant un code malveillant.

De nos jours, les sites web sont devenus l’un des principaux vecteurs d’infection. C’est en effet un moyen bien pratique : il suffit d’infecter un seul site web pour pouvoir atteindre l’ensemble de ses visiteurs. Alors, pour qui sait infecter des centaines de sites, c’est le « jackpot » !

L’infection par les sites web s’est popularisée avec les CMS gratuits et OpenSource tels que Joomla! ou WordPress, notamment à cause des magazines de vulgarisation informatique à 1€ qui expliquaient (et expliquent toujours malheureusement) en double page que « créer son site web, cest facile et gratuit »… En omettant d’informer le lecteur de la nécessité d’effectuer des mises à jour régulières de son CMS. Le défaut de mise à jour est en effet la première cause de vulnérabilité d’un site web.

Rien de nouveau toutefois. Ce qui l’est plus, c’est le comportement du Virus que nous avons été amenés à étudier. Celui-ci, afin d’échapper aux mesures de sécurités classiques a mis en œuvre deux techniques :

  1. Ne tenter d’infecter qu’une seule fois l’internaute ; Ainsi, un antivirus « web » ne le verra qu’une seule fois. Au second passage, il pensera le danger éliminé.
  2. Ne pas stocker l’information relative à l’historique des visiteurs (pour réussir le point 1) dans l’espace alloué au site web…

Nous allons détailler ces deux comportements à travers un cas réel de recherche et de destruction d’un virus ayant infecté un site web de professionnels s’adressant à des particuliers (B2C).

La vulnérabilité de l’OpenSource

C’est un peu la rançon de la gloire pour ces solutions logicielles OpenSource de sites hébergés (WordPress, Joomla, Drupal, …) Plus un logiciel hébergé est populaire (c’est à dire « utilisé » par beaucoup de sites web), plus il est lucratif pour des pirates d’investir dans la recherche de failles : il y aura potentiellement plus de sites web facilement piratables, et donc plus d’internautes à infecter.

Car pour les pirates, infecter une page web n’est pas un objectif en soi… C’est pour eux simplement un moyen d’essayer d’infecter l’ordinateur de l’internaute :

  • pour installer un keylogger, afin de mémoriser ses frappes claviers et donc potentiellement son code de carte bancaire ou d’accès à des comptes en ligne ;
  • pour cacher un trojan, afin de prendre ultérieurement le contrôle de son ordinateur et commettre d’autres méfaits ;
  • pour injecter un virus, afin de chercher et voler des fichiers importants ou les crypter et demander une rançon.

Du côté des internautes, les règles de prudence dicteraient de toujours naviguer avec javascript désactivé par défaut (avec le plugin « NoScript » pour navigateur Firefox, par exemple), d’éviter la navigation multi-onglets, ou de ne fréquenter que des grands sites web (dont le suivi technique est assuré par une équipe dédiée). Ceci en plus d’un antivirus analysant les pages web visitées, même s’ils ne sont pas fiables en présence d’une nouvelle forme d’infection, comme nous l’avons constaté lors de la dernière attaque détaillée ci-après.

Fiabilité relative des antivirus

Récemment, NeoDiffusion est intervenu à la demande d’une agence web qui observait un comportement étrange sur l’un des sites web de ses clients (en cours de réalisation) : après une visite du site, l’ordinateur du visiteur se retrouvait infecté par un virus de type Trojan. Pourtant, l’analyse de la page web par un antivirus ne révélait aucune infection.

C’était d’ailleurs pour nous une chance que de « travailler » sur un site web qui n’était pas encore en production, car ce n’était pas nécessaire de le mettre hors ligne en urgence. Cela nous a permis d’analyser le virus sous toutes ses coutures, sans qu’il puisse se rendre compte de l’attention qu’on lui portait, pour in fine le neutraliser plus rapidement (comme nous allons vous l’expliquer ci-après).

S’il avait fallu mettre le site web infecté hors ligne, sachez qu’il existe des techniques bien plus rapides que de (tenter) d’effacer tous les fichiers (ce qui anéantit toute chance d’analyser la faille). L’une de ces techniques est tout simplement de renommer le dossier hébergeant les fichiers… En cas de doute sur la meilleure méthode à mettre en œuvre, n’hésitez pas à faire appel à un professionnel expérimenté !

Nous sommes habitués à rencontrer des sites web corrompus, hébergeant un virus prêt à se propager dans l’ordinateur des visiteurs. Lorsque nous avons la chance d’avoir « les clés » du site, nous pouvons déployer des méthodes d’investigations plus poussées. La première étape consiste à effectuer une copie locale des fichiers qui composent le site web (et notamment le logiciel hébergé affichant les pages web aux visiteurs).

Recherche et identification du virus

Lorsque le virus est connu, il suffit de lancer un scan antivirus des fichiers, préalablement récupérés sur le serveur web, pour le « débusquer ». En l’occurrence, dans notre cas, l’analyse avec différents antivirus n’a rien donné. Il a même fallu environ 1 semaine pour que les antivirus soient mis à jour avec la signature de cette infection. C’est bien la preuve qu’une protection antivirus n’est pas toujours suffisante.

Toujours dans ce cas précis, le prestataire qui nous a demandé de l’aide avait remarqué n’avoir eu qu’une seule alerte d’infection de la part de son antivirus, puis « plus rien ». Et effectivement, lorsque nous avons testé la page web (depuis un navigateur avec javascript désactivé) nous avons identifié du « code suspect » dans la page web. Mais seulement lors de notre première visite. Ensuite, ce code suspect ne s’est plus jamais affiché.

f=[-30,-30,66,63,-7,1,61,72,60,78,70,62,71,77,7

Figure 1 : Extrait du code suspect

Nous avions donc affaire à un virus bien plus évolué que la moyenne : c’était même, à notre connaissance, le premier « virus furtif » du web : un virus qui se fait le plus discret possible. Et il a réussi, puisque même le service de détection en ligne de Norton Antivirus ne le détectait pas. Ou plus précisément, ce service a probablement détecté le virus lors de la première analyse de la page web (mais pas lors des analyses suivantes).

 

 

 

Si l’on se met à la place du virus, il y a plusieurs méthodes pour mémoriser le passage d’un internaute (ou d’un service de détection en ligne) :

1. Stocker dans le navigateur web de l’internaute un cookie pour noter son passage. Si l’internaute change de navigateur, il sera de nouveau face au code malveillant, une seule fois, le temps que le cookie soit déposé dans son nouveau navigateur. Cette approche fait plus le jeu du virus (car il a plus de navigateurs à infecter), mais l’expose aux services de détection en ligne (qui eux ne gèrent pas les cookies).

2. Mémoriser sur le serveur web l’adresse IP de l’ordinateur de l’internaute, et ne plus afficher le code malveillant si cette adresse IP est connue. Dans ce cas, si deux ordinateurs partagent la même adresse IP (ce qui est le cas derrière une « box internet », par exemple), seul le premier sera exposé au code malveillant.

3. Mémoriser sur le serveur web une « signature » composée de différents éléments comme le type de navigateur, de système d’exploitation, etc… (voir notre outil gratuit en ligne « Quelle est la signature de mon navigateur »). Ce qui permet de différencier deux internautes utilisant la même adresse IP.

Signature "User Agent"

Figure 2 : Exemple de signature de navigateur

Après analyse, nous avons pu déterminer que ce virus utilisait l’adresse IP pour se rappeler des internautes « déjà vus ». Il nous faudra donc changer d’adresse IP publique pour pouvoir déclencher de nouveau l’affichage du code malveillant par le virus. C’est un progrès important dans notre quête d’éradication du virus. En effet, il faut savoir que lors d’investigations, la première chose que l’on cherche à faire est de savoir comment reproduire un phénomène, afin de pouvoir l’analyser plus facilement.

A la recherche du repaire du virus

Reste à déterminer où est stockée cette information (l’adresse IP de l’internaute) sur le serveur web, ce qui devrait faciliter la recherche du virus caché dans le code du logiciel hébergé. Car bien sûr, ce virus est bien mieux caché que la moyenne. Les virus les moins bien conçus se détectent à l’œil nu… pour qui possède un œil exercé à analyser du code de programmation !

Pour un virus, il y a deux grandes méthodes pour cacher de l’information telle que l’adresse IP de l’internaute : la cacher dans un fichier légitime qui sera discrètement modifié, ou la cacher dans la base de données associée au site web. Un virus particulièrement sournois, comme celui étudié, saura rendre cette information anodine, cachée au milieu de données légitimes : il ne faut pas espérer retrouver l’adresse IP dans une forme lisible (et détectable).

Dans un cas comme dans l’autre, l’approche pour débusquer la modification est la même : effectuer une capture « avant » et « après » avoir déclenché l’affichage du code malveillant par le virus.

Pour effectuer une capture de fichiers, le plus fiable et rapide est de lancer une commande d’archivage (TAR ou ZIP). Pour une capture de base de données, un export de la base de données suffit. Quoiqu’il en soit, l’archive (ZIP par exemple) présente l’avantage de « figer » les données capturées telles qu’elles étaient au moment de la capture, en excluant une modification (de la date et de l’heure par exemple) lors d’une consultation ultérieure.

L’information est ailleurs…

Cette méthode nous a révélé que la mémorisation de l’adresse IP ne se faisait pas en modifiant un fichier du site Web. Cela aurait été trop simple pour un virus de cette envergure. Des modifications anormales dans la base de données ont bien été détectées, mais il s’agissait d’informations secondaires pour le virus : le remplacement par les données capturées « avant » n’a pas permis de re-déclencher le virus.

A ce stade, une conclusion s’impose : l’adresse IP du visiteur est cachée « ailleurs ». Ce « ailleurs » peut être « ailleurs sur le serveur web » (comme un dossier temporaire du serveur), ou « ailleurs sur le web », par exemple un serveur web anodin (comme un serveur de flux RSS). A ce niveau, il faut des accès administrateur du serveur web pour poursuivre les investigations. C’est donc avec le concours du prestataire d’hébergement (Alwaysdata, en l’occurrence) que nous avons poursuivi, et conclu…

Epilogue

Ainsi, après avoir installé une sonde d’observation des accès fichiers sur l’espace web en cause, Alwaysdata a pu confirmer notre hypothèse : un fichier temporaire, visible uniquement depuis le serveur web (et non depuis un accès distant) était modifié à chaque nouvelle adresse IP présentée. Il fût ensuite aisé de procéder à l’éradication du virus.

Ce virus furtif, particulièrement retord, a visiblement infecté le site web par le biais d’une faille connue depuis plus de 6 mois dans un script utilisé par de nombreux logiciels hébergés (TimThumb). En l’occurrence, sur le site web investigué, la faille avait été corrigé plus d’un mois auparavant. Mais le virus avait eu le temps de s’installer, en prenant soin de ne pas se manifester immédiatement…

Werner KLINGER,
Ingénieur Conseil NTIC Indépendant.

Tags: , , , ,

Publié le 29/05/2012 dans Sécurité Internet par Werner KLINGER | Aucun Commentaire »

Ajouter un commentaire

Note: Vous êtes responsable de vos commentaires, veillez à rester courtois et factuel. En postant votre commentaire, vous accordez de fait un droit de diffusion à Secur'id.