Encontrar scripts que envien spam en 5 pasos

noviembre 24, 2015

El desagradable spam es quizas una de las malesas que los administradores de sistemas hemos aprendido a aceptar y lidiar con, ya que definitivamente es IMPOSIBLE mantenerse libre de spam 100%.  Como tal, contamos con una vasta y amplia selección de herramientas que han resultado exitosas a traves del tiempo.  Aquí te comparto 5 pasos sencillos para encontrar scripts que envien spam de una forma efectiva.

Cinco pasos para encontrar scripts que envien spam

Paso 1: Logeate a tu servidor via SSH. Todas las operaciones que vamos a ejecutar son de la línea de comando.

Paso 2: Ejecuta el siguiente comando en la terminal.


grep cwd /var/log/exim_mainlog | grep -v /var/spool | awk -F"cwd=" '{print $2}' | awk '{print $1}' | sort | uniq -c | sort -n

El comando se ve complejo pero si lo segmentas es bastante sencillo, vamos a explicarlo para que puedas encontrar scripts que envien spam:

grep cwd /var/log/exim_mainlog

Aquí estamos buscando en el log de exim por la palabra cwd (current working directory) el cual nos dira exactamente la ubicación (path) desde donde se han enviado los correos.

grep -v /var/spool

Usando el delimitante -v en éste comando estamos excluyendo del listado las entradas con «/var/spool». Con esto filtramos las entradas regulares que han sido enviadas por exim de forma tradicional (no usando un script).

awk -F"cwd=" '{print $2}' | awk '{print $1}'

Usamos el comando awk con el flag -F para definir la porción de los resultados que queremos mostrar al ejecutar el comando. En este caso lo que nos interesa que es la ubicación del script enviando correos.

sort | uniq -c | sort -n

Finalmente enviamos el resultado sorteando por nombre de la ubicación del script y contandolos numericamente (para saber la cantidad de envios de cada script).

Al ejecutar el comando en una sola línea, vas a tener como resultado como éste:


13 /home/****/public_html/folder
28 /home/****/public_html
1025 /home/****/public_html/someotherfolder

El número que vez a la izquierda es la cantidad de correos enviados, seguido de la ubicación del script que ha enviado dicha cantidad de correos. En este caso, puedes ver que en: «/home/****/public_html/someotherfolder» un script ha enviado 1025 correos, lo cual es una cantidad sospechosa y por ende debemos revisar mas a fondo.

Paso 3: Veamos qué existe el directorio sospechoso usando:


ls -lahtr /home/****/public_html/someotherfolder

Acorde con tus resultados deberás inspeccionar los archivos en dicho directorio para identificar cual tiene alguna función que envie correos. Generalmente éste sería un archivo de extension .php o cualquier otra extensión con pre-procesamiento. Una vez que hayas logrado encontrar scripts que envien spam, puedes continuar al paso 4.

Paso 4: Ahora que conoces la ubicación exacta del script que está enviando correos masivos puedes tomar medidas al respecto. Borrarlo no es necesariamente lo mas sabio ya que es probable que quien lo puso ahí la primera vez pueda volver a poner el archivo. Sin embargo, si has identificado alguna vulnerabilidad y la misma ha sido corregida, borrando el archivo es una solución viable. De lo contrario, una medida que generalmente funciona mejor es identificar la IP o set de IPs que mas ejecutan dicho script para bloquearlas en el firewall:


grep "archivo.php" /home/****/access-logs/dominio.com | awk '{print $1}' | sort -n | uniq -c | sort -n

Esto te dará como resultado un listado de IP con sus hits a dicho script. Los valores mas altos generalmente corresponderian a la IP atacante:

3 111.222.333.444
1 111.222.333.445
2 111.222.333.446
1025 111.222.333.447

Paso 5: Ahora que tienes la IP o set de IPs del atacante, simplemente lo bloqueas del firewall y problema resuelto. Dependiendo de la aplicación de Firewall que estes usando, este comando podría variar:


apf -d 111.222.333.447 "Enviando spam por /home/****/public_html/someotherfolder"

Encontrar scripts que envien spam en cinco pasos

Felicidades! acabas de incomodar a un spammer que estaba usando tu servidor para enviar correo basura.  Bien hecho!

Toma en cuenta que nada le impide al atacante usar otra IP o un proxy para continuar accesando el script una vez lo bloqueas, por lo que deberías tomar medidas adicionales como cambiar los permisos al archivo, renombrar, borrar, etc. Pero toma nota de que si el archivo fue puesto en el servidor maliciosamente a través de alguna vulnerabilidad y no corrijes la vulnerabilidad, el atacante siempre podrá volver a inyectarte el mismo u otra variación del script.

Otra nota importante es que en estos comandos estoy asumiendo un servidor cPanel. Si tu servidor no es cPanel, el mismo concepto aplica pero la ubicación de el log de exim, y el access log de los dominios, etc puede que sea diferente.

Eso es todo. Buena suerte y dejame saber si te sirvio de algo esta información y si te ayudo a encontrar scripts que envien spam dejandome un comentario debajo!