Nettoyer mon serveur privé

Chaque CMS (joomla, wordpress, drupal, etc.) est une source potentielle d’infection. Il en va de même pour les logiciels installés sur votre serveurs. L’infection de votre serveur peut servir à y installer, par exemple, un Botnet, ou encore un logiciel de Bitcoin Mining

Faire un diagnostic

Dans le cas d’un mineur bitcoin, les ressources de votre serveur seront très sollicitées, il est alors assez simple de retrouver le processus incriminé à l’aide de la commande top en SSH

Dans le cas d’un botnet, cela devient un peu plus critique. Nous pouvons vous proposer notre aide dans le cadre de crédit d’heures d’infogérance si vous rencontrez des difficultés.

Généralement, la procédure est la suivante; nous commençons par utiliser la commande ss (remplaçante de netstat) :

ss -lntpaue|grep -i 6667

Cette commande permet de déterminer quel processus communique via le port 6667 (IRC)

tcp    SYN-SENT   0      1          ip.de.votre.serveur:44098     ip.malveillante:6667   timer:(on,30sec,5) users:(("perl",7908,4)) uid:10013 ino:34808658 sk:ffff8805c23680c0
tcp    SYN-SENT   0      1          ip.de.votre.serveur:47601   ip.malveillante.2:6667   timer:(on,28sec,5) users:(("perl",17998,4)) uid:10013 ino:34808090 sk:ffff881086770f40
tcp    SYN-SENT   0      1          ip.de.votre.serveur:42479     ip.malveillante.3:6667   timer:(on,10sec,4) users:(("perl",27298,4)) uid:10013 ino:34810070 sk:ffff88000e852e40
tcp    SYN-SENT   0      1          ip.de.votre.serveur:48434     ip.malveillante.4:6667   timer:(on,10sec,4) users:(("perl",27312,4)) uid:10013 ino:34810069 sk:ffff881ee98b8280

On sait alors que le PID 7908, un processus perl, a envoyé un SYN à l’IP “ip.malveillante”.

Détecter l’infection

Identifier le(s) script(s)

Que le problème relève d’un mineur bitcoin, d’un botnet d’un script de spam ou quoi que ce soit d’autre, généralement la démarche est la même.

Une fois que l’on dispose du PID du script incriminé, il suffit d’appliquer la commande lsof utilisant le paramètre -p afin d’identifier les fichiers ouverts par le noyau de votre serveur, via le processus identifié.

root@monserveur:/# lsof -p 7908
COMMAND  PID     USER   FD   TYPE     DEVICE SIZE/OFF      NODE NAME
perl    7908 www-data  cwd    DIR      0,147     4096  65774431 /var/www/vhosts/monserveur.ispfr.net/www/images/partenaires
perl    7908 www-data  rtd    DIR      0,147     4096  64882566 /
perl    7908 www-data  txt    REG      0,147     6928  64907675 /usr/bin/perl
perl    7908 www-data  mem    REG      0,147    80712  66365480 /lib/libresolv-2.11.3.so
perl    7908 www-data  mem    REG      0,147    22928  66365674 /lib/libnss_dns-2.11.3.so
perl    7908 www-data  mem    REG      0,147    51728  66365701 /lib/libnss_files-2.11.3.so
perl    7908 www-data  mem    REG      0,147    43552  66365618 /lib/libnss_nis-2.11.3.so
perl    7908 www-data  mem    REG      0,147    89064  66365442 /lib/libnsl-2.11.3.so
perl    7908 www-data  mem    REG      0,147    31616  66365673 /lib/libnss_compat-2.11.3.so
perl    7908 www-data  mem    REG      0,147    17640  42543840 /usr/lib/perl/5.10.1/auto/Digest/MD5/MD5.so
perl    7908 www-data  mem    REG      0,147    13992  42543857 /usr/lib/perl/5.10.1/auto/MIME/Base64/Base64.so
perl    7908 www-data  mem    REG      0,147    25976  36315140 /usr/lib/perl/5.10.1/auto/Socket/Socket.so
perl    7908 www-data  mem    REG      0,147    86072  42550019 /usr/lib/perl/5.10.1/auto/Storable/Storable.so
perl    7908 www-data  mem    REG      0,147    18120  36241410 /usr/lib/perl/5.10.1/auto/Fcntl/Fcntl.so
perl    7908 www-data  mem    REG      0,147    19920  36282369 /usr/lib/perl/5.10.1/auto/IO/IO.so
perl    7908 www-data  mem    REG      0,147    35104  66365563 /lib/libcrypt-2.11.3.so
perl    7908 www-data  mem    REG      0,147  1437064  66365693 /lib/libc-2.11.3.so
perl    7908 www-data  mem    REG      0,147   131258  66365502 /lib/libpthread-2.11.3.so
perl    7908 www-data  mem    REG      0,147   530736  66365430 /lib/libm-2.11.3.so
perl    7908 www-data  mem    REG      0,147    14696  66365682 /lib/libdl-2.11.3.so
perl    7908 www-data  mem    REG      0,147  1494792  65005681 /usr/lib/libperl.so.5.10.1
perl    7908 www-data  mem    REG      0,147   128744  66365635 /lib/ld-2.11.3.so
perl    7908 www-data    0r   CHR        1,3      0t0  64890531 /dev/null
perl    7908 www-data    1w  FIFO        0,8      0t0 880179538 pipe
perl    7908 www-data    2w  FIFO        0,8      0t0 880179538 pipe
perl    7908 www-data    3u  IPv4 2691366378      0t0       TCP monserveur.ispfr.net:41386->87.250.73.120:ircd (SYN_SENT)
perl    7908 www-data   54r  FIFO        0,8      0t0 875280500 pipe
perl    7908 www-data   55w  FIFO        0,8      0t0 875280500 pipe
perl    7908 www-data   56r  FIFO        0,8      0t0 875280501 pipe
perl    7908 www-data   57w  FIFO        0,8      0t0 875280501 pipe

On voit donc que la première ligne identifie le dossier incriminé : perl 7908 www-data cwd DIR 0,147 4096 65774431 /var/www/vhosts/monserveur.ispfr.net/www/images/partenaires

Le répertoire /var/www/vhosts/monserveur.ispfr.net/www/images/partenaires contient donc le fichier incriminé.

On ouvre donc dossier, afin de savoir ce qu’il contient :

root@monserveur:/var/www/vhosts/monserveur.ispfr.net/www/images/partenaires# ls
DeNia.phtml  image55.jpg  jrtv.jpg  d.jpg index.html   xml.phtml

Si l’on ouvre le fichier DeNia.phtml

?php
/*******************************************/
/* c99 injektor v.9 (C) 2011               */
/* Re-coded and modified By DeNia          */
/* #Denia@irc.allnetwork.org               */
/*******************************************/

On peut trouver alors quelques traces sur Internet de l’origine de l’attaque. On peut, dès lors, supposer que l’ensemble des sites sur votre serveur qui se trouvent sur le même CMS sont tous infectés de la même façon.

Les fichiers au format .jpg présents dans ce dossiers ne sont donc pas forcément tous légitimes; si l’on ouvre le premier de la liste :

# head image55.jpg 
#!/usr/bin/perl
use HTTP::Request;
use LWP::UserAgent;
use IO::Socket;
use IO::Select;
use Socket;
use MIME::Base64;
use File::Basename;
use URI::Escape; 
use Digest::MD5 qw(md5_hex);

On peut voir qu’il s’agit là d’un script malveillant. Idem pour l’image suivante :

# head d.jpg
#!/usr/bin/perl

use HTTP::Request;
use HTTP::Request::Common;
use HTTP::Request::Common qw(POST);
use LWP::Simple;
use LWP 5.64;
use LWP::UserAgent;
use Socket;
use IO::Socket;

Éliminer le problème

Il convient, une fois que l’on est sûr d’avoir identifié les scripts malveillants, de couper court à la menace.

Pour cela, un moyen simple et radical fonctionne très bien :

cd /le/chemin/de/mon/dossier/contenant/les/fichiers/infectés/
chmod -R 0 *

Puis on coupe court à l’activité du botnet :

kill -9 7908

(7908 correspondant bien sûr au PID du script)

Mise à jour

Les CMS ne font pas exception au besoin de mise à jour. Il est donc primordial de s’occuper de la mise à jour de vos CMS de la manière la plus suivie possible.

Nous vous invitons à vous tourner vers votre administrateur système au besoin, dans le cas où cette documentation ne vous serait pas suffisante.

Mis à jour le 12 juin 2020

Articles connexes