LMD es un escáner y detector de malware de código abierto y gratuito para sistemas operativos basados "‹"‹en Unix/Linux
En un artículo anterior he explicado acerca de cómo proteger el servidor Apache de ataques maliciosos y DOS con mod_security. Ahora he probado otro gran recurso para detección de malware llamado LMD (Linux malware Detect). En este artículo voy a mostrar cómo instalar y configurar LMD en RHEL /6.3/6.2/6.1/6/5.8, CentOS 6.4/6.3/6.2/6.1/6/5.8 y Fedora 17,16,15,14,13,12 sistemas que utilizan código fuente.
¿Qué es el malware?
Malware se llama el software malicioso, script o código que es creado y usado por hackers para obtener información de los datos privados o tener acceso a los sistemas informáticos privados. El malware puede ser troyanos, virus, spyware, adware, rootkits o cualquier otro programa malicioso que puede ser muy perjudicial para cualquier usuario de la computadora.
¿Qué es Linux malware Detect (LMD)?
Linux malware Detect (LMD) es un escáner y detector de malware de código abierto y gratuito para sistemas operativos basados "‹"‹en Unix/Linux, publicado bajo licencia GNU GPLv2. Está diseñado para descubrir las amenazas que enfrentan los entornos de alojamiento compartido. Para obtener más información y características visita http://www.rfxn.com/projects/linux-malware-detect/ .
Instalación de Linux Malware Detect (LMD) en RHEL, CentOS y Fedora
Paso 1: Descarga de Linux Malware Detect (LMD)
Descarga el último paquete de LMD utilizando el comando wget.
# wget http://www.rfxn.com/downloads/maldetect-current.tar.gz
Paso 2: Instalación de LMD
La instalación y configuración de LMD es una tarea muy fácil, sólo tienes que seguir los pasos siguientes como usuario root.
# tar xfz maldetect-current.tar.gz
# cd maldetect-*
# ./install.sh
Ejemplo de Salida
Linux Malware Detect v1.4.1
(C) 2002-2013, R-fx Networks <proj[at]r-fx.org>;
(C) 2013, Ryan MacDonald <ryan[at]r-fx.org>;
inotifywait (C) 2007, Rohan McGovern <rohan[at]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(25380): {sigup} performing signature update check...
maldet(25380): {sigup} local signature set is version 201205035915
maldet(25380): {sigup} new signature set (2013041816820) available
maldet(25380): {sigup} downloaded http://www.rfxn.com/downloads/md5.dat
maldet(25380): {sigup} downloaded http://www.rfxn.com/downloads/hex.dat
maldet(25380): {sigup} downloaded http://www.rfxn.com/downloads/rfxn.ndb
maldet(25380): {sigup} downloaded http://www.rfxn.com/downloads/rfxn.hdb
maldet(25380): {sigup} downloaded http://www.rfxn.com/downloads/maldet-clean.tgz
maldet(25380): {sigup} signature set update completed
maldet(25380): {sigup} 11203 signatures (9335 MD5 / 1868 HEX)
Paso 3: 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="Alerta de malvare desde $(hostname)"# The destination addresses for email alerts
# [ values are comma (,)spaced ]
email_addr="Esta dirección de correo electrónico está siendo protegida contra los robots de spam. Necesita tener JavaScript habilitado para poder verlo. "# Ignore e-mail alerts for reports in which all hits have been cleaned.
# This is idealon very busy servers where cleaned hits can drown out
# other more actionable reports.
email_ignore_clean=0##
# [ QUARANTINEOPTIONS ]
##
# 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=500
Paso 4: las exploraciones manuales y el uso
4.a: Actualizar:
# maldet -d (antes -update-ver)
Salida:
Linux Malware Detect v1.4.2
(C) 2002-2013, R-fx Networks <proj[at]r-fx.org>;
(C) 2013, Ryan MacDonald <ryan[at]r-fx.org>;
inotifywait (C) 2007, Rohan McGovern <rohan[at]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[at]r-fx.org>;
(C) 2013, Ryan MacDonald <ryan[at]r-fx.org>;
inotifywait (C) 2007, Rohan McGovern <rohan[at]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
4.b: Escanear:
Si deseas escanear el directorio principal (/home), simplemente ejecuta el siguiente comando:
# maldet --scan-all /home
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
Paso 5: Exploraciones diarias
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.