OVH Community, your new community space.

Linux Malware Detect (LMD)


Guille
27/04/2013, 12:23
Bueno, ya está el misterio desentrañado.

En un OpenVZ los valores de /proc/sys/fs/inotify/max_user_watches
se "heredan" de la máquina host física.

Así que sólo he tenido que entrar en el host y escribir
echo 65535 > /proc/sys/fs/inotify/max_user_watches

Que se me actualiza en todos los OpenVZ que tenga.

Así que la virtualización no es tan "hermética". Este aspecto del kernel es común a todos los contenedores. Por lo que el /etc/sysctl.conf del contenedor es practicamente testimonial.

Guille
27/04/2013, 12:14
Muchas Gracias Jack2. Ya probe el echo, el echo con sudo tee...
El metodo de modificar el valor en el /etc/sysctl.conf y reiniciar parece que tampoco funciona.

Se me olvidaba comentar que la máquina es un contenedor OpenVZ bajo Proxmox.

Estoy encontrando en Google más casos de gente que no puede modificar ese parametro /proc/sys/fs/inotify/max_user/watches y es en contenedores OpenVZ.

Por defecto el valor es 8192 y es insuficiente para servicios como Dropbox o el LMD.

Seguiré buscando a ver si puedo incrementar ese valor para el contenedor virtual OpenVZ.

jack2
27/04/2013, 12:04
Talvez puedan ayudarte este link

http://blog.sorah.jp/2012/01/24/inotify-limitation

Guille
27/04/2013, 11:58
Para adecuar el LMD a ISPConfig bajo Debian/Ubuntu hay que seguir los pasos que se indican en
http://www.howtoforge.com/forums/showthread.php?t=58440

Una vez hecho eso funciona bien el script en el cron.daily

Pero ahora tengo otro problema. Intento usar inotify.
Al lanzar
/usr/local/maldetect/maldet -m /usr/local/maldetect/maldetfilelist
me aparece
{mon} no inotify process found, check /usr/local/maldetect/inotify/inotify_log for errors.
Cuando chequeo ese archivo me aparece:
Failed to watch /var/www/*****.net/web; upper limit on inotify watches reached!
Please increase the amount of inotify watches allowed per user via `/proc/sys/fs/inotify/max_user_watches'.
La cuestion es que el script asigna max_user_watches antes de lanzar inotify y lo hace con un simple echo. Pero da error de acceso no permitido.

Si lo hago yo mismo desde linea de comandos:

sudo su
echo 16384 > /proc/sys/fs/inotify/max_user_watches
bash: /proc/sys/fs/inotify/max_user_watches: Permiso denegado
Incluso he intentado la llamada a sysctl
sudo sysctl fs.inotify.max_user_watches=16384
error: permission denied on key 'fs.inotify.max_user_watches'
Total que estoy ahora liado con que no puedo modificar los valores de /proc/sys/fs/inotify/max_user_watches, ni haciendo un echo como root, ni llamando a sysctl.

¿Alguien se ha topado antes con este problema?

Guille
11/04/2013, 18:27
En efecto. Gracias Manoleet:
There are four ignore files available and they break down as follows:

/usr/local/maldetect/ignore_paths
A line spaced file for paths that are to be execluded from search results
Sample ignore entry:
/home/user/public_html/cgi-bin

/usr/local/maldetect/ignore_file_ext
A line spaced file for file extensions to be excluded from search results
Sample ignore entry:
.js
.css

/usr/local/maldetect/ignore_sigs
A line spaced file for signatures that should be removed from file scanning
Sample ignore entry:
base64.inject.unclassed

/usr/local/maldetect/ignore_inotify
A line spaced file for regexp paths that are excluded from inotify monitoring
Sample ignore entry:
^/home/user$
^/var/tmp/#sql_.*\.MYD$

manoleet
11/04/2013, 18:10
Tiene lista blanca, mira en /usr/local/maldet los ficheros que empiezan por ignore_

Guille
11/04/2013, 18:03
Sería interesante alguna forma de poner en lista blanca algunos ficheros. Por ejemplo detecta como malware el servidor VNC autoinstalable para Windows que tenemos para que se lo descarguen nuestros clientes ...

max
11/04/2013, 13:53
bueno, son distintos. El rkhunter busca rootkits. LMD es para el malware.

saludos,

alf
11/04/2013, 13:43
Saludos:

Se parece bastante al rkhunter (por lo menos el cometido). De todas maneras lo probaremos.

Thnks!!!

mikelgonza
11/04/2013, 12:08
Ta bueno habrá que testearlo nunca está demás , gracias por el aporte amigo

Guille
11/04/2013, 09:21
¡¡Esto debería ir a How-To!!
¡Muchas gracias max!

max
11/04/2013, 07:35
Linux Malware Detect (LMD) es un scanner de malware para linux gratuíto que utiliza hashes de las bases de datos de CYMRU a partir de 30 paquetes de antivirus conocidos.
Es muy efectivo y además permite la monitorización en tiempo real.

Mas detalles aqui: http://www.rfxn.com/projects/linux-malware-detect/


--------------
Instalación
---------------

# wget http://www.rfxn.com/downloads/maldetect-current.tar.gz

# tar xfz maldetect-current.tar.gz

# cd maldetect-*

# sh install.sh


--------------
Configuración
--------------

se edita el archivo /usr/local/maldetect/conf.maldet

# nano /usr/local/maldetect/conf.maldet



--------------------------------
Configuración: parametros de interés
---------------------------------

# Avisar por email
email_alert=1
email_addr=”micorreo@midominio.com”

# Solo avisar del malware o en cambio enviarlo a cuarentena directamente. La primera ejecución es mejor el aviso para una foto y ver que pasa.
# Luego se puede poner a 1 y moverá los archivos (que se podrán recuperar si hace falta)
# [0 = alert only, 1 = move to quarantine & alert]
quar_hits=0

# Trata de limpiar el script afectado de funciones sospechosas. Si se quiere poner a 1 ha de estar activado el anterior para que funcione
# El escaneado es mas lento cuando se activan los modos de cuarentena o limpieza
# [0 = disabled, 1 = clean]
quar_clean=0


# Suspende la cuenta afectada, esto es muy util. En servidores con Cpanel se realiza automáticamente apareciendo el aviso de cuenta
# suspendida o cualquier aviso. Para Ubutu/Debian hacer: "sudo usermod -s /bin/false usuario" o editar el usuario dentro de /etc/passwd
# [0 = disabled, 1 = suspend account]
quar_susp=0


# Detecta si está Clamav instalado y realiza el escaneado hasta 4 veces más rápido. Si no se tiene poner a 0.
clamav_scan=1

# Establece la ruta a los espacios publicos de los usuarios. Por defecto para CentOS o Cpanel. Segun la distribucion
# cambiar a /var/www/htdocs
inotify_webdir=public_html


el resto de parámetros tiene otras opciones como permitir que los usuarios escaneen, etc. Pero por defecto esto es suficiente.


---------------------------------
Actualizar por primera vez:
---------------------------------

# maldet –update-ver

# maldet –update


.... y con esto ya está todo listo por defecto.


--------------------------
Algunas opciones manuales
--------------------------

escanea a un usuario concreto
# maldet -a /home/usuario/public_html

escanea el espacio web de todos los usuarios en /home:
# maldet -a /home/?/public_html


---------------------
un típico mail de LMD
---------------------

Código:
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 ultimo escaneado usando el "SCAN ID" que viene en el email:
# maldet --restore 040613-0402.9813


---------------------
CRON DIARIO
---------------------

LMD crea un archivo /etc/cron.daily/maldet para que se ejecute diariamente



--------------------------------
MONITORIZACION EN TIEMPO REAL
--------------------------------

Una de las opciones mas potentes de LMD es el uso de Inotify para poder monitorear en tiempo en real. Puede no ser necesario en una máquina sin mucho riesgo,
o quizás solo interesa aplicarlo a determinados sitios. A gustos.

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 ultimos dias 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 envia 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 envia 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 algun usuario y con este contenido:
eval(gzuncompress(base64_decode('eNqdWG2P4kYM/jOVuJOqi')
?>
y ahora volver a ejecutar "sh /etc/cron.daily/maldet" y entonces comprobar que llega el email


---------------------
VARIOS
---------------------

* si finalmente no se localiza por donde se mete el malware, ni LMD ni cualquier otra cosa serán efectivos 100%. Tras descubrir el malware
hay que ver los logs de apache y actualizar scripts o localizar el formulario, url, etc.. por donde se cuela.

** si hay muchos usuarios el escaneo pueden llevar su tiempo.

** si se quieren limpiar archivos y la cuarentena está deshabilitada, no limpiará

** LMD instala el ejecutable y las librerías de inotify dentro de /usr/local/maldetect/inotify y ya funciona perfectamente.
Si se quieren utilizar las propias de la distribución porque se tienen o cualquier otro motivo, se pueden sustituir sin problema
pero no hace falta.

** ese mismo directorio /usr/local/maldetect/ es donde reside el programa con todo lo que necesita. Dentro hay carpetas con el registro de las
sesiones, bases de datos, etc..


LMD tiene más opciones para la personalización. Más info:

http://configuracionpordefecto.com/i...re-detect-lmd/
http://www.rfxn.com/appdocs/README.maldetect