Ciudad-photo.jpg

Si administras un servidor en el que hay varias webs alojadas, tal vez te hayas encontrado alguna vez con envíos de correos indiscriminados en el servidor. O tal vez, tu proveedor de hosting te haya avisado de actividad maliciosa o ilegal por tu parte. Muchas veces se trata de un script malicioso que se ha instalado en el servidor que utiliza la función mail() de PHP, que a su vez llama al programa sendmail del sistema para el envío masivo de correos electrónicos.

Posibles causas de la infección

Puede ser porque:

  • No nos hemos dado cuenta y nos hemos descargado una aplicación con malware.
  • Una aplicación de nuestro servidor es vulnerable y alguien con malas intenciones ha podido subir un archivo en el sistema, tanto a través de un script como por FTP o utilizando cualquier otra técnica.
  • Alguna de las aplicaciones de nuestro servidor ha sido vulnerable y el código malicioso se ha propagado a todos los directorios visibles.

Lo bueno es que, si el script es accesible por web, los privilegios con los que se ejecutará el código malicioso serán los que tenga el usuario del servidor web (www-data, por ejemplo), por lo que si nuestro servidor está bien configurado, dicho programa no podrá acceder a sitios a los que el usuario del servidor web no pueda, y eso es bueno. Al menos, no podrá acceder fácilmente a ciertas contraseñas, archivos de sistema, incluso propagarse por scripts de otros usuarios.

Puede hacer muchas más causas, el caso es que el código malicioso suele estar cifrado, y el archivo se descifra siempre que se ejecuta, como esto que pongo a continuación (hay muchos scripts como este, más o menos dañinos, pero la forma suele ser parecida):

Screenshot-17-07-2016-01.png

Casi siempre, el único cometido del script es propagarse por el servidor y enviar correo basura desde la máquina actual.

Repercusiones de todo esto

Bueno, no está bien que alguien coja nuestro ordenador para sus fines y si utilizan nuestro servidor para enviar correo, normalmente notaremos:

  • Menor rendimiento en el servidor (tanto CPU como ancho de banda)
  • Los archivos de log crecerán mucho
  • En ocasiones recibiremos mucho más correo no deseado de lo normal
  • Puede que nuestro proveedor de hosting contacte con nosotros en todo amenazante (por si somos nosotros los que lo causamos)
  • Si tenemos un servidor de correo legítimo en dicha máquina, los mensajes que se manden desde ahí poco a poco serán detectados como no deseados por los demás servidores.

Lo malo, es que si hay varias decenas de aplicaciones web en el servidor, es muy difícil detectar dónde está el problema (porque se pueden llevar a enviar varios mails por segundo y afectar a todas las webs de un servidor).

Medidas que podemos tomar: Desactivar el correo saliente

Si utilizamos postfix, podemos tomar una medida preventiva, para evitar que sigamos haciendo daño enviando correo no deseado. También es verdad que con esto evitaremos que se envíen correos originarios del servidor web por lo que tal vez otras webs también se vean afectadas por esto. Aunque es una buena medida para evitar un mal mayor.

Para este ejemplo el usuario del servidor web es www-data. Debemos editar /etc/postfix/main.cf y añadir al final la siguiente línea:

authorized_submit_users = !www-data, static:all

Tras esto, reiniciamos el servidor postfix. Al menos evitamos que se sigan enviando correos. Ahora deberíamos ver que Apache en su log de errores tendrá muchos errores como este:

sendmail: fatal: User www-data(33) is not allowed to submit mail

Medidas que podemos tomar: pasar un antivirus

Si disponemos de él, nunca está de más pasar un antivirus por nuestro servidor, ya que son capaces de detectar varios tipos de amenazas, incluso scripts maliciosos, aunque otras veces esto no tiene ningún efecto. Yo he probado con clamav, es importante tenerlo actualizado. Fue capaz de detectar muchos de los scripts maliciosos que había alojadas, aunque no todos.

$ clamscan -r –quiet /ruta/a/explorar/

Si no dice nada, no hay nada, cuando se queja es cuando encuentra cosas.

Medidas que podemos tomar: localizar el script malicioso

Para ello, debemos editar el archivo php.ini que utilice nuestro servidor (depende de si estamos utilizando módulo de Apache, CGI, FPM…), suelen estar en /etc/php/ , /etc/php5/ o rutas similares.

Ahí, podemos añadir al final unas líneas, o también buscar y modificar la configuración:

mail.add_x_header = On
mail.log = /tmp/phpmail.log

Con mail_add_x_header, el correo añadirá una línea X-PHP-Originating-Script en el que se indica qué script es el culpable. Y con mail.log escribimos un informe de todos los correos enviados por PHP. Este los podríamos ponerlo en /var/logs/ aunque tal vez el servidor web no tenga permiso para escribir ahí, por lo que podemos optar por crear un directorio en el que sí tenga permisos, o directamente ir a /tmp/ puesto que es una solución temporal.

Con esto, PHP generará un mensaje como este cada vez que se vaya a enviar un mensaje:

[24-Jul-2016 21:16:49 Europe/Berlin] mail() on [/ruta/del/script/nodeseado.php:2]: To: Esta dirección de correo electrónico está siendo protegida contra los robots de spam. Necesita tener JavaScript habilitado para poder verlo. — Headers:

Y con esta información, ya tenemos lo necesario para detectar dónde está el malo (o los malos). Sólo nos queda tomar las medidas pertinentes, borrar los scripts, aplicar cuarentena, etc.

 

Foto principal: Nicolai Berntsen

Fuente: poesiabinaria

¿Quién está en línea?

Hay 5641 invitados y ningún miembro en línea