收集 VanDyke VShell SFTP 記錄

支援:

本文說明如何使用 Bindplane 搭配 Syslog,或 Amazon S3 搭配記錄轉送工具,將 VanDyke VShell SFTP 記錄擷取至 Google Security Operations。

事前準備

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

  • Google SecOps 執行個體
  • VanDyke VShell 伺服器或管理控制台的特殊存取權
  • 方法 1:Windows 2016 以上版本或 Linux 主機,並為 Bindplane 代理程式安裝 systemd
  • 選項 2:具有 S3 存取權的 AWS 帳戶,以及 VShell 伺服器上的 NXLog/Fluent Bit

取得 Bindplane 代理程式的 Google SecOps 憑證

如要向 Google SecOps 驗證 Bindplane 代理程式,請選擇下列其中一種方法:

  • 新部署作業:使用 Chronicle API (選項 1)。
  • 舊版部署作業:繼續使用擷取驗證檔案 (選項 2),直到 Ingestion API 於 2027 年 7 月 20 日停用。
  1. 登入 Google Cloud 控制台,然後選取連結至 Google SecOps 執行個體的 Google Cloud 專案。
  2. 依序前往「IAM & Admin」(IAM 與管理) >「Service Accounts」(服務帳戶)。
  3. 按一下「建立服務帳戶」。
  4. 請提供下列設定詳細資料:
    • 「Service account name」(服務帳戶名稱):輸入帳戶名稱 (例如 bindplane-ingest)。
    • 「服務帳戶說明」:輸入說明 (例如 Bindplane agent log ingestion)。
  5. 點按「Create and continue」(建立並繼續)。
  6. 在「將專案存取權授予這個服務帳戶」部分,按一下「選取角色」,然後選取「Chronicle 編輯者」。
  7. 依序點選「繼續」和「完成」。
  8. 按一下您建立的服務帳戶,然後前往「金鑰」分頁。
  9. 依序點選「新增金鑰」>「建立新的金鑰」。
  10. 選取「JSON」,然後點選「建立」。金鑰檔案會下載到電腦。
  11. 將金鑰檔案儲存為 Bindplane 收集器目錄中的 ingestion-auth.json (Linux 為 /opt/observiq-otel-collector/ingestion-auth.json,Windows 為 C:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.json),或更新 config.yaml 中的 creds_file_path,使其與儲存檔案的路徑相符。
  12. 依序前往「IAM 與管理」>「設定」,然後複製「專案編號」。匯出工具設定時會用到。

方法 2:下載擷取驗證檔案 (舊版)

  1. 登入 Google SecOps 控制台。
  2. 依序前往「SIEM 設定」>「收集代理程式」。
  3. 下載擷取驗證檔案。
  4. 將檔案安全地儲存在要安裝 Bindplane 代理程式的系統上。

取得 Google SecOps 客戶 ID

  1. 登入 Google SecOps 控制台。
  2. 依序前往「SIEM Settings」(SIEM 設定) >「Profile」(設定檔)。
  3. 複製並儲存「機構詳細資料」部分的客戶 ID。

方法 1:透過 Bindplane 和 Syslog 整合

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

安裝 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 代理程式安裝指南。

設定 BindPlane 代理程式,擷取系統記錄並傳送至 Google SecOps

  1. 存取設定檔:

    • 找出 config.yaml 檔案。通常位於 Linux 的 /opt/observiq-otel-collector/ 目錄,或 Windows 的安裝目錄。
    • 使用文字編輯器 (例如 nano、vi 或記事本) 開啟檔案。
  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:
        protocol: https
        # Region of your instance, for example us, europe, asia-southeast1
        location: <LOCATION>
        # Project number of the Google Cloud project linked to the instance
        project: '<PROJECT_NUMBER>'
        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: chronicle.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 位址。
    • 將 <LOCATION> 替換為 Google SecOps 執行個體的區域 (例如 us、europe 或 asia-southeast1)。匯出工具會在這個值前面加上 chronicle.googleapis.com。
    • 將 <PROJECT_NUMBER> 替換為「IAM 與管理」>「設定」中的專案編號。
    • 將 YOUR_CUSTOMER_ID 替換為實際的客戶 ID。
    • 將 /path/to/ingestion-authentication-file.json 更新為服務帳戶金鑰檔案 (選項 1) 的儲存路徑。
    • 如要使用 TCP 而非 UDP,請將 udplog 替換為 tcplog。

舊版 Ingestion API 匯出工具

  • 如果您使用選項 2 的擷取驗證檔案,請將 exporters 區塊替換為下列內容。將 creds_file_path 設為擷取驗證檔案的路徑。如果執行個體位於美國境外,請將 malachiteingestion-pa.googleapis.com 替換為區域端點 (例如 europe-malachiteingestion-pa.googleapis.com)。

    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:
    

重新啟動 Bindplane 代理程式,套用變更

  • 如要在 Linux 中重新啟動 Bindplane 代理程式,請執行下列指令:

    sudo systemctl restart observiq-otel-collector
    
  • 如要在 Windows 中重新啟動 Bindplane 代理程式,可以使用「服務」控制台,也可以輸入下列指令:

    net stop observiq-otel-collector && net start observiq-otel-collector
    

在 VanDyke VShell 設定 Syslog 轉送

Windows 上的 VShell

  1. 登入 VShell 控制台。
  2. 前往「Logging」設定。
  3. 設定遠端系統記錄:
    • 啟用記錄功能,將記錄檔傳送至遠端系統記錄檔伺服器。
    • 伺服器位址:輸入 Bindplane IP 位址。
    • 通訊埠:輸入 514 (或您設定的通訊埠)。
    • 「通訊協定」:選取「UDP」 (或 TCP,如有設定)。
    • 訊息群組:選取「連線」、「驗證」、「SFTP」、「FTPS」、「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 整合

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

為 Google SecOps 設定 AWS S3 bucket 和 IAM

  1. 按照這份使用手冊建立 bucket,建立 Amazon S3 bucket
  2. 儲存 bucket 的「名稱」和「區域」,以供日後參考 (例如 vandyke-sftp-logs)。
  3. 按照這份使用手冊建立 IAM 使用者,建立使用者。
  4. 選取建立的使用者。
  5. 選取「安全憑證」分頁標籤。
  6. 在「Access Keys」部分,按一下「Create Access Key」。
  7. 在「用途」部分選取「第三方服務」。
  8. 點選「下一步」。
    • 新增說明標記 (如有需要)。
  9. 按一下「Create access key」。
  10. 按一下「Download .csv file」,儲存「Access Key」和「Secret Access Key」,以供日後參考。
  11. 按一下「完成」。
  12. 選取「權限」分頁標籤。
  13. 在「權限政策」部分,按一下「新增權限」。
  14. 選取「新增權限」。
  15. 選取「直接附加政策」。
  16. 搜尋 AmazonS3FullAccess 政策。
  17. 選取政策。
  18. 點選「下一步」。
  19. 按一下「Add permissions」。

在 VShell 伺服器上安裝及設定記錄傳送器

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

方法 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
    
  5. 使用工作排程器,排定每 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 URI:s3://vandyke-sftp-logs/vshell/
    • 來源刪除選項:依偏好選取「保留」 (建議) 或刪除選項。
    • 檔案存在時間上限:包含過去幾天內修改過的檔案。預設值為 180 天。
    • 存取金鑰 ID:具有 S3 儲存貯體存取權的使用者存取金鑰。
    • 私密存取金鑰:具有 S3 bucket 存取權的使用者私密金鑰。
    • 資產命名空間:資產命名空間。
    • 擷取標籤:套用至這個動態饋給事件的標籤。
  8. 點選「下一步」。
  9. 在「Finalize」(完成) 畫面中檢查新的新聞動態消息設定,然後按一下「Submit」(提交)。

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 欄位的值
message 用於使用 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 的嚴重性
username event.idm.read_only_udm.target.user.userid 從變更記錄對應
username event.idm.read_only_udm.target.user.user_display_name 從變更記錄對應
id event.idm.read_only_udm.additional.fields 從變更記錄對應
reason security_result.summary 從變更記錄對應
srcip principal.ip 從變更記錄對應
username principal.user.user_display_name 從變更記錄對應

變更記錄

查看這個剖析器的變更記錄

還有其他問題嗎?向社群成員和 Google SecOps 專家尋求解答。