Guide sur les infections par CryptoPHP

Description du problème

CryptoPHP est une menace qui utilise des portes dérobées sur des systèmes de gestion de contenu tels que Joomla, WordPress ou Drupal, sur des thèmes ou sur des modules d’extension afin de compromettre à grande échelle les serveurs Web. Des acteurs malveillants utilisent l’ingénierie sociale pour que les administrateurs de site installent des thèmes piratés et des modules d’extension gratuits mis à la disposition de tous, propageant du même coup CryptoPHP, une porte dérobée incluse dans ces modules.

CryptoPHP utilise plusieurs domaines codés en dur pour la communication avec des serveurs centralisés pour la commande et le contrôle (C&C), ainsi que le cryptage RSA pour protéger ses communications avec ces serveurs. Certaines versions disposent également d’une capacité de secours pour communiquer par courriel si ces domaines sont mis hors service. Le maliciel PHPCrypto peut se mettre à jour, injecter du contenu dans les sites compromis sur lesquels il est installé et mettre en œuvre plusieurs autres fonctions pour le compte du pirate.

L’objectif principal de CryptoPHP est de mener des opérations de SEO de type « black hat » (tricherie sur l’optimisation pour les moteurs de recherche) visant à améliorer le classement des sites contrôlés par les pirates ou des sites de leurs clients dans les moteurs de recherche, les aidant ainsi à apparaître comme des sites légitimes ou comme des sites de véritables consultants SEO.

Contexte du problème

Ce type d’infection de site Web serait apparu aux environs de septembre 2013.

Plates-formes concernées

Toutes les plates-formes sont touchées.

 

Vérification du problème

La détection de l’infection est relativement simple. Dans un script piraté, on trouve une petite ligne de code qui ressemble à ceci :

<?php include(‘assets/images/social.png’); ?>

Certains y reconnaîtront immédiatement quelque chose qui semble assez étrange. Il s’agit de l’appel à une fonction PHP qui devrait inclure un fichier contenant du code source PHP, mais qui semble faire référence à un fichier image. Or, ce fichier contient bien du code PHP, mais masqué, c’est-à-dire qu’il est brouillé tout en étant lisible par l’interpréteur PHP.

Fox-IT (https://www.fox-it.com/) a créé un script Python pour aider les administrateurs à détecter le code relatif à CryptoPHP. Python (de préférence la version 2.7) est nécessaire pour exécuter ce script. On peut obtenir et exécuter les scripts de Fox-IT assez facilement.

1. Télécharger le script et le rendre exécutable :

$ wget https://raw.githubusercontent.com/fox-it/cryptophp/master/scripts/check_filesystem.py
$ chmod +x check_filesystem.py

2. Pour analyser votre système entier (attention, ça peut prendre un certain temps), exécutez :

./check_filesystem.py

Pour analyser les fichiers sous un répertoire particulier, par exemple « /home » :

./check_filesystem.py /home

3. Les fichiers seront soit signalés comme suspects, soit confirmés comme étant des shell CryptoPHP comme suit :

File matching patterns: [‘*.png’, ‘*.gif’, ‘*.jpg’, ‘*.bmp’]
Recursively scanning directory: /
 /home/www/social.png: CRYPTOPHP DETECTED! (version: 1.0)
 /var/www/images/social.png: CRYPTOPHP DETECTED! (version: 1.0a)
 /tmp/thumbs/admin/assets/images/thumb.png: CRYPTOPHP DETECTED! (version: 0.3x555)

Vous pouvez utiliser un autre script de Fox-IT pour déterminer si votre site exécute effectivement le « black hat » SEO. Il s’agit d’exécuter deux requêtes, l’une avec la chaîne d’un agent-utilisateur de robot d’indexation Web et l’autre sans.

Ce script peut être exécuté à distance et n’a pas besoin d’être exécuté sur le serveur touché.

1. Télécharger le script et le rendre exécutable :

$ wget https://raw.githubusercontent.com/fox-it/cryptophp/master/scripts/check_url.py
$ chmod +x check_url.py

2. Pour analyser un hôte ou une URL (ou plusieurs) comme arguments, exécutez :

./check_url.py --verbose www.fox-it.com http://192.168.0.10/index.php

Checking ‘http://www.fox-it.com’ ..: OK
 * Normal request yielded 15 urls, Webcrawler request yielded 15 urls. (0 suspicous links)
Checking ‘http://192.168.0.10/index.php’ ..: CRYPTOPHP DETECTED
 * Normal request yielded 1 urls, Webcrawler request yielded 5 urls. (4 suspicous links)
  ! http://xxxx/no-deposit-casino-bonus
  ! http://xxxx/casino-bonus-sans-depot
  ! http://xxxx/dolly/?p=online-casino
  ! http://xxxx/?p=latest-casino-bonuses

Ou pour analyser une liste d’hôtes ou d’URL, l’exécuter avec --load :

./check_url.py --verbose --load=urls.txt

Recommandations pour la résolution du problème

  • Vérifiez les utilisateurs de votre serveur en recherchant en particulier des utilisateurs nouvellement créés pour SSH et FTP qui ne devraient pas exister sur votre système.
  • Modifiez les noms des utilisateurs concernés (généralement le ou les utilisateurs détenteurs des fichiers ayant été détectés comme infectés).
  • Éliminez l’appel à la fonction « include() » présent dans le PHP douteux des pages infectées et supprimez tous les faux fichiers image contenant du code CryptoPHP.
  • Retirez le thème ou le module d’extension piraté porteur de l’infection CryptoPHP.
  • Changez tous les mots de passe associés au compte compromis et à son site Web.
  • Effectuez des mises à jour de toutes les installations WordPress, Drupal et Joomla sur tout le serveur et pas seulement sur le site signalé.

Abonnez-vous aux listes de distribution des annonces de mises à jour de sécurité pour Wordpress, Drupal et Joomla ou vérifiez ces mises à jour régulièrement afin d’éviter de nouvelles infections et de nouvelles vulnérabilités pouvant conduire à des détournements malveillants.

Vous avez d’autres questions ? Envoyer une demande

0 Commentaires

Cet article n'accepte pas de commentaires.
Réalisé par Zendesk