C’est ma fête !

Mardi 6 décembre, c’est ma fête, la Saint Nicolas… En guise de cadeau l’un des serveurs d’ABSOLUTE Web a subi une attaque la nuit dernière ! Des spams ont été soumis en masse sur le serveur à partir de 0h30. A 9h00, avec 58000 emails dans la file d’attente, le serveur a saturé.

Bref, en arrivant au bureau vers 9h15 le téléphone a commencé à sonner, la saturation du serveur générant des affichages d’erreurs de sessions sur les sites clients hébergés dessus. L’envoi d’emails posait également problème.

A partir de là il faut garder son calme et identifier la source du problème. Les messages d’erreur des sessions indiquent une saturation de l’espace disque. Une consultation des graphes MRTG confirme la saturation d’une partition du serveur.

Lorsqu’une partition de serveur est saturée les deux principales origines sont les logs et les emails. La partition en question ne contenant pas les logs du serveur, les soupçons se portent sur les emails. La consultation des graphes MRTG du serveur d’emails confirment le remplissage de la file d’attente jusqu’à saturation.

file d’attente des emails

Le problème est identifié, il faut maintenant rétablir rapidement le service.

Rétablir le service

La consultation de quelques emails de la file d’attente montre que l’attaque est d’origine italienne, tous les emails sont en italien, la plupart des expéditeurs / destinataires sont en .it. Cela va me faciliter la tâche pour détruire les 58000 spams, en effet, hors de question de supprimer toute la file d’attente qui contient des emails légitimes. Le principe est de détruire les emails dont le sujet contient un ou plusieurs mots, dans notre cas des mots en italien. Mots après mots la taille de la file d’attente se vide jusqu’à retrouver une taille normale d’une centaine d’emails.

11h00, le serveur d’emails est redémarré, celui-ce devant être arrêté pendant la suppression des emails. Il se sera écoulé 2 heures entre la saturation du serveur et le rétablissement du service d’emails. Les erreurs sur les sites avaient disparu plus tôt avec la suppression des premiers spams.

Un tel flux de spams peut entraîner le blacklistage de l’adresse IP du serveur. Il faut bien vérifier dans les logs du serveur emails si des emails sont refusés pour spams. Si c’est la cas, il faut suivre les instructions du service de backlistage pour libérer votre adresse IP.

Bon très bien, tout est maintenant opérationnel mais reste le plus délicat, identifier la faille qui a permise au spammer de soumettre tous ces emails.

Identification de la faille

Identifier une faille sur un serveur, c’est jouer les enquêteurs, remonter des pistes jusqu’à la source.

Le header des spams que l’on aura pris soin de sauvegarder va nous être d’une grande aide :

To: amministra.gheller@tiscali.it
Subject: di dipendenti attesa nuovi in
From: <accademiaab@virgilio.it>
X-Priority: 3
X-MSMail-Priority: Normal
X-Mailer: PHP/4.4.4

X-Mailer nous indique que les emails sont envoyés depuis la fonction mail() de php. Il s’agit donc d’une faille au niveau d’un script php et non d’une faille du serveur.

Une première recherche en ligne de commande est lancé sur les scripts contenant la fonction mail(). Mais cela produit trop de résultats. Il faut donc lancer une recherche plus restrictive. L’entête X-MSMail-Priority ne me semble pas très courante, d’ailleurs je ne la connaissais pas. C’est une bonne piste, une recherche est lancée sur tous les scripts php du dossier home pour trouver ceux qui contiennent cette chaine de caractères.

find /home/ -name "*".php -type f -print0 | xargs -0 grep "X-MSMail-Priority" | cut -d":" -f1 | uniq -c | sort -u

Et là bingo ! Un seul résultat ressort, un examen du script en question confirme qu’il est bien à l’origine du spam massif sur le serveur. Pour info, il s’agissait d’un module de bannières pour Joomla…