PHP Suhosin excelente patch de seguridad para servidores compartidos

Debido a la naturaleza colaborativa del desarrollo de PHP (hay decenas de programadores involucrados de distintas regiones del planeta), es muy difícil que errores en la programación de PHP en sí mismo sean detectables, incluso para los programadores del PHP Core, y por ello se introduce algunas veces errores en funciones de PHP que pueden permitir a un atacante remoto escalar privilegios en el server, o instalar troyanos aprovechando un buffer overflow en alguna función de PHP. Para tratar de contener éste tipo de fallas es que existe un proyecto llamado Suhosin, que se encarga de proteger a los usuarios de PHP de vulnerabilidades conocidas o desconocidas que forman parte del código PHP en sí mismo. Para lograr tal fin Suhosin viene en dos partes que pueden utilizarce en forma separada o conjunta. La primera parte es un pequeño parche al PHP Core (el núcleo del lenguaje), que implementa unas cuantas medidas de protección básica de bajo nivel contra vulnerabilidades debidas a buffer overflow o problemas con el formato de los string (cadenas de texto). La segunda parte de Suhosin es una poderosa extensión que implementa medidas de protección adicionales como puede ser bloquear o desactivar funciones de PHP en caso de necesidad.

Si se usa un hosting compartido, es una muy buena idea instalar Suhosin, porque jamas uno puede estar seguro del código de un cliente que paga por hosting casi nada, y que le resulta extremadamente fácil saltar de un hosting a otro debido a la tremenda oferta existente. Debido a ello no le presta mucha atención a la seguridad de su código.

Adicionalmente a instalar Suhosin, una muy buena medida complementaria es deshabilitar la función eval() de PHP que abre las puertas a que cualquiera que consiga inyectar código en un script PHP puede ejecutar código PHP arbitrário sobre el server. Muchas veces themes o plugins de Joomla, Mambo o WordPress, traen troyanos ocultos por una función base64_decode(), que es luego ejecutada por eval(), hable sobre ello en diciembre del año pasado en un post de éste blog llamado "Troyanos en themes de WordPress", pero parece que la técnica se ha vuelto tan popular para ocultar troyanos que es aplicada en todo script que pretende infectar un webserver.

Entonces para evitar problemas debemos instalar Suhosin y deshabilitar eval(), de esa forma si alguien tiene un site infectado nos llamara para reportar que "el server tiene un error", porque su página no se ve bien. Para conseguir el objetivo anterior debemos de hacer éstos simple pasos en nuestro Debian (en Ubuntu sólo añadir sudo delante de cada comando):

# apt-get install php5-suhosin
# echo "suhosin.executor.disable_eval=On" >> /etc/php5/apache2/php.ini
# /etc/init.d/apache2 force-reload

Y listo, ya tenemos a nuestro servidor un poquito más protegido que antes, ahora al menos los troyanos no se ejecutaran tan fácilmente, los forzamos a ser más visibles. Complementariamente siempre es buena idea deshabilitar las fuciones que permiten ejecutar comandos del sistema con los privilegios del usuario del webserver (en Debian www-data), para ello edite el archivo /etc/php5/apache2/php.ini busque la línea que diga "disable_functions" y agregue la lista de funciones shell que desea deshabilitar separadas por comas, una buena idea es poner éstos valores:

disable_functions = exec, system, escapeshellcmd

No hay que olvidar reiniciar el apache, para que los cambios en el php.ini tengan efecto. Espero que toda esta información les haya sido de utilidad y los ayude a proteger sus servidores web.

2 comentarios en “PHP Suhosin excelente patch de seguridad para servidores compartidos

  1. Buenas, sé que el artículo tiene 7 años, pero Google me ha traido hasta aquí por un trozo de tu post:

    "Muchas veces themes o plugins de Joomla, Mambo o WordPress, traen troyanos ocultos por una función base64_decode(), que es luego ejecutada por eval(), hable sobre ello en diciembre del año pasado en un post de éste blog llamado "Troyanos en themes de WordPress", pero parece que la técnica se ha vuelto tan popular para ocultar troyanos que es aplicada en todo script que pretende infectar un webserver."

    Resulta que lo que explicas en "Troyanos en themes de WordPress" me está pasando ahora mismo en una web Joomla. Lo que han logrado es colarme links tipo madure milfs, lesbian videos, etc. que además quedan ocultos para el ojo humano.

    He revisado todo lo que he podido y he borrado varios php con un contenido similar, pero no soy capaz de eliminar definitivamente el problema. ¿Hay algún método infalible para detectarlo y eliminarlo? La web no la mantengo yo, sólo el servidor, por lo que no sé qué theme, plugin o complemento es el que está infectado.

    Muchísimas gracias por tu tiempo.

    1. No hay método infalible. La única manera que tienes de librarte de eso es haciendo una instalación de la última versión de Joomla e importar tus páginas de ser posible manualmente (si es que no son muchas), para asegurarte que no se está colando por alli algún HTML comentado.

      WordPress, Drupal & Joomla han mejorado un poco a lo largo de estos años, pero plugins que no se actualizan o un CMS muy antiguo con vulnerabilidad conocida son por lo general la forma por donde inyectan contenido en tu website.

      Cómo comentaba en el post la función que usan para ocultar el contenido inyectado es «base64_decode()», así que podrias en el dirctorio donde está el Joomla instalado ejecutar este comando:

      # grep -R «base64_decode» ./

      Eso debería de listarte todos los archivos que contienen dicha función. Pero también puede pasar que te lo hayan colado en la misma DB.

      Suerte.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.