Escanear malware en WordPress con WP-CLI
¿Por qué usar WP-CLI para escanear malware en WordPress?
Si tu web ha sido hackeada o simplemente quieres prevenir problemas, escanear malware en WordPress es una tarea que puede salvar tu negocio. La mayoría de la gente piensa que solo los plugins de seguridad pueden hacer esto, pero existe una herramienta mucho más potente, rápida y gratuita: WP-CLI.
WP-CLI es la interfaz de línea de comandos para WordPress. En lugar de hacer clic en botones dentro del panel de administración, escribes comandos en la terminal de tu servidor. Esto te permite auditar archivos, buscar código malicioso y eliminar malware de forma quirúrgica, sin depender de interfaces lentas o plugins que consumen muchos recursos.
Para los que usan Syspanel (el panel de control que antes se llamaba HestiaCP), el acceso a la terminal es sencillo. Recuerda que el puerto de acceso es el 2106 y desde ahí puedes ejecutar todos los comandos que te mostraré a continuación. No necesitas ser un experto en programación, solo seguir los pasos con calma.
Preparación del entorno: primeros pasos con WP-CLI
Antes de lanzarnos a escanear, debemos asegurarnos de que WP-CLI está instalado y de que tenemos acceso al directorio raíz de WordPress.
Comprobar si WP-CLI está instalado
Escribe este comando en tu terminal:
wp --info
Si ves la versión y la ruta de instalación, estás listo. Si no, instálalo con:
curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
chmod +x wp-cli.phar
sudo mv wp-cli.phar /usr/local/bin/wp
[!TIP]
Si usas Syspanel, puedes acceder a la terminal desde el botón "Terminal" en el panel. El puerto 2106 te dará acceso SSH directo a tu servidor.
Navegar al directorio de WordPress
Normalmente, tu instalación está en public_html o www. Dentro de Syspanel, la ruta típica es:
cd ~/domains/tudominio.com/public_html
A partir de ahora, ejecutaremos todos los comandos desde esta ubicación.
Escaneo de integridad de archivos: el primer filtro
El primer paso para escanear malware en WordPress es comprobar si algún archivo del núcleo ha sido modificado. Los hackers suelen alterar archivos como wp-login.php o functions.php para inyectar código malicioso.
Verificar la integridad del núcleo
WP-CLI tiene un comando específico para esto:
wp core verify-checksums
Este comando compara todos los archivos de WordPress con los oficiales de wordpress.org. Si encuentra diferencias, las listará.
[!WARNING]
Si ves archivos marcados como "ERROR", no los borres todavía. Primero revisa si son archivos legítimos de tu tema o plugins. Algunos temas modificanwp-settings.phppara optimizaciones, lo cual es normal.
Escanear archivos del núcleo en busca de código sospechoso
Para una auditoría más profunda, podemos buscar patrones comunes de malware:
wp core verify-checksums --include-root
Este comando también verifica los archivos en la raíz, como .htaccess o wp-config.php. Estos son objetivos frecuentes de ataques.
Auditoría de plugins y temas: dónde se esconde el malware
Los plugins y temas son la puerta de entrada más común para los hackers. Un plugin desactualizado o con una vulnerabilidad conocida puede ser el vector de ataque.
Listar plugins y temas con sus versiones
wp plugin list --status=active
wp theme list --status=active
Anota las versiones. Si alguna es antigua, es probable que tenga vulnerabilidades conocidas. Actualízalos antes de continuar:
wp plugin update --all
wp theme update --all
Buscar archivos modificados recientemente
El malware suele modificar archivos justo antes o después del ataque. Busca archivos modificados en los últimos 7 días:
find . -type f -mtime -7 -not -path "./wp-content/cache/*" -not -path "./.git/*"
Revisa la lista. Si ves algo como wp-content/uploads/2024/05/backdoor.php, tienes un problema.
[!INFO]
Los archivos enwp-content/uploadsno deberían contener archivos PHP. Si encuentras uno, es casi seguro que es malware.
Escaneo de base de datos: el malware invisible
Muchos ataques inyectan código malicioso directamente en la base de datos, especialmente en las tablas wp_posts y wp_options. Esto es más difícil de detectar, pero WP-CLI nos ayuda.
Buscar contenido malicioso en las entradas
wp db query "SELECT ID, post_title FROM wp_posts WHERE post_content LIKE '%eval(base64_decode%' OR post_content LIKE '%gzinflate%' OR post_content LIKE '%document.write%';"
Este comando busca patrones típicos de código ofuscado. Si devuelve resultados, esas entradas están comprometidas.
Revisar las opciones de WordPress
wp option list --search='*malware*'
wp option list --search='*hack*'
También revisa si hay usuarios administradores extraños:
wp user list --role=administrator
Si ves un usuario que no reconoces, elimínalo:
wp user delete ID_USUARIO --yes
Escaneo de archivos con firmas de malware
Aunque WP-CLI no incluye un antivirus integrado, podemos usar comandos personalizados para buscar firmas comunes de malware.
Buscar archivos PHP ejecutables en directorios de subida
find wp-content/uploads -name "*.php" -type f
Buscar código ofuscado en todos los archivos PHP
grep -rn "eval(" --include="*.php" . | grep -v "wp-admin" | grep -v "wp-includes"
[!WARNING]
El comandoeval()también se usa en algunos plugins legítimos. No elimines nada sin verificar el contexto. Si el archivo está en una carpeta de cache o en un plugin desconocido, es sospechoso.
Buscar redirecciones maliciosas
grep -rn "header(" --include="*.php" . | grep -v "wp-admin" | grep -v "wp-includes"
Si encuentras redirecciones a dominios extraños, tienes un problema grave.
Eliminar malware de WordPress de forma segura
Una vez identificado el malware, hay que eliminarlo. Nunca borres archivos sin antes hacer una copia de seguridad.
Paso 1: Crear una copia de seguridad
wp db export backup.sql
tar -czf backup.tar.gz wp-content wp-config.php .htaccess
Paso 2: Eliminar archivos sospechosos
Si encontraste archivos PHP en wp-content/uploads, elimínalos:
rm wp-content/uploads/2024/05/backdoor.php
Paso 3: Limpiar la base de datos
Si encontraste entradas con código malicioso, puedes vaciarlas o eliminarlas:
wp post delete ID_ENTRADA --force
Paso 4: Restablecer el .htaccess
Si tu .htaccess fue modificado, restablece el predeterminado de WordPress:
wp rewrite flush
[!TIP]
Después de eliminar el malware, cambia todas tus contraseñas: la de administrador, la de FTP y la de la base de datos. También revoca todas las sesiones activas conwp session destroy --all.
Herramientas complementarias para una auditoría completa
WP-CLI es potente, pero combinarlo con otras herramientas te dará una auditoría más profunda.
Instalar el plugin "WP-CLI Security"
wp plugin install wp-cli-security --activate
Este plugin añade comandos como:
wp security scan
wp security audit
Usar VirusTotal desde la terminal
Puedes comprobar archivos sospechosos directamente:
curl -s -F "file=@ruta/al/archivo" https://www.virustotal.com/api/v3/files -H "x-apikey: TU_API_KEY"
[!INFO]
La API de VirusTotal requiere una clave gratuita. Es un servicio muy útil para verificar archivos que no estás seguro de si son malware.
Prevención: cómo evitar futuros ataques
Escanear malware en WordPress es necesario, pero prevenir es mucho mejor. Aquí tienes una lista de acciones que debes realizar periódicamente.
Actualizar todo regularmente
wp core update
wp plugin update --all
wp theme update --all
Limitar los intentos de inicio de sesión
Instala un plugin de seguridad o configura el servidor para limitar los intentos de acceso. Con WP-CLI:
wp option update limit_login_attempts 5
Desactivar la edición de archivos desde el panel
Añade esta línea a wp-config.php:
define('DISALLOW_FILE_EDIT', true);
Programar escaneos automáticos
Crea un cron que ejecute los comandos de verificación cada semana:
crontab -e
Añade esta línea:
0 3 * * 0 cd ~/domains/tudominio.com/public_html && wp core verify-checksums > /dev/null 2>&1
Preguntas frecuentes (FAQ)
¿Puedo usar WP-CLI en cualquier hosting?
Sí, siempre que tengas acceso SSH. En Syspanel, el acceso se realiza a través del puerto 2106. Si tu hosting no ofrece SSH, tendrás que usar plugins de seguridad.
¿Es seguro ejecutar estos comandos sin experiencia?
La mayoría son de solo lectura y no modifican nada. Los comandos de eliminación los debes ejecutar solo cuando estés 100% seguro de que es malware. Siempre haz una copia de seguridad antes.
¿Qué hago si WP-CLI no está instalado en mi servidor?
Puedes instalarlo manualmente siguiendo las instrucciones oficiales. En Syspanel, también puedes pedir soporte técnico para que lo instalen.
¿WP-CLI reemplaza a los plugins de seguridad?
No. Los plugins ofrecen protección en tiempo real, cortafuegos y monitorización continua. WP-CLI es una herramienta complementaria para auditorías profundas y eliminación manual de malware.
¿Cómo sé si mi sitio ha sido hackeado si no tengo síntomas?
Los síntomas más comunes son: redirecciones extrañas, aparición de anuncios, ralentización del sitio, usuarios nuevos no autorizados o archivos desconocidos. Ejecuta los comandos de escaneo de este artículo para verificarlo.
Conclusión: la auditoría regular es tu mejor defensa
Escanear malware en WordPress con WP-CLI no es complicado si sigues los pasos correctos. La clave está en la constancia: realiza auditorías mensuales, mantén todo actualizado y verifica la integridad de tus archivos.
Con Syspanel y el acceso al puerto 2106, tienes todo lo necesario para mantener tu sitio limpio y seguro. No esperes a que sea tarde: ejecuta tu primera auditoría hoy mismo.
