Recientemente algunos clientes me han escrito quejándose de que sus sitios web han sido atacados, en este post voy a hablar sólo de los ataques a blogs de WordPress, de hecho, el hosting que lleva programadorphp.org es atacado diariamente por atacantes/spammers y algunas veces logran hacerse un hueco, así que vienen a mí para que les solucione la papeleta.
Normalmente los ataques vienen de agujeros de seguridad en plugins, temas, o el propio motor de WordPress, por eso es importante ir actualizando todo lo rápido que se pueda y tener mecanismos que guarden copias de seguridad periódicamente para recuperar los datos fácilmente.
Los spammers están al día de los agujeros de seguridad y cuando se descubre uno no tienen más que buscar en Google sitios potencialmente vulnerables, esto es, realizan la búsqueda con filtros como «inurl» donde aparezcan los scripts que necesitan «explotar».
Lanzan ataques a la lista de sitios web vulnerables y si es fructífero, suben un script con código malicioso que al ejecutarse envían un correo al atacante, por lo que sabremos incluso quién es el spammer…estos no suelen ser muy buenos, pero los hay que sí lo son…
Si tu hosting no te avisa de que tienes un script malicioso en una de tus páginas de WordPress puedes buscarlo por tí mismo, hay software PHP que puede hacerlo por tí, pero en mi caso me gusta hacerlo con una consola SSH, si no tienes acceso siempre puedes subir un shell escrito en PHP y lanzar los comandos desde el navegador, y si no tienes soporte de comandos de consola por el safe_mode o cualquier otra opción de seguridad, lo mejor es que te descargues todo el contenido para analizarlo en local.
Si crees que puedes tener spam en tu blog, usa un buscador como Google con parámetros «site:urldetublog.es», «inurl:», y otras técnicas de Black-hat SEO, y busca palabras que los spammers usan en sus anuncios como segundo parámetro, quizás te lleves una sorpresa…
Para encontrar los ficheros maliciosos debes buscar dentro de todos los scripts php las instrucciones del tipo eval, base64_decode, gzinflate, posix_getuid, system, shell_exec, etc. Esto se puede hacer con un script de consola bash o con un programa que busque texto dentro de los ficheros como notepad++ o bien por un plugin de un IDE con FTP que busque dentro de ficheros.
Seguramente habrá ficheros que usen algunas de estas instrucciones y no sean maliciosos, de hecho WordPress los tiene y los necesita para realizar algunas de sus funciones más importantes, del núcleo.
Pero los que sean maliciosos serán bastante sospechosos, contendrán cadenas encriptadas y largas, direcciones de blogs de los propios spammer, y los hay que incluyen una consola shell escrita en PHP completa, extrae información del usuario, del sistema, de los directorios, se copia a sí mismo,…cosas bastante sospechosas , indicios de que el fichero es de un atacante.
Para detectar un script malicioso en un tema lo primero que debes buscar son scripts dentro de directorios como cache, images, etc., hay un agujero de seguridad en timthumb.php que está afectando a millones de blogs hoy en día, debes buscar su reemplazo en seguida, aquí tienes la versión actualizada y parcheada. Si encuentras ficheros con nombres raros con extensión php en la caché, ya sabes que algo raro pasa…Es posible que el script malicioso busque otros ficheros php o genere copias de sí mismo con otros nombres, puedes usar parte del propio código encontrado en un script malicioso para buscarlo en todo el servidor con una expresión regular…
Evidentemente, los plugins no se salvan, algunos de los más peligrosos son los que contienen formularios, como cforms, contact-form, etc. Los spammers usan vulnerabilidades encontradas por los hackers buenos para utilizarlos en contra de los que mantienen los blogs.
Si encuentras que hay contenido spam dentro de plugins quizás debas plantearte borrar el plugin por completo y descargarlo de nuevo parcheado o substituirlo por uno más fiable, incluso de cosecha propia.
Para encontrar en todo tu host scripts maliciosos puedes usar un comando como este
$ grep ‘base64_decode’ `find ./ -iname *.php` > results_b64.txt
$ grep ‘eval’ `find ./ -iname *.php` > results_eval.txt
puedes probar con varias expresiones y luego analizar los ficheros encontrados mediante los logs guardados en los ficheros de texto. Es posible que los ficheros tengan nombres codificados y que no tengan la extensión .php ,tenlo en cuenta por si hay códigos maliciosos escondidos en ficheros aparentemente inofensivos pero de contenido codificado, por ejemplo, en base64.
Debes copiarlos a tu ordenador para poder analizarlos con más detenimiento, si los administradores del hosting no han des-habilitado los scripts/directorios en cuestión es mejor que les quites los permisos de ejecución y les dejes sólo los de lectura, esto se puede hacer por FTP o bien usando el comando
$ chmod +r -R ./directorio_de_mi_blog
Una vez hayas copiado los ficheros maliciosos o los hayas enviado por email , desde la consola con el comando cat fichero.php | mail tuemail o bien unicode ficheros.php | mailx tuemail , e incluso comprimirlos todos y envíartelos por email con un tar czf ficheros.php comprimido.tgz …
entonces ,una vez hecho, lo mejor es que los borres o bien los reemplaces, si lo que se ha infectado es un tema o una parte de este, te recomiendo no usar ese tema hasta haber encontrado un parche para el mismo.
Si encuentras ficheros dentro del directorio de temas o el principal de wordpress con nombres raros como injektor.php, caracteresraros.php, nombresraros.php, te recomiendo que borres por completo el directorio de wordpress menos las imágenes, que están en wp-content, ah, y wp-config.php que es la configuración del blog…y vuelvas a subir WordPress actualizado.
Ahora que has eliminado el contenido, ¿como protegerte para que no vuelva a pasar?, las medidas básicas de seguridad de un sistema de WordPress son
Unos consejos para saber más
Intenta decodificar usando la propia instrucción que usa el spammer para saber qué hace el script malicioso y entender qué es lo que busca, lo normal es que esté buscando un ordenador para hacer ataques DDOS o enviar correos de spam/scam (estafa) masivos, y si lo consigue nuestro host entrará a formar parte de una lista de spammers y los clientes no podrán recibir correos de nuestras cuentas de correo…
Enlaces del blog de @chemaalonso , experto en seguridad informática:
Ninguna protección es totalmente fiable, hay que estar al día de actualizaciones y saber en qué puedes confiar, siempre es bueno contar con un programador y un técnico de redes y sistemas que te ayuden y te aconsejen cuando el infierno se desata en tu sitio web.