Instalando Linux Malware Detect (LMD) en RHEL, CentOS y Fedora: Un poderoso escaner de malware/virus para servidores Linux

0
1556

Hoy vamos a hablar de LMD (Linux Malware Detect), un detector de malware para Linux.

deteccion malwareLMD, es un script desarrollado por RfxNetworks que nos permite hacer un escaneo a nuestro sistema en busca de malware y virus.

El proyecto está bastante maduro y si bien no tiene gui a diferencia de otros escaners como CXS, es una poderosa herramienta para usarla directamente desde el shell Linux.

Este software está liberado bajo la licencia GNU GPLv2 y fue diseñado principalmente para ayudar a los administradores de sistemas a la hora de detectar malware, virus y exploits a nivel de entornos de hosting compartido, aunque, basado en nuestra experiencia, es aplicable a casi cualquier sistema Linux que tenga como objetivo el alojamiento web.

Algunas de sus características principales:

  • Detección a través del hash MD5 para una rápida identificación de infecciones.
  • Usa patrones basados en HEX para identificar variantes de infecciones.
  • Integra detección usando ClamAV.
  • Actualizaciones inteligentes de su base de datos.
  • Modo cuarentena para aislar ficheros potencialmente peligrosos.
  • Posibilidad de remover los archivos infectados automáticamente.
  • Alerta por email una vez se detecta alguna infección.
  • Permite excluir directorios.

 

Instalación

Descargamos fuentes y descomprimimos

cd /usr/local/src/ wget http://www.rfxn.com/downloads/maldetect-current.tar.gz tar -xvpzf maldetect-current.tar.gz cd maldetect-1.4.1/
 

Luego corremos el instalador:

[root@hostingdiario maldetect-1.4.1]# sh install.sh Linux Malware Detect v1.4.1 (C) 2002-2011, R-fx Networks <proj@r-fx.org> (C) 2011, Ryan MacDonald <ryan@r-fx.org> inotifywait (C) 2007, Rohan McGovern <rohan@mcgovern.id.au> This program may be freely redistributed under the terms of the GNU GPL   installation completed to /usr/local/maldetect config file: /usr/local/maldetect/conf.maldet exec file: /usr/local/maldetect/maldet exec link: /usr/local/sbin/maldet exec link: /usr/local/sbin/lmd cron.daily: /etc/cron.daily/maldet   maldet(12253): {sigup} performing signature update check... maldet(12253): {sigup} local signature set is version 201205035915 maldet(12253): {sigup} new signature set (2012082924492) available maldet(12253): {sigup} downloaded http://www.rfxn.com/downloads/md5.dat maldet(12253): {sigup} downloaded http://www.rfxn.com/downloads/hex.dat maldet(12253): {sigup} downloaded http://www.rfxn.com/downloads/rfxn.ndb maldet(12253): {sigup} downloaded http://www.rfxn.com/downloads/rfxn.hdb maldet(12253): {sigup} downloaded http://www.rfxn.com/downloads/maldet-clean.tgz maldet(12253): {sigup} signature set update completed maldet(12253): {sigup} 9876 signatures (8008 MD5 / 1868 HEX) [root@hostingdiario maldetect-1.4.1]#
 

Configuración de LMD

Por defecto, todas las opciones están comentadas en el fichero de configuración, por lo hay que configurarlo de acuerdo a tus necesidades. Pero antes de hacer cualquier cambio vamos a ver una revisión detallada de cada opción.

email_alert : Si deseas recibir alertas de correo electrónico, entonces se debe establecer en 1.
email_subj : Configura el asunto del correo electrónico aquí.
email_addr : Inserta tu dirección de correo electrónico para recibir las alertas de malware.
quar_hits : La acción de cuarentena predeterminada para los avisos de malware, se debe establecer 1.
quar_clean : Limpiar inyecciones de malware detectado, se debe establecer en 1.
quar_susp : El valor predeterminado para suspender la acción de los usuarios con hits, poner de acuerdo a tus necesidades.
quar_susp_minuid : Mínimo con que puede ser suspendido un usuario.

Abrir el archivo /usr/local/maldetect/conf.maldet y hacer cambios de acuerdo a tus necesidades.

Ejemplo de configuración

Aquí está el archivo de configuración de mi servidor.

# [ EMAIL ALERTS ] ## # The default email alert toggle # [0 = disabled, 1 = enabled] email_alert=1  # The subject line for email alerts email_subj="maldet alert from $(hostname)"  # The destination addresses for email alerts # [ values are comma (,) spaced ] email_addr="tucorreo@tusitio.com"  # Ignore e-mail alerts for reports in which all hits have been cleaned. # This is ideal on very busy servers where cleaned hits can drown out # other more actionable reports. email_ignore_clean=0  ## # [ QUARANTINE OPTIONS ] ## # The default quarantine action for malware hits # [0 = alert only, 1 = move to quarantine & alert] quar_hits=1  # Try to clean string based malware injections # [NOTE: quar_hits=1 required] # [0 = disabled, 1 = clean] quar_clean=1  # The default suspend action for users wih hits # Cpanel suspend or set shell /bin/false on non-Cpanel # [NOTE: quar_hits=1 required] # [0 = disabled, 1 = suspend account] quar_susp=0 # minimum userid that can be suspended quar_susp_minuid=5 

 

Verificando la version y actualizando el LMD

# maldet -d (antes -update-ver)

Salida:

Linux Malware Detect v1.4.2
(C) 2002-2013, R-fx Networks < proj@r-fx.org>;
(C) 2013, Ryan MacDonald < ryan@r-fx.org>;
inotifywait (C) 2007, Rohan McGovern < rohan@mcgovern.id.au>;
This program may be freely redistributed under the terms of the GNU GPL v2
maldet(5904): {update} checking for available updates...
maldet(5904): {update} hashing install files and checking against server...
maldet(5904): {update} latest version already installed.
# maldet -u (antes -update)

Salida:

Linux Malware Detect v1.4.2
(C) 2002-2013, R-fx Networks < proj@r-fx.org>;
(C) 2013, Ryan MacDonald < ryan@r-fx.org>;
inotifywait (C) 2007, Rohan McGovern < rohan@mcgovern.id.au>;
This program may be freely redistributed under the terms of the GNU GPL v2
maldet(5781): {sigup} performing signature update check...
maldet(5781): {sigup} local signature set is version 2013041816820
maldet(5781): {sigup} latest signature set already installed

Testing:

Si deseas escanear el directorio principal (/home), simplemente ejecuta el siguiente comando:

# maldet --scan-all /home
# maldet -a /home/usuario/public_html/

o bien, usando wildcards:

maldet -a /home/*/public_html/

Si hay muchos usuarios el escaneo pueden llevar su tiempo.

Si se realizó una exploración, pero no se pudo activar la opción de cuarentena, no te preocupes sólo tienes que utilizar el siguiente comando para encender y poner en cuarentena todos los resultados previos del análisis de malware.

# maldet --quarantine SCANID
OR
# maldet --clean SCANID

Escaneos diarios

La instalación predeterminada del escaner LMD está en /etc/cron.daily/maldet y se utiliza para llevar a cabo un análisis diario, actualización de firmas, cuarentena, etc., y envía un mensaje con un informe diario de escaneado de malware a tu correo electrónico especificado. Si es necesario agregar rutas adicionales a escanear, debes editar el archivo de acuerdo a sus necesidades:

# vi /etc/cron.daily/maldet

Ejemplo de email:

malware detect scan report for server.myhost.es:
SCAN ID: 040613-0402.9813
TIME: Apr 6 06:02:44 +0200
PATH: /home*/*/public_html
RANGE: 2 days
TOTAL FILES: 8406
TOTAL HITS: 1
TOTAL CLEANED: 0
NOTE: quarantine is disabled! set quar_hits=1 in conf.maldet or to quarantine results run: maldet -q 040613-0402.9813
FILE HIT LIST:
{HEX}php.cmdshell.unclassed.344 : /home/user1/public_html/dire2/images/upload/files/asphoto.php.pjpg
{HEX}php.nested.base64.513 : /home/user2/public_html/formulario.php

En “FILE HIT LIST:” está el listado de 2 malwares encontrados. En caso de tenerlo configurado para enviarlo directamente a la cuarentena pero luego vemos que se trató de un error, se puede restaurar inmediatamente así:

Restaurar un sólo archivo:

# maldet –restore /home/user2/public_html/formulario.php

Restaurar aplicando el propietario del archivo:

#maldet --user user2 –restore /home/user2/public_html/formulario.php

Esto restaura todo el listado de malware del último escaneado usando el “SCAN ID” que viene en el email:

# maldet --restore 040613-0402.9813

Monitoreo en tiempo real:

La función de supervisión inotify está diseñada para supervisar las rutas/usuarios en tiempo real para las operaciones de creación/ modificar/mover archivos. Esta opción requiere un kernel que soporte inotify_watch (CONFIG_INOTIFY) que se encuentra por defecto en los kernels 2.6.13 + y CentOS/RHEL 5. Si está ejecutando CentOS 4 se debe considerar una actualización con:

http://www.rfxn.com/upgrade-centos-4-8-to-5-3/

Hay tres modos en que el monitor se puede ejecutar o relacionarse con lo que será objeto de seguimiento, son USERS|PATHS|FILES.

ejem: maldet --monitor users
ejem: maldet --monitor /root/monitor_paths
ejem: maldet --monitor /home/mike,/home/ashton

Las opciones se desglosan de la siguiente manera:

USERS: La opción USERS tomará las Homedirs de todos los usuarios del sistema que están por encima de inotify_minuid y los supervisa. Si inotify_webdir se establece entonces el usuario WebDir, si existe, sólo será monitoreado.
PATHS: Una lista separada por comas de los PATHS para vigilar
FILES: Una lista de archivos separados por espacio de PATHS para vigilar

Una vez que comience maldet en modo monitor, se preprocesaa los PATHS basados en la opción especificada seguida de iniciar el proceso de inotify. La partida del proceso de inotify puede ser una tarea que consume tiempo, ya que necesita configurar un gancho de monitor para cada archivo bajo los caminos supervisados. Aunque el proceso de inicio puede afectar la carga temporalmente, una vez que el proceso ha comenzado mantiene todos los recursos dentro de la memoria del núcleo y tiene una huella muy pequeña de espacio de usuario en la memoria o uso de la CPU.

Pero el modo monitor no está por defecto. Lo que LMD hace por defecto es ejecutar el cron diario en donde se analizan los 2 últimos días de cambios en los archivos. En cambio en el modo monitor, se miran las notificaciones de Inotify cada 30 segundos, se aplican cuarentenas, etc.. y luego se envía un email diario. El tiempo de inotify se controla por la variable “inotify_stime=30” que viene por defecto

Para monitorear en tiempo real, creamos un archivo “maldet_mon.sh” con los directorios que queramos monitorear:

# nano /scripts/maldet_mon.sh
/home
/tmp
/var/www/htdocs/
(etc...)

y guardamos (Ctrl+X) + Y

aplicamos permisos:

#chmod 0755 /scripts/maldet_mon.sh

y luego ejecutamos:

# maldet --monitor /scripts/maldet_mon.sh

…y ya está monitoreando.

El modo monitor se ejecutaría así para un solo usuario o directorio:

# maldet --monitor /home/usuario2

y para acabar el monitoreo:

# maldet --kill

No se reciben emails

* hay que tener en cuenta que por defecto si LMD no encuentra nada, no envía emails de alerta.

* ejecutar “sh /etc/cron.daily/maldet” y luego mirar el fichero /usr/local/maldetect/event_log y los tiempos para ver si hace su trabajo.

* poner un script p.ej: “soyunmalwaremumalo.php” en algún usuario y con este contenido:

<? php
eval(gzuncompress(base64_decode('eNqdWG2P4kYM/jOVuJOqi')
?>

y ahora volver a ejecutar “sh /etc/cron.daily/maldet” y entonces comprobar que llega el email.

Ver http://www.rfxn.com/appdocs/README.maldetect para más detalles sobre el seguimiento inotify.

Conclusiones

Es una herramienta poderosa, gratuita y fácil de usar, que nos permite rápidamente acceder a un completo análisis de ficheros de nuestros sitios webs en busca de virus, malware, etc. Lo único que notamos, es que hace casi 1 año no salen versiones nuevas del core, aunque los updates  de la base de datos siguen al día.

Más información | RfxNetworks