收集 ManageEngine Exchange Reporter Plus 記錄

支援的服務:

本文說明如何設定 ManageEngine Exchange Reporter Plus,透過 Webhook 將記錄檔推送至 Google Security Operations。

ManageEngine Exchange Reporter Plus 是網頁式報表、稽核和監控解決方案,適用於 Microsoft Exchange Server 和 Exchange Online 環境。這項工具可針對混合式 Exchange 部署作業中的信箱大小、電子郵件流量、公用資料夾、Exchange ActiveSync 記錄,以及管理員活動和設定變更的稽核記錄,提供完整報表。

事前準備

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

  • Google SecOps 執行個體
  • 已安裝並設定 ManageEngine Exchange Reporter Plus,用於監控 Exchange Server 或 Exchange Online
  • ManageEngine Exchange Reporter Plus 網路控制台的管理員權限
  • 可存取 Google Cloud 控制台 (用於建立 API 金鑰)

在 Google SecOps 中建立 Webhook 動態饋給

建立動態饋給

  1. 依序前往 「SIEM 設定」 > 「動態饋給」。
  2. 按一下「新增動態消息」。
  3. 在下一頁,點按「設定單一動態饋給」。
  4. 在「Feed name」(動態饋給名稱) 欄位中,輸入動態饋給名稱 (例如 ManageEngine Exchange Reporter Plus Logs)。
  5. 選取「Webhook」做為「來源類型」。
  6. 選取「ManageEngine Exchange Reporter Plus」做為「記錄類型」。
  7. 點選「下一步」。
  8. 指定下列輸入參數的值:
    • 分割分隔符號 (選用):輸入 \n 即可分割多行事件。
    • 資產命名空間:資產命名空間
    • 擷取標籤:要套用至這個動態饋給事件的標籤
  9. 點選「下一步」。
  10. 在「Finalize」(完成) 畫面中檢查新的新聞動態消息設定,然後按一下「Submit」(提交)。

產生並儲存密鑰

建立動態饋給後,您必須產生用於驗證的密鑰:

  1. 在動態饋給詳細資料頁面,按一下「產生 Secret Key」。
  2. 對話方塊會顯示密鑰。
  3. 複製並妥善儲存密鑰。

重要事項:密鑰只會顯示一次,之後便無法擷取,如果遺失,就必須產生新的密鑰。

取得動態饋給端點網址

  1. 前往動態消息的「詳細資料」分頁。
  2. 在「Endpoint Information」部分,複製「Feed endpoint URL」。
  3. 網址格式為:

    https://{region}-chronicle.googleapis.com/v1/{parent}/logs:import
    

    其中 {region} 是 Google SecOps 執行個體的區域 (例如 us、europe 或 asia-southeast1),而 {parent} 是 projects/<PROJECT_ID>/locations/<LOCATION>/instances/<INSTANCE_ID>/logTypes/<LOG_TYPE> 格式的資源路徑。

  4. 請儲存這個網址,以便進行後續步驟。

  5. 按一下「完成」。

建立 Google Cloud API 金鑰

Chronicle 需要 API 金鑰才能進行驗證。在 Google Cloud 控制台中建立受限制的 API 金鑰。

建立 API 金鑰

  1. 前往 Google Cloud 控制台憑證頁面。
  2. 選取專案 (與 Chronicle 執行個體相關聯的專案)。
  3. 依序點選「建立憑證」 > 「API 金鑰」。
  4. 系統會建立 API 金鑰,並在對話方塊中顯示。
  5. 按一下「編輯 API 金鑰」,即可限制金鑰。

限制 API 金鑰

  1. 在「API 金鑰」設定頁面中:
    • 名稱:輸入描述性名稱 (例如 Chronicle Webhook API Key)
  2. 在「API 限制」下方:
    1. 選取「Restrict key」(限制金鑰)。
    2. 在「選取 API」下拉式選單中,搜尋並選取「Google SecOps API」 (或「Chronicle API」)。
  3. 按一下 [儲存]。
  4. 從頁面頂端的「API 金鑰」欄位複製 API 金鑰值。
  5. 安全儲存 API 金鑰。

設定 ManageEngine Exchange Reporter Plus Webhook

建構 Webhook 網址

  • 合併 Chronicle 端點網址、API 金鑰和密鑰:

    <ENDPOINT_URL>?key=<API_KEY>&secret=<SECRET_KEY>
    
  • 範例:

    https://{region}-chronicle.googleapis.com/v1/{parent}/logs:import?key=AIzaSyD...&secret=abcd1234...
    

在 Exchange Reporter Plus 中設定記錄轉送

  1. 以管理員身分登入 ManageEngine Exchange Reporter Plus 網頁控制台。
  2. 依序前往「設定」>「管理」>「一般設定」>「記錄轉送器」。
  3. 勾選「啟用記錄轉送」核取方塊。
  4. 按一下「Webhook」分頁標籤。
  5. 提供下列設定詳細資料:
    • HTTP 方法:選取「POST」。
    • HTTP 網址:貼上在上一步建構的完整 Webhook 網址 (Chronicle 端點網址,並附加 API 金鑰和密鑰做為查詢參數)。
  6. 在「進階設定」部分:
    1. 按一下「HTTP Request Headers」。
    2. 新增下列標頭:
      • 金鑰:Content-Type
      • 值:application/json
  7. 按一下 [儲存]。

驗證記錄轉送

  1. 儲存設定後,Exchange Reporter Plus 會開始透過 Webhook 端點,將稽核記錄轉送至 Google SecOps。
  2. 登入 Google SecOps 控制台,確認記錄顯示在「搜尋」介面中,且含有擷取標籤 MANAGE_ENGINE_REPORTER_PLUS。

防火牆設定

請確認已設定下列防火牆規則。

從 Exchange Reporter Plus 伺服器外寄:

  • 通訊協定:HTTPS (TCP 443)
  • 目的地:Chronicle 區域端點 (<region>-chronicle.googleapis.com)
  • 用途:透過 Webhook 將記錄傳送至 Google SecOps

驗證方式參考資料

Chronicle Webhook 動態饋給支援多種驗證方式。選擇供應商支援的方法。

如果供應商支援自訂 HTTP 標頭,請使用這個方法,以提升安全性。

  • 要求格式:

    POST <ENDPOINT_URL> HTTP/1.1
    Content-Type: application/json
    x-goog-chronicle-auth: <API_KEY>
    x-chronicle-auth: <SECRET_KEY>
    
    {
            "event": "data",
            "timestamp": "2025-01-15T10:30:00Z"
    }
    

優點:

  • 網址中不會顯示 API 金鑰和密鑰
  • 更安全 (不會在網路伺服器存取記錄中記錄標頭)
  • 供應商支援時的首選方法

方法 2:查詢參數

如果供應商不支援自訂標頭,請在網址中附加憑證。

  • 網址格式:

    <ENDPOINT_URL>?key=<API_KEY>&secret=<SECRET_KEY>
    
  • 範例:

    https://{region}-chronicle.googleapis.com/v1/{parent}/logs:import?key=AIzaSyD...&secret=abcd1234...
    
  • 要求格式:

    POST <ENDPOINT_URL>?key=<API_KEY>&secret=<SECRET_KEY> HTTP/1.1
    Content-Type: application/json
    
    {
            "event": "data",
            "timestamp": "2025-01-15T10:30:00Z"
    }
    

缺點: - 憑證會顯示在網址中 - 可能會記錄在網路伺服器存取記錄中 - 安全性不如標頭

方法 3:混合 (網址 + 標頭)

部分設定會在網址中使用 API 金鑰,並在標頭中使用密鑰。

  • 要求格式:

    POST <ENDPOINT_URL>?key=<API_KEY> HTTP/1.1
    Content-Type: application/json
    x-chronicle-auth: <SECRET_KEY>
    
    {
            "event": "data",
            "timestamp": "2025-01-15T10:30:00Z"
    }
    

驗證標頭名稱

Chronicle 接受下列驗證標頭名稱:

API 金鑰:

  • x-goog-chronicle-auth (建議)
  • X-Goog-Chronicle-Auth (不區分大小寫)

密鑰:

  • x-chronicle-auth (建議)
  • X-Chronicle-Auth (不區分大小寫)

Webhook 限制和最佳做法

要求限制

限制 值
要求大小上限 4 MB
每秒查詢次數 (QPS) 上限 15,000
要求逾時 30 秒
重試行為 自動,採用指數輪詢

UDM 對應表

記錄欄位 UDM 對應 邏輯
msg.OrganizationId additional.fields 合併標籤,鍵為「OrganizationId」,值來自 msg.OrganizationId;鍵為「MailboxGuid」,值來自 msg.MailboxGuid;鍵為「RecordType」,值來自 msg.RecordType
msg.MailboxGuid additional.fields
msg.RecordType additional.fields
msg.CreationTime metadata.event_type 如果 event_type 不為空白,則設為該值;如果 msg.Operation == "Update",則設為 "USER_UNCATEGORIZED";如果 msg.Operation == "Create" 且 msg.MailboxOwnerUPN 不為空白,則設為 "USER_CREATION";如果 msg.Operation == "Create",則設為 "USER_UNCATEGORIZED";如果 msg.UserId 不為空白,則設為 "USER_UNCATEGORIZED";如果 msg.ClientIP 不為空白,則設為 "STATUS_UPDATE";否則設為 "GENERIC_EVENT"
msg.Operation metadata.product_event_type 直接複製值
msg.Id metadata.product_log_id 直接複製值
msg.ClientVersion metadata.product_version 如果 msg.ClientVersion 不是空白,則為該值,否則為轉換為字串的 msg.Version
msg.Version metadata.product_version
AffectedItems.0.InternetMessageId network.email.mail_id Gsub <
AffectedItems network.email.subject 剖析為 JSON,擷取項目。主旨,如果找到則合併
msg.ClientInfoString network.http.user_agent 如果 msg.ClientInfoString 不為空,則為該值,否則為 msg.Client
msg.Client network.http.user_agent
msg.ClientProcessName principal.application 直接複製值
msg.OriginatingServer principal.hostname 使用 grok 模式擷取 (如果成功),否則直接複製值
clientIP principal.ip 使用 grok 從 msg.ClientIP 擷取
clientPort principal.port 使用 grok 從 msg.ClientIP 擷取,並轉換為整數
msg.UserKey principal.user.attribute.labels 將標籤鍵設為「UserKey」,值設為 msg.UserKey,已合併
msg.UserType principal.user.attribute.roles 將 roles.name 設為 msg.UserType,已合併
msg.UserId principal.user.email_addresses 如果 msg.UserId 與電子郵件規則運算式相符,則會合併
msg.UserId principal.user.userid 直接複製值
msg.MailboxOwnerSid principal.user.windows_sid 如果 msg.MailboxOwnerSid 不為空白,則為該值,否則為 msg.LogonUserSid
msg.LogonUserSid principal.user.windows_sid
security_result security_result 從 security_result 雜湊合併
security_result_action security_result.action 從 security_result_action 合併
msg.ResultStatus security_result.action_details 直接複製值
msg.RecordType security_result.detection_fields 轉換為字串,將鍵設為「RecordType」,值設為 msg.RecordType,然後合併
msg.OrganizationName target.administrative_domain 直接複製值
msg.DestFolder target.file.full_path 使用 grok 擷取 fileId 和 filePath,並將反斜線替換為 gsubs,然後串連為 fileId/filePath
主機 target.hostname 直接複製值
msg.Folder target.process.parent_process.file.full_path 使用 grok 擷取 parentFileId 和 parentFilePath,將反斜線取代為 gsubs,並串連為 parentFileId/parentFilePath
msg.MailboxOwnerUPN target.user.email_addresses 如果與電子郵件規則運算式相符,則會合併
msg.MailboxOwnerUPN target.user.user_display_name 如果包含空格,請設定
msg.MailboxOwnerUPN target.user.userid 如果不是電子郵件地址且不含空格,則設定
metadata.product_name metadata.product_name 設為「Manage Engine」
metadata.vendor_name metadata.vendor_name 設為「Manage Engine Reporter Plus」

變更記錄

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

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