Linux Malware Detect (LMD), o como yo lo llamo; Maldet, es un proyecto Open Source creado por Ryan M. y básicamente es un detector de malware de aplicaciones web creado a partir de unos shell scripts y scripts en perl para Linux. Está pensado para CentOS, aunque debería de funcionar en cualquier distribución. El motivo por el que está pensado para CentOS es que el autor usa CentOS y cPanel en los servidores que administra.. esta es una configuración muy común ya que cPanel funciona muy bien en CentOS.
Maldet es bastante completo, permite realizar escaneos manuales de nuestro sistema o dejarlo funcionando en modo monitor. Para que funcione el modo monitor el SO deberá de tener instalada la librería inotify. Por defecto, cuando se instala, se agregan unas entradas en el cron diario que ejecuta un escaneo de los ficheros que se han creado o modificado las últimas 24 horas y envía un reporte al root, por lo que nos permitirá tener un cierto control del malware que va llegando al servidor.
Pero la característica que realmente me gustó de Maldet es el modo monitor, cuando se está ejecutando en este modo, en el momento en que Maldet detecte que aparece malware en el disco duro, nos avisará y realizará la acción que hayamos definido, es decir, un aviso por mail, o aviso + cuarentena del fichero. Esto puede ser muy útil sobre todo con determinadas cuentas de usuario peligrosas.
Instalación de Linux Malware Detect
cd /usr/local/src/ rm -vrf maldetect-* wget http://www.rfxn.com/downloads/maldetect-current.tar.gz tar -xzf maldetect-current.tar.gz cd maldetect-* sh ./install.sh maldet --update-ver maldet --update
Configuración de Maldet
$EDITOR /usr/local/maldetect/conf.maldet
En este archivo de configuración encontraremos varias líneas interesantes:
# Se define si se avisa por email al root # [0 = disabled, 1 = enabled] email_alert=1 # El asunto del mail de aviso email_subj="maldet alert from $(hostname)" # Emails de destino separados por coma # [ values are comma (,) spaced ] email_addr="david@malware.servidores.com" # La acción que se realizará cuando se detecte malware, cuidado aquí con los falsos positivos!! # [0 = alert only, 1 = move to quarantine & alert] quar_hits=0 # Intentará limpiar el script PHP de funciones tipo base64_decode o eval, no se asegura que después de esto funcione bien el script # [0 = disabled, 1 = clean] quar_clean=1 # Se define si se suspenderá la cuenta de cPanel del usuario al que se le haya detectado malware. Esto es un modo ultra paranoico y no es recomendable por que suelen encontrarse falsos positivos que provocarían que se suspendiera la cuenta a la mínima.. En caso de no usar cPanel, colocaría la shell del usuario en /bin/false # [0 = disabled, 1 = suspend account] quar_susp=0 #Minimo user id, para asegurarse de no suspender usuarios de sistema quar_susp_minuid=500 # This is the html/web root for users relative to homedir, when # this option is set, users will only have the webdir monitored # [ clear option to default monitor entire user homedir ] inotify_webdir=public_html # Prioridad que se le dará al proceso que irá escanenado los ficheros creados o modificados en tiempo real # [ -19 = high prio , 19 = low prio, default = 10 ] inotify_nice=10
Una vez editado el fichero de configuración podemos empezar a usar Maldet.
Escaneo manual
# Escaneo de todos los public_html del servidor, usamos ? como wildcard maldet -a /home/?/public_html
También podemos ejecutar un escaneo solo de los ficheros recientes con:
# Escaneo de los ficheros con menos de 3 días de antiguedad maldet -r /home/?/public_html 3
Puedes enviar a la cuarentena todos los ficheros encontrados en un SCANID una vez realizado el escaner, suponiendo que en la configuración no tuvieras puesto que se envíe a cuarentena automaticamente..
maldet --quarantine SCANID
Si queremos dejar Maldet monitorizando en tiempo real, podemos lanzar el siguiente comando:
maldet –monitor users maldet --monitor /home,/tmp,/path/que/quieras
Maldet quedaría monitorizando la lista de paths separada por comas. Si en cambio ejecutamos el Maldet en modo monitor con el parámetro users, se escaneará el directorio definido en la variable inotify_webdir de la configuración, en cada home del usuario. Puedes ver un log del monitor de la siguiente forma:
tail -f /usr/local/maldetect/inotify/inotify_log
Si queremos matar todos los procesos de monitorización, podemos ejecutar:
maldet -k
Podemos ir viendo los reportes en Maldet en /usr/local/maldetect/sess/ y si vemos que algún Malware se ha colado, podemos enviarlo al autor para que lo incluya en la base de datos de Maldet de la siguiente forma:
maldet -c malware_no_detectado.php
Como ya he comentado al principio, cuando se instala se introducen unas entradas en el cron.daily para realizar escaneos diarios, si tienes curiosidad puedes mirar en el fichero /etc/cron.daily/maldet para ver que se está ejecutando exactamente.
Más información: