Un cryptominer se repère avec top puis ls -l /proc/PID/exe, qui donne le fichier réellement exécuté. Tuer le processus ne suffit pas : il revient par une tâche cron, un service systemd, un fichier de /tmp ou de /dev/shm, ou une clé SSH ajoutée. Il faut supprimer ces relais, trouver la faille d’entrée, puis nettoyer ou réinstaller.
Un mineur de cryptomonnaie détourne la puissance de calcul de votre machine au profit d’un tiers. Les noms rencontrés sont xmrig, kdevtmpfsi, kinsing ou des noms qui imitent un processus système. Le symptôme est toujours le même : un processeur saturé en permanence, un serveur lent, parfois un message de l’hébergeur. Le plus souvent, l’intrusion passe par une API Docker exposée sans authentification, un Redis ouvert sur Internet sans mot de passe, une application web vulnérable ou un compte SSH au mot de passe faible.
Ce guide cible le mineur lui-même. Pour l’ensemble de la conduite à tenir après une intrusion, lisez la page sur le serveur piraté.
Repérer le processus coupable
top -c ou ps auxf --sort=-%cpu | head -15 montre les processus les plus gourmands, avec leur ligne de commande et leur parent. Un processus au nom étrange, lancé par www-data, redis ou root, ou dont l’arborescence part de /tmp ou de /dev/shm, est suspect. Notez son numéro (PID), son utilisateur et son parent, puis passez à l’étape suivante avant de le tuer.
Identifier le fichier réellement exécuté
Le nom affiché peut être usurpé. Lancez sudo ls -l /proc/PID/exe : le lien indique le binaire sur le disque, parfois suivi de « (deleted) » quand le pirate l’a supprimé après le démarrage. Complétez avec sudo tr '\0' ' ' < /proc/PID/cmdline pour les arguments (adresse d’un pool de minage), sudo ls -l /proc/PID/cwd pour le dossier de travail et sudo ss -tupn | grep PID pour les connexions sortantes. Gardez ces lignes : elles sont des preuves, et les adresses vous aideront à vérifier d’autres machines.
Geler le processus puis l’arrêter
sudo kill -STOP PID suspend le processus sans le détruire, ce qui libère le processeur. Une fois vos relevés faits, sudo kill -9 PID l’arrête. S’il réapparaît en quelques secondes, c’est qu’un parent ou une tâche le relance : tuez aussi le parent (souvent un script shell), puis cherchez la persistance. Si vous disposez d’un hébergeur avec snapshot, faites-en un avant de supprimer quoi que ce soit.
Trouver la persistance
Vérifiez chacun de ces endroits :
- Cron :
sudo crontab -l -u root, la même commande pourwww-dataet pour chaque compte, puissudo ls -la /etc/cron.d /etc/cron.hourly /var/spool/cron/crontabs. - systemd :
systemctl list-units --type=service --state=running,systemctl list-timers --all, puissystemctl cat nom.servicepour lire un service inconnu. - Fichiers cachés :
sudo ls -la /tmp /var/tmp /dev/shmetsudo find / -xdev -type f -mtime -7 -perm -u+x, qui liste les exécutables récents. - Clés SSH : le fichier
authorized_keysde/root/.sshet de chaque utilisateur. - Bibliothèque injectée :
/etc/ld.so.preloadne devrait pas exister sur un système courant. S’il contient une ligne, c’est un signe sérieux. - Attributs : certains pirates rendent leurs fichiers non supprimables ;
lsattrles révèle etsudo chattr -i fichierlève l’attribut.
Supprimer les relais et les fichiers
Après sauvegarde des fichiers suspects dans un dossier à part, retirez la ligne de cron, désactivez le service (sudo systemctl disable --now nom.service) et supprimez son fichier unité, le binaire et le script de téléchargement. Retirez les clés SSH inconnues. Rechargez ensuite systemd avec sudo systemctl daemon-reload et vérifiez avec top que le processeur redevient calme pendant plusieurs minutes.
Fermer la porte d’entrée
Sans cette étape, le mineur revient. Contrôlez les services à l’écoute avec sudo ss -tlnp :
- Docker. L’API sur le port TCP 2375 sans TLS ni authentification donne le contrôle de la machine. Désactivez-la ou protégez-la selon la documentation de Docker, puis listez les conteneurs avec
sudo docker ps -aet supprimez ceux que vous ne reconnaissez pas. - Redis. Liez-le à
127.0.0.1(directivebind), gardezprotected-mode yeset définissez un mot de passe (requirepassou ACL), comme décrit dans la documentation de Redis. - Applications web. Mettez à jour le logiciel, ses extensions et ses dépendances, et cherchez dans les journaux du serveur web la requête qui précède le premier lancement du mineur.
- SSH. Passez aux clés uniquement, comme dans le guide sur les attaques par force brute.
Choisir entre nettoyage et réinstallation
Si le mineur tournait sous un compte sans privilèges, que vous avez trouvé l’entrée et supprimé chaque relais, un nettoyage est défendable. Dès qu’il tournait en root, ou qu’un fichier modifié échappe à votre compréhension, réinstallez le système et restaurez uniquement vos données. Changez ensuite les mots de passe, clés et jetons qui étaient présents sur la machine.
Surveiller après le nettoyage
Pendant plusieurs jours, regardez uptime et top à intervalles réguliers, relisez les crontabs et authorized_keys, et configurez une alerte sur la charge ou sur les connexions sortantes inhabituelles chez l’hébergeur. Une récidive signale presque toujours une porte restée ouverte.
Questions fréquentes
Pourquoi mon serveur est-il à 100 % de CPU avec un processus inconnu ?
Un processus au nom étrange qui sature le processeur est souvent un mineur de cryptomonnaie installé après une intrusion. Vérifiez le fichier réel avec ls -l /proc/PID/exe, sa ligne de commande et ses connexions sortantes avant de conclure : une tâche légitime, comme une sauvegarde ou une indexation, peut aussi consommer beaucoup.
Comment supprimer xmrig ou kdevtmpfsi définitivement ?
Arrêtez le processus, puis supprimez ce qui le relance : crontab, service systemd, fichiers de /tmp ou /dev/shm, clés SSH ajoutées. Corrigez ensuite la faille d’entrée, par exemple un Docker ou un Redis exposé. Sans cette dernière étape, le mineur réinstalle ses relais en quelques heures ou quelques jours.
Le processus revient après un kill, pourquoi ?
Quelque chose le relance : un parent qui le surveille, une tâche cron, un service systemd ou un script lancé par une clé SSH. Observez avec ps auxf quel processus le démarre et relisez crontab -l pour chaque compte. Tuez le parent en premier, puis supprimez les relais.
Un cryptominer peut-il voler mes données ?
Le mineur lui-même ne copie pas vos données, mais l’intrusion qui l’a installé donne au pirate les mêmes droits que le compte utilisé. Considérez donc que les secrets accessibles à ce compte sont exposés, et vérifiez si des données personnelles ont pu être lues pour décider d’une notification à la CNIL.
Docker ou Redis sont-ils dangereux par nature ?
Non. Ils deviennent un risque quand leur port est ouvert à tout Internet sans authentification. En les liant à 127.0.0.1, en filtrant le port par pare-feu et en activant l’authentification, ils se déploient sans exposition inutile.
Sources
- proc(5) — manuel Linux
- ps(1) — manuel Linux
- Protect the Docker daemon socket — Docker Docs
- Redis security — Redis Docs