ClamAV (Español)

Clam AntiVirus es un conjunto de herramientas de antivirus de código abierto (GPL) para UNIX. Proporciona una serie de utilidades que incluyen un demonio multiproceso flexible y escalable, un escáner de línea de órdenes y una herramienta avanzada para actualizaciones automáticas de las bases de datos. Debido a que el uso principal de ClamAV es en servidores de archivos/correos electrónicos para escritorios de Windows, detecta principalmente virus y malware de Windows con sus firmas incorporadas.

La situación actual de los productos antimalware en Linux es inadecuada debido a varios factores:

  1. Variedad limitada: En comparación con Windows, hay menos usuarios/clientes, lo que resulta en un interés limitado de las empresas en desarrollar productos para Linux.
  2. Complacencia: Muchos creen que Linux es intrínsecamente seguro, lo que genera una falta de conocimiento y atención en la protección contra malware. Esto crea una brecha en los mecanismos de defensa proactivos.
  3. Falta de funcionalidades: Las herramientas existentes a menudo carecen de funciones avanzadas, comunes en los productos antimalware de Windows, lo que las hace menos efectivas en Linux.

Esto es especialmente grave porque la cantidad de malware en Linux está aumentando, al igual que la posible superficie de ataque debido al creciente número de servidores y dispositivos IoT basados en Linux.

Actualmente, en Linux, una de las pocas soluciones antimalware existentes y en desarrollo activo es ClamAV.

Instalación

Instale el paquete clamav.

Esto instalará las siguientes herramientas:

clamd: ClamAV Daemon
clamonacc: Protección en tiempo real
clamdscan: Un simple cliente de escaneo
clamdtop: Una interfaz de monitoreo de recursos para clamd
freshclam: Daemon para actualizaciones de firmas de virus
clamconf: Herramienta para crear y comprobar archivos de configuración

Todas las herramientas, servicios y demonios relacionados con ClamAV se comunican con clamd vía socket.

Por defecto esto se hace a través de un socket local configurado y llamado "LocalSocket".

ClamAV también ofrece la posibilidad de permitir la comunicación a través de ubicaciones remotas mediante el uso de un socket de red que está configurado y los nombres como "TCPSocket".

Advertencia: Tenga en cuenta la siguiente advertencia sobre la seguridad del puerto de almeja al cambiar la configuración para usar TCPSocket en lugar de LocalSocket. Generalmente utilice un socket local unix, pero tenga en cuenta que este puerto no está autenticado o protegido.

Para más detalles, véase:

https://blog.clamav.net/2016/06/regarding-use-of-clamav-daemons-tcp.html

https://docs.clamav.net/manual/Usage/Scanning.html.clamd-v0101 (Daemon y luego sección ClamD)

Otra cosa importante a tener en cuenta es que al usar LocalSocket, clamd deberá ejecutarse bajo un usuario con los permisos adecuados para escanear los archivos que planea incluir en su monitoreo.

Configuración

Los archivos de configuración predeterminados ya deberían existir. De lo contrario, puede crearlos manualmente con clamconf:

# clamconf -g freshclam.conf > freshclam.conf
# clamconf -g clamd.conf > clamd.conf
# clamconf -g clamav-milter.conf > clamav-milter.conf

Los siguientes archivos contienen las opciones de configuración relevantes.

  • freshclam: /etc/clamav/freshclam.conf
  • clamd: /etc/clamav/clamd.conf
  • clamd mail filtering: /etc/clamav/clamav-milter.conf

Por último, puede comprobar sus archivos de configuración ejecutando clamconf.

La instalación predeterminada creará configuraciones predeterminadas válidas, como el usuario y el grupo de clamav y la configuración de clamd requerida.

Se pueden establecer configuraciones adicionales recomendadas:

/etc/clamav/clamd.conf
# Registrar la hora con cada mensaje.
# Predeterminado: no
LogTime yes

# Registrar información adicional sobre el archivo infectado, como su tamaño y hash, junto con el nombre del virus.
ExtendedDetectionInfo yes

# Ejecutar como otro usuario (clamd debe iniciarse como root para que esta opción funcione).
# Predeterminado: no perder privilegios.
Usuario clamav

# Se escanean los directorios a la máxima profundidad.
# Predeterminado: 15
MaxDirectoryRecursion 20

DetectPUA yes
HeuristicAlerts yes
ScanPE yes
ScanELF yes
ScanOLE2 yes
ScanPDF yes
ScanSWF yes
ScanXMLDOCS yes
ScanHWP3 yes
ScanOneNote yes
ScanMail yes
ScanHTML yes
ScanArchive yes
Bytecode yes
AlertBrokenExecutables yes
AlertBrokenMedia yes
AlertEncrypted yes
AlertEncryptedArchive yes
AlertEncryptedDoc yes
AlertOLE2Macros yes
AlertPartitionIntersection yes

Habilitación de la protección en tiempo real OnAccessScan

El análisis en tiempo real es el demonio de protección en tiempo real que analiza el archivo mientras lo lee, escribe o ejecuta. Se puede configurar para notificar o prevenir/bloquear la detección.

La configuración de OnAccessScan se realiza editando el archivo de configuración /etc/clamav/clamd.conf.

Para que OnAccessScan funcione, se requieren los siguientes cambios:

/etc/clamav/clamd.conf
# Excluir el UID del escáner de la comprobación para evitar bucles
OnAccessExcludeUname clamav

Se recomiendan los siguientes cambios adicionales, que activarán el modo de solo notificación del escáner en tiempo real:

/etc/clamav/clamd.conf
# Establezca el punto de montaje donde se realizará el análisis recursivo.
# Puede ser cualquier ruta o varias (una línea por ruta).
OnAccessMountPath /

# Alternativamente, agregue directorios en lugar de puntos de montaje.
# OnAccessIncludePath /home

# La prevención no funciona con OnAccessMountPath.
# Funciona con OnAccessIncludePath, siempre que no se incluyan /usr ni /etc.
# Tampoco se recomienda incluir /var al activar la prevención, ya que
# esto ralentizaría la instalación de paquetes por un factor de 1000.
OnAccessPrevention no

# Realiza análisis de archivos recién creados, movidos o renombrados.
OnAccessExtraScanning yes

# Excluye opcionalmente los procesos que pertenecen a la raíz.
# OnAccessExcludeRootUID true

Creación de notificaciones emergentes para alertas

Hasta ahora, ClamAV registrará silenciosamente cualquier detección, pero no alertará al usuario. Se puede añadir una ventana emergente para alertar al usuario sobre cualquier detección.

Primero, agregue la siguiente línea a su configuración de clamd:

/etc/clamav/clamd.conf
 VirusEvent /etc/clamav/virus-event.bash

A continuación, permita que el usuario "clamav" ejecute "notify-send" como cualquier usuario con variables de entorno personalizadas mediante sudo:

/etc/sudoers.d/clamav
clamav ALL = (ALL) NOPASSWD: SETENV: /usr/bin/notify-send

A continuación, cree el archivo /etc/clamav/virus-event.bash, conviértalo en ejecutable y agregue lo siguiente:

/etc/clamav/virus-event.bash
#!/bin/bash
PATH=/usr/bin
ALERT="Firma detectada por clamav: $CLAM_VIRUSEVENT_VIRUSNAME en $CLAM_VIRUSEVENT_FILENAME"

# Enviar una alerta a Todos los usuarios gráficos.
for ADDRESS in /run/user/*; do
USERID=${ADDRESS#/run/user/}
/usr/bin/sudo -u "#$USERID" DBUS_SESSION_BUS_ADDRESS="unix:path=$ADDRESS/bus" PATH=${PATH} \
/usr/bin/notify-send -u critic -i dialog-warning "¡Virus encontrado!" "$ALERT"
done

Esto permite cambiar o especificar el mensaje cuando el servicio de análisis en acceso de clamd detecta un virus.

Por defecto, "clamonacc" pasa a "clamav" los nombres de los archivos recién accedidos para su análisis. Esto supone un problema, ya que los archivos inaccesibles para el usuario "clamav" no se pueden analizar de esta manera. En su lugar, es posible indicar a "clamonacc" (que siempre se ejecuta como "root") que utilice el paso de descriptores de archivo. Editar clamav-clamonacc.service con lo siguiente:

[Servicio] ExecStart= ExecStart=/usr/sbin/clamonacc -F --fdpass --log=/var/log/clamav/clamonacc.log

Por último, deberá iniciar/habilitar o reiniciar clamav-clamonacc.service, así como clamav-daemon.service.

Consulte: #Iniciar el demonio ClamAV + OnAccessScanning

Si recibe denegaciones de AppArmor sobre clamd, configure el perfil en modo de solo quejas:

  1. aa-complain clamd

Actualizando la base de datos

Actualice las definiciones de virus con:

# freshclam

Si está utilizando un proxy, edite /etc/clamav/freshclam.conf y actualice HTTPProxyServer, HTTPProxyPort, HTTPProxyUsername y HTTPProxyPassword.

Los archivos de la base de datos se guardan en:

  • /var/lib/clamav/daily.cld
  • /var/lib/clamav/main.cld
  • /var/lib/clamav/bytecode.cvd

Para actualizaciones automáticas, primero cree y configure el archivo freshclam.log:

touch /var/log/clamav/freshclam.log
chmod 600 /var/log/clamav/freshclam.log
chown clamav /var/log/clamav/freshclam.log

Iniciar/habilitar clamav-freshclam.service o clamav-freshclam-once.timer para mantener las definiciones de virus actualizadas.

El servicio clamav-freshclam.service ejecuta freshclam en modo demonio, con un valor predeterminado de 12 comprobaciones diarias (cada 2 horas). La frecuencia se puede modificar en /etc/clamav/freshclam.conf.

El temporizador clamav-freshclam-once.timer ejecuta la comprobación de freshclam una vez al día. La frecuencia se puede modificar en /usr/lib/systemd/system/clamav-freshclam-once.timer.

Nota:
  • Freshclam en modo demonio realiza comprobaciones cada vez que se inicia un servicio.
  • Si se realiza más de una comprobación por hora, la CDN lo bloquea durante 24 horas.
  • La unidad .timer sigue la programación establecida, independientemente de los reinicios o reinicios del servicio. * Puede agregar bases de datos de firmas de virus adicionales siguiendo #Agregar más bases de datos/repositorios de firmas.

Iniciar el demonio ClamAV + OnAccessScanning

Esto cargará todas las firmas de virus en la RAM. A partir de febrero de 2024, estas firmas requieren al menos 1,6 GB de RAM libre. El doble de RAM se utilizará próximamente, durante la actualización periódica de las firmas.

Nota:
  • Deberá ejecutar freshclam antes de iniciar el servicio por primera vez; de lo contrario, se producirán problemas o errores que impedirán que ClamAV se inicie correctamente.
  • El demonio no es necesario si solo desea realizar análisis independientes. Consulte Análisis de virus a continuación.
  • El demonio por sí solo no realiza ninguna acción a menos que habilite el Análisis en Acceso. Consulte: #Habilitación de la protección en tiempo real OnAccessScan

El servicio se llama clamav-daemon.service. Inícielo y habilítelo para que se inicie al arrancar el sistema.

Además, inicie y habilite clamav-clamonacc.service para la protección en tiempo real al acceder.

Prueba del software

Para asegurarse de que ClamAV y las definiciones estén instaladas correctamente, escanee el archivo de prueba EICAR (una firma inofensiva sin código de virus) con "clamscan".

$ curl https://secure.eicar.org/eicar.com.txt | clamscan -

La salida debe incluir:

stdin: Win.Test.EICAR_HDB-1 FOUND

Protección en tiempo real

Puede descargar y guardar el archivo eicar en uno de los directorios que configuró para que Clamonacc monitorizara. Por ejemplo:

$ cd /home/user/Downloads/
$ wget https://secure.eicar.org/eicar.com.txt
$ cat eicar.com.txt

Añadiendo más repositorios de bases de datos/firmas

ClamAV puede usar bases de datos/firmas de otros repositorios o proveedores de seguridad.

Para agregar las más importantes en un solo paso, instale clamav-unofficial-sigsAUR (consulte la descripción de GitHub) o python-fangfrischAUR (consulte la documentación en línea). Ambos agregarán firmas/bases de datos de proveedores populares, por ejemplo, MalwarePatrol, SecuriteInfo, Yara, Linux Malware Detect, etc.

Nota: Debe tener el servicio clamav-freshclam.service iniciado para obtener actualizaciones de firmas oficiales de los servidores de réplica de ClamAV.

Opción n.° 1: Configurar Fangfrisch

Fangfrisch se diseñó como un sustituto más seguro, flexible y práctico de clamav-unofficial-sigs y requiere muy poca configuración (/etc/fangfrisch/fangfrisch.conf).

Y lo más importante, Fangfrisch nunca necesita ejecutarse con permisos de root, a diferencia de clamav-unofficial-sigs.

Cree la estructura de la base de datos ejecutando:

# sudo -u clamav /usr/bin/fangfrisch --conf /etc/fangfrisch/fangfrisch.conf initdb

Habilitar el fangfrisch.timer (a nivel de sistema).

Opción n.° 2: Configurar clamav-unofficial-sigs

Habilitar el clamav-unofficial-sigs.timer.

Esto actualizará periódicamente las firmas no oficiales según los archivos de configuración del directorio /etc/clamav-unofficial-sigs.

Para actualizar las firmas manualmente, ejecute lo siguiente:

# clamav-unofficial-sigs.sh

Para cambiar la configuración predeterminada, consulte y modifique /etc/clamav-unofficial-sigs/user.conf.

Base de datos de MalwarePatrol

Si desea utilizar la base de datos de MalwarePatrol, regístrese en https://malwareblocklist.org/ (de pago).

En /etc/clamav-unofficial-sigs/user.conf, modifique lo siguiente para habilitar esta función:

malwarepatrol_receipt_code="YOUR-RECEIPT-NUMBER" # Introduzca aquí su número de recibo
malwarepatrol_product_code="8" # Use 8 si tiene una cuenta gratuitar 15 si eres cliente Premium.
malwarepatrol_list="clamav_basic" # clamav_basic o clamav_ext
malwarepatrol_free="yes" # Establécelo en yes si tienes una cuenta gratuita o en no si eres cliente Premium.

Fuente: https://www.malwarepatrol.net/clamav-configuration-guide/

Análisis de virus

Hay dos opciones para el análisis bajo demanda:

usar el análisis independiente

clamscan puede usarse para analizar archivos específicos, directorios de inicio o un sistema completo:

$ clamscan myfile
$ clamscan --recursive --infected /home/archie
# clamscan --recursive --infected --exclude-dir='^/sys|^/dev' /

Si desea que clamscan elimine el archivo infectado, agregue la opción --remove al comando o puede usar --move=/dir para ponerlo en cuarentena.

También puede usar clamscan para analizar archivos más grandes. En este caso, añada las opciones --max-filesize=4000M y --max-scansize=4000M al comando. '4000M' es el valor máximo posible y puede reducirse según sea necesario.

Usar la opción -l /path/to/file imprimirá los registros de clamscan en un archivo de texto para localizar las infecciones reportadas.

usando el demonio

clamdscan es similar al anterior, pero utiliza el demonio, que debe estar ejecutándose para que el comando funcione. La mayoría de las opciones se ignoran, ya que el demonio lee la configuración especificada en /etc/clamav/clamd.conf.

Usando milter

Milter escaneará su servidor de sendmail en busca de correos electrónicos con virus. Ajuste /etc/clamav/clamav-milter.conf según sus necesidades. Por ejemplo:

/etc/clamav/clamav-milter.conf
MilterSocket /tmp/clamav-milter.socket
MilterSocketMode 660
FixStaleSocket yes
Usuario clamav
MilterSocketGroup clamav
PidFile /run/clamav/clamav-milter.pid
TemporaryDirectory /tmp
ClamdSocket unix:/run/clamav/clamd.ctl
LogSyslog yes
LogInfected Basic

Crear /etc/systemd/system/clamav-milter.service:

/etc/systemd/system/clamav-milter.service
[Unit]
Descripción='ClamAV Milter
After=clamav-daemon.service

[Service]
Type=bifurcación
ExecStart=/usr/bin/clamav-milter --config-file /etc/clamav/clamav-milter.conf
Restart=Always

[Install]
WantedBy=multi-user.target

Su sistema podría requerir una directiva Restart= diferente. Es necesaria, por ejemplo, cuando un automatismo como logrotate detiene el servicio.

Enable y start clamav-milter.service.

Para Postfix, agregue las siguientes líneas a /etc/postfix/main.cf:

/etc/postfix/main.cf
smtpd_milters = unix:/tmp/clamav-milter.socket
milter_default_action = tempfail

Compruebe journalctl si el permiso de acceso a clamav-milter.socket para Postfix está configurado correctamente. De lo contrario, agregue el usuario Postfix al grupo clamav.

Consejos y trucos

Ejecutar en múltiples hilos

Usar clamscan

Al escanear un archivo o directorio desde la línea de comandos con clamscan, solo se utiliza un hilo de la CPU. Esto puede ser adecuado si la sincronización no es crítica o si no desea que el equipo se ralentice. Si necesita escanear rápidamente un directorio grande o una unidad USB, puede usar todas las CPU disponibles para acelerar el proceso.

clamscan está diseñado para un solo subproceso, por lo que xargs puede usarse para ejecutar el escaneo en paralelo:

$ find /home/archie -type f -print0 | xargs -0 -P $(nproc) clamscan

En este ejemplo, el parámetro -P para xargs ejecuta clamscan en tantos procesos como CPU haya (indicadas por nproc) simultáneamente. Las opciones --max-lines y --max-args permiten un control aún más preciso de la agrupación de la carga de trabajo entre los subprocesos.

Esto consumirá mucha RAM, ya que cada proceso es individual y cargará los archivos de firma. Un solo hilo consumirá alrededor de 1 GB (o más) de RAM y podría bloquear el equipo a menos que OOM sea lo suficientemente inteligente. Quizás le interese usar clamdscan en su lugar.

Uso de clamdscan

Si ya tiene el demonio clamd ejecutándose, puede usar clamdscan en su lugar (consulte #Iniciar el demonio ClamAV + OnAccessScan):

$ clamdscan --multiscan --fdpass /home/archie

Aquí, el parámetro --multiscan permite que clamd escanee el contenido del directorio en paralelo usando los hilos disponibles. El parámetro --fdpass es necesario para transferir los permisos del descriptor de archivo a clamd, ya que el demonio se ejecuta bajo el usuario y grupo clamav.

El número de subprocesos disponibles para clamdscan se determina en /etc/clamav/clamd.conf mediante el parámetro MaxThreads clamd.conf(5). Aunque puede ver que el número de MaxThreads especificado es superior a uno (el valor predeterminado actual es 10), al iniciar el análisis con clamdscan desde la línea de comandos y no especificar la opción --multiscan, solo se usará un subproceso de CPU efectivo para el análisis.

Habilitar TCPSocket

Si habilita TCPSocket en /etc/clamav/clamd.conf, también debe editar clamav-daemon.socket (consulte el error FS#57669). El archivo de socket systemd nDebe configurarse con un puerto y una dirección IP coincidentes:

/etc/systemd/system/clamav-daemon.socket.d/override.conf
[Socket]
ListenStream=
ListenStream=/run/clamav/clamd.ctl
ListenStream=127.0.0.1:3310

Y finalmente, reinicie clamav-daemon.socket para ver un enlace de Clamd en el puerto TCP 3310:

# ss -tulpn | grep clamd
tcp LISTEN 0 4096 127.0.0.1:3310 0.0.0.0:* Usuarios:(("clamd",pid=599,fd=4),("systemd",pid=1,fd=44))

Solución de problemas

Nota: Asegúrese de que el usuario desde el que ejecuta clamscan tenga permisos de lectura para los archivos de la base de datos (/var/lib/clamav/*.c?d)

Error: Clamd NO fue notificado

Si recibe los siguientes mensajes después de ejecutar freshclam:

WARNING: Clamd was NOT notified: Cannot connect to clamd through /var/lib/clamav/clamd.sock connect(): No such file or directory

Añadir un archivo sock para ClamAV:

Advertencia: Consulte la advertencia en #Instalación sobre la seguridad del puerto de clamd.
# touch /run/clamav/clamd.ctl
# chown clamav:clamav /run/clamav/clamd.ctl

Luego, edite /etc/clamav/clamd.conf y descomente esta línea:

LocalSocket /run/clamav/clamd.ctl

Guarde el archivo y reinicie clamav-daemon.service.

Error: No se encontraron archivos de base de datos compatibles

Si recibe el siguiente error al iniciar el demonio:

LibClamAV Error: cli_loaddb(): No supported database files found in /var/lib/clamav ERROR: Not supported data format

Esto ocurre debido a una discrepancia entre la configuración /etc/clamav/freshclam.conf, que corresponde a DatabaseDirectory, y la configuración /etc/clamav/clamd.conf, que corresponde a DatabaseDirectory. /etc/clamav/freshclam.conf apunta a /var/lib/clamav, pero /etc/clamav/clamd.conf (directorio predeterminado) apunta a /usr/share/clamav o a otro directorio. Edite en /etc/clamav/clamd.conf y reemplácelo con el mismo DatabaseDirectory que en /etc/clamav/freshclam.conf. Después de eso, "clamav" se iniciará correctamente.

Error: No se puede crear el directorio temporal

Si recibe el siguiente error, junto con una "HINT" que contiene un UID y un GID:

can't create temporary directory

Permisos correctos:

# chown UID:GID /var/lib/clamav && chmod 755 /var/lib/clamav

Véase también