Detectando y eliminando el malware

Publicado 10-04-2016

Últimamente estamos asistiendo a un considerable aumento de las infecciones por malware en las aplicaciones web. En este artículo daremos algunas claves para detectarlo y combatirlo.

¿Qué es el malware?

Se trata de programas desarrollados malintencionadamente por personas sin escrúpulos que habitualmente buscan intereses económicos ilegítimos con su desarrollo y propagación.

Estos programas son capaces de infectar el código legítimo de nuestras aplicaciones, especialmente aquellas desarrolladas en PHP y que puedan tener una seguridad algo descuidada.

¿Qué efectos produce?

El malware casi siempre intenta desarrollar alguna actividad ilícita que produzca beneficios económicos a sus autores, o a los que han pagado por desarrollarlo, y por lo tanto se centran en utilizar nuestros servidores para atacar los servidores de terceros y con ello cobrar de una competencia desleal, o en romper contraseñas de otros utilizando fuerza bruta computacional, en alojar contenidos ilegales, etc…

En muchos casos este malware está además muy mal escrito, quiero pensar que en parte es porque ningún programador o hacker que se precie se pondría al servicio de tan bajos intereses, y también porque para facilitar su ocultación utilizan técnicas de ofuscamiento que no siempre funcionan, sin tener en cuenta que es código que infecta servidores de diversa índole y que no tienen porque funcionar igual. Esto ocasiona graves problemas de funcionamiento en las aplicaciones infectadas, llegando al punto de producir paradas no intencionandas en el servicio.

Por supuesto tenemos que tener en cuenta que no sólo se producen efectos adversos en nuestras propias aplicaciones, además estamos colaborando sin quererlo con actividades mafiosas contra terceros.

¿Cuáles son sus objetivos?

Decíamos al principio que sobre todo aplicaciones PHP con una seguridad no muy cuidada, esto es por ejemplo un Wordpress o un Prestashop con un montón de plugins o módulos de terceros y que no esté activamente actualizado.

También aplicaciones propias, normalmente en PHP, en las que no hayamos tenido cuidado de utilizar un framework moderno o de procesar correctamente todas las entradas, como los campos de los formularios.

¿Cómo lo prevenimos?

Lo que podemos hacer como usuarios de una de estas aplicaciones es:

  1. Estar muy seguros de los módulos que instalamos: Que sean actuales, que realmente los necesitemos, que estén mantenidos y que tengan una amplia comunidad. Piensa muy mucho si realmente necesitas un plugin y no los pruebes en producción sólo por probar.

  2. Tener las aplicaciones y los módulos actualizados: Entrar con cierta frecuencia al panel de nuestro wordpress o similar y hacer caso de todos los avisos de actualización y seguridad.

  3. Hacer copia de seguridad regularmente: Haz copias del seguridad del directorio de la aplicación y si es posible también de la base de datos. Una restauración a tiempo es una victoria.

  4. Alojar en una empresa seria: No necesariamente la nuestra, pero si en alguna que nos coja el teléfono, que podamos hablar con un técnico si es preciso y que nos sepa ayudar y aconsejar, y por supuesto, que tenga expertos en sistemas entre su personal.

A nivel de servidor: Maldetect

Martianoids.com implementa a nivel de servidor un sistema de detección y cuarentena de malware conocido como Maldetect que escanea todos los días las aplicaciones de los usuarios y nos avisa en caso de detectar uno de estos programas maliciosos. Por tanto, si eres cliente de hosting basta con que sigas los puntos que hemos descrito antes, ya que de la detección y alerta nos ocupamos nosotros.

En el caso de que seas cliente de un servidor, o de una instancia virtual, puedes pedirnos ayuda para configurar la detección pero te dejamos una breve guía para hacerlo:

Descargar e instalar la última versión:
 1root> cd /root
 2root> mkdir incoming
 3root> cd incoming
 4root> wget http://www.rfxn.com/downloads/maldetect-current.tar.gz
 52014-08-25 15:57:46 (760 KB/s) - `maldetect-current.tar.gz' saved [879295/879295]
 6root> tar xvzf maldetect-current.tar.gz
 7root> cd maldetect-1.4.2/
 8root> ./install.sh
 9
10Linux Malware Detect v1.4.2
11            (C) 2002-2013, R-fx Networks <proj@r-fx.org>
12            (C) 2013, Ryan MacDonald <ryan@r-fx.org>
13inotifywait (C) 2007, Rohan McGovern <rohan@mcgovern.id.au>
14This program may be freely redistributed under the terms of the GNU GPL
15
16installation completed to /usr/local/maldetect
17config file: /usr/local/maldetect/conf.maldet
18exec file: /usr/local/maldetect/maldet
19exec link: /usr/local/sbin/maldet
20exec link: /usr/local/sbin/lmd
21cron.daily: /etc/cron.daily/maldet
22
23maldet(651646): {sigup} performing signature update check...
24maldet(651646): {sigup} local signature set is version 201205035915
25maldet(651646): {sigup} new signature set (2014082316728) available
26maldet(651646): {sigup} downloaded http://cdn.rfxn.com/downloads/md5.dat
27maldet(651646): {sigup} downloaded http://cdn.rfxn.com/downloads/hex.dat
28maldet(651646): {sigup} downloaded http://cdn.rfxn.com/downloads/rfxn.ndb
29maldet(651646): {sigup} downloaded http://cdn.rfxn.com/downloads/rfxn.hdb
30maldet(651646): {sigup} downloaded http://cdn.rfxn.com/downloads/maldet-clean.tgz
31maldet(651646): {sigup} signature set update completed
32maldet(651646): {sigup} 11788 signatures (9895 MD5 / 1893 HEX)

Como podremos observar el propio software actualizará las firmas de malware durante la instalación, pero si nos queremos asegurar o actualizar manualmente en otra ocasión:

 1root> maldet --update-ver
 2Linux Malware Detect v1.4.2
 3            (C) 2002-2013, R-fx Networks <proj@r-fx.org>
 4            (C) 2013, Ryan MacDonald <ryan@r-fx.org>
 5inotifywait (C) 2007, Rohan McGovern <rohan@mcgovern.id.au>
 6This program may be freely redistributed under the terms of the GNU GPL v2
 7
 8maldet(653719): {update} checking for available updates...
 9maldet(653719): {update} hashing install files and checking against server...
10maldet(653719): {update} latest version already installed.
11
12root> maldet --update
13Linux Malware Detect v1.4.2
14            (C) 2002-2013, R-fx Networks <proj@r-fx.org>
15            (C) 2013, Ryan MacDonald <ryan@r-fx.org>
16inotifywait (C) 2007, Rohan McGovern <rohan@mcgovern.id.au>
17This program may be freely redistributed under the terms of the GNU GPL v2
18
19maldet(653447): {sigup} performing signature update check...
20maldet(653447): {sigup} local signature set is version 2014082316728
21maldet(653447): {sigup} latest signature set already installed

A partir de este momento ya podemos realizar un primer escaneo manual sobre nuestro directorio web:

 1root> maldet -a /var/www
 2Linux Malware Detect v1.4.2
 3            (C) 2002-2013, R-fx Networks <proj@r-fx.org>
 4            (C) 2013, Ryan MacDonald <ryan@r-fx.org>
 5inotifywait (C) 2007, Rohan McGovern <rohan@mcgovern.id.au>
 6This program may be freely redistributed under the terms of the GNU GPL v2
 7
 8maldet(657956): {scan} signatures loaded: 11788 (9895 MD5 / 1893 HEX)
 9maldet(657956): {scan} building file list for /var/www/, this might take awhile...
10maldet(657956): {scan} file list completed, found 7099 files...
11maldet(657956): {scan} 7099/7099 files scanned: 0 hits 0 cleaned
12maldet(657956): {scan} scan completed on /var/www/: files 7099, malware hits 0, cleaned hits 0
13maldet(657956): {scan} scan report saved, to view run: maldet --report 082514-1640.657956

El motor de escaneo del propio maldet es un poco lento, pero nos ofrece la posibilidad de utilizar el motor del antivirus clamav si estuviera instalado, así que lo instalaremos:

1root> apt-get update
2root> apt-get install clamav

En los siguientes escaneos se utilizará automáticamente.

Ahora vamos a ajustar la configuración de maldetect, en /usr/local/maldetect/conf.maldet, lo editaremos con nuestro editor favorito y cambiaremos las siguientes líneas:

1email_alert=1
2email_subj="Alarma malware de $(hostname)"
3email_addr="tudireccion@deemail.com"
4quar_hits=1
5quar_clean=1

Con esto ya tenemos una configuración básica que será suficiente en la mayor parte de los casos.

Para configurar el escaneo automático en cron, primero borraremos el fichero /etc/cron.d/maldet_pub ya que en nuestro caso no nos interesa mirar directorios web de usuarios:

1root> rm /etc/cron.d/maldet_pub

Ahora vamos a cambiar el script que él mismo ha puesto en el cron para que escanee sólo lo que a nosotros nos interesa. En el caso de un servidor web normal será el directorio /var/www, pero podemos incluir cualquier otro que nos interese. Editaremos el fichero /etc/cron.daily/maldet y lo dejaremos en algo así:

 1#!/usr/bin/env bash
 2export PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:$PATH
 3
 4# sleep for random value to give upstream a bit of headroom
 5sleep $(echo $RANDOM | cut -c1-3) >> /dev/null 2>&1
 6
 7# clear quarantine/session/tmp data every 14 days
 8/usr/sbin/tmpwatch 336 /usr/local/maldetect/tmp >> /dev/null 2>&1
 9/usr/sbin/tmpwatch 336 /usr/local/maldetect/sess >> /dev/null 2>&1
10/usr/sbin/tmpwatch 336 /usr/local/maldetect/quarantine >> /dev/null 2>&1
11/usr/sbin/tmpwatch 336 /usr/local/maldetect/pub/*/ >> /dev/null 2>&1
12
13# check for new release version
14/usr/local/maldetect/maldet -d >> /dev/null 2>&1
15
16# check for new definition set
17/usr/local/maldetect/maldet -u >> /dev/null 2>&1
18
19# Check files
20/usr/local/maldetect/maldet -b -r /var/www 2 >> /dev/null 2>&1

Con este cron las firmas y el software de maldetect se actualizarán todos los días y después pasará un escaneo por los directorios indicados, en nuestro caso solamente /var/www. El número 2 que hay detrás del path a escanear (-r /var/www 2) indica que sólo se revisarán los ficheros modificados en los dos últimos días.

Misión cumplida

Como vemos, cumpliendo unas sencillas normas e instalando un software libre, no estaremos al 100% seguros, pero si mucho más tranquilos y protegidos que antes.

En cuanto a maldetect decir que es muy buen software y que sus firmas de malware están muy actualizadas, además rara vez da un falso positivo, sólo lo he visto en extraños casos de experimentos de ofuscación de código que no son habituales en una aplicación web normal.

Se echa en falta que se pueda configurar un poco más, por ejemplo para escanear solamente ficheros .php y que no tenga que hacer una pesada búsqueda por miles de imágenes, etc… pero en definitiva es un gran programa.

Esperamos que estos consejos os sirvan de ayuda, en Sistemas de Martianoids estamos siempre a vuestro servicio.

Comentarios por Disqus