Coletar registros do ClamAV

Compatível com:

Este documento explica como ingerir registros do ClamAV no Google Security Operations usando o agente Bindplane.

O ClamAV é um mecanismo antivírus de código aberto projetado para detectar cavalos de Troia, vírus, malware e outras ameaças maliciosas. Ele oferece verificação de linha de comando, atualizações automáticas do banco de dados de assinaturas e é compatível com vários formatos de arquivo, incluindo arquivos, executáveis e documentos. O ClamAV opera como um daemon local (clamd) ou um scanner de linha de comando (clamscan) em sistemas Linux, Unix e Windows.

Antes de começar

Verifique se você tem os pré-requisitos a seguir:

  • Uma instância do Google SecOps
  • Windows Server 2016 ou mais recente ou host Linux com systemd
  • Conectividade de rede entre o host do agente Bindplane e o servidor ClamAV
  • Se você estiver executando um proxy, verifique se as portas do firewall estão abertas de acordo com os requisitos do agente do Bindplane.
  • O ClamAV está instalado e em execução nos endpoints Linux.
  • Acesso root ou sudo ao servidor ClamAV e ao host do agente Bindplane

Receber o arquivo de autenticação de ingestão do Google SecOps

  1. Faça login no console do Google SecOps.
  2. Acesse Configurações do SIEM > Agentes de coleta.
  3. Baixe o arquivo de autenticação de ingestão. Salve o arquivo de forma segura no sistema em que o Bindplane será instalado.

Receber o ID de cliente do Google SecOps

  1. Faça login no console do Google SecOps.
  2. Acesse Configurações do SIEM > Perfil.
  3. Copie e salve o ID do cliente na seção Detalhes da organização.

Instalar o agente do Bindplane

Instale o agente do Bindplane no sistema operacional Windows ou Linux de acordo com as instruções a seguir.

Instalação do Windows

  1. Abra o Prompt de comando ou o PowerShell como administrador.
  2. Execute este comando:

    msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
    
  3. Aguarde a conclusão da instalação.

  4. Execute o seguinte comando para confirmar a instalação:

    sc query observiq-otel-collector
    

    O status do serviço deve ser EM EXECUÇÃO.

Instalação do Linux

  1. Abra um terminal com privilégios de root ou sudo.
  2. Execute este comando:

    sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.sh
    
  3. Aguarde a conclusão da instalação.

  4. Execute o seguinte comando para confirmar a instalação:

    sudo systemctl status observiq-otel-collector
    

    O status do serviço precisa ser active (running).

Outros recursos de instalação

Para mais opções de instalação e solução de problemas, consulte o guia de instalação do agente do Bindplane.

Configurar o agente do Bindplane para ingerir syslog e enviar registros ao Google SecOps

Localizar o arquivo de configuração

  • Linux:

    sudo nano /etc/bindplane-agent/config.yaml
    
  • Windows:

    notepad "C:\Program Files\observIQ OpenTelemetry Collector\config.yaml"
    

Editar o arquivo de configuração

  1. Substitua todo o conteúdo de config.yaml pela seguinte configuração:

    receivers:
        udplog:
            listen_address: "0.0.0.0:514"
    
    exporters:
        chronicle/clamav:
            compression: gzip
            creds_file_path: '/etc/bindplane-agent/ingestion-auth.json'
            customer_id: 'YOUR_CUSTOMER_ID'
            endpoint: malachiteingestion-pa.googleapis.com
            log_type: CLAM_AV
            raw_log_field: body
            ingestion_labels:
                env: production
    
    service:
        pipelines:
            logs/clamav_to_chronicle:
                receivers:
                    - udplog
                exporters:
                    - chronicle/clamav
    
  2. Substitua os seguintes marcadores de posição:

    • Configuração do receptor:

      • listen_address: defina como 0.0.0.0:514 para detectar todas as interfaces na porta UDP 514. Se a porta 514 exigir privilégios de root no Linux, use 0.0.0.0:1514 e configure o rsyslog para encaminhar para a porta 1514.
    • Configuração do exportador:

      • creds_file_path: caminho completo para o arquivo de autenticação de ingestão:

        • Linux: /etc/bindplane-agent/ingestion-auth.json
        • Windows: C:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.json
      • customer_id: substitua YOUR_CUSTOMER_ID pelo ID do cliente obtido anteriormente.

      • endpoint: URL do endpoint regional:

        • EUA: malachiteingestion-pa.googleapis.com
        • Europa: europe-malachiteingestion-pa.googleapis.com
        • Ásia: asia-southeast1-malachiteingestion-pa.googleapis.com
        • Consulte Endpoints regionais para ver uma lista completa.
      • log_type: definido como CLAM_AV (correspondência exata para o analisador do Google SecOps)

      • ingestion_labels: rótulos opcionais no formato YAML (por exemplo, env: production)

Salve o arquivo de configuração.

Depois de editar, salve o arquivo:

  • Linux: pressione Ctrl+O, Enter e Ctrl+X.
  • Windows: clique em Arquivo > Salvar.

Reinicie o agente do Bindplane para aplicar as mudanças

  • Para reiniciar o agente do Bindplane no Linux:

    1. Execute este comando:

      sudo systemctl restart observiq-otel-collector
      
    2. Verifique se o serviço está em execução:

      sudo systemctl status observiq-otel-collector
      
    3. Verifique se há erros nos registros:

      sudo journalctl -u observiq-otel-collector -f
      
  • Para reiniciar o agente do Bindplane em Windows:

    1. Escolha uma das seguintes opções:

      • Prompt de comando ou PowerShell como administrador:

        net stop observiq-otel-collector && net start observiq-otel-collector
        
      • Console de serviços:

        1. Pressione Win+R, digite services.msc e pressione Enter.
        2. Localize o Coletor do OpenTelemetry da observIQ.
        3. Clique com o botão direito do mouse e selecione Reiniciar.
    2. Verifique se o serviço está em execução:

      sc query observiq-otel-collector
      
    3. Verifique se há erros nos registros:

      type "C:\Program Files\observIQ OpenTelemetry Collector\log\collector.log"
      

Configurar o encaminhamento de syslog do ClamAV

Ativar o registro do syslog no ClamAV

  1. Faça login no sistema Linux que executa o ClamAV com privilégios de raiz ou sudo.
  2. Abra o arquivo de configuração do daemon do ClamAV:

    sudo nano /etc/clamav/clamd.conf
    
  3. Encontre a linha que diz #LogSyslog yes ou #LogSyslog true.

  4. Remova o caractere de comentário # para ativar o registro do syslog:

    LogSyslog yes
    
  5. Opcional: configure a facilidade do syslog. Encontre a linha #LogFacility LOG_LOCAL6 e remova a marca de comentário dela:

    LogFacility LOG_LOCAL6
    
  6. Opcional: ative outras opções de geração de registros para ter registros mais detalhados:

    LogTime yes
    LogVerbose yes
    ExtendedDetectionInfo yes
    
    • LogTime: adiciona carimbos de data/hora às mensagens de registro.
    • LogVerbose: ativa o registro detalhado com mais detalhes.
    • ExtendedDetectionInfo: inclui tamanho do arquivo e hash com detecções de vírus.
  7. Salve o arquivo e saia:

    Pressione Ctrl+O, Enter e Ctrl+X.

  8. Reinicie o daemon do ClamAV para aplicar as mudanças:

    sudo systemctl restart clamav-daemon
    
  9. Verifique se o daemon do ClamAV está em execução:

    sudo systemctl status clamav-daemon
    

Configurar o rsyslog para encaminhar registros do ClamAV

  1. Crie um arquivo de configuração rsyslog para encaminhamento do ClamAV:

    sudo nano /etc/rsyslog.d/30-clamav-forward.conf
    
  2. Adicione a seguinte configuração para encaminhar os registros do ClamAV ao agente do Bindplane:

    # Forward ClamAV logs (LOG_LOCAL6 facility) to Bindplane agent
    if $syslogfacility-text == 'local6' then {
        action(
            type="omfwd"
            protocol="udp"
            target="BINDPLANE_AGENT_IP"
            port="514"
            queue.type="linkedList"
            queue.size="10000"
            action.resumeRetryCount="100"
        )
        stop
    }
    
  3. Substitua BINDPLANE_AGENT_IP pelo endereço IP do host do agente Bindplane:

    • Se o Bindplane estiver instalado no mesmo host que o ClamAV, use 127.0.0.1
    • Se o Bindplane estiver em um host diferente, use o endereço IP desse host (por exemplo, 192.168.1.100).
  4. Se você configurou o Bindplane para detectar uma porta diferente (por exemplo, 1514), atualize o parâmetro port de acordo.

  5. Salve o arquivo e saia:

    Pressione Ctrl+O, Enter e Ctrl+X.

  6. Valide a sintaxe de configuração do rsyslog:

    sudo rsyslogd -N1
    
  7. Reinicie o rsyslog para aplicar as mudanças:

    sudo systemctl restart rsyslog
    
  8. Verifique se o rsyslog está em execução:

    sudo systemctl status rsyslog
    

Testar a configuração

  1. Gere uma detecção de vírus de teste usando o arquivo de teste EICAR:

    cd /tmp
    echo 'X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*' > eicar.com
    
  2. Verifique o arquivo de teste com o ClamAV:

    sudo clamdscan /tmp/eicar.com
    
  3. Verifique se a detecção aparece no syslog:

    sudo tail -f /var/log/syslog | grep clamd
    

    Você vai encontrar uma entrada de registro semelhante a esta:

    Jan 15 10:30:45 hostname clamd[1234]: /tmp/eicar.com: Win.Test.EICAR_HDB-1(44d88612fea8a8f36de82e1278abb02f:68) FOUND
    
  4. Verifique os registros do agente do Bindplane para confirmar se os registros estão sendo encaminhados:

    sudo journalctl -u observiq-otel-collector -f
    
  5. Verifique se os registros estão aparecendo no Google SecOps:

    1. Faça login no console do Google SecOps.
    2. Acesse Pesquisar > Pesquisa do UDM.
    3. Execute uma consulta de pesquisa para registros do ClamAV:

      metadata.log_type = "CLAM_AV"
      
  6. Limpe o arquivo de teste:

    sudo rm /tmp/eicar.com
    

Configuração alternativa: encaminhar todas as mensagens syslog para o Bindplane

Se você quiser encaminhar todas as mensagens do syslog (não apenas do ClamAV) para o Bindplane, use esta configuração mais simples:

  1. Edite a configuração do rsyslog:

    sudo nano /etc/rsyslog.d/30-forward-all.conf
    
  2. Adicione a seguinte configuração:

    # Forward all logs to Bindplane agent
    *.* action(
        type="omfwd"
        protocol="udp"
        target="BINDPLANE_AGENT_IP"
        port="514"
        queue.type="linkedList"
        queue.size="10000"
        action.resumeRetryCount="100"
    )
    
  3. Substitua BINDPLANE_AGENT_IP pelo endereço IP adequado.

  4. Salve, valide e reinicie o rsyslog conforme descrito nas etapas anteriores.

Tabela de mapeamento do UDM

Campo de registro Mapeamento do UDM Lógica
parsed_msg.resource.labels.instance_id observer.resource.id Valor copiado diretamente
parsed_msg.labels.compute.googleapis.com/resource_name observer.resource.name Valor copiado diretamente
parsed_msg.resource.type, parsed_msg.labels.container.googleapis.com/stream observer.resource.type Concatenado de parsed_msg.resource.type e parsed_msg.labels.container.googleapis.com/stream com separador "/"
parsed_msg.resource.labels.project_id, parsed_msg.resource.labels.cluster_name, parsed_msg.resource.labels.container_name observer.hostname Concatenado de parsed_msg.resource.labels.project_id, parsed_msg.resource.labels.cluster_name e parsed_msg.resource.labels.container_name com separadores "/"
parsed_msg.resource.labels.container_name observer.application Valor copiado diretamente
parsed_msg.labels.container.googleapis.com/namespace_name observer.namespace Valor copiado diretamente
parsed_msg.resource.labels.zone observer.location.country_or_region Valor copiado diretamente
parsed_msg.resource.labels.pod_id observer.labels Unido como a chave "pod_id" com o valor de parsed_msg.resource.labels.pod_id
parsed_msg.resource.labels.project_id, parsed_msg.resource.labels.cluster_name, parsed_msg.resource.labels.container_name principal.hostname Concatenado de parsed_msg.resource.labels.project_id, parsed_msg.resource.labels.cluster_name e parsed_msg.resource.labels.container_name com separadores "/"
file, _file_path target.file.full_path Valor do arquivo se extraído do padrão grok, caso contrário, de _file_path se extraído de um padrão grok alternativo
ameaça security_result.threat_name Valor copiado diretamente
total_files, _outcome, threat security_result.summary Definido como "%{total_files} arquivos infectados encontrados" se num_files extraídos, caso contrário, "Arquivo verificado. (%{_outcome})" se _outcome extraído, caso contrário, "Assinatura de ameaça %{threat} encontrada" se a ameaça não estiver vazia
categoria security_result.category Valor copiado diretamente (definido como "SOFTWARE_MALICIOUS" se a ameaça não estiver vazia)
ação security_result.action Valor copiado diretamente (definido como "BLOCK" se a ameaça não estiver vazia ou "ALLOW" se _outcome extraído)
parsed_msg.insertId metadata.product_log_id Valor copiado diretamente
parsed_msg.logName metadata.description Valor copiado diretamente
metadata.event_type Definido como "SCAN_FILE" se uma ameaça for encontrada ou o arquivo for verificado. Caso contrário, "STATUS_UPDATE" se a contagem de arquivos infectados for extraída.
metadata.product_name Defina como "CLAMAV".
metadata.vendor_name Definido como "Cisco Systems"

Precisa de mais ajuda? Receba respostas de membros da comunidade e profissionais do Google SecOps.