收集 VanDyke VShell SFTP 記錄

支援的國家/地區:

本文說明如何使用 Bindplane (搭配 Syslog) 或 Amazon S3 (搭配記錄檔傳送工具),將 VanDyke VShell SFTP 記錄檔擷取至 Google Security Operations。剖析器會將原始記錄轉換為結構化的 UDM 格式。這項服務可處理 JSON 和 SYSLOG 格式,擷取 IP 位址、連接埠和事件詳細資料等相關欄位,並透過平台詳細資料和安全性嚴重程度等背景資訊,擴充資料內容。

事前準備

請確認您已完成下列事前準備事項:

  • Google SecOps 執行個體
  • VanDyke VShell 伺服器或管理主控台的特殊存取權
  • 選項 1:搭載 systemd 的 Windows 2016 以上版本或 Linux 主機,適用於 Bindplane 代理程式
  • 做法 2:AWS 帳戶 (具備 S3 存取權) 和 VShell 伺服器上的 NXLog/Fluent Bit

方法 1:透過 Bindplane 和 Syslog 整合

這個選項可提供延遲時間最短的即時記錄串流,建議用於大多數部署作業。

  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
    

Linux 安裝

  1. 開啟具備根層級或 sudo 權限的終端機。
  2. 執行下列指令:

    sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.sh
    

其他安裝資源

設定 Bindplane 代理程式,擷取系統記錄檔並傳送至 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. 設定遠端系統記錄檔記錄:
    • 啟用記錄功能,將記錄檔傳送至遠端系統記錄檔伺服器
    • 伺服器位址:輸入 Bindplane 代理程式 IP 位址。
    • 通訊埠:輸入 514 (或您設定的通訊埠)。
    • 通訊協定:選取 UDP (或已設定的 TCP)。
    • 訊息群組:選取「連線」、「驗證」、「安全檔案傳輸通訊協定」、「安全檔案傳輸通訊協定 (SSL/TLS)」、「HTTPS」、「錯誤」、「警告」和「資訊」。
  4. 依序按一下「Apply」>「OK」

適用於 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 服務和系統記錄檔服務:

    sudo systemctl restart vshelld
    sudo systemctl restart rsyslog
    

方法 2:透過 AWS S3 整合

如果環境需要封存記錄,或無法直接轉送系統記錄,這個選項就非常實用。請注意,由於 AWS Lambda 無法存取內部部署檔案,因此這需要在 VShell 伺服器上安裝記錄檔傳送程式。

為 Google SecOps 設定 AWS S3 值區和 IAM

  1. 按照這份使用者指南建立 Amazon S3 bucket建立 bucket
  2. 儲存 bucket 的「名稱」和「地區」,以供日後參考 (例如 vandyke-sftp-logs)。
  3. 請按照這份使用者指南建立使用者建立 IAM 使用者
  4. 選取建立的「使用者」
  5. 選取「安全憑證」分頁標籤。
  6. 在「Access Keys」部分中,按一下「Create Access Key」
  7. 選取「第三方服務」做為「用途」
  8. 點選「下一步」
  9. 選用:新增說明標記。
  10. 按一下「建立存取金鑰」
  11. 按一下「下載 CSV 檔案」,儲存「存取金鑰」和「私密存取金鑰」以供日後參考。
  12. 按一下 [完成]
  13. 選取「權限」分頁標籤。
  14. 在「權限政策」部分中,按一下「新增權限」
  15. 選取「新增權限」
  16. 選取「直接附加政策」
  17. 搜尋 AmazonS3FullAccess 政策。
  18. 選取政策。
  19. 點選「下一步」
  20. 按一下「Add permissions」。

在 VShell 伺服器上安裝及設定 Log Shipper

根據作業系統選擇下列其中一個選項:

方法 A:使用 NXLog (Windows)

  1. nxlog.co 下載並安裝 NXLog Community Edition
  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. 使用工作排程器,排定每 5 分鐘執行一次 PowerShell 指令碼。

方法 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 中設定資訊提供,擷取 VanDyke VShell 記錄

  1. 依序前往「SIEM 設定」>「動態饋給」
  2. 按一下「新增動態消息」
  3. 在「動態饋給名稱」欄位中輸入動態饋給名稱 (例如 VanDyke VShell SFTP logs)。
  4. 選取「Amazon S3 V2」做為「來源類型」
  5. 選取「VanDyke SFTP」做為「記錄類型」(自訂)。
  6. 點選「下一步」
  7. 指定下列輸入參數的值:
    • S3 URIs3://vandyke-sftp-logs/vshell/
    • 來源刪除選項:根據偏好選取「保留」 (建議) 或刪除選項。
    • 檔案存在時間上限:包含在過去天數內修改的檔案。預設值為 180 天。
    • 存取金鑰 ID:具有 S3 儲存空間存取權的使用者存取金鑰。
    • 存取密鑰:具有 S3 bucket 存取權的使用者私密金鑰。
    • 資產命名空間資產命名空間
    • 擷取標籤:套用至這個動態饋給事件的標籤。
  8. 點選「下一步」
  9. 在「完成」畫面中檢查新的動態饋給設定,然後按一下「提交」

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 專業人員尋求答案。