Alerta!Malware en mi Web! – Linux Malware Detect
Hace muy pocos días, una importante empresa que aloja infinidad páginas webs de todo tipo, contactó con nuestro departamento ya que habían recibido un “abuse” desde el servidor/es dónde están alojadas las páginas de sus clientes.
La búsqueda de malware en un sitio Web es una tarea ardua y tediosa a la par de lenta aunque con las herramientas adecuadas puedes ahorrar mucho tiempo. Esto no quita el pertinente análisis “a mano” para revisar ficheros que contengan código ofuscado, scripts maliciosos, etcétera.
Existen herramientas online para escanear sitios Webs en busca de pharmahack, defacements, malware, etcétera… Como he comentado, utilizar estas herramientas puede acortar el tiempo de detección y corrección del problema.
Herramientas de este tipo no es que existan multitud pero sí que existen las suficientes y con calidad. Podéis encontraros aplicaciones que pretendan ayudaros a encontrar “el bichito” en vuestro sitio pero realmente, las más famosas en este caso, son las más efectivas y más reales.
Una de ellas es Sucuri SiteCheck. Posee una interfaz muy amigable y es bastante rápida. El grado de detecciones es alto aunque evidentemente siempre cabe la posibilidad de que se escape algo. En algunas de nuestras pruebas más básicas, nos ha dado resultados muy buenos.
Otra muy efectiva es urlvoid.com. Igualmente tenemos una interfaz Web muy intuitiva apta para los más newbies, en el que mostrarán unos resultados muy esclarecedores.
En las anteriores capturas no hemos obtenido ningún tipo de aviso “extraño” por lo que podemos estar tranquilos (que no despistados).
Pero ¿y si la Web se encuentra en un servidor (ip) compartido?
Es muy usado el hosting compartido en Internet. Varios clientes contratan el mismo servidor para alojar sus sitios Webs. El coste se abarata pero la peligrosidad incrementa. ¿Por qué? Sencillo.
No todos los sysadmin tienen las mismas costumbres ni tienen los mismos conocimientos sobre seguridad Web. Posiblemente seas un usuario ávido y ducho en seguridad que tiene su sitio totalmente blindado hacia ataques externos pero quizás tu “vecino” de hosting sea un aficionado a crear su primer sitio Web y no tenga ni idea de que es un simple .htaccess. He aquí el problema.
El usuario descuidado dejará su sitio configurado para mostrar contenidos pero no así para protegerse. En ese caso, un atacante puede husmear en su Web y encontrar algún fallo, tipo SQL Injection, que le permita el control del servidor dedicado. Una vez hecho esto puede ser muy dañino y borrar los sitios alojados, o en nuestro caso, lanzar o inyectar un código maligno (o script “croneado”) para que el servidor forme parte de una bootnet (pensando a lo grande).
El problema de detectar esto es que si el hosting compartido aloja una treintena de Webs, la tarea se vuelve muy pesada y poco efectiva. Imaginad analizar logs uno a uno de cada sitio, o cada carpeta de plugins, temas, etcétera…
Podemos quitarnos trabajo con un excelente script llamado Linux Malware Detect. Este script puede escanear una ruta que aloje todas las “raíces” de la treintena de sitios Webs que hemos mencionado antes.
Lo primero que debemos hacer es actualizar la base de datos. Esto lo haremos con:
maldet -u
El tiempo de escaneo es proporcional a la cantidad de Webs alojadas y al número de ficheros contenidos. En un análisis de unos 25-30 sitios puede contener unos 200.000 ficheros perfectamente.
¿Por qué voy a escanear hosts que he observado en los logs que llevan 30 días sin tener cambios? Efectivamente, podemos encontrarnos que el ataque sea realizado en una determinada fecha, y si podemos descartar este “ruido documental” ahorraremos tiempo.
La forma para hacerlo es sencilla. Podemos usar la opción:
maldet –r /ruta/hosts/alojados 30
Dónde el parámetro –r nos permite seleccionar elegir los paths creados y/o modificados en los últimos 30 días. De ahí el número 30 después de la ruta. Vemos una captura del fichero de ayuda.
Si queremos que trabaje en segundo plano, podemos añadirle la opción –b y tendremos la consola operativa y la aplicación en segundo plano haciendo su tarea.
Una vez acabado nos informará de si ha encontrado ficheros sospechosos y de ser así, deberíamos tomar las medidas pertinentes para no volver a ser infectados.
ClamAV
Seguramente no tengas todo el tiempo del mundo o seas un alma inquieta y verás que el análisis se vuelve eterno, literalmente. Para que esto sea un análisis interesante hay que instalarle un “complemento” a LMD (Maldet) que no es otro que el motor antivirus ClamAV, sí, todavía está dando guerra.
Dependiendo de la versión Linux que use el servidor (en nuestro caso determinado CentOS en un servidor en Tegucigalpa por lo menos) puedes instalarlo con apt-get install clamd para versiones basadas en Debian (ojo el sudo) o en CentOS es con yum install clamd.
Una vez instalado, importantísimo, básico e imprescindible llamar al comando: freshclam
Esto actualiza las bases de virus de ClamAV. Cuando todo este correcto, se lanza maldet –u para que se actualice igualmente. A continuación lanzamos el mismo comando por ejemplo:
maldet –a /var/www
Maldet detectará el motor de ClamAV y la diferencia de análisis es abismal. Mientras que sin motor puede tardar más de 5 horas (300.000 ficheros) con ClamAV puede ser 1 hora. Casi nada.
Evidentemente esto no es infalible para detectar código malicioso pero ayuda a identificar el malware más conocido. Para un análisis efectivo nada mejor que hacerlo de forma manual y revisar logs y archivos con nombres sospechosos.
Por ejemplo, para revisar carpetas, es posible usar el comando famoso grep con la siguiente sintaxis.
grep –lri “eval(“ /home
Con esto lee dentro de los ficheros, incluidos tar.gz, en busca de la expresión eval( que suele usarse para contener código malicioso ofuscado (cortesía de @goldrak).
Es interesante que se use con la expresión –exclude=’*js’ por ejemplo, ya que que en JavaScript se suele usar a menudo esta expresión, poco en php.
Con esto finalizamos el artículo de hoy. Espero, una vez más, que te haya resultado interesante y que si alguna vez has tenido problemas de infección sepas como plantarle cara.
Un saludo.
@ManoloGaritmo