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:
- 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.
- 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.
- 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
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".
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:
- 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
.
- 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.
- 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.
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
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:
# 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