ClamAV (Português)
Clam AntiVirus é uma caixa de ferramentas de antivírus, código aberto (GPL), para UNIX. Ele fornece uma série de utilitários, incluindo um daemon multi-threaded flexível e escalável, um scanner de linha de comando e uma ferramenta avançada para atualizações automáticas de banco de dados. Como o uso principal do ClamAV é em servidores de arquivos/e-mails para desktops Windows, ele principalmente detecta vírus e malwares do Windows com suas assinaturas embutidas.
Instalação
Atualizando o banco de dados
Atualize as definições de vírus com:
# freshclam
Se você está por trás de um proxy, edite /etc/clamav/freshclam.conf
and update HTTPProxyServer, HTTPProxyPort, HTTPProxyUsername e HTTPProxyPassword.
Os arquivos de banco de dados são salvos em:
/var/lib/clamav/daily.cvd /var/lib/clamav/main.cvd /var/lib/clamav/bytecode.cvd
Inicie/habilite clamav-freshclam.service
para que as definições de vírus estejam sempre recentes.
Iniciando o daemon
freshclam
antes de iniciar o serviço pela primeira vez ou você poderá ter problema/erros que impedirão o ClamAV de iniciar corretamente.O serviço chamado clamav-daemon.service
. Inicie-o e habilite-o para iniciar quando da inicialização do sistema.
Testando o software
Para ter certeza que o ClamAV e as definições estão instaladas corretamente, execute um scan no arquivo de teste EICAR (uma assinatura inofensiva com nenhum código de vírus) com clamscan.
$ curl https://secure.eicar.org/eicar.com.txt | clamscan -
A saída deve incluir:
stdin: Win.Test.EICAR_HDB-1 FOUND
Do contrário, leia a parte Solução de Problemas ou peça por ajuda nos Fóruns do Arch.
Adicionando mais repositórios de bancos de dados/assinaturas
ClamAV pode usar banco de dados/assinaturas de outros repositórios ou fornecedores de segurança.
Para adicionar os mais importantes em um único passo, instale clamav-unofficial-sigsAUR (veja a descrição no GitHub) ou python-fangfrischAUR (veja a documentação online). Ambos vão adicionar assinaturas/banco de dados de provedores populares, como por exemplo, MalwarePatrol, SecuriteInfo, Yara, Linux Malware Detect, etc.
Opção nº 1: Configure Fangfrisch
Fangfrisch foi projetado como um substituto mais seguro, flexível e coveniente para o clamav-unofficial-sigs, e requer muito pouca configuração.
Mais importante, o Fangfrisch nunca precisa ser executado com permissões de root, diferentemente de clamav-unofficial-sigs.
Crie a estrutura de banco de dados executando:
# sudo -u clamav /usr/bin/fangfrisch --conf /etc/fangfrisch/fangfrisch.conf initdb
Habilite o fangfrisch.timer
.
Opção nº 2: Configure clamav-unofficial-sigs
Habilite o clamav-unofficial-sigs.timer
.
Isso vai atualizar regularmente as assinaturas não oficiais baseadas nos arquivos de configuração no diretório /etc/clamav-unofficial-sigs
.
Para atualizar as assinaturas manualmente, execute o seguinte comando:
# clamav-unofficial-sigs.sh
Para alterar as configurações padrão, acesse e modifique /etc/clamav-unofficial-sigs/user.conf
.
clamav-freshclam.service
iniciado para ter atualizações de assinaturas oficiais dos espelhos do ClamAV.Banco de dados MalwarePatrol
Se você quiser de usar o banco de dados do MalwarePatrol, crie uma conta em https://www.malwarepatrol.net/free-guard-upgrade-option.
Em /etc/clamav-unofficial-sigs/user.conf
, altere o seguinte para habilitar essa funcionalidade:
malwarepatrol_receipt_code="SEU-NÚMERO-RECIBO" # Insira seu número de recibo aqui malwarepatrol_product_code="8" # Use 8 se você tiver uma conta Free ou 15 se você for um cliente Premium. malwarepatrol_list="clamav_basic" # clamav_basic ou clamav_ext malwarepatrol_free="yes" # Defina para yes se você tiver uma conta Free ou no see você tiver uma conta Premium.
Fonte: https://www.malwarepatrol.net/clamav-configuration-guide/
Varrendo por vírus
clamscan
pode ser usado para varrer (scan) certos arquivos, diretórios home, um sistema inteiro:
$ clamscan meuarquivo $ clamscan --recursive --infected /home # clamscan --recursive --infected --exclude-dir='^/sys|^/dev' /
Se você quiser que clamscan
remova o arquivo infectado, adicione ao comando a opção --remove
ou você pode usar --move=/dir
para colocá-los em quarentena.
Você também pode se interessar em usar o clamscan
para varrer arquivos grandes. Neste caso, anexe as opções --max-filesize=4000M
e --max-scansize=4000M
ao comando. "4000M" é o maior valor possível e pode ser diminuído conforme necessário.
Usar a opção -l /caminho/para/arquivo
vai imprimir os logs do clamscan
para um arquivo texto para localizar infecções relatadas.
Usando o milter
Milter vai realizar um scan em seu servidor sendmail por e-mail contendo vírus.
Ajuste as configurações de /etc/clamav/clamav-milter.conf
às suas necessidades. Por exemplo:
/etc/clamav/clamav-milter.conf
MilterSocket /tmp/clamav-milter.socket MilterSocketMode 660 FixStaleSocket yes User clamav MilterSocketGroup clamav PidFile /run/clamav/clamav-milter.pid TemporaryDirectory /tmp ClamdSocket unix:/run/clamav/clamd.ctl LogSyslog yes LogInfected Basic
Crie /etc/systemd/system/clamav-milter.service
:
/etc/systemd/system/clamav-milter.service
[Unit] Description='ClamAV Milter' After=clamav-daemon.service [Service] Type=forking ExecStart=/usr/bin/clamav-milter --config-file /etc/clamav/clamav-milter.conf [Install] WantedBy=multi-user.target
Habilite e inicie clamav-milter.service
.
Para Postfix, adicione as seguintes linhas para /etc/postfix/main.cf
:
etc/postfix/main.cf
smtpd_milters = unix:/tmp/clamav-milter.socket milter_default_action = tempfail
Verifique journalctl se a permissão para acessar o clamav-milter.socket para o postfix estiver configurada adequadamente; caso contrário, inclua o postfix do usuário no grupo clamav.
OnAccessScan
A varredura no acesso (on-access scan) requer que o kernel seja compilado com o módulo kernel fanotify (kernel >= 3.8). Verifique se fanotify foi ativado antes de ativar a varredura no acesso.
$ zgrep FANOTIFY /proc/config.gz
A varredura no acesso digitalizará o arquivo ao ler, escrever ou executá-lo.
Primeiro, edite o arquivo de configuração /etc/clamav/clamd.conf
, adicionando o seguinte ao final do arquivo (você também pode alterar as opções individuais):
/etc/clamav/clamd.conf
# Ativa varredura no acesso, exige que clamav-daemon.service esteja em execução ScanOnAccess true # Define o ponto de montagem onde deve-se realizar recursivamente a varredura, # isso poderia ser todo caminho ou vários caminho (uma linha por caminho) OnAccessMountPath /usr OnAccessMountPath /home/ OnAccessExcludePath /var/log/ # Sinaliza fanotify para bloquear quaisquer eventos em arquivos monitorados para realizar a varredura OnAccessPrevention false # Realiza a varredura em arquivos recém-criados, movidos ou renomeados OnAccessExtraScanning true # Verifica o UID do evento do fanotify OnAccessExcludeUID 0 # Especifica uma ação para realizar quando o clamav detecta um arquivo malicioso # é possível especificar um comando em linha também VirusEvent /etc/clamav/detected.sh # AVISO: clamd deve ser executado como root User root
Em seguida, crie o arquivo /etc/clamav/detected.sh
e adicione o conteúdo a seguir. Isso permite que você altere/especifique a mensagem de depuração quando um vírus tiver sido detectado pelo dispositivo de varredura no acesso do clamd:
/etc/clamav/detected.sh
#!/bin/bash PATH=/usr/bin alert="Signature detected: $CLAM_VIRUSEVENT_VIRUSNAME in $CLAM_VIRUSEVENT_FILENAME" # Envia o alerta para o systemd logger se existir, do contrário para /var/log if [[ -z $(command -v systemd-cat) ]]; then echo "$(date) - $alert" >> /var/log/clamav/detections.log else # Isso poderia fazer com que seu DE mostre um alerta virtual. Acontece no plasma, mas o próximo alerta visual é muito melhor echo "$alert" | /usr/bin/systemd-cat -t clamav -p emerg fi # Envia um alerta para todos os usuários na interface gráfica. XUSERS=($(who|awk '{print $1$NF}'|sort -u)) for XUSER in $XUSERS; do NAME=(${XUSER/(/ }) DISPLAY=${NAME[1]/)/} DBUS_ADDRESS=unix:path=/run/user/$(id -u ${NAME[0]})/bus echo "run $NAME - $DISPLAY - $DBUS_ADDRESS -" >> /tmp/testlog /usr/bin/sudo -u ${NAME[0]} DISPLAY=${DISPLAY} \ DBUS_SESSION_BUS_ADDRESS=${DBUS_ADDRESS} \ PATH=${PATH} \ /usr/bin/notify-send -i dialog-warning "clamAV" "$alert" done
Se você está usando AppArmor, também é necessário permitir que o clamd execute como root:
# aa-complain clamd
Reinicie o clamav-daemon.service
.
Fonte: https://blog.clamav.net/2016/03/configuring-on-access-scanning-in-clamav.html
Solução de programas
Erro: Clamd was NOT notified
Se você receber as seguintes mensagens após executar freshclam:
WARNING: Clamd was NOT notified: Cannot connect to clamd through /var/lib/clamav/clamd.sock connect(): No such file or directory
Adicione um arquivo sock ao ClamAV:
# touch /run/clamav/clamd.ctl # chown clamav:clamav /run/clamav/clamd.ctl
Então, edite /etc/clamav/clamd.conf
- descomente essa linha:
LocalSocket /run/clamav/clamd.ctl
Salve o arquivo e reinicie clamav-daemon.service
.
Erro: No supported database files found
Se você receber o erro abaixo quando iniciar o daemon:
LibClamAV Error: cli_loaddb(): No supported database files found in /var/lib/clamav ERROR: Not supported data format
Isso acontece por causa de incompatibilidade entre a configuração DatabaseDirectory
do /etc/clamav/freshclam.conf
e DatabaseDirectory
do /etc/clamav/clamd.conf
. /etc/clamav/freshclam.conf
apontando para /var/lib/clamav
, mas /etc/clamav/clamd.conf
(diretório padrão) apontando para /usr/share/clamav
, ou outro diretório. Edite /etc/clamav/clamd.conf
e substituta com o mesmo DatabaseDirectory como no /etc/clamav/freshclam.conf
. Após isso, clamav vai iniciar com sucesso.
Erro: Can't create temporary directory
Se você obtiver o erro a seguir, junto com um 'HINT' contendo um número de UID e um de GID:
# can't create temporary directory
Corrija as permissões:
# chown UID:GID /var/lib/clamav & chmod 755 /var/lib/clamav
sendo UID e GID o informado na dica acima
Dicas e truques
Executar em múltiplas threads
Usando clamscan
Ao varrer um arquivo ou diretório a partir da linha de comando usando clamscan
, apenas uma única thread de CPU é usada. Isso pode servir em casos em que o tempo não é crítico ou você não deseja que o computador fique lento. Se houver necessidade de varrer rapidamente uma pasta grande ou uma unidade USB, convém usar todas as CPUs disponíveis para acelerar o processo.
clamscan
é projetado para funcionar em uma única thread, então você pode usar xargs
para executar a varredura em paralelo:
$ find /home/archie -type f -print0 | xargs -0 -P $(nproc) clamscan
Neste exemplo, o parâmetro -P
para xargs
executa clamscan
na quantidade de processos igual à de CPUs relatada por nproc
por vez. As opções --max-lines
e --max-args
permitirão um controle ainda melhor do envio em lote da carga de trabalho entre as threads.
Usando clamdscan
Se você já tiver o daemon clamd
em execução, clamdscan
pode ser usado (veja #Iniciando o daemon):
$ clamdscan --multiscan --fdpass /home/archie
Aqui, o parâmetro --multiscan
permite que o clamd
verifique o conteúdo do diretório em paralelo usando as threads disponíveis. O parâmetro --fdpass
é necessário para passar as permissões do descritor de arquivo para clamd
, pois o daemon está sendo executado sob o usuário e grupo clamav
.
O número de threads disponíveis para clamdscan
é determinado em /etc/clamav/clamd.conf
através do parâmetro MaxThreads
clamd.conf(5). Mesmo que você possa ver que o número de MaxThreads
especificado é mais de um (o padrão atual é 10), quando você inicia a varredura usando clamdscan
na linha de comando e não especifica a opção --multiscan
, apenas uma thread eficaz da CPU será usado para a varredura.