Limpiar Wordpress de Malware
Contexto
Contar con un sitio en wordpress conlleva una gran responsabilidad, especialmente si está orientado a ecommerce.
La mejor manera de proteger un sitio es la prevención. Cloudflare por ejemplo ofrece medidas como page rules y firewall rules que ayudan mucho a este caso, además; un buen entorno de producción puede contrarrestar la mayoría de posibles puertas de entrada a usuarios malintencionados.
Otra medida de prevención es estar al tanto de posibles fallos de seguridad en los plugins y atender si llegamos a saber que usamos alguno de los reportados. Además de esto es importante tener nuestro sitio actualizado y también nuestros plugins y themes.
Sin embargo, el motivo de este artículo es ayudar a los desarrolladores que tienen que lidiar con este problema. En mi caso, un conocido sufrió un problema asociado con malware debido a un plugin afectado recientemente. No fue removido o actualizado a tiempo en uno de sus sitios, lo que abrió un backdoor y se convirtió en un dolor de cabeza por resolver.
El plugin de la discordia fue Wordpress File Manager, Wordfence publicó en su blog sobre el caso el 4 de septiembre: https://www.wordfence.com/blog/2020/09/millions-of-sites-targeted-in-file-manager-vulnerability-attacks/
Resolviendo el problema
Ok, vamos a proceder. No existe una receta exacta para remover malware, pero la idea de esta guía es colaborar con algunos pasos que pueden ayudar. Si usted tiene extra tips y sugerencias, se le invita a comentarlos para mejorar este artículo.
Se asume que tiene accesos al servidor y que puede instalar dependencias al gusto para resolver el issue.
- Instalar y usar Wordfence: En Wordpress, este plugin ofrece muchas opciones para proteger el sitio y hace scan en busca de archivos infectados.
1.a Instalar o actualizar la version de Wordfence

1.b Ir al plugin y agregar estas opciones para un escaner mas intrusivo (your-wp.com/wp-admin/admin.php?page=WordfenceScan&subpage=scan_options)


1.c Procedemos a realizar el scan (your-wp.com/wp-admin/admin.php?page=WordfenceScan)

1.d Luego de esperar, debemos ver un lista de resultados como estos:

Debemos revisar todos estos resultados, la mayoría de ellos son fáciles de remover por Wordfence, pero en mi caso, me llama la atención este:

Finalmente, decimos a Wordfence que borre todos los archivos. “DELETE ALL DELETABLE FILES” en la esquina superior derecha de los resultados.
Si luego de borrar lo que se pudo borrar sigue viendo resultados maliciosos, debe escoger uno por uno, y hacer un repair. En mi caso tuve que reparar alrededor de 5 archivos, desde el index.php hasta el wp-config.php.
Para este último, el wp-config.php debe ser limpiado manualmente. Es sencillo, pero un poco complejo sino está acostumbrado a editar este archivo en WP. Por otra parte, debemos revisar si otros archivos necesitarán ser removidos o editados manualmente.
Este proceso es más tedioso, pero es necesario que no se quede ninguno sin resolver.
2. Removiendo y editando archivos
2.a Luego de obtener resultados de Wordfence, mi recomendación es entrar al server via SSH y editar cada archivo manualmente. Si usa git puede hacer un git pull y sobreescribir archivos core de wordpress primeramente.
Los comandos útiles serian:
sudo nano yourfile.php
rm yourfile.php

2.b Procedemos a remover líneas similares a esta:

Listo, a este punto, sugiero realizar un nuevo Wordfence Scan.
3. Si luego de un nuevo Wordfence Scan no obtenemos malware, podemos proceder a revisar permisos de acceso en nuestras carpetas. Recordando, los resultados del scan nos dieron una pista de un archivo con permisos públicos, así que vemos hasta ahí a revisar los accesos en ese folder:

3.a Remover la carpeta del “plugin” hello.
sudo rm -R hello/
3.b Permisos correctos
Primero, reasignar a todo el directorio de wordpress los permisos originales
sudo chown -R www-data:www-data /wp-directory
Segundo, vamos a revisar que todos los directorios dentro tengan los permisos correctos de esta manera:
find /var/www/wp-directory -type d -print0 | xargs -0 chmod 755
Tercero, lo mismo, pero con archivos
find /var/www/wp-directory -type f -print0 | xargs -0 chmod 644
Nota, si usted obtiene muchos errores al ejecutar estos comandos, puede convertirse en sudo user con sudo su (usar sudo delante del comando no funciona como se requiere..)
3.c Removemos carpetas extrañas y poco comunes que no pertenecen a una instalación convencional de wordpress (sugiero contar con un backup previamente):

También puede borrar otros archivos que no se necesitan:

4. Instalar clamav en el servidor (antivirus)
Se sugiere instalar clamav para revisar adicionalmente el server en busca de virus.
4.a Primero corremos este comando para instalarlo en el servidor (un server basado en debian para este caso)
sudo apt-get update
sudo apt-get install clamav
4.b Verificamos la versión instalada
clamscan — version

4.b Usamos este comando para realizar un scan y borrar de paso cualquier archivo malicioso (esto puede tomar un tiempo)
clamscan -r — bell -i /var/www/your-wp-directory/

Al terminar, obtendrá los resultados así:

Y listo, de esta manera puede limpiar su instalación de Wordpress de Malware.
Recuerde mantener su sitio, themes y plugins actualizados.
Algunas recomendaciones adicionales:
Como recomendación adicional, haga cambio de clave a todos los usuarios que pueden acceder a /wp-admin
Recuerde que su archivo wp-config.php pudo ser visto y comprometido, por lo tanto es recomendable cambiar los salts de su instalación y las claves y usuarios de su base de datos.
Otro tip, puede volver a realizar un Wordfence Scan, pero esta vez en modo High Sensitive para descartar cualquier otro potencial backdoor.
Se realiza desde your-site.com/wp-admin/admin.php?page=WordfenceScan&subpage=scan_options

Otro tip, es bajar un backup del sitio en su computadora y con un editor como phpstorm, sublime, etc.. hacer un search buscando cosas como base64, base64_decode, eval o eval(base64_decode
Estos serian los pasos usados para limpiar el sitio con Malware de Wordpress. Si usted conoce alguna forma más fácil y rápida puede compartirla acá!