ClamAV (Português)

From ArchWiki
Status de tradução: Esse artigo é uma tradução de ClamAV. Data da última tradução: 2020-04-08. Você pode ajudar a sincronizar a tradução, se houver alterações na versão em inglê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

Instale o pacote clamav.

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

Nota: Você precisa executar 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.

Nota: Você ainda deve estar com o 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

Tango-view-refresh-red.pngThis article or section is out of date.Tango-view-refresh-red.png

Reason: A opção ScanOnAccess foi descontinuada e não funciona mais. Veja a documentação do upstream. (Discuss in Talk:ClamAV (Português))

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.

Veja também