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.