收集 BloxOne Threat Defense 記錄
本文說明如何使用 Bindplane,將 BloxOne Threat Defense 記錄擷取至 Google Security Operations。Logstash 剖析器會從以 SYSLOG 或 JSON 格式接收的 BLOXONE DNS
記錄中擷取欄位。系統會先將記錄訊息正規化為 JSON 物件,然後將擷取的欄位對應至 Unified Data Model (UDM),並加入地理位置和 DNS 詳細資料,以利進行安全性分析。
事前準備
請確認您已完成下列事前準備事項:
- Google SecOps 執行個體
- Windows 2016 以上版本,或搭載
systemd
的 Linux 主機 - 如果透過 Proxy 執行,防火牆通訊埠已開啟
- Infoblox BloxOne 的特殊存取權
取得 Google SecOps 擷取驗證檔案
- 登入 Google SecOps 控制台。
- 依序前往「SIEM 設定」>「收集代理程式」。
- 下載擷取驗證檔案。將檔案安全地儲存在要安裝 Bindplane 的系統上。
取得 Google SecOps 客戶 ID
- 登入 Google SecOps 控制台。
- 依序前往「SIEM 設定」>「設定檔」。
- 複製並儲存「機構詳細資料」專區中的客戶 ID。
安裝 Bindplane 代理程式
Windows 安裝
- 以系統管理員身分開啟「命令提示字元」或「PowerShell」。
執行下列指令:
msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
Linux 安裝
- 開啟具有根層級或 sudo 權限的終端機。
執行下列指令:
sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.sh
其他安裝資源
如需其他安裝選項,請參閱安裝指南。
設定 Bindplane 代理程式,擷取系統記錄檔並傳送至 Google SecOps
- 存取設定檔:
- 找出
config.yaml
檔案。通常位於 Linux 的/etc/bindplane-agent/
目錄,或 Windows 的安裝目錄。 - 使用文字編輯器 (例如
nano
、vi
或記事本) 開啟檔案。
- 找出
按照下列方式編輯
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: '/path/to/ingestion-authentication-file.json' # Replace with your actual customer ID from Step 2 customer_id: <customer_id> endpoint: malachiteingestion-pa.googleapis.com # Add optional ingestion labels for better organization ingestion_labels: log_type: 'BLOXONE' raw_log_field: body 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 擷取驗證檔案」一節中驗證檔案的儲存路徑。
重新啟動 Bindplane 代理程式,以套用變更
如要在 Linux 中重新啟動 Bindplane 代理程式,請執行下列指令:
sudo systemctl restart bindplane-agent
如要在 Windows 中重新啟動 Bindplane 代理程式,可以使用「服務」控制台,或輸入下列指令:
net stop BindPlaneAgent && net start BindPlaneAgent
在 Infoblox BloxOne 中設定 Syslog
- 登入 Infoblox 入口網站。
- 依序前往「設定」>「管理」>「資料連結器」。
- 選取「目的地設定」分頁標籤。
- 依序點選「建立」> Syslog。
- 提供下列設定詳細資料:
- 名稱:提供描述性名稱 (例如 Google SecOps 收集器)。
- 說明:提供簡短說明。
- 狀態:選取「啟用」。
- 標記:按一下「新增」,然後指定下列項目,將鍵與目的地建立關聯:
- KEY:輸入金鑰的描述性名稱。
- VALUE:輸入金鑰的值。
- 格式:選取「CEF」。
- 通訊協定:選取「UDP」或「TCP」 (視 Bindplane 代理程式設定而定)。
- FQDN/IP:輸入 Bindplane 代理程式 IP 位址。
- 連接埠:輸入 Bindplane 代理程式連接埠 (預設為 UDP 的
514
)。
- 按一下「Save & Close」。
UDM 對應表
記錄欄位 | UDM 對應 | 邏輯 |
---|---|---|
additional_list.key |
這個欄位用於迴圈,可疊代 additional_list 陣列並根據 key 欄位的值擷取資料。不會直接對應至 UDM。 |
|
additional_list.value |
principal.location.region_latitude 、principal.location.region_longitude 、target.location.region_latitude 、target.location.region_longitude |
這個欄位會與 additional_list.key 搭配使用,從 additional_list 陣列中擷取特定值。擷取和對應值的邏輯取決於對應的 key 。舉例來說:- 如果 additional_list.key 是 intel:source:ip:geoIP:location ,請使用 grok 擷取經緯度值,並分別對應至 principal.location.region_latitude 和 principal.location.region_longitude 。- 如果 additional_list.key 為 intel:destination:ip:geoIP:location ,請使用 grok 擷取經緯度值,並分別對應至 target.location.region_latitude 和 target.location.region_longitude 。 |
additional_string.key |
與 additional_list.key 類似,這個欄位用於迴圈,可疊代 additional_string 陣列並根據 key 值擷取資料。不會直接對應至 UDM。 |
|
additional_string.value |
additional.fields.value.string_value ,principal.location.country_or_region ,target.location.country_or_region ,src.ip ,src.port ,src.hostname ,network.ip_protocol |
與 additional_string.key 搭配使用,可從 additional_string 陣列擷取值。值對應邏輯取決於對應的 key 。例如:- 如果 additional_string.key 是 intel:source:ip:ip2asn:start_ip 、intel:source:ip:ip2asn:finish_ip 、intel:destination:ip:ip2asn:start_ip 或 intel:destination:ip:ip2asn:finish_ip ,請將值對應至 additional.fields.value.string_value ,並使用對應的鍵。- 如果 additional_string.key 為 intel:source:ip:geoIP:country ,請將值對應至 principal.location.country_or_region 。- 如果 additional_string.key 為 intel:destination:ip:geoIP:country ,請將值對應至 target.location.country_or_region 。- 如果 additional_string.key 為 log:source:ip ,請將值對應至 src.ip 。- 如果 additional_string.key 為 log:source:port ,請將值轉換為整數,然後對應至 src.port 。- 如果 additional_string.key 為 log:source:hostname ,請將值對應至 src.hostname 。- 如果 additional_string.key 為 log:cdh:input:protocol ,請將值轉換為大寫,然後對應至 network.ip_protocol 。 |
app_category |
security_result.category_details |
直接對應。 |
confidence |
security_result.confidence |
根據下列邏輯對應: - 如果 confidence 為 LOW ,則對應至 LOW_CONFIDENCE 。- 如果 confidence 為 MEDIUM ,則對應至 MEDIUM_CONFIDENCE 。- 如果 confidence 為 HIGH ,則對應至 HIGH_CONFIDENCE 。 |
country |
principal.location.name |
直接對應,但僅限 raw.infobloxb1region 空白時。 |
device |
principal.ip 、principal.asset.ip |
直接對應,但僅限 raw.dvc 空白時。 |
dhcp_fingerprint |
security_result.detection_fields.value |
直接對應至鍵 dhcp_fingerprint 。 |
dns_view |
security_result.detection_fields.value |
直接對應至鍵 dns_view 。 |
endpoint_groups |
security_result.detection_fields.value |
直接對應至鍵 endpoint_groups 。 |
event_time |
metadata.event_timestamp.seconds |
系統會將其剖析為 ISO8601 時間戳記,並擷取秒數值。只有在 timestamp 欄位空白時才會使用。 |
feed_name |
principal.resource.name |
「feed_name 」已對應到「principal.resource.name 」。 |
feed_type |
principal.resource.attribute.labels.value |
直接對應至鍵 feed_type 。 |
mac_address |
principal.mac |
轉換為小寫後直接對應。 |
network |
principal.hostname 、principal.asset.hostname |
直接對應,但前提是 raw.dvchost 和 raw.dvc 皆為空值。 |
os_version |
principal.platform_version |
直接對應。 |
policy_action |
security_result.action_details 、security_result.action |
policy_action 直接對應至 security_result.action_details 。security_result.action 是根據下列邏輯衍生而來:- 如果 policy_action 是 Redirect 或 Log ,則對應至 ALLOW 。- 如果 policy_action 為 BLOCK ,則對應至 BLOCK 。 |
policy_name |
security_result.detection_fields.value |
直接對應至鍵 policy_name 。 |
qname |
network.dns.questions.name |
直接對應。 |
qtype |
network.dns.questions.type |
根據下列邏輯對應: - 如果 qtype 為 A ,則對應至 1 (轉換為不帶正負號的整數)。- 如果 qtype 為 PTR ,則對應至 12 (轉換為不帶正負號的整數)。 |
raw.act |
security_result.action_details |
直接對應。 |
raw.app |
network.application_protocol |
轉換為大寫後直接對應。 |
raw.deviceeventclassid |
metadata.product_event_type |
與 raw.name 串連 (以 - 分隔),並對應至 metadata.product_event_type 。 |
raw.devicevendor |
metadata.vendor_name |
直接對應。 |
raw.deviceproduct |
metadata.product_name |
直接對應。 |
raw.deviceversion |
metadata.product_version |
直接對應。 |
raw.deviceseverity |
security_result.severity_details 、security_result.severity |
raw.deviceseverity 直接對應至 security_result.severity_details 。security_result.severity 是根據下列邏輯衍生而來:- 如果 raw.deviceseverity 位於 [0 、1 、2 、3 ],則對應至 LOW 。- If raw.deviceseverity is in [4 , 5 , 6 ], map to MEDIUM .- If raw.deviceseverity is in [7 , 8 ], map to HIGH .- If raw.deviceseverity is in [9 , 10 ], map to CRITICAL . |
raw.dvc |
principal.ip 、principal.asset.ip |
直接對應。 |
raw.dvchost |
principal.hostname 、principal.asset.hostname |
直接對應,但前提是不等於 raw.dvc 。 |
raw.infobloxb1connectiontype |
additional.fields.value.string_value |
直接對應至鍵 infobloxb1connectiontype 。 |
raw.infobloxb1ophname |
observer.hostname 、observer.asset.hostname |
直接對應。 |
raw.infobloxb1ophipaddress |
observer.ip |
直接對應。 |
raw.infobloxb1policyname |
security_result.detection_fields.value |
直接對應至鍵 infobloxb1policyname 。 |
raw.infobloxdnsqclass |
dns_question.class 、dns_answer.class |
根據 dns_query_class_mapping.include 檔案中定義的查閱表,衍生 dns_question.class 和 dns_answer.class 。 |
raw.infobloxdnsqtype |
dns_question.type 、dns_answer.type |
根據 dns_record_type.include 檔案中定義的查閱表,衍生 dns_question.type 和 dns_answer.type 。 |
raw.infobloxdnsrcode |
network.dns.response_code |
用於根據 dns_response_code.include 檔案中定義的查閱表衍生 network.dns.response_code 。 |
raw.infobloxpolicyid |
security_result.detection_fields.value |
直接對應至鍵 infobloxpolicyid 。 |
raw.msg |
metadata.description |
移除開頭和結尾的引號後,raw.msg 會直接對應至 metadata.description 。 |
raw.name |
metadata.product_event_type |
與 raw.deviceeventclassid 串連 (以 - 分隔),並對應至 metadata.product_event_type 。 |
rcode |
security_result.detection_fields.value 、network.dns.response_code |
rcode 會直接對應至 security_result.detection_fields.value ,並使用 rcode 做為鍵。如果 rcode 為 NXDOMAIN ,則 network.dns.response_code 會設為 3 (轉換為不帶正負號的整數)。 |
rdata |
network.dns.answers.data |
直接對應。 |
rip |
target.ip 、target.asset.ip |
直接對應。 |
severity |
security_result.severity |
根據下列邏輯對應: - 如果 severity 為 INFO (不區分大小寫),則對應至 INFORMATIONAL 。- 如果 severity 為 HIGH ,則對應至 HIGH 。 |
tclass |
security_result.detection_fields.value |
直接對應至鍵 tclass 。 |
threat_indicator |
security_result.detection_fields.value |
直接對應至鍵 threat_indicator 。 |
timestamp |
metadata.event_timestamp.seconds |
系統會將這個值剖析為 ISO8601 時間戳記,並擷取秒數值。 |
user |
principal.user.user_display_name |
直接對應。 |
user_groups |
security_result.detection_fields.value |
直接對應至鍵 user_groups 。 |
不適用 | principal.resource.resource_subtype |
如果 feed_name 不為空白,請設為 Feed 。 |
不適用 | metadata.log_type |
設為 BLOXONE 。 |
不適用 | additional.fields.key |
根據對應的 raw 欄位,設為 infobloxancount 、infobloxarcount 、infobloxb1connectiontype 、infobloxnscount 、intel:destination:ip:ip2asn:finish_ip 、intel:destination:ip:ip2asn:start_ip 、intel:source:ip:ip2asn:finish_ip 或 intel:source:ip:ip2asn:start_ip 。 |
不適用 | metadata.event_type |
如果 has_principal 是 true ,則設為 STATUS_UPDATE ,否則設為 GENERIC_EVENT 。 |
不適用 | network.dns.questions.type |
設為 1 (適用於 A 記錄) 和 12 (適用於 PTR 記錄),並轉換為不帶正負號的整數。 |
不適用 | network.dns.answers.name 、network.dns.answers.type 、network.dns.answers.class |
透過剖析 DNS 回應字串,從 raw.msg 擷取。 |
不適用 | intermediary.hostname 、intermediary.ip 、intermediary.asset.ip |
透過剖析 DNS 回應字串,從 raw.msg 擷取。 |
注意:這個表格只包含對應至 UDM 的欄位。剖析器可能會在內部使用原始記錄中的某些欄位,但不會直接反映在最終的 UDM 輸出內容中。
還有其他問題嗎?向社群成員和 Google SecOps 專業人員尋求答案。