Un día te encuentras con la sorpresa de que tu sitio web se ha convertido (con suerte) por arte de magia en una tienda de zapatillas de deporte. Si tú no has tocado nada, ¿qué ha podido ocurrir?
Pues siento decirte que tu WordPress ha sido hackeado. Pero es que además, la cosa no viene de ayer… habrán entrado en tu sitio hace días o semanas y ha sido ahora cuando ha explotado la bomba.
Tabla de Contenidos
Caso 100% real
En este caso, os voy a poner un caso real que nos ocurrió hace unos meses con un cliente donde conseguimos dejar el sitio totalmente limpio y recuperar la visibilidad orgánica en cuestión de pocas semanas.
¿Cómo han podido entrar?
Puede haber sido de diferentes maneras, piensa que WordPress es el CMS más utilizado del mundo y por lo tanto, el que más ataques recibe.
Vulnerabilidad de día 0
Generalmente, suele ser debido a alguna vulnerabilidad en algún plugin o theme. Los hackers detectan una falla de seguridad en cualquiera de estos, generalmente en los más populares, y rastrean la red en busca de aquellos sitios web que lo tengan instalado. Después de eso, entran en esa “casa” sin hacer ruido, sentarse en el sofá y esperar a montar la “fiesta” pasados unos días.
Contraseñas inseguras
Otra de las posibilidades suele ser el tema de las contraseñas de los administradores. Contraseñas vulnerables con una facilidad pasmosa de ser descifradas por los bots.
Para que te hagas una idea, tener una contraseña de 14 números (si 14) es descifrada por un bot en cuestión de 3 minutos.
Por ello, siempre se recomienda que se utilice una combinación aleatoria de números, letras en mayúscula y minúscula y símbolos.

Yo utilizo una herramienta llamada 1Password, la cual genera contraseñas automáticamente de decenas de caracteres combinados y las almacena en bóvedas. Yo, evidentemente no me se ninguna de ellas… solo tienes que saberte la contraseña maestra (y que esta sea a su vez compleja) y será la llave para poder acceder a todas las contraseñas guardadas.
¿Y ahora qué hago?
Lo primero que debes hacer es, si la web es de un cliente tuyo, hacérselo saber. Ser claro y transparente, hacerle partícipe en todo momento de la situación y de que estás encima tratando de solucionar el problema.
Una vez comunicado el problema, lo siguiente es comprobar si puedes acceder al backend (wp-admin). Si es así, podrías probar a instalar algún plugin de seguridad como Wordfence y hacer un análisis del sitio.
Si tu sitio es un ecommerce, utiliza un plugin del estilo WP All Import Export y descárgate todos los pedidos de los últimos 90 días.
También los productos o cambios que hayas realizado en las últimas semanas, puesto que vamos a hacer una restauración del sitio varias semanas atrás.
No puedo acceder al backend
Si se da el caso, como fue este, que no podíamos ni acceder al panel de administración de WordPress… lo que hicimos fue hacer un backup a un día anterior.
Aquí si podíamos acceder a todo el panel de administración, de hecho el sitio parecía estar sano y salvo de cualquier ataque (el bicho estaba dentro y volvería a explotar en cuestión de horas).
Una vez dentro, procedimos a descargar toda la información de productos, pedidos y cualquier otra relevante para importarlos en una instalación del sitio anterior en el tiempo.
Recuperar el site
Copia de seguridad
Esperemos que tuvieras hecha una copia de seguridad, si no… el problema es grave. Es del primer día de 1º de web, tener un backup configurado de tu sitio.
Plugins de backups
Actualmente hay decenas de opciones para hacer backups directamente desde WordPress o desde el servidor. Tienes plugins como UpdraftPlus, el cual realiza copias de seguridad y las almacena en una nube tipo Dropbox, Google Drive o similar.
Servidor
Desde el servidor es mucho más cómodo y fiable, siempre que las copias las tengas en otros sitios que no sean el propio servidor (eso es un fallo habitual y garrafal, ya que si entran en el servidor te dejan sin nada). De ahí, lo más aconsejable es utilizar la técnica 3-2-1 que viene a ser el hacer 3 backups de tus datos en 2 soportes diferentes y 1 en un lugar físico distinto.
Con esta técnica, salvo apocalipsis zombie, tus sitios estarán seguros y serán fácilmente recuperables.

Restauración
Efectuamos la restauración lo más alejado posible. Generalmente, cuando se configura un backup, se suelen guardar copias completas de hasta 8 semanas antes… por lo que restauraremos la copia más antigua que tengamos realizada.
Modo mantenimiento
Recordemos que el sitio está en producción, por lo que los usuarios pueden ver todo e interactuar con él haciendo compras o cualquier otra funcionalidad que tenga. Por ello será fundamental poner una página de “Mantenimiento activado” para poder nosotros trabajar y que el usuario no se encuentre con sorpresas.
Intenta que esta página esté trabajada, no sea un texto sobre un fondo blanco. Que siga la línea corporativa de la web, con el logotipo de la empresa y diferentes formas de contactar visibles para no perder posibles ventas para tu cliente.
Limpieza de archivos
Una vez tenemos el sitio restaurado y con el modo mantenimiento activado, toca hacer una revisión de los archivos.
Para ello, realizaremos una instalación (puede ser en servidor local o en un subdominio de pruebas en remoto) con los mismos plugins y theme que tenga el sitio infectado.
Una vez tengamos todo esto hecho, nos dispondremos a comparar los archivos de esa instalación que hemos realizado con la del backup del sitio infectado. Esto lo hacemos para intentar detectar cualquier archivo extraño, susceptible de que pueda ser malicioso.
Para esta tarea podemos utilizar una herramienta como Winmerge. Lo que hace esta herramienta es comparar 2 directorios y destacar los archivos o carpetas que no están en alguno de ellos.
Si detectamos cualquier archivo sospechoso, investigamos su función (Google nos ayudará para eso) y si huele a podrido lo ponemos en cuarentena (descargar y eliminar).

Puede darse el caso de que detectemos algún archivo malicioso, lo eliminemos y al poco tiempo vuelva a aparecer otro similar, esto es porque desde la base de datos lo está inyectando.
Limpieza de base de datos
Esta es una tarea más compleja y que requiere de conocimientos de SQL.
Por suerte, tenemos a nuestra disposición herramientas que pueden salvarnos la vida, hay diferentes plugins que rastrean la base de datos y detectan irregularidades como es el plugin de Wordfence.
Realiza un escaneo de la base de datos (y también de la instalación de archivos) y te avisa de todo aquello que tiene mala pinta. Te da la opción de eliminarlo, como estamos hablando de un backup, en caso de que detecte cualquier posible malware, ni te lo pienses… a borrar.
Cuando hace el escaneo, también lo hace sobre todo el sitio detectando también posibles agujeros de entrada que tuvieras en tu sitio en esa instalación de hace varias semanas que has restaurado.
Cambio de contraseñas
Como hemos comentado al principio, las vulnerabilidades en plugins (que estas se solventan actualizando el mismo, en caso de que hayan sacado actualización parcheando el problema, o desinstalando dicho plugin hasta nueva orden) y las de contraseñas sencillas de romper son 2 de las principales entradas por hackers en una instalación de WordPress.
Por ello, Wordfence te avisará si hay usuarios con contraseñas vulnerables. De todas maneras, sería de vital importancia que aquellos usuarios con roles de gestores de tienda o administradores utilizaran contraseñas complejas.
Plugins de seguridad
Además, existen plugins como Limit Login Attempts Reloaded que evita los ataques masivos por bots para intentar reventar la contraseña a base de prueba y error.
Sumado a esto, con Wordfence tienes la posibilidad de un login 2FA. Esto es un factor de doble autenticación, donde además de tener que poner tu contraseña, tendrás que incluir un código de 6 dígitos que va cambiando cada 30 segundos y que lo has de tener configurado en tu smartphone con APPs del estilo de Microsoft Authenticator y Google Authenticator o en el propio navegador a modo de extensión.
Actualizaciones
Para tapar todos los agujeros posibles, actualiza frecuentemente todos los plugins, themes y el core de WordPress. Al hacer el escaneo con Wordfence te habrá detectado las faltas de actualizaciones, pero por si acaso, revísalo de manera manual.
Además, te aconsejo que si tienes plugins desactivados sin utilizar en el site, los elimines.
Actualizaciones automáticas, si o no
Configurar las actualizaciones automáticas de WordPress es posible desde la versión 5.6 Esto está bien pero el problema con el que nos encontramos es que perdemos el control sobre el sitio, pudiendo darse el caso de roturas del sitio por incompatibilidades entre plugins.
Por ello, te recomiendo que revises periódicamente el sitio y hagas las actualizaciones manualmente. Por ejemplo, con una tarea recurrente cada lunes en Trello, Google Calendar o con el gestor de tareas que trabajes para organizar el trabajo.
Indexación
Una vez parece que tengamos el sitio limpio, toca ver el daño que nos ha hecho a nivel de visibilidad. Este paso suele ser el gran olvidado ya que una vez limpio el sitio, se cree que ya está hecho todo… y solo estamos a mitad de camino.
Indexación en Google
Depende de la autoridad del sitio, de la frecuencia con la que se publicara contenido, de las visitas que recibiese… Google pasaría más o menos frecuentemente el rastreo de su bot.
En nuestro caso, pasamos de tener poco más de 600 urls indexadas a 200K. Evidentemente, todas estas URLs del sitio hackeado son URLs automáticas, con escaso o nulo contenido, con enlaces a sitios 100% SPAM y con unos errores de optimización a nivel mobile de escándalo.


Detectar patrón
Ahora lo que tenemos que hacer es ver las URL indexadas e intentar atajar el problema de raíz. Para ello, debemos dirigirnos a Google Search Console, en el apartado de índice en “Páginas”.
GSC nos arroja un muestreo de 1000 resultados, recordamos que tenemos 200.000 URLs indexadas por lo que solo tenemos una muestra de lo que Google ha rastreado e indexado.
Por eso, debemos de estudiar muy bien esa muestra, lo mejor será que nos exportemos a un excel esas 1000 URLs y veamos qué tienen en común. Separando las URLs correctas de las que no deberían estar, son estas últimas las que tenemos que mirar con lupa.

Como podemos ver son URL generadas de manera automática, sin un sentido semántico lógico y que sería una tarea de chinos ir desindexando una a una.
Por ello tenemos que ver lo que todas comparten, el patrón que se repite en la mayoría. Son conjuntos de caracteres alfanuméricos, algunos separados con guiones y en los que en algunos casos acaba en .htm o .html
Expresiones regulares
Los Regex o expresiones regulares son un gran aliado para el SEO. Tener conocimientos en este tipo de lenguaje es fundamental para poder solventar cualquier tarea de manera rápida y eficaz.
Lo sencillo sería pensar, bueno hay gran parte que acaban en .htm o .html y mi instalación de WordPress no tiene urls así, por lo que puedo hacer un Redirect gone /(.*).htm(.*) y arreglado. Y no, te estarías cargando el sitio entero.
Puesto que aunque las URL no acaban con html, muchos de los elementos que lo componen si, por lo que el sitio se rompería.
Hay que sacar el bisturí e intentar hacer que con expresiones regulares encaje todo.
Aunque en la muestra que vemos todas las URI empiezan por carácter alfabético, puede darse el caso de que en el global este sea un número o un símbolo. Por lo que comenzaremos por (.*) que significa “cualquier cosa”.
Precedido a este si que vemos que la nota predominante son las letras en minúscula por lo que pondremos un ([a-z]+), que no es más que cualquier carácter de la a a la z, una o más veces.
Después, le sigue una cadena de números. En algunas cadenas hay 3, en otras 4 y hasta 5 números seguidos. Por lo que tendríamos que ponerle (\d{3,}), que viene a ser una cadena compuesta de cualquier dígito 3 o más veces.
Después de esto la URL acaba o vuelven a aparecer a veces más cadenas de letras o algún símbolo. Por lo que podríamos cerrarlo con un (.*)
Redirect gone
Vamos a tocar el archivo .htaccess. Este es un archivo ultra delicado, por lo que aconsejo que hagas una copia en tu ordenador de todo tu sitio antes de nada.
El archivo .htaccess lo vas a encontrar en la carpeta raíz y puedes editarlo con cualquier editor de texto o editores de código como Sublime Text o Visual Studio Code.

La directiva Redirect gone o Redirect 410 es un código que incluimos en el .htaccess para indicarle al bot de Google que quieres que esa URL que tiene indexada en tu sitio ya no está y quieres que la elimine.
Esto parece muy sencillo, pero hay que tener paciencia porque Google pasará, lo leerá pero no lo lo aplicará de manera automática. Volverá a pasar más veces para comprobar que sigue esa señal incluida y lo acabará borrando.
Ojo, cuando esté borrado, si quitas tu redirect 410… Google puede sorprenderte y volver a mostrarlo. Por lo que te aconsejo que lo dejes en tu .htaccess, al menos durante mucho tiempo.
Teniendo ya un patrón, podremos generar un Redirect gone o Redirect 410 y que al incluirlo en el .htaccess haga que todas esas URLs maliciosas en lugar de dar un error 404 den un 410 y mandemos señales a Google de que queremos que desindexe todo lo que no nos interese.
En este caso le vamos a decir lo siguiente
RedirectMatch gone ^/(.*)([a-z]+)(\d{3,})(.*)$
Con esto tendremos el patrón cubierto y solo tendremos que esperar a que Google vaya pasando, leyendo y ejecutando la desindexación. Esta la hará de manera progresiva.
Seguimiento
De manera semanal, tendrás que ir revisando el progreso de desindexación por parte de Google.
En el panel de Google Search Console, dentro de Índice en el apartado páginas indexadas podrás ver la evolución del mismo.
Es recomendable que cuando te descargues el muestreo de 1000 urls indexadas, las copies y con la herramienta Screaming Frog en modo lista hagas un barrido a ver si todas esas URLs «malas» dan estado 410. Si alguna se cuela y da 404, habrá que reajustar ese REGEX para que abarque esas que se van colando.

De manera periódica deberías de tener contacto con el cliente para informarle de la situación y de cómo va la evolución de la desindexación y por tanto, la vuelta a la normalidad del site.

Por finalizar apuntar que, a día de hoy, el site está totalmente sano y con una recuperación de visibilidad y evolución muy positiva en cuanto a resultados orgánicos y ventas en el ecommerce.