收集 ClamAV 日志

支持的平台:

本文档介绍了如何使用 Bindplane 代理将 ClamAV 日志注入到 Google Security Operations 中。

ClamAV 是一款开源防病毒引擎,旨在检测特洛伊木马、病毒、恶意软件和其他恶意威胁。它提供命令行扫描、自动签名数据库更新,并支持多种文件格式,包括归档文件、可执行文件和文档。ClamAV 在 Linux、Unix 和 Windows 系统上以本地守护进程 (clamd) 或命令行扫描器 (clamscan) 的形式运行。

准备工作

请确保满足以下前提条件:

  • Google SecOps 实例
  • Windows Server 2016 或更高版本,或者具有 systemd 的 Linux 主机
  • Bindplane 代理主机与 ClamAV 服务器之间的网络连接
  • 如果通过代理运行,请确保防火墙端口根据 Bindplane 代理要求处于开放状态
  • 在 Linux 端点上安装并运行 ClamAV
  • 对 ClamAV 服务器和 Bindplane 代理主机具有根访问权限或 sudo 访问权限

获取 Google SecOps 注入身份验证文件

  1. 登录 Google SecOps 控制台。
  2. 依次前往 SIEM 设置 > 收集代理
  3. 下载注入身份验证文件。将该文件安全地保存在将要安装 Bindplane 的系统上。

获取 Google SecOps 客户 ID

  1. 登录 Google SecOps 控制台。
  2. 依次前往 SIEM 设置 > 配置文件
  3. 复制并保存组织详细信息部分中的客户 ID

安装 Bindplane 代理

按照以下说明在 Windows 或 Linux 操作系统上安装 Bindplane 代理。

Windows 安装

  1. 以管理员身份打开命令提示符PowerShell
  2. 运行以下命令:

    msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
    
  3. 等待安装完成。

  4. 运行以下命令来验证安装:

    sc query observiq-otel-collector
    

    服务状态应为 RUNNING

Linux 安装

  1. 打开具有 root 或 sudo 权限的终端。
  2. 运行以下命令:

    sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.sh
    
  3. 等待安装完成。

  4. 运行以下命令来验证安装:

    sudo systemctl status observiq-otel-collector
    

    服务状态应为有效(正在运行)

其他安装资源

如需了解其他安装选项和问题排查信息,请参阅 Bindplane 代理安装指南

配置 Bindplane 代理以注入 syslog 并将日志发送到 Google SecOps

找到配置文件

  • Linux:

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

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

修改配置文件

  1. config.yaml 的全部内容替换为以下配置:

    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. 替换以下占位符:

    • 接收器配置:

      • listen_address:设置为 0.0.0.0:514 可在 UDP 端口 514 上监听所有接口。如果端口 514 在 Linux 上需要 root 权限,请使用 0.0.0.0:1514 并将 rsyslog 配置为转发到端口 1514。
    • 导出器配置:

      • creds_file_path:提取身份验证文件的完整路径:

        • Linux/etc/bindplane-agent/ingestion-auth.json
        • WindowsC:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.json
      • customer_id:将 YOUR_CUSTOMER_ID 替换为之前获得的客户 ID

      • endpoint:区域端点网址:

        • 美国malachiteingestion-pa.googleapis.com
        • 欧洲europe-malachiteingestion-pa.googleapis.com
        • 亚洲asia-southeast1-malachiteingestion-pa.googleapis.com
        • 如需查看完整列表,请参阅区域级端点
      • log_type:设置为 CLAM_AV(与 Google SecOps 解析器完全匹配)

      • ingestion_labels:YAML 格式的可选标签(例如 env: production

保存配置文件

修改后,保存文件:

  • Linux:依次按 Ctrl+OEnterCtrl+X
  • Windows:依次点击文件 > 保存

重启 Bindplane 代理以应用更改

  • 如需在 Linux 中重启 Bindplane 代理,请执行以下操作:

    1. 运行以下命令:

      sudo systemctl restart observiq-otel-collector
      
    2. 验证服务是否正在运行:

      sudo systemctl status observiq-otel-collector
      
    3. 检查日志是否存在错误:

      sudo journalctl -u observiq-otel-collector -f
      
  • 如需在 Windows 中重启 Bindplane 代理,请执行以下操作:

    1. 请从下列选项中选择一项:

      • 以管理员身份运行命令提示符或 PowerShell:

        net stop observiq-otel-collector && net start observiq-otel-collector
        
      • 服务控制台:

        1. Win+R,输入 services.msc,然后按 Enter 键。
        2. 找到 observIQ OpenTelemetry 收集器
        3. 右键点击并选择重新启动
    2. 验证服务是否正在运行:

      sc query observiq-otel-collector
      
    3. 检查日志是否存在错误:

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

配置 ClamAV syslog 转发

在 ClamAV 中启用 syslog 日志记录

  1. 以 root 或 sudo 权限登录运行 ClamAV 的 Linux 系统。
  2. 打开 ClamAV 精灵配置文件:

    sudo nano /etc/clamav/clamd.conf
    
  3. 找到包含 #LogSyslog yes#LogSyslog true 的行。

  4. 移除 # 注释字符以启用 syslog 日志记录:

    LogSyslog yes
    
  5. 可选:配置 syslog 设施。找到 #LogFacility LOG_LOCAL6 行并取消注释:

    LogFacility LOG_LOCAL6
    
  6. 可选:启用其他日志记录选项以获取更详细的日志:

    LogTime yes
    LogVerbose yes
    ExtendedDetectionInfo yes
    
    • LogTime:向日志消息添加时间戳
    • LogVerbose:启用包含其他详细信息的详细日志记录
    • ExtendedDetectionInfo:包含文件大小和哈希值,以及病毒检测结果
  7. 保存文件并退出:

    依次按 Ctrl+OEnterCtrl+X

  8. 重启 ClamAV 守护进程以应用更改:

    sudo systemctl restart clamav-daemon
    
  9. 验证 ClamAV 守护程序是否正在运行:

    sudo systemctl status clamav-daemon
    

配置 rsyslog 以转发 ClamAV 日志

  1. 为 ClamAV 转发创建新的 rsyslog 配置文件:

    sudo nano /etc/rsyslog.d/30-clamav-forward.conf
    
  2. 添加以下配置,以将 ClamAV 日志转发到 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. BINDPLANE_AGENT_IP 替换为 Bindplane 代理主机 IP 地址:

    • 如果 Bindplane 安装在与 ClamAV 相同的主机上,请使用 127.0.0.1
    • 如果 Bindplane 位于其他主机上,请使用该主机的 IP 地址(例如 192.168.1.100
  4. 如果您已将 Bindplane 配置为在其他端口(例如 1514)上监听,请相应地更新 port 参数。

  5. 保存文件并退出:

    依次按 Ctrl+OEnterCtrl+X

  6. 验证 rsyslog 配置语法:

    sudo rsyslogd -N1
    
  7. 重新启动 rsyslog 以应用更改:

    sudo systemctl restart rsyslog
    
  8. 验证 rsyslog 是否正在运行:

    sudo systemctl status rsyslog
    

测试配置

  1. 使用 EICAR 测试文件生成测试病毒检测:

    cd /tmp
    echo 'X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*' > eicar.com
    
  2. 使用 ClamAV 扫描测试文件:

    sudo clamdscan /tmp/eicar.com
    
  3. 验证检测结果是否显示在 syslog 中:

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

    您应该会看到类似如下的日志条目:

    Jan 15 10:30:45 hostname clamd[1234]: /tmp/eicar.com: Win.Test.EICAR_HDB-1(44d88612fea8a8f36de82e1278abb02f:68) FOUND
    
  4. 检查 Bindplane 代理日志,验证日志是否正在转发:

    sudo journalctl -u observiq-otel-collector -f
    
  5. 验证 Google SecOps 中是否显示日志:

    1. 登录 Google SecOps 控制台。
    2. 依次前往搜索 > UDM 搜索
    3. 运行 ClamAV 日志的搜索查询:

      metadata.log_type = "CLAM_AV"
      
  6. 清理测试文件:

    sudo rm /tmp/eicar.com
    

替代配置:将所有 syslog 消息转发到 Bindplane

如果您想将所有 syslog 消息(而不仅仅是 ClamAV)转发到 Bindplane,请使用以下更简单的配置:

  1. 修改 rsyslog 配置:

    sudo nano /etc/rsyslog.d/30-forward-all.conf
    
  2. 添加以下配置:

    # 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. BINDPLANE_AGENT_IP 替换为相应的 IP 地址。

  4. 按照上述步骤中所述保存、验证并重启 rsyslog。

UDM 映射表

日志字段 UDM 映射 逻辑
parsed_msg.resource.labels.instance_id observer.resource.id 直接复制值
parsed_msg.labels.compute.googleapis.com/resource_name observer.resource.name 直接复制值
parsed_msg.resource.type, parsed_msg.labels.container.googleapis.com/stream observer.resource.type 通过 parsed_msg.resource.type 和 parsed_msg.labels.container.googleapis.com/stream 连接而成,以“/”作为分隔符
parsed_msg.resource.labels.project_id, parsed_msg.resource.labels.cluster_name, parsed_msg.resource.labels.container_name observer.hostname 通过 parsed_msg.resource.labels.project_id、parsed_msg.resource.labels.cluster_name 和 parsed_msg.resource.labels.container_name 串联而成,并以“/”作为分隔符
parsed_msg.resource.labels.container_name observer.application 直接复制值
parsed_msg.labels.container.googleapis.com/namespace_name observer.namespace 直接复制值
parsed_msg.resource.labels.zone observer.location.country_or_region 直接复制值
parsed_msg.resource.labels.pod_id observer.labels 合并为键“pod_id”,值来自 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 通过 parsed_msg.resource.labels.project_id、parsed_msg.resource.labels.cluster_name 和 parsed_msg.resource.labels.container_name 串联而成,并以“/”作为分隔符
file, _file_path target.file.full_path 如果从 Grok 模式提取,则为文件中的值;如果从替代 Grok 模式提取,则为 _file_path 中的值
威胁 security_result.threat_name 直接复制值
total_files、_outcome、threat security_result.summary 如果提取了 num_files,则设置为“%{total_files} 个感染文件已找到。”;否则设置为“文件已扫描。如果提取了 _outcome,则为“(%{_outcome})”;否则,如果威胁不为空,则为“检测到威胁 %{threat} 签名。”
类别 security_result.category 直接复制的值(如果威胁不为空,则设置为“SOFTWARE_MALICIOUS”)
操作 security_result.action 直接复制的值(如果威胁不为空,则设置为“BLOCK”;否则,如果提取了 _outcome,则设置为“ALLOW”)
parsed_msg.insertId metadata.product_log_id 直接复制值
parsed_msg.logName metadata.description 直接复制值
metadata.event_type 如果发现威胁或扫描了文件,则设置为“SCAN_FILE”;如果提取了受感染的文件数量,则设置为“STATUS_UPDATE”
metadata.product_name 设置为“CLAMAV”
metadata.vendor_name 设置为“Cisco Systems”

需要更多帮助?获得社区成员和 Google SecOps 专业人士的解答。