收集 OpenCanary 記錄
總覽
這個剖析器會從 OpenCanary SYSLOG 和 JSON 記錄檔中擷取欄位,並將這些欄位轉換為 UDM 格式,然後使用 metadata.event_type
和 security_result.severity
等衍生欄位豐富資料。它會處理各種記錄格式、執行 IP 位址驗證,並將欄位對應至適當的 UDM 物件,例如 principal
、target
和 network
。
事前準備
請確認您已完成下列事前準備:
- Google SecOps 執行個體。
- 可存取 OpenCanary 的特殊權限。
設定動態饋給
在 Google SecOps 平台中,有兩個不同的入口可用來設定動態消息:
- SIEM 設定 > 動態饋給
- 內容中心 > 內容包
依序前往「SIEM 設定」>「動態饋給」,設定動態饋給
如要設定動態饋給,請按照下列步驟操作:
- 依序前往「SIEM 設定」>「動態」。
- 按一下「新增動態消息」。
- 在下一頁中,按一下「設定單一動態饋給」。
- 在「動態饋給名稱」欄位中輸入動態饋給的名稱,例如「OpenCanary Logs」。
- 將「來源類型」設為「Webhook」。
- 將「記錄類型」設為「OpenCanary」。
- 點選「下一步」。
- 選用:指定下列輸入參數的值:
- 分隔符號:用於分隔記錄行 (例如
\n
) 的分隔符號。
- 分隔符號:用於分隔記錄行 (例如
- 點選「下一步」。
- 在「Finalize」畫面中查看動態饋給設定,然後按一下「Submit」。
- 按一下「產生密鑰」,即可產生密鑰來驗證這項動態饋給。
- 複製並儲存密鑰。您無法再次查看這個密鑰。如有需要,您可以重新產生新的密鑰,但這項操作會使先前的密鑰失效。
- 在「Details」分頁中,從「Endpoint Information」欄位複製動態饋給端點網址。您必須在用戶端應用程式中指定這個端點網址。
- 按一下 [完成]。
透過內容中心設定動態饋給
指定下列欄位的值:
- 分隔符號:用於分隔記錄行 (例如
\n
) 的分隔符號。
進階選項
- 動態饋給名稱:系統會預先填入用於識別動態饋給的值。
- 來源類型:用於收集記錄並匯入 Google SecOps 的方法。
- 資產命名空間:與動態饋給相關聯的命名空間。
攝入標籤:套用至這個動態饋給中所有事件的標籤。
按一下「產生密鑰」,即可產生密鑰來驗證這項動態饋給。
複製並儲存密鑰。您無法再次查看這個密鑰。如有需要,您可以重新產生新的密鑰,但這項操作會使先前的密鑰失效。
在「Details」分頁中,從「Endpoint Information」欄位複製動態饋給端點網址。您必須在用戶端應用程式中指定這個端點網址。
為 webhook 動態饋給建立 API 金鑰
依序前往 Google Cloud 主控台 >「憑證」。
按一下 [Create credentials] (建立憑證),然後選取 [API key] (API 金鑰)。
將 API 金鑰的存取權限制在 Google Security Operations API。
指定端點網址
- 在用戶端應用程式中,指定 webhook 動態饋給中提供的 HTTPS 端點網址。
請按照下列格式,將 API 金鑰和密鑰指定為自訂標頭的一部分,啟用驗證機制:
X-goog-api-key = API_KEY X-Webhook-Access-Key = SECRET
建議:請以標頭的形式指定 API 金鑰,不要在網址中指定。
如果 webhook 用戶端不支援自訂標頭,您可以使用查詢參數指定 API 金鑰和密鑰,格式如下:
ENDPOINT_URL?key=API_KEY&secret=SECRET
更改下列內容:
ENDPOINT_URL
:動態饋給端點網址。API_KEY
:用於向 Google Security Operations 驗證的 API 金鑰。SECRET
:您用來驗證動態饋給而產生的密鑰。
為 Google SecOps 設定 OpenCanary Webhook
找出 OpenCanary 設定檔
config.json
。使用文字編輯器開啟
config.json
檔案。在設定檔中找出「alerters」部分。
如果
webhook
警示器已存在,請加以修改。否則,請為webhook
警示器新增項目。請使用下列設定 (將 ENDPOINT_URL、SECRET 和 API_KEY 替換為您的值):
"handlers": {
"Webhook": {
"class": "opencanary.logger.WebhookHandler",
"url": "<ENDPOINT_URL>",
"method": "POST",
"data": {"message": "%(message)s"},
"status_code": 200,
"headers": {
"X-Webhook-Access-Key": "<SECRET>",
"X-goog-api-key": "<API_KEY>"
}
}
}
- 儲存
config.json
檔案。 - 重新啟動 OpenCanary 服務,即可套用變更。(例如
sudo systemctl restart opencanary
)。
UDM 對應表
記錄欄位 | UDM 對應 | 邏輯 |
---|---|---|
dst_host |
target.asset.ip |
原始記錄的 dst_host 欄位會對應至 UDM。也對應至 target.ip 。 |
dst_host |
target.ip |
原始記錄的 dst_host 欄位會對應至 UDM。也對應至 target.asset.ip 。 |
dst_port |
target.port |
原始記錄的 dst_port 欄位會轉換為字串,然後轉換為整數,並對應至 UDM。 |
local_time |
metadata.event_timestamp |
原始記錄的 local_time 欄位會用來填入 UDM 中的 metadata.event_timestamp 。如果沒有 local_time 欄位,剖析器會使用批次物件中的 create_time 。 |
local_time_adjusted |
security_result.detection_fields |
原始記錄的 local_time_adjusted 欄位會以鍵/值組合形式新增至 UDM 中的 security_result.detection_fields 陣列。 |
logdata.COMMUNITY_STRING |
security_result.detection_fields |
原始記錄的 logdata.COMMUNITY_STRING 欄位會以鍵/值組合形式新增至 UDM 中的 security_result.detection_fields 陣列。 |
logdata.DOMAIN |
principal.administrative_domain |
原始記錄的 logdata.DOMAIN 欄位會對應至 UDM。 |
logdata.FILENAME |
target.file.full_path |
原始記錄的 logdata.FILENAME 欄位會對應至 UDM。 |
logdata.HOSTNAME |
principal.asset.hostname |
如果 logdata.HOSTNAME 欄位不是 IP 位址,系統會將其對應至 UDM。也對應至 principal.hostname 。 |
logdata.HOSTNAME |
principal.asset.ip |
如果 logdata.HOSTNAME 欄位是 IP 位址,則會對應至 UDM。也對應至 principal.ip 。 |
logdata.HOSTNAME |
principal.hostname |
如果 logdata.HOSTNAME 欄位不是 IP 位址,系統會將其對應至 UDM。也對應至 principal.asset.hostname 。 |
logdata.HOSTNAME |
principal.ip |
如果 logdata.HOSTNAME 欄位是 IP 位址,則會對應至 UDM。也對應至 principal.asset.ip 。 |
logdata.LOCALNAME |
principal.asset.hostname |
原始記錄的 logdata.LOCALNAME 欄位會對應至 UDM。也對應至 principal.hostname 。 |
logdata.LOCALNAME |
principal.hostname |
原始記錄的 logdata.LOCALNAME 欄位會對應至 UDM。也對應至 principal.asset.hostname 。 |
logdata.LOCALVERSION |
principal.platform_version |
原始記錄的 logdata.LOCALVERSION 欄位會對應至 UDM。 |
logdata.PASSWORD |
extensions.auth.mechanism |
logdata.PASSWORD 欄位出現時,剖析器就會在 UDM 中將 extensions.auth.mechanism 設為 USERNAME_PASSWORD 。 |
logdata.PATH |
network.http.referral_url |
原始記錄的 logdata.PATH 欄位會對應至 UDM。 |
logdata.REMOTENAME |
target.asset.hostname |
原始記錄的 logdata.REMOTENAME 欄位會對應至 UDM。也對應至 target.hostname 。 |
logdata.REMOTENAME |
target.hostname |
原始記錄的 logdata.REMOTENAME 欄位會對應至 UDM。也對應至 target.asset.hostname 。 |
logdata.REMOTEVERSION |
target.platform_version |
原始記錄的 logdata.REMOTEVERSION 欄位會對應至 UDM。 |
logdata.SMBVER |
network.application_protocol |
logdata.SMBVER 欄位出現時,剖析器就會在 UDM 中將 network.application_protocol 設為 SMB 。 |
logdata.USERAGENT |
network.http.parsed_user_agent |
原始記錄的 logdata.USERAGENT 欄位會轉換為剖析的使用者代理程式,並對應至 UDM。 |
logdata.USERAGENT |
network.http.user_agent |
原始記錄的 logdata.USERAGENT 欄位會對應至 UDM。 |
logdata.USERNAME |
target.user.userid |
原始記錄的 logdata.USERNAME 欄位會對應至 UDM。 |
loglevel |
security_result.severity |
原始記錄的 loglevel 欄位會決定 UDM 中的 security_result.severity 。WARNING 會對應至 HIGH ,INFO /INFORMATION 會對應至 LOW 。 |
logtype |
security_result.detection_fields |
原始記錄的 logtype 欄位會以鍵/值組合形式新增至 UDM 中的 security_result.detection_fields 陣列。 |
node_id |
principal.asset.asset_id |
原始記錄的 node_id 欄位前面會加上「id:」,並對應至 UDM。 |
src_host |
principal.asset.ip |
原始記錄的 src_host 欄位會對應至 UDM。也對應至 principal.ip 。 |
src_host |
principal.ip |
原始記錄的 src_host 欄位會對應至 UDM。也對應至 principal.asset.ip 。 |
src_port |
principal.port |
原始記錄的 src_port 欄位會轉換為整數,並對應至 UDM。 |
utc_time |
security_result.detection_fields |
原始記錄的 utc_time 欄位會以鍵/值組合形式新增至 UDM 中的 security_result.detection_fields 陣列。 |
異動
2024-03-11
- 移除 JSON 記錄檔結尾的無效字元,以便剖析未剖析的記錄檔。
- 已對齊「principal.ip」和「principal.asset.ip」對應項目。
- 對齊「target.ip」和「target.asset.ip」對應項目。
2024-02-08
- 新建的剖析器。
還有其他問題嗎?向社群成員和 Google SecOps 專家尋求解答。