Publi

Cómo localizar ese script en PHP que no para de enviar spam…

photo-1424296308064-1eead03d1ad9

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-210706

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: uncorreo@unserver.com — 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

También podría interesarte....

There are 4 comments left Ir a comentario

  1. Miguel /
    Usando Mozilla Firefox Mozilla Firefox 47.0 en Ubuntu Linux Ubuntu Linux

    Voy a probarlo y te diré algo :), pero me parece genial la explicación.

    1. Gaspar Fernández / Post Author
      Usando Mozilla Firefox Mozilla Firefox 47.0 en Ubuntu Linux Ubuntu Linux

      Eso espero, pruébalo y me cuentas, yo conseguí bloquear el script en el servidor de un cliente, aunque como se niega a quitar o actualizar la aplicación, cada dos por tres vuelven a entrar infecciones parecidas…

  2. Pingback: Cómo localizar ese script en PHP que no para de enviar spam… | PlanetaLibre /

  3. maria /
    Usando Google Chrome Google Chrome 63.0.3239.132 en Windows Windows NT

    Yo tengo este problema de envío masivo hacia emails pp.com en mi web creada con wordpress y OVH directamente me ha cancelado el alojamiento. intento limpiar pero no consigo localizar el script, así que cada vez que reinstalo mi sitio, me vuelven a anular el alojamiento y vuelta a empezar…

Leave a Reply