Hoy te traigo un post de invitado, donde Nacho, responsable de isanlab, nos habla sobre cómo desinfectar un WordPress hackeado, uno de los caballos de batalla a los que nos podemos enfrentar si no tomamos las precauciones debidas desde el principio en nuestro sitio web. Espero que te resulte interesante. Te dejo con él.
El descubrimiento
Sí, ha llegado ese día que habías oído hablar, que has leído por la red que aunque no tiene porque, puede pasar. Te has levantado, has ido a ver que todo está correcto en tu web o proyecto y lo que ves es un mensaje de que tu web ha sido hackeada.
O peor aún, ni te has dado cuenta y lleva días o meses hackeada y si nadie se da cuenta y te avisa, así seguirá por mucho tiempo.
En muchos casos, hay clientes que contratan mis servicios de Soporte para WordPress cuando ya ha sido infectado y ha tardado mucho en darse cuenta. Esto ocurre cuando el código que se ha inyectado realiza envíos de spam a través de la web o crea multitud de páginas ocultas en el backoffice para el dueño, pero legibles para Google.
Tanto es así que si realizamos una búsqueda en Google llegamos a ver miles y miles de url’s indexadas que no tienen nada que ver con la web. Por ejemplo una vez llegué a ver indexadas casi 14000 páginas en una web corporativa que sólo tenía cinco creadas por el dueño.
Una vez ha llegado el día D, te preguntarás cuáles son los pasos más importantes para recuperar un WordPress hackeado.
La concienciación
Aunque suene muy habitual, uno de los puntos más importantes y que a día de hoy se sigue incidiendo en el por parte de las empresas de seguridad informática, es concienciar al usuario de un buen uso y de utilizar medidas preventivas:
- Utiliza contraseñas difíciles. Sí, cuesta recordarlas, pero es totalmente necesario. De nada nos vale tener la web en wordpres más bonita, si luego tenemos disponible la url de login y una contraseña 1234.
- No utilices plantillas ni plugins nulled. Empiezas a montar tu web y ves un theme que te gusta pero es de pago y decides buscarlo gratis. Puede que te ahorres unos euros pero estás construyendo tu casa online con unos cimientos no del todo seguros.
Esa plantilla o ese plugin que instalas pirata puede traer líneas de código que a la larga te darán dolor de cabeza.
Mantén al día tu instalación de WordPress. Actualiza según vayan saliendo las nuevas versiones de la plantilla, del propio WordPress y lo más importante, de los plugins.
Asegurarse de que la web contiene un malware
Estás bastante seguro de que tu wordpress contiene algún tipo de malware o algún archivo ha sido modificado. Lo intuyes porque al cargar tu url, Google muestra un aviso del tipo:
O porque desde la empresa de hosting dónde alojas tu web te han avisado de que estás consumiendo muchos recursos. O que te han tenido que desactivar temporalmente el servicio porque estás haciendo envío masivo de mails. O porque has descubierto cientos de urls con productos de farmacia en tu web. O porque directamente la estética de tu web ha cambiado completamente. O el peor de los casos, no puedes acceder al panel de administración.
Como puedes ver son varias las posibilidades, por eso vamos a utilizar alguna herramienta para asegurarnos de ello.
Puedes utilizar un antivirus a nivel de servidor, para ello contacta con tu proveedor a ver si disponen de uno instalado y que analicen tu web.
La otra opción de antivirus es online. A través de la herramienta de análisis de Sucuri
Otra herramienta que te recomiendo y que se utiliza bastante, es Virus Total. Con ella puedes no sólo analizar una url, también subir archivos sueltos o comprimidos, por ejemplo todas las carpetas que forman tu web.
A nivel local, otra posibilidad que tenemos, y que yo personalmente utilicé una vez y me dio resultado para encontrar código malicioso, es descargarnos todos los archivos de la web y pasarlo por un antivirus, como puede ser el famoso Avast.
En caso de tener acceso al panel de administración de nuestra web, también podemos utilizar algún plugin de escaneo como es el Anti-Malware Security
Este plugin hará un escáner muy completo de todos tus archivos y te dirá si alguno de ellos es sospechoso de estar infectado.
Primer paso: limpiar los archivos de configuración de WordPress
Ahora ya sí, vamos a ver cómo podemos reparar un WordPress hackeado.
Hay que saber que tenemos dos posibilidades:
- Sacar el hacha e ir directos a cambiar todos los archivos por unos nuevos y limpios.
- Ir en busca del código inyectado y eliminarlo.
La realidad es que la opción de buscar el código es bastante laboriosa y muchas veces será casi imposible dar con él. Por eso nos ponemos en el caso de que vamos a restaurar toda nuestra web por una copia nueva y limpia.
Es probable que ya lo sepas, pero por si acaso te cuento que las carpetas y archivos de WordPress podríamos dividirlas en dos grupos:
- Todo lo necesario para el funcionamiento de WordPress por un lado.
- Todo lo que añade funcionalidades como la plantilla, los plugins y las imágenes que vamos subiendo por otro.
Si nos fijamos en la estructura que deja tras la instalación un WordPress, la carpeta wp-content es la que contiene plantilla, plugins, fotos, vídeos, etc.
Lo primero que vamos a hacer es una copia de seguridad, que aunque esté infectada, siempre es importante hacer copias antes de cualquier cambio. Así como hacer copias de seguridad de toda tu web WordPress de forma periódica.
Para ello nos descargamos:
- carpeta wp-content
- los archivos robots.txt y .htaccess
- y el wp-config.php
Ahora vamos a descargarnos un WordPress nuevo y limpio, pero siempre la misma versión que estuviéramos usando en la web hackeada. Desde el sitio oficial de WordPress podremos buscar y descargar el .zip
Utilizando algún gestor de archivos FTP, o desde la cuenta CPanel de nuestro hosting, debemos eliminar todo el WordPress (excepto lo que hemos copiado antes) es decir borramos wp-admin, wp-includes y todos los archivos sueltos menos el config, robot y htacccess.
Y subimos estos mismos archivos limpios desde la versión de WordPress que habíamos descargado.
Es importante hacer hincapié en que lo mejor es borrar y luego subir los nuevos ficheros, en vez de copiar y que se sustituyan. Así nos aseguramos de que estamos haciendo correctamente limpieza de todo aquel fichero que no debería estar ahí.
Con esto ya tenemos un paso dado, hemos dejado nueva la instalación del WordPress de nuestra web.
Segundo Paso: Limpiar plugins y plantilla
La forma más que probable por el que nos han hackeado WordPress es que haya sido por algún plugin o theme y una vulnerabilidad que este tuviera. O directamente por, como ya he comentado, utilizarlos nulled, es decir descargados gratuitamente de fuentes no fiables.
El paso que ahora vamos a dar es parecido al primero pero mucho más importante.
Debemos descargarnos desde la fuente original la plantilla que estemos utilizando y sustituir los ficheros de la carpeta con el nombre de la plantilla dentro de /wp-content/themes/ por los recién descargados.
Si hiciste algún cambio directamente en estos ficheros y no utilizaste un child theme, perderás dichos cambios.
Si es así habrás aprendido lo importante que es crear y para qué sirven los child theme.
El siguiente paso a dar es repetir lo que hemos hecho hasta ahora pero con las carpetas que contienen los plugins. Tendremos que descargar los plugins limpios desde sus respectivos repositorios e ir sustituyendo.
Es decir, borrar de la ruta /wp-content/plugins/ la carpeta de cada uno de los plugins y copia los nuevos ficheros.
Medidas de refuerzo tras recuperar WordPress hackeado
Cambiar las contraseñas
Una medida importante que debes tomar es cambiar todas las contraseñas que tengan relación con tu web.
- Cambia la contraseña de todos los usuarios con nivel administrador.
- Cambia la contraseña de acceso a tu panel de hosting.
- Aunque no hagas mucho uso del FTP, cambia la contraseña.
- Y por último cambia la contraseña del usuario de la base de datos.
Los dos últimos pasos podrás hacerlos desde Cpanel o desde el panel que te de tu proveedor de hosting en su caso:
- Si utilizas Cpanel tendrás que ir a la sección Base de Datos->Bases de Datos MySQL->Usuarios Actuales->Cambiar contraseña.
- Una vez la hayas cambiado es importante que la actualices en el wp-config.php porque si no la web no funcionará al no conectar con la base de datos.
Abres el fichero y en esta línea, cambia la contraseña:
/** Tu contraseña de MySQL */ define('DB_PASSWORD', 'contraseñavieja');
Y aprovecha para revisar este fichero buscando alguna línea o texto que sea sospechoso. También puede darse el caso de que hayan llegado a modificarlo.
Cambiar las claves de autentificación de WordPress
Como este no es un post sobre qué son dichas claves, vamos a dejarlo en que son importantes y pocos usuarios de WordPress hacen uso de ellas.
En el mismo fichero de antes, el wp-config.php podrás ver estas líneas:
define('AUTH_KEY', 'pon aquí tu frase aleatoria'); // Cambia esto por tu frase aleatoria. define('SECURE_AUTH_KEY', 'pon aquí tu frase aleatoria'); // Cambia esto por tu frase aleatoria. define('LOGGED_IN_KEY', 'pon aquí tu frase aleatoria'); // Cambia esto por tu frase aleatoria. define('NONCE_KEY', 'pon aquí tu frase aleatoria'); // Cambia esto por tu frase aleatoria. define('AUTH_SALT', 'pon aquí tu frase aleatoria'); // Cambia esto por tu frase aleatoria. define('SECURE_AUTH_SALT', 'pon aquí tu frase aleatoria'); // Cambia esto por tu frase aleatoria. define('LOGGED_IN_SALT', 'pon aquí tu frase aleatoria'); // Cambia esto por tu frase aleatoria. define('NONCE_SALT', 'pon aquí tu frase aleatoria'); // Cambia esto por tu frase aleatoria.
Esto en caso de que no las pusieras en su momento, porque si las añadiste, dónde pone ‘pon aquí tu frase aleatoria’ tendrás una ristra de números, letras y símbolos.
Pues bien, estas son las que vamos a cambiar o añadir de nuevas. Para ello vamos a https://api.wordpress.org/secret-key/1.1/salt/
Nos saldrá lo mismo que antes pero con las claves generadas. Sólo basta con copiar y sustituir, y lógicamente guardar los cambios.
Utilizar plugins de seguridad
Como ya has sufrido en tus propias carnes, la seguridad en WordPress a pesar de ser bastante buena, no es infalible. Por eso es importante que te tomes tiempo para aplicar varios puntos de refuerzo en seguridad. Echa un ojo a este artículo donde Juanma te daba algunos consejos de seguridad en WordPress.
Como punto principal puedes instalar el plugin Wordfence. Es uno de los más utilizados y bastante fiable siendo a la vez antivirus, firewall e incluso detecciones en tiempo real.
Cambiar de proveedor de hosting
A lo mejor tras todo este periplo de desinfección de tu WordPress ha llegado el momento de plantearte cambiar de hosting.
No es cierto que la infección de tu web haya llegado por culpa de la seguridad en el hosting, ni mucho menos. Pero todo suma y un buen servidor con medidas de seguridad bien planteadas, es importante.
Decirle a Google que ya estamos limpios
Si tu web fue hackeada y mostraba el aviso que vimos al principio, es porque Google lo tenía detectado y te había puesto el “cartel de infectado”.
Esto se puede ver si accedes a Search Console, desde el menú Problemas de Seguridad.
Una vez has limpiado todo rastro de malware podremos pedir a Google que reconsidere la web haciendo uso de la herramienta Solicitar una Revisión que verás en el mismo menú anterior junto al aviso de que tu web contiene software malicioso.
Deberás describir un pequeño informe de las medidas que has tomado y cómo has puesto solución al hackeo y enviarlo. Esperar que revisen tu web y serás informado vía mail del resultado.
Si todo se ha hecho bien no debería haber problema para que Google te quite las advertencias.
Conclusiones
Como habrás podido ver, recuperar una web en WordPress que ha sido vulnerada e infectada con algún código malicioso, no es del todo complicado.
Tendrás que tener paciencia e ir realizando con cuidado todos los pasos explicados, hasta llegar a tener nuevamente tu web limpia y operativa.
Sí es cierto que la infección puede haber llegado un paso más lejos y tener la base de datos código inyectado. En este caso la recuperación es más complicada porque habría que buscar ciertos patrones que se utilizan como código malicioso, entre todas las tablas.
Y también es cierto que a veces con éstos pasos puede que no se llegue a una limpieza completa y habría que sacar más artillería y una lupa de mayor profundidad para buscar dónde está el problema.
Pero en general, los hackeos habituales en WordPress suelen solucionarse con estas pautas de limpieza.
No quiero terminar sin volver a comentar la importancia de tomar precauciones desde el principio con medidas de seguridad, a través de plugins, buen servidor y de sentido común con las contraseñas. Y tapoco estaría de más si decidieras contratar un servicio de mantenimiento para WordPress por profesionales.
Ahora te toca a ti. ¿Has tenido alguna vez un WordPress hackeado? ¿Cómo llegaste a solucionarlo?
Fíjate que tengo un caso similar, la cosa es que me salen muchísimos anuncios de todo tipo al presionar alguno de los botones del menú. Ojo esto ocurre solo cuando me direccionan desde google a mi sitio, es decir, que el usuario busque la página por nombre, sale en la primera posición, le das click y listo pasa todo lo anterior. Cabe mencionar que solo sale una vez al día, es decir, un usuario le da click y sufre todo lo anterior descrito, los usuarios subsecuentes no tienen mayor problema. Igual si tecleas la dirección del sitio completa no hay ningún spam ni malaware, ¿Alguna idea que pueda ser? ya intente buscar código malicioso y nada. Según yo podría ser que google no esta activando el certificado ssl al abrir desde su navegador la página. ¡Ayuda!
Hola Jose Luis, así de primeras me choca que tenga algo que ver con el ssl. Pinta más a un hackeo, en alguna ocasión he visto casos como el que comentas de que solo algunas veces se redirecciona al usuario desde la web buena a una pirata. No te se decir qué puede ser porque es un caso que habría que mirar más a fondo. Puede que el hackeo esté a nivel base de datos, revisa en ella que no haya nada extraño.
Saludos
Hola, muy bueno el artículo, quería preguntar, yo por un problema similar tuve que eliminar por cpanel varias carpetas, incluso ya borré todo el contenido permanentemente de la carpeta PUBLIC_HTML pero cuando quiero hacer una instalación con el Worpress Manager desde cpanel me dice que todavía tengo una instalación activa. ¿Cómo puedo hacer para que eso ya no salga e instalar wordpress de nuevo?
HOla, eso es problable que sea porque aunque borres en el CPanel, quede algún resto al que no puedes acceder y no te permite crear una nueva instalación de WordPress con mismo nombre, por ejemplo suele suceder al borrar una bb.dd y querer crearla de nuevo con mismo nombre.
Yo te diría que preguntaras a tu hosting para que lo echen un ojo.
Saludos
Acabo de instalar el Sucuri y me dice esto “Se modificaron archivos del núcleo de WordPress. Hemos identificado que algunos de tu archivos del núcleo de WordPress fueron modificados. Esto podría indicar que hay un hackeo o un archivo roto en tu instalación.”
Pero la cosa es que la web veo que funciona normalmente no tiene ningún problema.
Algún plugin para pasarle a ver si tiene Malware????
Qué me recomiendas que haga???
Hola Pachi
Puede ser perfectamente un falso positivo. A veces te indica que se ha modificado un archivo y es porque realmente se ha modificado pero no por un “hackeo”, si no porque WordPress ha hecho algún cambio en sus archivos base.
Lo mejor en estos casos ver en qué archivo te indica el cambio, irse a la web oficial de WordPress y descargar la última versión limpia, buscar ese archivo y comparar con el que tienes.
Puedes probar también el plugin: https://es.wordpress.org/plugins/gotmls/ y https://es.wordpress.org/plugins/wordfence/ que te indicará si realmente existe esa modificación y te mostrará de un vistazo las diferencias.
Y cuando las tengas delantes es valorar si realmente ese cambio es “extraño” o no.
Saludos !!
Excelente post! Aprovecho para consultarte si sabes algo de un virus que convierte tu web en japones, es el problema que ando atravesando y ni puedo acceder a la cuenta wp-admin del sitio. Gracias de antemano.
Hola Jorge, me alegro que el post te haya parecido interesante.
Así de primeras no me suena nada concreto que haga eso, poner en japonés tu web. Imagino que lo que ha sucedio es que el hackeo viene de alguien de ese país, pero a saber, habría que mirarlo más profundo.
Lo de wp-admin es porque no te carga esa url ? prueba a revisar en la base de datos no hayan cambiado la ruta y ahora sea otra.
Saludos
Hola Jorge!
Lamentablemente cada vez son más frecuentes los intentos de acceso desde países de Asia y una vez que entran, son capaces de hacer cualquier cosa. Yo en mis proyectos instalo SecuPress y activo el cortafuegos por países. Después dejo activo solo los países de los que quiero recibir visitas, bloqueando Asia, Europa del Este, etc etc.
En tu caso, yo te recomendaría que, si tienes acceso al Panel de Control de tu hosting, accedas a la base de datos y cambies usuario y contraseña del administrador y, después, vayas al archivo wp-config y cambies el idioma al Español buscando esta línea
define("WPLANG", "es_ES");
Un saludo y suerte!
Gracias muy buen post lo voy a pone r en práctica esta semana.
Hola Oscar, que tengas que ponerlo en practica no es buena señal, porque quiere decir que algo le ha pasado a tu web… Ahora a remangarse y limpiarla, cualquier duda que te pueda surgir en el proceso lo comentas.
Saludos !
Ignacio Sancho eres un crack! muy buen post!
Hola Gerardo, muchas gracias, me alegra que te haya gustado el post.
Ah y puedes llamarme Nacho, sobre todo porque no me acostumbro a leer mi nombre y apellido así jejejej