Hacking Web. Inserción de enlaces


Durante esta semana, nuestra web referente a nuestro proyecto de trading en el mercado de divisas, FOREXperiences.com ha sufrido un ataque informático. Cómo lo hemos solucionado?.


Este ataque no ha sido una cosa específica de nuestro dominio sino que los reportes de las empresas especializadas indican que se ha producido un pico de actividad en las webs que utilizan CMS como Wordpress o Joomla. No se ha tratado de un virus, sino un tema de introducción de links externos para mejorar el posicionamiento de ciertas webs en Internet. Hemos pensado que podría ser útil para otros webmasters que se encuentren en esta situación saber cómo hemos logrado revertir la situación y eliminar la amenaza que estaba siendo detectada por nuestro antivirus y el personal de Google que nos ha advertido de este hecho a través de las Google Webmaster Tools.

Anatomía de un crimen

Si vamos por pasos, podemos ver como el antivirus detecta la amenaza como JS/HiddenLink, es decir un tipo de malware que genera artificialmente enlaces a otras webs para ganar posicionamiento. Para ello se vale de una llamada a un procedimiento JavaScript que nos coloca un link en unas coordenadas fuera de la pantalla para que éste hecho no sea detectado. Si la única actividad del malware es ésta, alguien podría pensar que tampoco es tan necesario que actuemos, pues no están perjudicándonos de forma directa, pero hay que tener en cuenta que Google penaliza este tipo de prácticas, y por tanto la web descenderá de posicionamiento en los buscadores si no actuamos rápidamente, puesto que esto es una actividad prohibida. Por otro lado tenemos un tema de imagen que también es bastante importante: Muchos de los antivirus detectan este malware y dan el correspondiente aviso al usuario, por lo que si no actuamos éste lo único que verá es que no se toman medidas ante una situación de este tipo, seguramente sin conocer el alcance de este malware


Línea de investigación

Como ocurre en estos casos, nos pusimos a investigar cual podría ser el origen. Hay que tener en cuenta que al ser código que se genera en el servidor, nosotros lo que podemos ver en el código fuente original son todos los procedimientos que acaban generando este código, por tanto, debemos contar con dos herramientas principales para indicar la solución al problema:

  • El código fuente del fichero del servidor (php en este caso)
  • El código fuente generado por el navegador (que en el caso de Chrome lo puedes obtener con una opción presente pulsando el botón derecho del ratón.

Y digo esto porque yo os voy a mostrar un caso concreto, pero evidentemente la situación puede tener otras variantes, aunque todas con la misma base. Viendo que la documentación procedente del antivirus no me daba mucha más información que fuera de utilidad, dado que ellos inciden en la eliminación del virus de la parte “cliente” que es la que realiza el producto, pero no como eliminar la fuente, decidí buscar otros recursos y encontré una página interesante:

sitecheck.sucuri.net/

Examinando el malware

Esta página es un scanner de malware gratuito. Lo único que debes hacer es poner tu URL en la casilla y el examinará el código para identificar posibles orígenes de ese malware. El proceso te saca un detalle de todas las incidencias encontradas, y lo más importante, una pequeña ventana en donde se visualiza parte del código malicioso que nos da una importante información en nuestro caso: dnnViewState.

dnnViewState es una función de Javascript que se está utilizando en este caso para inyectar el código con el enlace. Tal y como hemos comentado, éste enlace no es visible, ya que se coloca fuera de la pantalla y además, se codifica para que no podamos buscar un string concreto dentro del código, pero a pesar de estas dificultades, es posible identificar el punto donde el código se ha alterado.

Identificando el punto de inserción

El paso más complicado y agotador sin duda es éste, dado que para ellos hay que tener conocimientos de informática. Para ello utilizaremos el código extraído del navegador, en el que pasaremos a buscar dentro de él el punto dónde se está insertanto el procedimiento Javascript que genera el enlace. Como hemos comentado, no encontraremos el enlace de forma física en nuestro fichero en el servidor porque se genera al interpretar el lenguaje correspondiente en el que está desarrollado la web (php).

Una vez hemos localizado el punto, pasamos a examinar nuestro código fuente procedente del servidor buscando el mismo punto en el que está insertado el código, y ahí debemos buscar el procedimiento php que lo está generando y su fichero correspondiente en el servidor. Hay que tener en cuenta, que si trabajamos con plantilla, el módulo puede estar alojado físicamente en los directorios correspondientes a la misma.

Dentro del módulo deberemos buscar algo parecido a esto:

Una vez localizado debemos eliminar únicamente esta sentencia, y con esto debería quedar solucionado el problema. Espero que esto sirva de ayuda a próximos afectados por este problema y os facilite la solución, pero si necesitáis más ayuda sólo tenéis que enviar un mensaje

Albert Salvany