收集 VanDyke VShell SFTP 日志

支持的平台:

本文档介绍了如何使用 Bindplane 通过 Syslog 或 Amazon S3(使用日志传送程序)将 VanDyke VShell SFTP 日志注入到 Google Security Operations。解析器会将原始日志转换为结构化的 UDM 格式。它可处理 JSON 和 SYSLOG 格式,提取相关字段(如 IP 地址、端口和事件详细信息),并利用平台详细信息和安全严重程度等背景信息来丰富数据。

准备工作

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

  • Google SecOps 实例
  • 对 VanDyke VShell 服务器或管理控制台的特权访问权限
  • 对于选项 1:一个 Windows 2016 或更高版本或 Linux 主机,其中包含 systemd(适用于 Bindplane 代理)
  • 对于选项 2:具有 S3 访问权限的 AWS 账号,以及 VShell 服务器上的 NXLog/Fluent Bit

选项 1:通过 Bindplane 和 Syslog 进行集成

此选项可提供延迟时间极短的实时日志流式传输,建议在大多数部署中使用。

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

获取 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
    

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
    

其他安装资源

  • 如需了解其他安装选项,请参阅此安装指南

配置 Bindplane 代理以注入 Syslog 并将其发送到 Google SecOps

  1. 访问配置文件:

    1. 找到 config.yaml 文件。通常,它位于 Linux 上的 /etc/bindplane-agent/ 目录中或 Windows 上的安装目录中。
    2. 使用文本编辑器(例如 nanovi 或记事本)打开该文件。
  2. 按如下方式修改 config.yaml 文件:

    receivers:
      udplog:
        # Replace the port and IP address as required
        listen_address: "0.0.0.0:514"
    
    exporters:
      chronicle/chronicle_w_labels:
        compression: gzip
        # Adjust the path to the credentials file you downloaded in Step 1
        creds_file_path: '/path/to/ingestion-authentication-file.json'
        # Replace with your actual customer ID from Step 2
        customer_id: YOUR_CUSTOMER_ID
        endpoint: malachiteingestion-pa.googleapis.com
        # Custom log type - requires parser extension
        log_type: 'VANDYKE_SFTP'
        raw_log_field: body
        ingestion_labels:
    
    service:
      pipelines:
        logs/source0__chronicle_w_labels-0:
          receivers:
            - udplog
          exporters:
            - chronicle/chronicle_w_labels
    
    • 根据基础架构的需要替换端口和 IP 地址。
    • <customer_id> 替换为实际的客户 ID。
    • /path/to/ingestion-authentication-file.json 更新为获取 Google SecOps 注入身份验证文件部分中保存身份验证文件的路径。
    • 如果使用 TCP 而不是 UDP,请将 udplog 替换为 tcplog

重启 Bindplane 代理以应用更改

  • 如需在 Linux 中重启 Bindplane 代理,请运行以下命令:

    sudo systemctl restart bindplane-agent
    
  • 如需在 Windows 中重启 Bindplane 代理,您可以使用服务控制台,也可以输入以下命令:

    net stop BindPlaneAgent && net start BindPlaneAgent
    

在 VanDyke VShell 上配置 Syslog 转发

适用于 Windows 的 VShell

  1. 登录 VShell 控制面板
  2. 前往日志记录设置。
  3. 配置远程 syslog 日志记录:
    • 启用向远程 syslog 服务器记录日志的功能。
    • 服务器地址:输入 Bindplane 代理 IP 地址。
    • 端口:输入 514(或您配置的端口)。
    • 协议:选择 UDP(或 TCP,如果已配置)。
    • 消息组:选择连接身份验证SFTPFTPSHTTPS错误警告信息
  4. 依次点击应用 > 确定

适用于 Linux/macOS 上的 VShell

  1. 修改 vshelld_config 文件(通常为 /etc/vshell/vshelld_config)。
  2. 配置以下参数:

    SyslogFacility LOG_LOCAL3
    LogLevel INFO
    
  3. 配置系统的 syslog,以将 LOG_LOCAL3 转发到 Bindplane 代理:

    • 修改 /etc/rsyslog.conf/etc/syslog-ng/syslog-ng.conf
    • 添加:local3.* @bindplane-agent-ip:514(对于 UDP)或 local3.* @@bindplane-agent-ip:514(对于 TCP)。
  4. 重启 VShell 服务和 syslog 服务:

    sudo systemctl restart vshelld
    sudo systemctl restart rsyslog
    

选项 2:通过 AWS S3 进行集成

此选项适用于需要日志归档或无法直接转发 syslog 的环境。请注意,由于 AWS Lambda 无法访问本地文件,因此需要在 VShell 服务器上安装日志传送程序。

为 Google SecOps 配置 AWS S3 存储桶和 IAM

  1. 按照以下用户指南创建 Amazon S3 存储桶创建存储桶
  2. 保存存储桶名称区域以供日后参考(例如 vandyke-sftp-logs)。
  3. 按照以下用户指南创建用户创建 IAM 用户
  4. 选择创建的用户
  5. 选择安全凭据标签页。
  6. 访问密钥部分中,点击创建访问密钥
  7. 选择第三方服务作为使用情形
  8. 点击下一步
  9. 可选:添加说明标记。
  10. 点击创建访问密钥
  11. 点击下载 CSV 文件,保存访问密钥不公开的访问密钥以供日后参考。
  12. 点击完成
  13. 选择权限标签页。
  14. 权限政策部分中,点击添加权限
  15. 选择添加权限
  16. 选择直接附加政策
  17. 搜索 AmazonS3FullAccess 政策。
  18. 选择相应政策。
  19. 点击下一步
  20. 点击添加权限

在 VShell 服务器上安装和配置日志传送器

根据您的操作系统,选择以下选项之一:

选项 A:使用 NXLog (Windows)

  1. nxlog.co 下载并安装 NXLog 社区版
  2. 修改 C:\Program Files\nxlog\conf\nxlog.conf

    <Extension json>
        Module      xm_json
    </Extension>
    
    <Extension syslog>
        Module      xm_syslog
    </Extension>
    
    <Input vshell_log>
        Module      im_file
        File        "C:\\Program Files\\VanDyke Software\\VShell\\Log\\VShell.log"
        SavePos     TRUE
    
        <Exec>
            # Parse VShell log format
            if $raw_event =~ /^(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}) (\S+) (\S+) (\S+) (\S+) (\S+) (\S+) (\S+) (\S+) (\S+) (\S+) (\S+) (\S+) (\S+) (\S+) "(.*)"$/
            {
                $EventTime = $1;
                $Protocol = $2;
                $EventType = $3;
                $SessionID = $4;
                $ClientIP = $5;
                $ClientPort = $6;
                $Username = $7;
                $Filename = $9;
                $BytesDown = $10;
                $BytesUp = $11;
                $ServerIP = $14;
                $ServerPort = $15;
                $EventMessage = $16;
    
                # Convert to JSON
                to_json();
            }
        </Exec>
    </Input>
    
    <Output s3>
        Module      om_exec
        Command     C:\scripts\upload_to_s3.ps1
        Args        %FILEPATH%
    </Output>
    
    <Route vshell_to_s3>
        Path        vshell_log => s3
    </Route>
    
  3. 创建 PowerShell 脚本 C:\scripts\upload_to_s3.ps1

    param([string]$FilePath)
    
    $bucket = "vandyke-sftp-logs"
    $key = "vshell/$(Get-Date -Format 'yyyy/MM/dd/HH')/$(Get-Date -Format 'yyyyMMddHHmmss').json"
    
    # Batch logs
    $logs = Get-Content $FilePath | ConvertFrom-Json
    $jsonLines = $logs | ForEach-Object { $_ | ConvertTo-Json -Compress }
    $content = $jsonLines -join "`n"
    
    # Upload to S3
    Write-S3Object -BucketName $bucket -Key $key -Content $content -ProfileName default
    
  4. 创建 AWS 凭据配置文件:

    Set-AWSCredential -AccessKey YOUR_ACCESS_KEY -SecretKey YOUR_SECRET_KEY -StoreAs default
    
    1. 使用任务计划程序将 PowerShell 脚本安排为每 5 分钟运行一次。

选项 B:使用 Fluent Bit (Linux)

  1. 安装 Fluent Bit

    curl https://raw.githubusercontent.com/fluent/fluent-bit/master/install.sh | sh
    
  2. 配置 /etc/fluent-bit/fluent-bit.conf

    [SERVICE]
        Flush        5
        Daemon       On
        Log_Level    info
    
    [INPUT]
        Name              tail
        Path              /var/log/vshell/vshell.log
        Parser            vshell_parser
        Tag               vshell.*
        Refresh_Interval  5
        Mem_Buf_Limit     10MB
    
    [PARSER]
        Name        vshell_parser
        Format      regex
        Regex       ^(?<timestamp>\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}) (?<protocol>\S+) (?<event_type>\S+) (?<session_id>\S+) (?<client_ip>\S+) (?<client_port>\S+) (?<username>\S+) (?<dash>\S+) (?<filename>\S+) (?<bytes_down>\S+) (?<bytes_up>\S+) (?<field1>\S+) (?<field2>\S+) (?<server_ip>\S+) (?<server_port>\S+) "(?<event_message>[^"]*)"
    
    [OUTPUT]
        Name                  s3
        Match                 vshell.*
        bucket                vandyke-sftp-logs
        region                us-east-1
        use_put_object        On
        total_file_size       5M
        upload_timeout        10s
        compression           gzip
        s3_key_format         /vshell/%Y/%m/%d/%H/%{hostname}_%{uuid}.json.gz
    
  3. 配置 AWS 凭据:

    export AWS_ACCESS_KEY_ID=YOUR_ACCESS_KEY
    export AWS_SECRET_ACCESS_KEY=YOUR_SECRET_KEY
    
  4. 启动 Fluent Bit:

    sudo systemctl enable fluent-bit
    sudo systemctl start fluent-bit
    

在 Google SecOps 中配置 Feed 以注入 VanDyke VShell 日志

  1. 依次前往 SIEM 设置 > Feed
  2. 点击添加新 Feed
  3. Feed 名称字段中,输入 Feed 的名称(例如 VanDyke VShell SFTP logs)。
  4. 选择 Amazon S3 V2 作为来源类型
  5. 选择 VanDyke SFTP 作为日志类型(自定义)。
  6. 点击下一步
  7. 为以下输入参数指定值:
    • S3 URIs3://vandyke-sftp-logs/vshell/
    • 源删除选项:根据您的偏好选择保留(推荐)或删除选项。
    • 文件存在时间上限:包含在过去指定天数内修改的文件。默认值为 180 天。
    • 访问密钥 ID:有权访问 S3 存储桶的用户访问密钥。
    • 私有访问密钥:有权访问 S3 存储桶的用户私有密钥。
    • 资产命名空间资产命名空间
    • 注入标签:应用于此 Feed 中事件的标签。
  8. 点击下一步
  9. 最终确定界面中查看新的 Feed 配置,然后点击提交

UDM 映射表

日志字段 UDM 映射 逻辑
agent.id read_only_udm.observer.asset_id 将“filebeat:”与 agent.id 字段的值串联起来
agent.type read_only_udm.observer.application 直接映射 agent.type 字段的值
agent.version read_only_udm.observer.platform_version 直接映射 agent.version 字段的值
ecs.version read_only_udm.metadata.product_version 直接映射 ecs.version 字段的值
host.architecture read_only_udm.target.asset.hardware.cpu_platform 直接映射 host.architecture 字段的值
host.hostname read_only_udm.target.hostname 直接映射 host.hostname 字段的值
host.id read_only_udm.principal.asset_id 将“VANDYKE_SFTP:”与 host.id 字段的值串联起来
host.ip read_only_udm.target.ip 将 host.ip 数组中的每个 IP 地址直接映射到单独的 read_only_udm.target.ip 字段
host.mac read_only_udm.target.mac 将 host.mac 数组中的每个 MAC 地址直接映射到单独的 read_only_udm.target.mac 字段
host.os.kernel read_only_udm.target.platform_patch_level 直接映射 host.os.kernel 字段的值
host.os.platform read_only_udm.target.platform 根据 host.os.platform 的值,将其映射到 WINDOWS、LINUX、MAC 或 UNKNOWN_PLATFORM
host.os.version read_only_udm.target.platform_version 直接映射 host.os.version 字段的值
log.file.path read_only_udm.principal.process.file.full_path 直接映射 log.file.path 字段的值
logstash.collect.timestamp read_only_udm.metadata.collected_timestamp 解析 logstash.collect.timestamp 字段中的时间戳,并将其转换为时间戳对象
logstash.irm_environment read_only_udm.additional.fields.value.string_value 直接映射 logstash.irm_environment 字段的值。键设置为“irm_environment”
logstash.irm_region read_only_udm.additional.fields.value.string_value 直接映射 logstash.irm_region 字段的值。键设置为“irm_region”
logstash.irm_site read_only_udm.additional.fields.value.string_value 直接映射 logstash.irm_site 字段的值。键设置为“irm_site”
logstash.process.host read_only_udm.observer.hostname 直接映射 logstash.process.host 字段的值
消息 用于使用 Grok 模式和正则表达式提取各种字段
read_only_udm.metadata.event_type 设置为“NETWORK_FTP”
read_only_udm.metadata.log_type 设置为“VANDYKE_SFTP”
read_only_udm.metadata.product_event_type 使用 Grok 模式从消息字段中提取
read_only_udm.metadata.product_name 设置为“VANDYKE_SFTP”
read_only_udm.metadata.vendor_name 设置为“VANDYKE SOFTWARE”
read_only_udm.network.application_protocol 如果说明字段包含“SSH2”或“SSH”,则设置为“SSH”;否则,如果方法字段与 HTTP 方法匹配,则设置为“HTTP”
read_only_udm.network.http.method 使用 Grok 模式从消息字段中提取,仅当匹配常见的 HTTP 方法时才提取
read_only_udm.network.http.referral_url 使用 Grok 模式从消息字段中提取
read_only_udm.network.http.response_code 使用 Grok 模式从消息字段中提取并转换为整数
read_only_udm.network.ip_protocol 如果说明字段包含“TCP”,则设置为“TCP”
read_only_udm.principal.ip 使用 Grok 模式从消息字段中提取
read_only_udm.principal.port 使用 Grok 模式从消息字段中提取并转换为整数
read_only_udm.security_result.description 使用 Grok 模式从消息字段中提取
read_only_udm.security_result.severity 如果 syslog_severity 为“error”或“warning”,则设置为“HIGH”;如果为“notice”,则设置为“MEDIUM”;如果为“information”或“info”,则设置为“LOW”
read_only_udm.security_result.severity_details 直接映射 syslog_severity 字段的值
read_only_udm.target.ip 使用 Grok 模式从消息字段中提取
read_only_udm.target.port 使用 Grok 模式从消息字段中提取并转换为整数
read_only_udm.target.process.pid 使用 Grok 模式从消息字段中提取
syslog_severity 用于确定 security_result 的严重程度

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