Cómo usar la herramienta 'WP-CLI' para escanear malware en WordPress
¿Qué es WP-CLI y por qué es tu mejor aliado contra el malware?
Imagina que tu sitio WordPress es una casa. El panel de administración (wp-admin) es la puerta principal, y los plugins son las habitaciones. Ahora, ¿qué pasa si necesitas inspeccionar el sótano, revisar cada tubería o cambiar una cerradura sin tener que abrir todas las puertas? Ahí es donde entra WP-CLI.
WP-CLI (WordPress Command Line Interface) es una herramienta que te permite gestionar tu sitio web desde la terminal de tu servidor, escribiendo comandos de texto. En lugar de hacer clic en botones, escribes órdenes. Es más rápido, más preciso y, sobre todo, te da acceso a áreas del sistema que normalmente están ocultas.
Para el escaneo de malware, esto es oro puro. Los plugins de seguridad son útiles, pero a menudo consumen muchos recursos y a veces el malware es tan astuto que se esconde del propio escáner. WP-CLI, al operar a un nivel más profundo, puede detectar archivos sospechosos, comparar sumas de verificación (hashes) con la versión original de WordPress y encontrar inyecciones de código que pasan desapercibidas.
Pero antes de empezar, un aviso importante.
[WARNING]
Trabajar con WP-CLI implica tener acceso SSH (Secure Shell) a tu servidor. Esto significa que puedes modificar archivos críticos. Si no te sientes cómodo, practica primero en un sitio de pruebas o pide ayuda a tu proveedor de hosting. Un error de escritura puede dejar tu web inservible.
Requisitos previos: Antes de lanzar el primer comando
Para usar WP-CLI malware scan, necesitas tres cosas:
- Acceso SSH: Debes poder conectarte a tu servidor por terminal. En Syspanel (tu panel de control, accesible por el puerto 2106), puedes encontrar los datos de acceso SSH en la sección de "Cuentas FTP/SSH".
- WP-CLI instalado: La mayoría de los hosts modernos ya lo incluyen. Para verificarlo, escribe
wp --infoen la terminal. Si ves la versión y la ruta, estás listo. - Una copia de seguridad reciente: Nunca, jamás, ejecutes comandos de limpieza sin tener un respaldo. Si algo sale mal, podrás restaurar tu sitio.
Paso 1: Conectarte y navegar a tu instalación
Una vez conectado por SSH, navega hasta la carpeta raíz de tu WordPress. Normalmente suele ser public_html o htdocs.
cd public_html
Para asegurarte de que estás en el lugar correcto, ejecuta:
wp core is-installed
Si te devuelve un mensaje de éxito, estás en el directorio correcto.
Escaneo básico con WP-CLI: La primera línea de defensa
Vamos a empezar con un escaneo rápido que no modifica nada, solo analiza. Esto te dará una idea de si hay algo raro.
2.1 Verificar la integridad del núcleo de WordPress
El primer paso es comprobar que los archivos del sistema no han sido alterados. WordPress tiene un comando específico para esto.
wp core verify-checksums
Este comando compara todos los archivos de tu instalación con los oficiales de WordPress.org. Si algún archivo ha sido modificado (por ejemplo, wp-includes/class-wp.php), te aparecerá un listado con la ruta exacta.
[INFO]
Si ves archivos en la lista, no entres en pánico. A veces, plugins o temas legítimos modifican archivos del núcleo (algo que no deberían hacer). Pero si ves archivos en wp-includes o wp-admin que no reconoces, es una señal de alerta.
2.2 Listar plugins y temas sospechosos
El malware se esconde a menudo en plugins o temas antiguos. Podemos listar todo lo que está activo y ver si hay algo fuera de lugar.
wp plugin list --status=active --fields=name,version,status
wp theme list --status=active --fields=name,version,status
¿Ves algún plugin que no instalaste? ¿Algún tema que no reconoces? Anota los nombres.
2.3 Buscar archivos modificados recientemente
El malware suele modificar archivos justo antes de ejecutarse. Buscar archivos PHP modificados en las últimas 24 horas es una técnica excelente.
find . -name "*.php" -mtime -1 -not -path "./wp-content/cache/*" -exec ls -la {} \;
Este comando es un poco más complejo, pero lo que hace es listar todos los archivos PHP que han cambiado en el último día, excluyendo la caché. Si ves archivos en wp-content/uploads con extensión .php, eso es muy sospechoso.
Escaneo profundo: Cazando el código malicioso
El escaneo básico es bueno, pero el malware moderno es sigiloso. Necesitamos buscar patrones de código malicioso dentro de los archivos.
3.1 Buscar eval() y base64_decode()
Estas dos funciones son las favoritas de los hackers. eval() ejecuta código arbitrario y base64_decode() decodifica texto ofuscado. Un archivo legítimo de WordPress rara vez usa estas funciones sin una buena razón.
grep -r "eval(" wp-content/plugins/ wp-content/themes/ --include="*.php" -l
grep -r "base64_decode" wp-content/plugins/ wp-content/themes/ --include="*.php" -l
[WARNING]
No todos los resultados son malos. Algunos plugins legítimos usan base64_decode para funciones de caché. Sin embargo, si el archivo está en una carpeta extraña o tiene un nombre aleatorio (como wp-content/uploads/2024/11/random123.php), es casi seguro que es malware.
3.2 Buscar código ofuscado en las tablas de la base de datos
El malware no solo vive en archivos; también se inyecta en la base de datos. Podemos buscar contenido sospechoso directamente.
wp db query "SELECT * FROM wp_posts WHERE post_content LIKE '%eval(base64_decode%' LIMIT 5;"
Este comando busca en las entradas y páginas si hay algún código oculto. También puedes buscar en wp_options:
wp db query "SELECT option_name, option_value FROM wp_options WHERE option_value LIKE '%base64_decode%' LIMIT 5;"
Limpiar malware WordPress con WP-CLI: La fase de acción
Has detectado el archivo malicioso. Ahora toca eliminarlo. La regla de oro es: si no estás 100% seguro de que un archivo es legítimo, es mejor eliminarlo o reemplazarlo por la versión original.
4.1 Reemplazar archivos del núcleo dañados
Si el escaneo de checksums te dio archivos dañados en el núcleo, la solución es reinstalar WordPress sin tocar tus contenidos.
wp core download --force --version=$(wp core version) --locale=es_ES
Este comando descarga de nuevo los archivos del núcleo y reemplaza los que están dañados. No toca wp-content ni wp-config.php, así que tus datos y fotos están a salvo.
4.2 Eliminar archivos maliciosos
Si encontraste un archivo .php sospechoso en wp-content/uploads, elimínalo directamente.
rm -f wp-content/uploads/2024/11/random123.php
[TIP]
Antes de eliminar, muévelo a una carpeta temporal fuera de public_html (por ejemplo, /home/usuario/malware_backup/). Así, si era un falso positivo, puedes recuperarlo.
4.3 Desactivar plugins y temas comprometidos
Si un plugin tiene una vulnerabilidad, lo mejor es desactivarlo hasta que se actualice o se limpie.
wp plugin deactivate nombre-del-plugin
wp theme deactivate nombre-del-tema
4.4 Limpiar la base de datos de inyecciones SQL
Si encontraste contenido malicioso en wp_posts, puedes usar un comando SQL para limpiarlo. Primero, identifica el ID del post infectado y luego actualiza el contenido.
wp db query "UPDATE wp_posts SET post_content = REPLACE(post_content, '<código malicioso>', '') WHERE ID = 123;"
[INFO]
Sustituye <código malicioso> por la parte exacta que quieres eliminar. Haz una copia de la base de datos antes de ejecutar cualquier UPDATE.
Auditoría WordPress completa: Más allá del malware
Una vez limpio, es hora de reforzar la seguridad. Auditoría WordPress es un proceso continuo.
5.1 Listar usuarios sospechosos
El malware crea a menudo usuarios administradores ocultos. Revísalos.
wp user list --role=administrator --fields=ID,user_login,user_email
Si ves un usuario que no creaste, elimínalo.
wp user delete ID --reassign=1
5.2 Comprobar los enlaces permanentes y el archivo .htaccess
A veces el malware redirige el tráfico. Revisa tu .htaccess.
cat .htaccess
Si ves líneas con RewriteRule hacia dominios extraños, es malo. Puedes regenerar el .htaccess de WordPress:
wp rewrite flush
5.3 Escaneo de seguridad con plugins desde CLI
Aunque prefieras WP-CLI, puedes combinar con plugins de seguridad. Por ejemplo, si tienes Wordfence, puedes lanzar un escaneo desde la terminal.
wp wf scan start
Preguntas frecuentes (FAQ) sobre WP-CLI y malware
¿Es seguro usar WP-CLI para limpiar malware?
Sí, si sabes lo que estás haciendo. Es más seguro que un plugin porque no depende de la interfaz web, que puede estar comprometida. Pero requiere cuidado.
¿Puedo usar WP-CLI en cualquier hosting?
No. Necesitas acceso SSH. Si tu hosting es compartido y no te dan SSH, no podrás usarlo. En Syspanel (puerto 2106), puedes ver si tu plan incluye este acceso.
¿Qué hago si el malware vuelve a aparecer?
El malware suele ser un síntoma de una vulnerabilidad más grande. Cambia todas tus contraseñas (base de datos, FTP, wp-admin), actualiza todo y elimina plugins que no uses.
¿WP-CLI puede dañar mi sitio?
Sí, si ejecutas comandos incorrectos. Por eso es vital hacer copias de seguridad y entender cada comando antes de lanzarlo.
¿Necesito ser un experto en Linux para usar estos comandos?
No, pero necesitas soltura con la terminal. Empieza con los comandos de solo lectura (escaneo) y practica antes de pasar a los de escritura (limpieza).
Conclusión: Tu arsenal de seguridad en la terminal
Dominar WP-CLI malware scan no es solo para desarrolladores. Es una habilidad que te da un control total sobre tu WordPress. Te permite escanear WordPress sin depender de interfaces lentas y detectar amenazas que otros escáneres pasan por alto.
La clave está en la constancia. No esperes a que tu web sea hackeada para usar estas herramientas. Programa auditorías semanales. Revisa los checksums, los archivos modificados y los usuarios. Con estos comandos en tu arsenal, pasas de ser un simple usuario a ser el guardián de tu propio sitio.
Y recuerda, la seguridad es un viaje, no un destino. Si te sientes abrumado, empieza poco a poco: primero aprende a verificar la integridad del núcleo, luego a buscar archivos recientes y, cuando te sientas seguro, lánzate a la limpieza profunda.
[TIP]
Guarda este artículo en tus marcadores. La próxima vez que sospeches que algo anda mal, vuelve aquí y sigue los pasos. Tu yo del futuro (y tu web) te lo agradecerán.
