systemadmin.es > Seguridad > Desinfección de un site con un Joomla infectado

Desinfección de un site con un Joomla infectado

Los gestores de contenidos como Joomla o WordPress sin actualizar acaban siendo unos blancos fáciles para inyectar links o bien para distribuir cualquier tipo de malware.

Un ejemplo de código javascript que ha infectado un Joomla es el siguiente:

Javascript en un Joomla infectado

Javascript en un Joomla infectado

Para detectar este tipo de infecciones se puede usar el siguiente script para mandar un correo con los cambios en los ficheros:

#!/bin/bash

TEMPORAL=$(mktemp /tmp/canvisXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX)

find /var/www/ -mmin -1440 \( -iname \*.php -o -iname \*.htm -o -iname \*.html \) -type f -printf '%TY-%Tm-%Td %TT %p\n' | grep -v "/var/www/void/" >$TEMPORAL

if [ -n "$(cat $TEMPORAL)" ];
then
        cat $TEMPORAL | mail -s "[control canvis::$(hostname)]: $(date +%d-%m-%Y)" -c tecnicos@systemadmin.es
fi

rm -f $TEMPORAL

Una vez detectada la intrusión podemos eliminar con un simple sed todos los ficheros infectados que sigan un mismo patrón. Por ejemplo:

# for i in $(fgrep "XiLgdMoRSAbuUBAgpMkf" * -R| cut -f 1 -d':'); do sed -i 's@<?php echo .<script type="text/javascript">var XiLgdMoRSAbuUBAgpMkf.*@@g' $i; done                            

En este caso, además de los ficheros PHP infectados se habían subido ficheros HTML con el código javascript para ser llamados desde otros sites. Realizando una comparación del md5 para todos los ficheros con el md5 de uno que sabemos que esta infectado podemos eliminarlos todos de golpe:

# for i in $(fgrep "XiLgdMoRSAbuUBAgpMkf" * -R| cut -f 1 -d':'); do if [ "$(md5sum $i | awk '{ print $1 }')" == "4b2097bb969f3e0533d93f61d82dd4e9" ]; then rm -f $i; fi; done

Finalmente para evitar futuras infecciones deberíamos actualizar el Joomla o el gestor de contenidos que corresponda, pero de momento podemos dificultar la infección cambiando los permisos y definiendo el atributo immutable.

Como primera medida deberíamos cambiar el owner del código a uno diferente al que use el servidor web. De esta manera intentamos que el usuario del apache no pueda escribir en los ficheros de PHP, solo leerlos. Para asegurar esto, debemos modificar los permisos para evitar que tengan permisos de escritura:

# find . -type f -exec chmod o-wx {} \;
# find . -type d -exec chmod o-w {} \;
# find . -type f -exec  chmod -x {} \;
# find . -iname \*php -exec chattr +i {} \;

Finalmente, para mayor seguridad podemos definir el bit “immutable” a todos los ficheros PHP:

# find . -iname \*php -exec chattr +i {} \;

Con este bit definido no se puede modificar el fichero a no ser que explicitamente como root volvamos a quitar el bit.

Deja un comentario:

XHTML - Tags permitidos:<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>