Ciberseguridad Imagen #3

Cómo limpiar el malware de una instalación WordPress

Publicado

en

,

por

Este artículo te guía por todas las fases para limpiar malware en tu instalación, comenzando por asegurarte de que realmente tienes malware: cómo distinguir los indicadores fiables de una infección de otros problemas técnicos, cómo cerrar de inmediato las vías de acceso comprometidas, cómo reunir evidencias, qué hacer con tus copias de seguridad y cómo eliminar el malware tanto de los ficheros como de la base de datos.

Para cada fase se proponen varias líneas de actuación, desde las más rápidas hasta las más exhaustivas, para que puedas elegir el enfoque adecuado a tu situación.

¿Seguro que tu instalación contiene malware?

La mayor parte del contenido que vas a encontrar en Internet para ayudarte a limpiar el malware de tu instalación, no se cuestiona algo tan básico como esta pregunta. Sin embargo, ¿se te ocurre algo peor que descubrir que estás dedicando un tiempo precioso de tu trabajo (y el de otros) a tratar de resolver un problema que no existe?.

Por esta razón, vamos a empezar por la primera pregunta que debes hacerte aunque parezca obvia.

¿Por qué piensas que tu instalación contiene malware? En ocasiones puede parecer obvio, pero en otras puede no ser tan claro.

Indicadores de que tu instalación ha sido atacada

Aspectos que son indicadores bastante fiables de que tu instalación puede contener malware:

  • Tu sitio dirige a páginas o contenidos que no han sido añadidos por vosotros.
  • Aparece algún contenido inapropiado o imprevisto en vuestras páginas que nadie ha creado internamente.
  • Aparecen usuarios en la administración que no han sido creados por vosotros.
  • El resultado de un escaneo de un plugin de seguridad indica que tu instalación podría contener malware.
  • El resultado de un escaneo de un servicio externo de seguridad indica que tu instalación podría contener malware.

Indicadores de que podría tratarse de algún otro problema

Aspectos que, a falta de más evidencias, pueden ser indicadores de que existen otros problemas distintos del malware:

  • Algún plugin se desactiva automáticamente sin entender las razones para ello.
    • Puede ser un síntoma de que existen errores en tiempo de ejecución o problemas de compatibilidad entre componentes.
  • Ha aparecido algún plugin en la instalación que nadie recuerda haber instalado.
    • Existen plugins que, durante su instalación, pueden instalar otros plugins de forma más o menos inadvertida.
  • Todo el sitio web o alguna de sus páginas funciona muy, muy lento.
    • Puede ser un síntoma de problemas de optimización, errores en tiempo de ejecución, problemas de compatibilidad, etc.

¿Qué vías existen para añadir o instalar malware en el sitio web?

Pueden ser muy variadas; las más habituales serán:

  • Los propios usuarios «legítimos» que existen en la instalación: una de las vías más frecuentes, puede ser debida a:
    • Uso de contraseñas vulnerables;
    • Falta de seguridad en el control de accesos a la administración;
    • Falta de seguridad en los equipos de los usuarios «legítimos» de la instalación que pueden contener virus;
    • Un exempleado que ha dejado la organización pero que todavía dispone de acceso;
    • El usuario de un proveedor de servicios que es utilizado por uno de sus exempleados con fines maliciosos;
    • Un empleado que facilita un acceso indebido a la instalación engañado por ingeniería social;
  • Vulnerabilidades existentes en la instalación o en el equipo del usuario:
    • Suelen estar ligadas a componentes desactualizados en la instalación o en el equipo del usuario.
    • Pueden ser debidas a código que no está protegido suficientemente:
      • Falta de sanitización, parametrización o escape;
      • Falta de protección de directorios;
      • Ficheros de log que no debrían ser visibles;
      • Recursos de programación accesibles para usuarios no autorizados;
      • Falta de seguridad en las cabeceras HTTP
      • etc.
  • Componentes (temas o plugins) obtenidos desde fuentes no fiables, o que no reúnen las condiciones para generar una mínima confianza.
    • Temas o plugins descargados de fuentes no fiables.
    • Temas o plugins descargados desde el propio directorio de WordPress o desde fuentes de «confianza» muy desactualizados.

Usuarios «legítimos» fuera de la propia empresa

Es importante darse cuenta de que los usuarios «legítimos» de la instalación van más allá de la propia empresa; hay que contemplar:

  • Empleados de proveedores de servicios que cuentan con acceso a la instalación:
    • Por vías comunes: administración de WordPress.
    • Con privilegios: clientes SSH; acceso FTP ; panel de control Plesk o cPanel; a base de datos.
  • Empleados del proveedor de alojamiento (hosting) de la instalación, que normalmente disponen de vías de acceso privilegiadas a la instalación.

El tiempo de respuesta es fundamental

Los atacantes no necesitan mucho tiempo para causar un gran daño. Es fundamental que dispongas de mecanismos que te ayuden a detectar cualquier intrusión o la presencia de malware.

Algunas ideas:

  • Escaneos periódicos de malware con notificaciones de aviso a administradores.
  • Avisos automáticos de acceso a la administración de la instalación.
  • Avisos de modificación de contenidos en la instalación.

Un buen sistema de alertas, te ayudará a actuar lo antes posible.

Antes que nada, cierra el acceso a la instalación

El malware tiene que haber sido añadido o instalado en algún momento. Si no tenemos clara la procedencia del malware, el primer paso es tratar de cerrar todas las vías que pueden utilizarse para añadir malware. Si no hacemos este primer paso, podemos encontrarnos con que el malware que eliminemos vuelva a aparecer o que sea más difícil recuperar el acceso a la instalación.

Eso sí, si la infección es realmente grave y puede acarrear consecuencias legales (ej. brecha de datos personales; perjuicios económicos o de cualquier tipo a los usuarios de la instalación), recomendamos firmemente acudir a un empresa especializada en informática forense para seguir sus instrucciones y asegurarse de que antes de cada paso, se recogen las evidencias necesarias.

A modo de ejemplo, como mínimo, antes de cualquier actuación habría que guardar copia tanto de los archivos de la propia instalación como de los registros de actividad y el log de errores del servicio de hosting, estos últimos cubriendo un horizonte temporal lo más amplio posible (la infección puede provenir de mucho tiempo atrás antes de que se descubra). En ningún caso, tu reacción debería de borrar las huellas de la infección.

¿Cómo cerrar las vías de acceso a la instalación?

En función del impacto del malware y de la certeza con la que quieras eliminarlo, deberás elegir hasta qué nivel llevar este cierre.

Primer nivel.- cierre temporal del acceso a la instalación

Todos los pasos que hagamos para cerrar las vías de acceso van a resultar infructuosos si existe una forma para que el atacante vuelva a conseguir el control. La mejor recomendación es cerrar el acceso a la instalación utilizando algún recurso técnico que permita que solo los técnicos de confianza puedan acceder a la misma.

Solo cuando la instalación esté «limpia» y suficientemente protegida, deberías de abrir de nuevo el acceso.

Segundo nivel.- revisión de usuarios y cambio de contraseñas

Antes de tomar cualquier acción, habría que revisar la lista de usuarios con acceso y confirmar que son los debidos. Si alguno no debería de estar ahí, la mejor opción es borrarlo inmediatamente. Ten en cuenta que pueden existir usuarios en la base de datos que no sean visibles desde la administración; deberás revisar la tabla de usuarios directamente en la base de datos.

Tras esta revisión, para cerrar el acceso de todos los usuarios de WordPress, la mejor opción es crear un nuevo usuario de administración y bloquear el acceso a todos los usuarios existentes. Existen varias alternativas para dar este paso, pero asegúrate primero de que dispones de vías alternativas de acceso antes de llevarlo adelante.

Cuando el malware haya sido eliminado, cambia las contraseñas de todos los usuarios que no se eliminen. Normalmente, los usuarios legítimos podrán restaurar su contraseña utilizando el procedimient estándar de WordPress.

Tercer nivel.- cierre de accesos privilegiados y cambio de cuentas y/o contraseñas

Una vez cerrado el acceso a los usuarios, hay que cerrar los accesos más «técnicos» al servidor. Nos referimos al acceso al panel de control; a cuentas de acceso SSH; por FTP; al gestor de base de datos.

Lo mejor es borrar o desactivar los usuarios existentes y crear otros nuevos. Probablemente, aquí necesitarás la colaboración del proveedor de hosting para que te ayude a resolver rápido este punto.

Reúne evidencias de que tu instalación contiene o puede contener malware

En primer lugar guarda la copia de seguridad más reciente de tu instalación y todos los ficheros de registro (log) disponibles (de Apache y de la propia instalación). Será fundamental para investigar posteriormente qué ha ocurrido y cuándo comenzaron los problemas.

Otros ejemplos de evidencias a recopilar:

  • Guarda registro de cualquier aviso que recibas acerca de usuarios que han experimentado un comportamiento extraño en la instalación (ej., alarmas en algún antivirus, redirecciones a páginas de terceros).
  • Localiza ejemplos de temas, plugins, páginas, contenido, tablas en base de datos o cualquier elemento que haya aparecido y que resulte extraño.
  • Instala (si no lo has hecho ya) un plugin de seguridad en tu instalación, lanza un escaneo y confirma si se detecta malware. Ten en cuenta que estos plugins pueden devolver falsos positivos o incluso arrojar resultados no concluyentes, pero sin duda, son un buen primer paso para trabajar en la dirección correcta.
  • Escanea la instalación utilizando algún servicio de seguridad externo especializado en la búsqueda de malware.

Limpiando el malware de la instalación

A partir de aquí vamos a dar por hecho que existen evidencias de que la instalación podría contener malware.

Restaurando una copia de seguridad

¿Dispones de copias de seguridad de tu instalación? Si es así, esta puede ser la forma más rápida y menos costosa de solucionar el problema.

Trata de restaurar una copia de seguridad de tu instalación y comprueba si el malware ha desaparecido utilizando las evidencias que hayas reunido.

A la hora de seleccionar la copia de seguridad para restaurar tu instalación, deberás encontrar tu propia relación riesgo-beneficio:

  • Cuanto más antigua la copia de seguridad, más probable es que no incluya el malware, pero también pueden existir más diferencias con el contenido actual de tu instalación. O sea que puedes perder contenido e información relevante con la restauración.
  • Cuanto más reciente la copia de seguridad, más parecido será el contenido de tu instalación, pero más probable es que la propia copia contenga el mismo malware que intentas eliminar.

Nota técnica relevante: los atacantes suelen dejar infecciones latentes, entran una vez y esperan varios meses hasta activar el malware. Debes contemplar el riesgo de restaurar una copia de seguridad que también esté comprometida.

Otras vías para restaurar datos

Existen instalaciones WordPress bastante complejas, con aplicaciones de gestión, procesos automáticos, automatizaciones y datos transaccionales de los usuarios. En estos casos, la restauración de la copia de seguridad podría provocar una pérdida parcial de datos. Una parte de estos datos podrían restaurarse reejecutando procesos o automatizaciones. Aquí es fundamental contar con un conocimiento profundo de la instalación y buenos ficheros de registro (log) de la actividad.

Eliminando malware en frío o en caliente

A partir de aquí vamos a suponer que la restauración de copias de seguridad no es una solución en tu caso.

Se trata de una decisión muy relevante que va a condicionar la complejidad de los trabajos:

  • Eliminar el malware «en frío» supone «congelar» la instalación y dejarla sin servicio hasta que tengamos cierta seguridad en que el malware ha sido eliminado.
  • Eliminar el malware «en caliente» supone mantener el servicio de la instalación e ir dando pasos para tratar de eliminar el malware.

A la hora de tomar esta decisión, también debes valorar el riesgo que pueda suponer para los usuarios de la instalación mantenerla en servicio sabiendo que contiene malware. Ten en cuenta que, en función de la naturaleza del malware, este podría infectar los propios equipos de los usuarios y afectarles muy negativamente. Por otra parte, si el malware puede suponer una «brecha de datos personales» o un perjuicio económico o de cualquier tipo a los usuarios, recomendamos acudir a una empresa especializada en informática forense porque cualquier decisión podría acarrear consecuencias legales.

Identificando y cerrando puertas traseras

¿Qué es una puerta trasera?

Una puerta trasera es un recurso que crea un desarrollador o un atacante para poder tomar el control de tu instalación si fuera necesario.

Si un atacante ha conseguido acceder a tu instalación, es posible que, además de colocar malware, haya dejado preparada una puerta trasera para asegurarse de que siempre puede volver a tomar el control de tu instalación. Preparar una puerta trasera es más sencillo de lo que podría parecer. En Youtube puedes encontrar vídeos de desarrolladores que consideran que colocar una puerta trasera puede ser ético para asegurar que sus clientes le pagarán los servicios prestados. No lo es, nunca. Es todo lo contrario a la profesionalidad y es ilegal.

Aquí ya hablamos de un nivel de sofisticación más alto. Si el atacante ha creado una puerta trasera, es posible que pueda conseguir acceso a la instalación incluso después de que hayamos «regenerado» todos los accesos.

Localizar y cerrar puertas traseras es un proceso que puede tener bastante complejidad y que depende de la habilidad y la sofisticación del atacante. Afortunadamente, una parte del proceso de eliminación de puertas traseras es común a la eliminación del malware en los ficheros de la instalación o en la base de datos.

Eliminando malware de los ficheros

En primer lugar, debes conocer que tu instalación WordPress contiene una buena parte de software «estándar» (software desarrollado por terceros y preparado para que, sin modificar su código, pueda funcionar correctamente en múltiples instalaciones, ej. el propio núcleo de WordPress, sus temas y plugins) y puede contener una cierta parte de personalizaciones y desarrollos «a medida» (código añadido por una agencia o un desarrollador para personalizar su diseño o contar con funcionalidades nuevas).

Las personalizaciones y desarrollos «a medida» pueden estar:

  • Encapsulados en su propio componente (p.ej. un tema personalizado, un tema hijo o un plugin).
  • Dentro del código de otros componentes «estándar».

Es relativamente sencillo identificar cambios en el código de los componentes «estándar», pero eso no significa que cualquier cambio sea malware. Respecto a los desarrollos «a medida» que puedan venir encapsulados en su propio componente, la identificación es más compleja.

Te planteamos varias líneas de actuación, deberás ser tú el que decida si llevar adelante todas o solo alguna de ellas.

Eliminar o sustituir cualquier componente «no fiable» de la instalación

¿Qué componentes son «no fiables»? aquellos que han sido descargados desde fuentes que no generen una cierta confianza. En este sentido, se consideran fiables, en general, el directorio de plugins de WordPress y los sitios web de los propios desarrolladores de cada componente.

Este es el primer paso de sentido común. Si existen componentes que hayan sido descargados de fuentes «no fiables» o que no reúnan una mínima confianza, todos estos deberían de eliminarse y sustituirse por otros que sí la tengan. Es fácil identificar estos componentes, se trata normalmente de temas o plugins premium («de pago») que deberían de tener asociada una licencia, ¿dispones de ella? ¿La tiene la agencia o el desarrollador de tu sitio web? Si no es así, deberías eliminar o sustituir estos componentes inmediatamente.

El riesgo de no llevar adelante este paso es que, si uno de estos componentes es el origen del malware o de la brecha de seguridad que ha permitido su entrada, todas las acciones que realicemos sin borrarlo pueden no generar ningún resultado y el malware puede volver a aparecer en cualquier momento.

Regenerar y actualizar todos los componentes estándar de la instalación

Si el atacante ha camuflado el código malicioso en alguno de estos componentes estándar, normalmente «desaparecerá» al borrar y regenerar el código del componente. Descarga cada componente desde fuentes fiables. Si es posible, tras regenerar el componente, actualízalo a su última versión disponible.

Cualquiera de los plugins de seguridad más comunes te ayudará a identificar cambios en estos componentes estándar y a reinstalarlos para borrar esos cambios. Eso sí, tienes que estar seguro de que los cambios no corresponden con personalizaciones que haya introducido una agencia o desarrollador en tu instalación, antes de borrarlos o el borrado llevará a cambios en el diseño de tu instalación y/o a una posible pérdida de funcionalidad.

Regenerar el código de las personalizaciones.

Normalmente, la mayor parte de las personalizaciones deberían estar encapsuladas en un componente separado de la instalación (p.ej., un plugin), pero también pueden aparecer dentro del tema de la instalación (tema personalizado), en un tema hijo (p.ej., plantillas personalizadas) o incluso dentro del código de un componente estándar.

Si las personalizaciones se encuentran en un componente separado de la instalación, una forma rápida y segura de regenerar el componente puede ser utilizando una copia de seguridad que incluya sus últimas actualizaciones pero que sea lo más antigua posible, tratando de anticiparnos en el tiempo al momento en el que la instalación pudo ser atacada.

Si las personalizaciones se encuentran dentro de alguno de los componentes a medida de la instalación, deberíamos poder recurrir a copias de seguridad actualizadas pero suficientemente antiguas. En este caso particular, es muy útil contar con documentación de estas personalizaciones, lo que permitiría poder revisarlas una a una rápidamente y poder descartar que sean responsables del problema.

En cualquier caso, debes de tener en cuenta que cualquier personalización en tu instalación debería de ser revisada y actualizada periódicamente para asegurar no solo que mantiene su funcionalidad, sino también que sigue resultando compatible tanto con la infraestructura de la máquina donde se aloja tu instalación como con los otros componentes de tu instalación WordPress.

Regenerar completamente la instalación en un entorno controlado

Regenerar completamente la instalación es el método más exhaustivo que existe para asegurar que se elimina el malware.

Una regeneración completa consiste en crear una nueva instalación WordPress desde cero e ir añadiendo sus componentes de forma controlada uno a uno, siempre desde fuentes fiables y con versiones actualizadas.

Para las personalizaciones, deberían de añadirse una a una a la instalación regenerada, revisando el código de cada una para asegurar que no contienen malware. Puede ser un proceso «lento» y muy técnico, que puede acelerarse notablemente si se dispone de una buena documentación técnica y de versiones de confianza de los componentes a medida (p.ej. procedentes de un entorno de desarrollo o de preproducción).

Eliminando malware de la base de datos

El malware puede formar parte del contenido de alguna de tus páginas, entradas, productos, eventos, y estar guardado directamente en la base de datos de WordPress.

La base de datos de WordPress almacena básicamente los siguientes tipos de contenidos:

  • Por una parte, la configuración necesaria de los componentes de la instalación (WordPress, tema y plugins): todos los parámetros que defines desde la administración se guardan en la base de datos de WordPress.
  • Por otra parte, el propio contenido de todos los contenidos que gestionas en tu instalación (páginas, entradas, productos, eventos).

Te planteamos varias líneas de actuación, deberás de ser tú el que decida las que llevas adelante.

Eliminar o sustituir cualquier componente «no fiable» de la instalación

Al igual que en el caso de la eliminación del malware en los ficheros de la instalación, la eliminación de los componentes no fiables «debería» borrar su configuración y sus datos. Aquí, el entrecomillado de la palabra «debería» es importante, porque si estamos hablando de componentes «no fiables», no podemos fiarnos de que hagan lo que deberían y es posible que dejen trazas en la base de datos de la instalación o incluso «puertas traseras».

A modo de ejemplo, el plugin «malicioso» puede haber creado un nuevo usuario de administración que no sea visible desde la administración de usuarios de WordPress. Así que, como mínimo, habría que revisar la tabla de usuarios para asegurar que no existe ningún usuario que no debiera estar ahí.

Tratar de detectar el malware escaneando la base de datos de la instalación

Este es el tipo de trabajo que realizan los plugins de seguridad o los servicios externos de seguridad, escanean el contenido de las tablas en la base de datos de la instalación para buscar ciertas cadenas que suelen ser identificativas de código que puede haber sido añadido de forma maliciosa en tu instalación.

El problema es que puedes encontrarte tanto con falsos positivos (código lícito que forma parte de tus páginas y que se identifica como malicioso) como con fragmentos de código malicioso que resulten indetectables para el plugin de seguridad porque no utilicen las cadenas típicas que se trata de localizar o vayan codificados. Otros problemas pueden ser las limitaciones en el escaneo de la instalación; si la instalación contiene tablas fuera del prefijo de WordPress (tablas a medida), es posible que estas tablas «escapen» al escaneo de algunos plugins de seguridad.

El problema del malware guardado en la base de datos es que depende de la habilidad del propio atacante para enmascararlo, así que se trata de una especie de «batalla de ingenio» en la que siempre caben nuevas formas de ocultar el software malicioso.

Regenerar la configuración de los componentes «estándar» de la instalación

Al desinstalar (desactivar y borrar) e instalar de nuevo los componentes «estándar» (desde una copia de seguridad o desde las fuentes «originales fiables» de estos componentes), su configuración se actualizará y si esa configuración guardaba algún fragmento de malware, «debería» ser eliminado.

¡Atención! Existen casos de componentes (p.ej. ciertos plugins) que no borran su configuración al borrar el componente, sino que la mantienen sin cambios. A veces, esta política puede cambiarse vía la configuración del propio componente para forzar que se borren los datos de la configuración cuando se borre el componente, aunque hay que entender bien el impacto en ese caso para no perder datos de importancia.

Regenerar la configuración ligada a componentes «personalizados»

Lo mismo, al desinstalar e instalar de nuevo los componentes «personalizados», el malware «debería» desaparecer, con las mismas consideraciones sobre componentes que no borran sus datos que en el caso anterior.

Regenerar completamente la instalación en un entorno controlado

La configuración se regenerará en base de datos conforme reinstales y configures los componentes.

Sobre los contenidos:

  • La forma más segura de regenerar los contenidos sería reeditarlos uno a uno en el editor de WordPress. Lógicamente, si se trata de mucho contenido, la tarea puede no ser asumible desde un punto de vista de esfuerzo/beneficio.
  • La forma más rápida de regenerar los contenidos sería recuperarlos utilizando una copia de seguridad suficientemente antigua. Si la copia no contiene parte del contenido, podrías reeditar esos contenidos o añadir los pendientes directamente desde el editor de WordPress.

Conclusiones

Limpiar una instalación WordPress infectada es un proceso que requiere orden y metodología. Antes de actuar, confirma que realmente existe malware; cierra las vías de acceso para evitar que el problema se repita; reúne evidencias que te ayuden a entender qué ha ocurrido y cuándo; y aborda la limpieza de forma sistemática, desde los ficheros hasta la base de datos.

Recuerda que no existe una solución única: el nivel de intervención adecuado depende de la gravedad de la infección, de la complejidad de tu instalación y de los recursos disponibles. Una buena documentación técnica, copias de seguridad periódicas y un plan de mantenimiento actualizado son tu mejor seguro frente a futuros ataques.

Si la infección es grave o puede tener consecuencias legales —como una brecha de datos personales o perjuicios económicos a tus usuarios— recomendamos firmemente acudir a una empresa especializada en informática forense antes de tomar cualquier decisión.


Te puede interesar …