收集 ESET AV 記錄
剖析器版本:6.0
本文說明如何使用 Bindplane 代理程式,將 ESET 防毒軟體記錄擷取至 Google Security Operations。
ESET 是端點安全解決方案,可針對威脅偵測、防火牆事件、HIPS 警示和稽核動作產生系統記錄訊息。剖析器會從 JSON 格式的系統記錄中擷取鍵/值組合,並對應至統合式資料模型 (UDM)。
事前準備
請確認您符合下列必要條件:
Google SecOps 執行個體
Windows Server 2016 以上版本,或搭載
systemd的 Linux 主機Bindplane 代理程式與 ESET PROTECT 伺服器之間的網路連線
如果是在 Proxy 後方執行,請確認防火牆通訊埠已按照 Bindplane 代理程式規定開啟
ESET PROTECT 控制台 (地端部署或雲端) 的特殊存取權
取得 Bindplane 代理程式的 Google SecOps 憑證
如要向 Google SecOps 驗證 Bindplane 代理程式,請選擇下列其中一種方法:
- 新部署作業:使用 Chronicle API (選項 1)。
- 舊版部署作業:在 2027 年 7 月 20 日停用 Ingestion API 前,請繼續使用擷取驗證檔案 (選項 2)。
方法 1:為 Chronicle API 建立服務帳戶 (建議)
- 登入 Google Cloud 控制台,然後選取連結至 Google SecOps 執行個體的 Google Cloud 專案。
- 依序前往 「IAM & Admin」(IAM 與管理) >「Service Accounts」(服務帳戶)。
- 按一下「建立服務帳戶」。
- 請提供下列設定詳細資料:
- 「Service account name」(服務帳戶名稱):輸入帳戶名稱 (例如
bindplane-ingest)。 - 服務帳戶說明:輸入說明 (例如
Bindplane agent log ingestion)。
- 「Service account name」(服務帳戶名稱):輸入帳戶名稱 (例如
- 點按「Create and continue」(建立並繼續)。
- 在「將專案存取權授予這個服務帳戶」部分,按一下「選取角色」,然後選取「Chronicle 編輯者」。
- 依序點選「繼續」和「完成」。
- 按一下您建立的服務帳戶,然後前往「金鑰」分頁。
- 依序點選「新增金鑰」>「建立新的金鑰」。
- 選取「JSON」,然後點選「建立」。金鑰檔案會下載到電腦。
- 將金鑰檔案儲存為 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,使其與儲存路徑相符。 - 依序前往「IAM 與管理」>「設定」,然後複製「專案編號」。匯出工具設定時會用到。
方法 2:下載擷取驗證檔案 (舊版)
- 登入 Google SecOps 控制台。
- 依序前往「SIEM Settings」 > 「Collection Agents」。
- 下載擷取驗證檔案。
- 將檔案安全地儲存在要安裝 Bindplane 代理程式的系統上。
取得 Google SecOps 客戶 ID
- 登入 Google SecOps 控制台。
- 依序前往「SIEM 設定」>「設定檔」。
複製並儲存「機構詳細資料」部分的客戶 ID。
安裝 Bindplane 代理程式
請按照下列操作說明,在 Windows 或 Linux 作業系統上安裝 Bindplane 代理程式。
Windows 安裝
- 以管理員身分開啟命令提示字元或 PowerShell。
執行下列指令:
msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet等待安裝完成。
執行下列指令,確認安裝成功:
sc query observiq-otel-collector服務應顯示為「RUNNING」。
Linux 安裝
- 開啟具有 root 或 sudo 權限的終端機。
執行下列指令:
sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.sh等待安裝完成。
執行下列指令,確認安裝成功:
sudo systemctl status observiq-otel-collector服務應顯示為「active (running)」。
其他安裝資源
如需其他安裝選項和疑難排解資訊,請參閱 Bindplane 代理程式安裝指南。
設定 Bindplane 代理程式,擷取系統記錄並傳送至 Google SecOps
找出設定檔
Linux:
sudo nano /opt/observiq-otel-collector/config.yamlWindows:
notepad "C:\Program Files\observIQ OpenTelemetry Collector\config.yaml"
編輯設定檔
將
config.yaml的全部內容替換為下列設定:receivers: udplog: listen_address: "0.0.0.0:514" exporters: chronicle/eset_av: 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 creds_file_path: '/opt/observiq-otel-collector/ingestion-auth.json' customer_id: '<customer_id>' endpoint: chronicle.googleapis.com log_type: ESET_AV raw_log_field: body service: pipelines: logs/eset_av_to_chronicle: receivers: - udplog exporters: - chronicle/eset_av
設定參數
請替換下列預留位置:
接收器設定:
listen_address:要接聽的 IP 位址和通訊埠:0.0.0.0:在所有介面上監聽 (建議)- 通訊埠
514是標準的系統記錄通訊埠 (在 Linux 上需要根層級權限;如果沒有根層級權限,請使用1514)
Exporter 設定:
creds_file_path:服務帳戶 JSON 金鑰檔案的完整路徑 (選項 1):- Linux:
/opt/observiq-otel-collector/ingestion-auth.json - Windows:
C:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.json
- Linux:
customer_id:從 Google SecOps 控制台複製的客戶 IDlocation:將<LOCATION>替換為 Google SecOps 執行個體的區域 (例如us、europe或asia-southeast1)。匯出工具會以這個值做為chronicle.googleapis.com的前置字元。如需完整清單,請參閱「區域性端點」。project:將<PROJECT_NUMBER>替換為「IAM 與管理」>「設定」中的專案編號。endpoint:請將此值設為chronicle.googleapis.com。
舊版擷取 API 匯出工具
如果您使用方式 2 的擷取驗證檔案,請將
exporters區塊替換成下列內容。將creds_file_path設為擷取驗證檔案的路徑,如果您的執行個體位於美國境外,請將malachiteingestion-pa.googleapis.com替換為區域端點 (例如europe-malachiteingestion-pa.googleapis.com)。exporters: chronicle/eset_av: compression: gzip creds_file_path: '/opt/observiq-otel-collector/ingestion-auth.json' customer_id: '<customer_id>' endpoint: malachiteingestion-pa.googleapis.com log_type: ESET_AV raw_log_field: body
儲存設定檔
- 編輯完成後,請儲存檔案:
- Linux:依序按下
Ctrl+O、Enter和Ctrl+X - Windows:依序點選「檔案」>「儲存」
- Linux:依序按下
重新啟動 Bindplane 代理程式,套用變更
如要在 Linux 中重新啟動 Bindplane 代理程式,請執行下列指令:
sudo systemctl restart observiq-otel-collector確認服務正在執行:
sudo systemctl status observiq-otel-collector查看記錄檔是否有錯誤:
sudo journalctl -u observiq-otel-collector -f
如要在 Windows 中重新啟動 Bindplane 代理程式,請選擇下列其中一個選項:
以管理員身分開啟命令提示字元或 PowerShell:
net stop observiq-otel-collector && net start observiq-otel-collector服務控制台:
- 按下
Win+R鍵,輸入services.msc,然後按下 Enter 鍵。 - 找出「observIQ OpenTelemetry Collector」。
- 按一下滑鼠右鍵,然後選取「重新啟動」。
確認服務正在執行:
sc query observiq-otel-collector查看記錄檔是否有錯誤:
type "C:\Program Files\observIQ OpenTelemetry Collector\log\collector.log"
- 按下
在地端部署 ESET PROTECT 設定系統記錄
- 登入 ESET PROTECT 網頁控制台。
- 依序點選「更多」「設定」「進階設定」「系統記錄伺服器」。
- 將「Enable Syslog」切換鈕設為啟用。
- 請提供下列設定詳細資料:
- 主機:輸入 Bindplane 代理程式 IP 位址。
- 「Port」(通訊埠):輸入
514。 - 格式:選取「系統記錄檔」。
- Transport:選取「UDP」。
- 「Trace log verbosity」(追蹤記錄詳細程度):選取「Informational」(資訊)。
- Export logs to Syslog:設為「Enable」。
- 匯出記錄格式:選取「JSON」。
- 按一下 [儲存]。
在 ESET PROTECT Cloud 上設定系統記錄
- 登入 ESET PROTECT Cloud 控制台。
- 依序點選「更多」>「設定」>「Syslog 伺服器」。
- 將「Enable Syslog」切換鈕設為啟用,即可啟用系統記錄。
- 提供下列設定詳細資料:
- 酬載格式:選取「JSON」。
- Format of envelope:選取「Syslog」。
- 「Minimum log Level」(最低記錄層級):選取「Informational」(資訊)。
- 要記錄的事件類型:選取「全部」 (或視需要選取特定類型)。
- 目的地 IP:輸入 Bindplane 代理程式 IP 位址。
- 「Port」(通訊埠):輸入
514。
- 按一下 [儲存]。
UDM 對應表
| 記錄欄位 | UDM 對應 | 邏輯 |
|---|---|---|
| 帳戶 | principal.administrative_domain | 使用 grok 模式 %{DATA:admin_domain}\\\\%{WORD:user_id} 從 account 欄位擷取。 |
| 帳戶 | principal.user.userid | 使用 grok 模式 %{DATA:admin_domain}\\\\%{WORD:user_id} 從 account 欄位擷取。 |
| 動作 | security_result.action | 如果 action 為 Block (不區分大小寫),則設為 BLOCK。如果 action 為 Start (不區分大小寫),則設為 ALLOW。 |
| action_taken | security_result.action_details | 直接從 action_taken 欄位對應。 |
| computer_severity_score | security_result.detection_fields | 系統會使用鍵 computer_severity_score 和 computer_severity_score 欄位的值,建立鍵/值組合。這組配對會附加至 security_result.detection_fields 陣列。 |
| 細節 | security_result.description | 直接從 detail 欄位對應。 |
| 網域 | principal.domain.name | 直接從「domain」欄位對應。 |
| eialarmid | security_result.detection_fields | 系統會使用鍵 eialarmid 和 eialarmid 欄位的值,建立鍵/值組合。這組配對會附加至 security_result.detection_fields 陣列。 |
| eiconsolelink | principal.url | 直接從「eiconsolelink」欄位對應。 |
| 事件 | metadata.description | 從 event 重新命名為 event_desc,並對應至 metadata.description。 |
| event_type | metadata.product_event_type | 直接從 event_type 欄位對應。 |
| group_name | principal.group.group_display_name | 直接從「group_name」欄位對應。 |
| hash | principal.file.sha1 | 轉換為小寫。如果小寫值與 SHA-1 規則運算式相符,則對應至 principal.file.sha1。 |
| hash | principal.resource.attribute.labels | 系統會使用 hash 鍵和 hash 欄位中的值建立鍵/值組合。這組配對會附加至 principal.resource.attribute.labels 陣列。 |
| 主機名稱 | principal.asset.hostname | 直接從 hostname 欄位對應。 |
| 主機名稱 | principal.hostname | 直接從「hostname」欄位對應。 |
| inbound | network.direction | 如果為 true,請設為 INBOUND。如果為 false,請設為 OUTBOUND。 |
| ipv4 | target.asset.ip | 如果 target_address 為空白,則直接從 ipv4 欄位對應。 |
| ipv4 | target.ip | 如果 target_address 為空白,則直接從 ipv4 欄位對應。 |
| json_data | 剖析為 JSON,以擷取各個欄位。 | |
| 訊息 | 使用 grok 剖析,擷取時間戳記、主機和 json_data。 | |
| need_restart | additional.fields | 系統會使用 need_restart 鍵和 need_restart 欄位中的值 (轉換為字串) 建立鍵/值組合。這組配對會附加至 additional.fields 陣列。 |
| os_name | principal.platform | 如果包含 Window 或 window (不區分大小寫),請設為 WINDOWS。如果包含 Linux 或 linux (不區分大小寫),請設為 LINUX。如果包含 Mac 或 mac (不區分大小寫),請設為 MAC。 |
| os_name | principal.platform_version | 直接從 os_name 欄位對應。 |
| process_name | principal.process.file.full_path | 直接從「process_name」欄位對應。如果留空,則會採用 processname 的值。 |
| 程序名稱 | principal.process.file.full_path | 如果 process_name 為空,則會對應至 process_name。 |
| 通訊協定 | network.ip_protocol | 轉換為大寫。如果大寫值與已知通訊協定 (TCP、UDP、ICMP 等) 相符,則會對應至 network.ip_protocol。 |
| 結果 | security_result.summary | 直接從「result」欄位對應。 |
| rulename | security_result.rule_name | 直接從 rulename 欄位對應。 |
| scan_id | security_result.detection_fields | 系統會使用鍵 scan_id 和 scan_id 欄位的值建立鍵/值組合。這組配對會附加至 security_result.detection_fields 陣列。 |
| scanner_id | security_result.detection_fields | 系統會使用鍵 scanner_id 和 scanner_id 欄位的值建立鍵/值組合。這組配對會附加至 security_result.detection_fields 陣列。 |
| 嚴重性 | security_result.severity | 如果包含 Warn 或 warn (不區分大小寫),則設為 HIGH。如果包含 Info 或 info (不區分大小寫),請設為 LOW。 |
| severity_score | security_result.detection_fields | 系統會使用鍵 severity_score 和 severity_score 欄位的值,建立鍵/值組合。這組配對會附加至 security_result.detection_fields 陣列。 |
| source_address | principal.asset.ip | 直接從 source_address 欄位對應。 |
| source_address | principal.ip | 直接從「source_address」欄位對應。 |
| source_port | principal.port | 轉換為字串,然後轉換為整數。對應至 principal.port。 |
| source_uuid | metadata.product_log_id | 直接從「source_uuid」欄位對應。 |
| 目標 | 已重新命名為 target1。 |
|
| target_address | target.asset.ip | 直接從「target_address」欄位對應。 |
| target_address | target.ip | 直接從 target_address 欄位對應。 |
| target_port | target.port | 先轉換為字串,再轉換為整數。對應至 target.port。 |
| threat_handled | security_result.detection_fields | 系統會使用鍵 threat_handled 和 threat_handled 欄位的值 (轉換為字串) 建立鍵/值組合。這組配對會附加至 security_result.detection_fields 陣列。 |
| threat_name | security_result.threat_name | 直接從「threat_name」欄位對應。 |
| threat_type | security_result.threat_id | 直接從 threat_type 欄位對應。 |
| 時間 | metadata.event_timestamp | 用於填入 metadata.event_timestamp。 |
| 使用者名稱 | principal.user.userid | 如果 user_id 和 user 為空,則直接從 username 欄位對應。 |
| 使用者 | principal.user.userid | 如果 user_id 為空白,則直接從 user 欄位對應。 |
| metadata.event_type | 如果 source_address 和 target_address 不是空白,請設為 NETWORK_CONNECTION。否則,如果 has_user 為 true,請設為 USER_UNCATEGORIZED。否則,如果 has_principal 為 true,請設為 STATUS_UPDATE。否則,請設為 GENERIC_EVENT。 |
|
| metadata.log_type | 設為 ESET_AV。 |
|
| metadata.product_name | 設為 ESET_AV。 |
|
| metadata.vendor_name | 設為 ESET_AV。 |
|
| intermediary.hostname | 這個欄位的值取自從記錄訊息擷取的 host 欄位。 |
|
| principal.user.userid | 如果 account 欄位不為空白,剖析器會使用 grok 模式從 account 欄位擷取使用者 ID。否則,系統會檢查 user 欄位是否不為空白,如果是,則會採用其值。如果 account 和 user 皆為空白,系統會檢查 username 欄位是否不為空白,如果不為空白,則會採用該欄位的值。 |
|
timestamp |
event.idm.read_only_udm.metadata.collected_timestamp |
從變更記錄對應 |
event_id |
event.idm.read_only_udm.metadata.product_log_id |
從變更記錄對應 |
process_pid |
event.idm.read_only_udm.principal.process.pid |
從變更記錄對應 |
desc |
event.idm.read_only_udm.additional.fields |
從變更記錄對應 |
occurred |
event.idm.read_only_udm.metadata.event_timestamp |
從變更記錄對應 |
threatHandled |
event.idm.read_only_udm.security_result.detection_fields |
從變更記錄對應 |
actionTaken |
event.idm.read_only_udm.security_result.action_details |
從變更記錄對應 |
threatName |
event.idm.read_only_udm.security_result.threat_name |
從變更記錄對應 |
threatType |
event.idm.read_only_udm.security_result.summary |
從變更記錄對應 |
target |
target.resource.attribute.labels |
從變更記錄對應 |
object_uri |
target.url |
從變更記錄對應 |
severity |
security_result.severity_details |
從變更記錄對應 |
threat_flags |
security_result.detection_fields |
從變更記錄對應 |
category |
security_result.category_details |
從變更記錄對應 |
object_type" and "engine_version |
principal.resource.attribute.labels |
從變更記錄對應 |
circumstances |
security_result.description |
從變更記錄對應 |
security_result_action |
BLOCK |
從變更記錄對應 |
security_result_action |
ALLOW |
從變更記錄對應 |
scan_id", "scanner_id", and "threat_handled |
security_result.detection_fields |
從變更記錄對應 |
group_name |
principal.group_display_name |
從變更記錄對應 |
變更記錄
還有其他問題嗎?向社群成員和 Google SecOps 專業人員尋求解答。