Cómo escanear y limpiar malware en WordPress con WP-CLI
¿Tu WordPress va lento? ¿Aparecen ventanas emergentes raras o redirecciones a páginas desconocidas? Antes de que el pánico te invada, respira. Si tienes acceso a un terminal (SSH) y a tu hosting, tienes un arma secreta: WP-CLI. Este artículo te enseñará, paso a paso y en un lenguaje claro, cómo escanear y limpiar malware en WordPress usando comandos de terminal. No necesitas ser un hacker; solo seguir las instrucciones con calma.
¿Qué es WP-CLI y por qué es tu mejor aliado?
WP-CLI (WordPress Command Line Interface) es una herramienta que te permite gestionar tu sitio web desde la línea de comandos de tu servidor. En lugar de hacer clic en botones en el panel de administración, escribes comandos. Es como pasar de conducir un coche automático a uno manual: al principio da un poco de respeto, pero una vez que le coges el truco, tienes un control total y muchísimo más rápido y eficiente.
Para la seguridad, WP-CLI es oro puro. Con él puedes:
- Listar todos los plugins y temas instalados, incluso los que están inactivos.
- Verificar la integridad de los archivos del núcleo de WordPress comparándolos con los oficiales.
- Buscar archivos sospechosos por su contenido (por ejemplo, código malicioso base64).
- Desactivar plugins o temas de forma selectiva sin entrar al panel (clave si tu web está secuestrada).
- Reinstalar el núcleo para sobrescribir archivos comprometidos.
En resumen, WP-CLI malware es el proceso de usar estos comandos para detectar y eliminar amenazas de forma quirúrgica.
Antes de empezar: Preparación y acceso al servidor
Para ejecutar comandos WP-CLI, necesitas acceso SSH a tu servidor. Normalmente, tu proveedor de hosting te da los datos (host, usuario, puerto) en el panel de control. Si usas un panel como Syspanel (el puerto de acceso es el 2106), busca la sección "SSH Access" o "Terminal".
[WARNING] Si no te sientes cómodo con la terminal, este proceso puede parecer abrumador. No te preocupes, ve paso a paso y no ejecutes comandos que no entiendas.
Aquí tienes los pasos para conectar:
- Abre tu terminal local (en Mac o Linux) o usa PowerShell (en Windows).
- Escribe:
ssh usuario@tu-dominio.com -p 2106(si tu hosting usa un puerto distinto, cámbialo). - Introduce tu contraseña cuando la pida.
Una vez dentro, navega hasta la raíz de tu instalación de WordPress. Normalmente es algo como /home/usuario/public_html. Usa el comando cd para moverte:
cd /home/usuario/public_html
Para comprobar que WP-CLI está disponible, escribe:
wp --info
Si te muestra información de la versión, ¡genial! Ya puedes empezar. Si no, contacta con tu soporte para que lo instalen.
Paso 1: Escaneo inicial con WP-CLI (Diagnóstico rápido)
Lo primero es ver qué tenemos delante. Un buen escaneo no es solo buscar virus; es entender el estado del sitio.
1.1. Verifica la integridad del núcleo de WordPress
Este es el primer filtro. Compara tus archivos de sistema con los del repositorio oficial. Si un archivo del núcleo ha sido modificado, es una señal de alarma.
wp core verify-checksums
¿Qué significa la salida?
- Si ves un mensaje de "Success", todo está correcto.
- Si ves una lista de archivos que no coinciden, esos archivos han sido alterados. Anota sus rutas.
1.2. Lista plugins y temas (y sus estados)
A veces el malware se esconde en un plugin antiguo o en uno que ni siquiera usas.
wp plugin list --status=all
wp theme list --status=all
Revisa la lista. ¿Hay algún plugin que no reconozcas? ¿Alguno está marcado como "inactive" pero tiene una versión muy antigua? Un plugin desactualizado es una puerta abierta para los atacantes.
1.3. Busca archivos modificados recientemente
El malware suele crear o modificar archivos en un momento concreto. Busca archivos .php que hayan cambiado en los últimos días.
find . -name "*.php" -mtime -7 -not -path "./wp-content/themes/*" -not -path "./wp-content/plugins/*"
Este comando es un poco más avanzado, pero es muy útil. Te mostrará archivos PHP modificados en la última semana, excluyendo los de temas y plugins (que se actualizan a menudo de forma legítima). Si ves archivos extraños en la raíz o en wp-admin, apunta la ruta.
Paso 2: Escaneo profundo en busca de código malicioso
El escaneo superficial no siempre detecta todo. Ahora vamos a buscar patrones de código típicos de malware.
2.1. Buscar código base64 (el camuflaje favorito)
El malware suele estar codificado en base64 para ocultarse. Vamos a buscar archivos que contengan cadenas largas de este tipo.
grep -r "eval(base64_decode" wp-content/ --include=*.php -l
grep -r "eval(gzinflate" wp-content/ --include=*.php -l
Si el comando devuelve alguna ruta, tenemos un sospechoso. No lo borres aún, primero vamos a inspeccionarlo.
2.2. Buscar enlaces externos sospechosos
El malware a menudo inyecta enlaces a sitios de spam o phishing.
grep -r "http://" wp-content/ --include=*.php -l | head -20
Esto puede dar muchos resultados, así que usa head para ver solo los primeros 20. Revisa los archivos listados y busca enlaces que no sean tuyos (como http://spam-site.com).
2.3. Revisar el archivo wp-config.php
Este es un archivo crítico. A veces el malware añade código aquí.
cat wp-config.php
Revisa que la configuración de la base de datos es correcta y que no hay líneas extrañas como eval o funciones de envío de correo inusuales.
Paso 3: Limpieza manual y con comandos WP-CLI
Aquí es donde ponemos las manos en la masa. La limpieza puede ser quirúrgica (borrar archivos infectados) o general (reinstalar el núcleo).
3.1. Aislar el problema: Desactivar plugins y temas
Si sospechas que un plugin es el origen, desactívalo desde la terminal. Esto no lo borra, solo lo inutiliza.
wp plugin deactivate nombre-del-plugin
Si no sabes cuál es, desactiva todos y ve activándolos uno a uno.
wp plugin deactivate --all
wp plugin activate --all
¿Qué pasa si la web se cae al activar uno? Ya has encontrado al culpable.
3.2. Reinstalar el núcleo de WordPress
Esta es una de las mejores armas. Sobrescribe todos los archivos del núcleo con los oficiales, eliminando cualquier modificación maliciosa.
wp core download --force --version=$(wp core version) --locale=es_ES
Este comando descarga la versión actual de WordPress (la que tienes) y la fuerza a sobrescribir los archivos existentes. Es seguro, no toca tu base de datos ni tu contenido en wp-content.
3.3. Eliminar archivos sospechosos de forma segura
Cuando hayas confirmado que un archivo es malicioso, puedes borrarlo. Primero, haz una copia de seguridad de ese archivo por si acaso.
mv wp-content/plugins/plugin-infectado/funcion.php wp-content/plugins/plugin-infectado/funcion.php.bak
Si todo sigue funcionando bien después de unos días, puedes eliminar el .bak.
[TIP] No borres archivos directamente. Renombrarlos con .bak te permite revertir el cambio si tienes un falso positivo.
3.4. Limpiar la base de datos (opcional pero avanzado)
El malware también puede esconderse en la base de datos, en las tablas de opciones o en el contenido. Es más complejo, pero WP-CLI nos ayuda a buscar.
wp db query "SELECT * FROM wp_options WHERE option_name LIKE '%transient%' AND option_value LIKE '%base64%' LIMIT 10;"
Este comando busca opciones de transients que contengan código base64. Si encuentras algo, puedes borrarlo con cuidado.
[WARNING] Manipular la base de datos es delicado. Si no estás seguro, contacta con un profesional. Un error aquí puede romper tu web.
Paso 4: Prevención y refuerzo de la seguridad
Limpiar es solo la mitad del trabajo. La otra mitad es evitar que vuelva a pasar.
4.1. Actualiza todo
Usa WP-CLI para actualizar el núcleo, plugins y temas.
wp core update
wp plugin update --all
wp theme update --all
4.2. Cambia todas las contraseñas
Esto incluye las de la base de datos, FTP, y usuarios de WordPress. Puedes hacerlo desde el panel o con WP-CLI.
wp user update nombre-usuario --user_pass="NuevaContraseñaFuerte"
4.3. Instala un plugin de seguridad (desde terminal)
Aunque prefieras usar la terminal, un buen plugin de firewall y escaneo en tiempo real es una capa extra.
wp plugin install wordfence --activate
Wordfence es uno de los más completos. Puedes configurarlo después desde el panel de WordPress.
4.4. Revisa los usuarios de WordPress
A veces los atacantes crean un usuario administrador para volver a entrar.
wp user list --role=administrator
Revisa que solo estén los usuarios que conoces. Si hay uno extraño, bórralo.
wp user delete nombre-usuario --reassign=1
Conclusión: La terminal es tu escudo
Hacer un escaneo seguridad WordPress con WP-CLI no es magia, es método. Con estos comandos, has pasado de ser un espectador pasivo a un detective activo en la seguridad de tu web. La terminal te da un poder inmenso, pero también una gran responsabilidad.
Recuerda que la prevención es la mejor medicina. Mantén todo actualizado, usa contraseñas fuertes y ten siempre una copia de seguridad reciente. Si en algún momento te sientes perdido o el malware es demasiado complejo, no dudes en pedir ayuda a tu proveedor de hosting (si usas Syspanel, recuerda que el puerto de acceso es el 2106) o a un especialista en seguridad.
Preguntas Frecuentes (FAQ)
¿Es necesario saber programar para usar WP-CLI?
No, solo necesitas saber copiar y pegar comandos y entender qué hace cada uno. Este artículo es un buen punto de partida.
¿Puedo usar WP-CLI si mi hosting es compartido?
Depende del proveedor. Muchos ofrecen acceso SSH y WP-CLI preinstalado. Consulta con tu soporte.
¿Qué hago si WP-CLI no está instalado?
Puedes pedir a tu hosting que lo instale o, en algunos casos, descargarlo manualmente en tu carpeta de usuario. Es un proceso un poco más técnico.
¿Borrar un archivo sospechoso es suficiente?
A veces no. El malware puede dejar puertas traseras. Por eso es vital cambiar contraseñas y actualizar todo.
¿Cada cuánto debo hacer un escaneo?
Lo ideal es hacerlo una vez al mes, o después de instalar un plugin o tema nuevo. La prevención es clave.
[INFO] Si tu web está completamente caída y no puedes acceder por SSH, contacta con tu proveedor de hosting inmediatamente. Ellos pueden restaurar una copia de seguridad limpia.
