Décontaminer un serveur Linux zombi

Comment stopper les attaques malveillantes de votre serveur piraté ?

8 avril 2019

Contexte

Cela commence par la réception d'un e-mail :

Vos serveurs essaient de pirater mes serveurs. 
S'il te plaît, arrête. 
Voici les journaux: 
Jul 19 01:32:53 kp-fmt1-01 sshd[10745]: Invalid user uploader from 163.172.X.X 
Jul 19 01:32:53 kp-fmt1-01 sshd[10745]: Connection closed by 163.172.X.X port 33740 [preauth] 
Jul 19 02:05:36 kp-fmt1-01 sshd[11335]: Invalid user qa from 163.172.X.X 
Jul 19 02:05:37 kp-fmt1-01 sshd[11335]: Connection closed by 163.172.X.X port 51410 [preauth] 
Jul 19 02:38:08 kp-fmt1-01 sshd[11407]: Invalid user minecraft from 163.172.X.X 
Jul 19 02:38:08 kp-fmt1-01 sshd[11407]: Connection closed by 163.172.X.X port 41064 [preauth]

Dans un premier temps, il ne faut pas paniquer, vous n'êtes sûrement pas un hacker :)

Votre serveur a pu être piraté à votre insu pour être utilisé comme nouvelle source d'attaques.

Vous avez peut être récemment effectué une mise à jour ou installé un nouveau logiciel ? Quoiqu'il en soit vous devez investiguer et décontaminer rapidement votre serveur.

Connaître l'étendu des attaques

Un bon moyen de connaitre l'étendu des attaques lancées par votre serveur est de vérifier si il est blacklisté (ajouté à une liste noire) sur Internet.

Certaines plateformes sont automatiquement informées lorsqu'un serveur a un comportement anormal envers d'autres serveurs : scan de tous les ports, multiples tentatives de connexions, ...

L'adresse IP du serveur en question est alors blacklistée.

Pour vérifier si votre serveur est blacklisté, il suffit de rechercher son nom de domaine ou son IP sur mxtoolbox ou abuseipdb.

Éliminer le processus malicieux

Un processus présent sur votre serveur est forcément à l'origine de ces tentatives de connexions. Il faut le "tuer" et supprimer le fichier qui l'exécute sans quoi il se relancera lors du redémarrage du serveur ou lors d'un évènement planifié.

Trouver une connexion réseau active

Dans un premier temps, vérifiez si il existe une activité étrange au niveau du réseau de votre serveur, avec la commande netstat -an. Cette commande affiche toutes les connexions TCP actives et les ports TCP et UDP utilisés.

Dans la capture ci-dessous, nous constatons de multiples connexions depuis le serveur 10.16.31.7:[port utilisé] vers 8.8.8.8:53 ou 8.8.4.4:53.

Trouver l'identifiant du processus

Ensuite, avec la commande lsof -RPni :[numero de port], vous pouvez récupérer l'identifiant du processus à l'origine de cette communication.

Dans notre cas, en utilisant le port source d'une tentative de connexion, la commande lsof -RPni :59819 affiche :

Le processus avec l'identifiant 3854 est donc à l'origine de cette communication.

Lister les fichiers utilisés par le processus

À ce stade, avec le numéro d'identifiant du processus, il est possible d'afficher tous les fichiers, ports, ... utilisés par ce processus avec la commande lsof –Pnp <pid>.

Ici, en tapant la commande lsof -Pnp 3854, cela affiche :

Il faut alors étudier la liste des fichiers et rechercher tout ce qui peut être exécutés : scripts, exécutables, fichier cron, ...

Supprimer les fichiers du processus

Si le chemin complet n'est pas indiqué, la commande find . -name <nom du fichier> à la racine du serveur permet de trouver l'emplacement du fichier à supprimer.

La commande rm -rf <nom du fichier> permet alors de supprimer le ou les fichiers liés au processus.

Stopper le processus

Enfin, il faut arrêter le processus en cours d'exécution avec la commande kill -9 <pid>, ici : kill -9 3854.

Solutions préventives

Monitoring

Vous pouvez installer un superviseur qui détectera et vous informera de toute activité anormale sur votre serveur, comme OSSEC.

Et également, être automatiquement informé si votre serveur est blacklisté sur Internet en vous inscrivant sur des plateformes telles que mxtoolbox ou abuseipdb.

Firewall

Vous pouvez installer un outil qui bannira les IP réalisant trop de tentatives de connexions. Ce logiciel rajoutera automatiquement une règle au pare-feu pour interdire à certaines IP de se connecter.

L'un des plus connus sous Linux est fail2ban.

Pour tester son bon fonctionnement, utilisez la commande fail2ban-client status sshd pour lister les IP bannis sur les connexions ssh.

Demander d'être déblacklisté

Si votre serveur a été blacklisté et une fois que vous avez éliminé l'origine du problème puis mis en place les solutions préventives, vous pouvez demander d'être déblacklisté. Si pendant un certain temps, vous n'êtes plus signalé comme un serveur suspect par les autres serveurs, vous serez automatiquement déblacklisté.

Vous pouvez revérifier sur une des plateformes et vous devriez obtenir uniquement des points verts :)