收集 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」。
- 按一下「產生密鑰」,產生驗證這個動態消息的密鑰。
- 複製並儲存密鑰。您無法再次查看這個密鑰。如有需要,您可以重新產生新的密鑰,但這項操作會使先前的密鑰失效。
- 在「詳細資料」分頁中,從「端點資訊」欄位複製動態消息端點網址。您需要在用戶端應用程式中指定這個端點網址。
- 按一下 [完成]。
從內容中心設定動態饋給
為下列欄位指定值:
- 分割分隔符號:用於分隔記錄行的分隔符號,例如
\n
。
進階選項
- 動態饋給名稱:系統預先填入的值,用於識別動態饋給。
- 來源類型:將記錄收集到 Google SecOps 的方法。
- 資產命名空間:與動態饋給相關聯的命名空間。
擷取標籤:套用至這個動態饋給所有事件的標籤。
按一下「產生密鑰」,產生驗證這個動態消息的密鑰。
複製並儲存密鑰。您無法再次查看這個密鑰。如有需要,您可以重新產生新的密鑰,但這項操作會使先前的密鑰失效。
在「詳細資料」分頁中,從「端點資訊」欄位複製動態消息端點網址。您需要在用戶端應用程式中指定這個端點網址。
為 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 陣列。 |
還有其他問題嗎?向社群成員和 Google SecOps 專業人員尋求答案。