ClamAV (Português)

From ArchWiki
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
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