收集 Microsoft IIS 記錄
本文說明如何使用 Bindplane 收集 Microsoft Internet Information Services (IIS) 記錄,並傳送至 Google Security Operations。剖析器會先嘗試清除及正規化輸入資料,方法是移除不必要的字元,並將欄位名稱標準化。接著,系統會使用一系列 grok 模式,從各種 Microsoft IIS 記錄格式中擷取相關欄位,並將這些欄位對應至統合式資料模型 (UDM)。
事前準備
請確認您已完成下列事前準備事項:
- Google SecOps 執行個體
- 已安裝 IIS 的 Windows Server 2016 以上版本
- IIS 伺服器的管理員存取權
- 如果透過 Proxy 執行,請確保防火牆通訊埠已根據 Bindplane 代理程式需求開啟
取得 Google SecOps 擷取驗證檔案
- 登入 Google SecOps 控制台。
- 依序前往「SIEM 設定」>「收集代理程式」。
- 下載擷取驗證檔案。將檔案安全地儲存在要安裝 Bindplane 的系統上 (例如
C:\SecOps\ingestion-auth.json)。
取得 Google SecOps 客戶 ID
- 登入 Google SecOps 控制台。
- 依序前往「SIEM 設定」>「設定檔」。
- 複製並儲存「機構詳細資料」專區中的客戶 ID。
設定 IIS W3C 擴充記錄
這是最重要的步驟。您必須在 IIS 管理員中啟用正確的 W3C 欄位,Google SecOps 才能正確剖析記錄檔,偵測功能也能穩定運作。
開啟 IIS 管理工具
- 按一下「啟動」。
- 輸入
inetmgr,然後按下 Enter 鍵。 - 「Internet Information Services (IIS) Manager」(網際網路資訊服務 (IIS) 管理員) 視窗隨即開啟。
替代方法:
- 按下 Windows 鍵 + R 鍵。
- 輸入
inetmgr,然後按下 Enter 鍵。
前往記錄設定
- 在「Connections」(連線) 窗格 (左側) 中,展開伺服器名稱。
- 如要設定全伺服器記錄 (建議):
- 按一下根層級的伺服器名稱。
- 如要設定特定網站的記錄功能,請按照下列步驟操作:
- 展開「網站」> 點選特定網站 (例如「Default Web Site」)。
- 在「功能檢視畫面」(中間窗格) 中,按兩下「記錄」。
選取 W3C 擴充記錄格式
- 在「記錄」頁面的「記錄檔」部分中:
- 在「格式」下拉式選單中,選取「W3C」。
- 按一下「選取欄位」按鈕。
設定 W3C 記錄欄位
重要事項:Google SecOps IIS 剖析器僅支援 8 種欄位設定。您必須從下列其中一個模式啟用所有欄位。啟用不同欄位或混用模式會導致剖析失敗。
在「W3C Logging Fields」(W3C 記錄欄位) 對話方塊中,根據下列其中一個模式選取欄位:
模式 1:完整網站背景資訊,包括查詢字串和位元組
請務必依序啟用下列欄位:
- Date (日期)
- 時間 (時間)
- 服務名稱 (s-sitename)
- 伺服器 IP 位址 (s-ip)
- 方法 (cs-method)
- URI 詞幹 (cs-uri-stem)
- URI 查詢 (cs-uri-query)
- 伺服器通訊埠 (s-port)
- 使用者名稱 (cs-username)
- 用戶端 IP 位址 (c-ip)
- 使用者代理程式 (cs(User-Agent))
- 參照網址 (cs(Referer))
- 通訊協定狀態 (sc-status)
- 傳送的位元組 (sc-bytes)
- 接收的位元組 (cs-bytes)
在下列情況下使用這個模式:您的下游格式包含網站環境 + 查詢字串,且您需要傳送/接收的位元組,而管道預期會有「username」和「referer」資料欄 (即使值為 -)。
模式 2:基本模式,包含子狀態、Win32 狀態和效能 (無參照網址)
請務必依序啟用下列欄位:
- Date (日期)
- 時間 (時間)
- 伺服器 IP 位址 (s-ip)
- 方法 (cs-method)
- URI 詞幹 (cs-uri-stem)
- URI 查詢 (cs-uri-query)
- 伺服器通訊埠 (s-port)
- 使用者名稱 (cs-username)
- 用戶端 IP 位址 (c-ip)
- 使用者代理程式 (cs(User-Agent))
- 通訊協定狀態 (sc-status)
- 通訊協定子狀態 (sc-substatus)
- Win32 狀態 (sc-win32-status)
- 作答時間 (time-taken)
在下列情況下使用這個模式:您的管道不包含參照網址,但您需要詳細的錯誤代碼和延遲時間 (time-taken)。
模式 3:基本,包含子狀態、Win32 狀態和效能 (含參照網址)
請務必依序啟用下列欄位:
- Date (日期)
- 時間 (時間)
- 伺服器 IP 位址 (s-ip)
- 方法 (cs-method)
- URI 詞幹 (cs-uri-stem)
- URI 查詢 (cs-uri-query)
- 伺服器通訊埠 (s-port)
- 使用者名稱 (cs-username)
- 用戶端 IP 位址 (c-ip)
- 使用者代理程式 (cs(User-Agent))
- 參照網址 (cs(Referer))
- 通訊協定狀態 (sc-status)
- 通訊協定子狀態 (sc-substatus)
- Win32 狀態 (sc-win32-status)
- 作答時間 (time-taken)
使用這個模式的時機:與模式 2 相同,但管道包含「參照網址」做為專屬欄。
模式 4:可辨識 TLS/通訊協定版本,並提供參照網址和效能資訊
請務必依序啟用下列欄位:
- Date (日期)
- 時間 (時間)
- 伺服器 IP 位址 (s-ip)
- 方法 (cs-method)
- URI 詞幹 (cs-uri-stem)
- URI 查詢 (cs-uri-query)
- 用戶端通訊埠 (c-port)
- 使用者名稱 (cs-username)
- 用戶端 IP 位址 (c-ip)
- 通訊協定版本 (cs-version)
- 使用者代理程式 (cs(User-Agent))
- 參照網址 (cs(Referer))
- 通訊協定狀態 (sc-status)
- 通訊協定子狀態 (sc-substatus)
- Win32 狀態 (sc-win32-status)
- 作答時間 (time-taken)
使用這個模式的時機:下游格式會明確記錄 cs-version (例如 HTTP/1.1),並包含時間資訊,且您也有專屬的用戶端通訊埠資料欄。
模式 5:TLS/通訊協定版本感知,附帶參照網址 (無效能)
請務必依序啟用下列欄位:
- Date (日期)
- 時間 (時間)
- 伺服器 IP 位址 (s-ip)
- 方法 (cs-method)
- URI 詞幹 (cs-uri-stem)
- URI 查詢 (cs-uri-query)
- 用戶端通訊埠 (c-port)
- 使用者名稱 (cs-username)
- 用戶端 IP 位址 (c-ip)
- 通訊協定版本 (cs-version)
- 使用者代理程式 (cs(User-Agent))
- 參照網址 (cs(Referer))
- 通訊協定狀態 (sc-status)
- 通訊協定子狀態 (sc-substatus)
- Win32 狀態 (sc-win32-status)
使用這個模式的情況:與模式 4 相同,但管道不包含 time-taken。
模式 6:含 Cookie 和參照網址 (無效能,無位元組)
請務必依序啟用下列欄位:
- Date (日期)
- 時間 (時間)
- 伺服器 IP 位址 (s-ip)
- 方法 (cs-method)
- URI 詞幹 (cs-uri-stem)
- URI 查詢 (cs-uri-query)
- 用戶端通訊埠 (c-port)
- 使用者名稱 (cs-username)
- 用戶端 IP 位址 (c-ip)
- 使用者代理程式 (cs(User-Agent))
- Cookie (cs(Cookie))
- 參照網址 (cs(Referer))
- 通訊協定狀態 (sc-status)
- 通訊協定子狀態 (sc-substatus)
- Win32 狀態 (sc-win32-status)
使用這個模式的時機:您的下游格式預期 Cookie 和參照網址都會以專屬資料欄的形式提供。
模式 7:最少 (含參照網址,不含 Cookie、效能和位元組)
請務必依序啟用下列欄位:
- Date (日期)
- 時間 (時間)
- 伺服器 IP 位址 (s-ip)
- 方法 (cs-method)
- URI 詞幹 (cs-uri-stem)
- URI 查詢 (cs-uri-query)
- 用戶端通訊埠 (c-port)
- 使用者名稱 (cs-username)
- 用戶端 IP 位址 (c-ip)
- 使用者代理程式 (cs(User-Agent))
- 參照網址 (cs(Referer))
- 通訊協定狀態 (sc-status)
- 通訊協定子狀態 (sc-substatus)
- Win32 狀態 (sc-win32-status)
適用情況:下游格式包含參照網址,但不包含 Cookie/時間/位元組。
模式 8:沒有參照網址 (沒有 Cookie、沒有效能、沒有位元組)
請務必依序啟用下列欄位:
- Date (日期)
- 時間 (時間)
- 伺服器 IP 位址 (s-ip)
- 方法 (cs-method)
- URI 詞幹 (cs-uri-stem)
- URI 查詢 (cs-uri-query)
- 用戶端通訊埠 (c-port)
- 使用者名稱 (cs-username)
- 用戶端 IP 位址 (c-ip)
- 使用者代理程式 (cs(User-Agent))
- 通訊協定狀態 (sc-status)
- 通訊協定子狀態 (sc-substatus)
- Win32 狀態 (sc-win32-status)
在下列情況下使用這個模式:您的下游格式不包含參照網址,且您只需要核心要求內容和狀態碼。
請勿啟用多個模式的欄位。剖析器會預期出現其中一種確切的設定。
套用設定
- 按一下「確定」關閉「W3C 記錄欄位」對話方塊。
- 確認要寫入記錄的「目錄」路徑。
- 預設:
%SystemDrive%\inetpub\logs\LogFiles
- 預設:
- 在「記錄檔輪替」下方,選取「每日」 (建議用於 Google SecOps 擷取)。
- 在「動作」窗格 (右側) 中,按一下「套用」。
安裝 Bindplane 代理程式
請按照下列操作說明,在 Windows 伺服器上安裝 Bindplane 代理程式。
Windows 安裝
- 以管理員身分開啟「命令提示字元」或「PowerShell」。
執行下列指令:
msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
其他安裝資源
- 如需其他安裝選項,請參閱這份安裝指南。
設定 Bindplane 代理程式,擷取 IIS 記錄並傳送至 Google SecOps
停止 Bindplane 服務
編輯設定檔前,請先停止服務:
Stop-Service "observIQ OpenTelemetry Collector"
編輯設定檔
- 找出
config.yaml檔案。- 預設路徑:
C:\Program Files\observIQ OpenTelemetry Collector\config.yaml
- 預設路徑:
- 以管理員身分使用文字編輯器 (例如記事本、VS Code 或 Notepad++) 開啟檔案。
將所有內容替換為下列設定:
receivers: iis: collection_interval: 60s processors: resourcedetection: detectors: ["system"] system: hostname_sources: ["os"] normalizesums: batch: exporters: chronicle/iis: endpoint: malachiteingestion-pa.googleapis.com creds: 'C:\SecOps\ingestion-auth.json' log_type: 'IIS' override_log_type: false raw_log_field: body customer_id: '<CUSTOMER_ID>' compression: gzip service: pipelines: logs/iis: receivers: - iis processors: - resourcedetection - normalizesums - batch exporters: - chronicle/iis- 請替換下列預留位置:
creds:- 擷取驗證檔案的路徑 (例如C:\SecOps\ingestion-auth.json)。customer_id:- 實際的 Google SecOps 客戶 ID (來自「取得 Google SecOps 客戶 ID」一節)。
- 請替換下列預留位置:
重新啟動 Bindplane 代理程式,以套用變更
儲存
config.yaml檔案後,請重新啟動 Bindplane 服務:Start-Service "observIQ OpenTelemetry Collector"確認服務正在執行:
Get-Service "observIQ OpenTelemetry Collector"
預期輸出內容:
Status Name DisplayName ------ ---- ----------- Running observiq-otel-collector observIQ OpenTelemetry Collector
UDM 對應表
| 記錄欄位 | UDM 對應 | 邏輯 |
|---|---|---|
| @timestamp | metadata.event_timestamp | 原始記錄中記錄的事件時間戳記。 |
| @version | metadata.product_version | IIS 伺服器版本。 |
| AgentDevice | additional.fields.AgentDevice.value.string_value | 產生記錄的裝置。 |
| AgentLogFile | additional.fields.AgentLogFile.value.string_value | 記錄檔的名稱。 |
| ASP.NET_SessionId | network.session_id | 使用者的工作階段 ID。 |
| c-ip | principal.ip | 用戶端的 IP 位址。 |
| 管道 | security_result.about.resource.attribute.labels.Channel.value | 記錄事件的管道。 |
| ChannelID | security_result.about.resource.attribute.labels.ChannelID.value | 系統記錄事件的頻道 ID。 |
| 電腦 | target.hostname | 目標電腦的主機名稱。 |
| cs-bytes | network.received_bytes | 從用戶端接收的位元組數。 |
| cs-host | principal.hostname、principal.asset.hostname | 用戶端的主機名稱。 |
| cs-method | network.http.method | 用戶端使用的 HTTP 方法。 |
| cs-uri-query | target.url | 用戶端要求的網址查詢字串。 |
| cs-uri-stem | target.url | 用戶端要求的網址路徑。 |
| cs-username | principal.user.user_display_name | 用戶端的名稱。 |
| cs-version | network.tls.version_protocol | 用戶端使用的 HTTP 版本。 |
| cs(Cookie) | 用於擷取 Cookie 資訊。 | |
| cs(Referer) | network.http.referral_url | 將用戶端導向目前網頁的網址。 |
| cs(User-Agent) | network.http.user_agent | 用戶端的 User-Agent。 |
| csbyte | network.received_bytes | 從用戶端接收的位元組數。 |
| cshost | principal.hostname、principal.asset.hostname | 用戶端的主機名稱。 |
| csip | principal.ip、principal.asset.ip | 用戶端的 IP 位址。 |
| csmethod | network.http.method | 用戶端使用的 HTTP 方法。 |
| csreferer | network.http.referral_url | 將用戶端導向目前網頁的網址。 |
| csuseragent | network.http.user_agent | 用戶端的 User-Agent。 |
| csusername | principal.user.user_display_name | 用戶端的名稱。 |
| csversion | network.tls.version_protocol | 用戶端使用的 HTTP 版本。 |
| 日期 | 如果原始記錄時間戳記無效,可用於建構事件時間戳記。 | |
| 說明 | security_result.description | 活動說明。 |
| devicename | target.hostname | 目標電腦的主機名稱。 |
| dst_ip | target.ip、target.asset.ip | 目標機器的 IP 位址。 |
| dst_port | target.port | 目標機器的連接埠號碼。 |
| 持續時間 | 要求時間長度 (以毫秒為單位)。 | |
| EventEnqueuedUtcTime | additional.fields.EventEnqueuedUtcTime.value.string_value | 事件加入佇列的時間 (以世界標準時間為準)。 |
| EventID | metadata.product_log_id | 活動的 ID。 |
| EventProcessedUtcTime | additional.fields.EventProcessedUtcTime.value.string_value | 以世界標準時間為準的事件處理時間。 |
| EventTime | metadata.event_timestamp | 事件的時間戳記。 |
| EventType | metadata.product_event_type | 事件類型。 |
| file_path | target.file.full_path | 與事件相關的檔案完整路徑。 |
| FilterId | security_result.about.resource.attribute.labels.FilterId.value | 篩選條件的 ID。 |
| FilterKey | security_result.about.resource.attribute.labels.FilterKey.value | 篩選器的鍵。 |
| FilterName | security_result.about.resource.attribute.labels.FilterName.value | 篩選器名稱。 |
| FilterType | security_result.about.resource.attribute.labels.FilterType.value | 篩選條件類型。 |
| 主機 | target.hostname | 目標電腦的主機名稱。 |
| host.architecture | principal.asset.hardware.cpu_platform | 主機的架構。 |
| host.geo.name | additional.fields.geo_name.value.string_value | 主機的地理位置。 |
| host.hostname | target.hostname、target.asset.hostname | 主機的主機名稱。 |
| host.id | observer.asset_id | 主機的 ID。 |
| host.ip | principal.ip、principal.asset.ip | 主機的 IP 位址。 |
| host.mac | principal.mac | 主機的 MAC 位址。 |
| host.os.build | additional.fields.os_build.value.string_value | 主機上的作業系統版本號碼。 |
| host.os.kernel | principal.platform_patch_level | 主機的作業系統核心版本。 |
| host.os.name | additional.fields.os_name.value.string_value | 主機的作業系統名稱。 |
| host.os.platform | principal.platform | 主機上的作業系統平台。 |
| host.os.version | principal.platform_version | 主機的作業系統版本。 |
| http_method | network.http.method | 用戶端使用的 HTTP 方法。 |
| http_response | network.http.response_code | HTTP 回應代碼。 |
| http_status_code | network.http.response_code | 回應的 HTTP 狀態碼。 |
| http_substatus | additional.fields.sc_substatus.value.string_value | 回應的 HTTP 子狀態碼。 |
| 執行個體 | additional.fields.instance.value.string_value | 工作執行個體 ID。 |
| intermediary_devicename | intermediary.hostname、intermediary.asset.hostname | 中介裝置的主機名稱。 |
| json_message | JSON 格式的原始記錄訊息。 | |
| kv_fields | 用於從原始記錄訊息擷取鍵/值組合。 | |
| LayerKey | security_result.about.resource.attribute.labels.LayerKey.value | 圖層的鍵。 |
| LayerName | security_result.about.resource.attribute.labels.LayerName.value | 圖層名稱。 |
| LayerId | security_result.about.resource.attribute.labels.LayerId.value | 圖層的 ID。 |
| log.file.path | target.file.full_path | 記錄檔的完整路徑。 |
| log.offset | metadata.product_log_id | 事件在記錄檔中的位移。 |
| logstash.collect.host | observer.hostname | 收集記錄的電腦主機名稱。 |
| logstash.process.host | intermediary.hostname | 處理記錄的電腦主機名稱。 |
| logstash_json_message | JSON 格式的原始記錄訊息。 | |
| 訊息 | security_result.description | 原始記錄訊息。 |
| 政府部門 | additional.fields.ministry.value.string_value | 與活動相關的部會。 |
| 名稱 | 實體名稱。 | |
| NewValue | additional.fields.NewValue.value.string_value | 設定的新值。 |
| OldValue | additional.fields.OldValue.value.string_value | 設定的舊值。 |
| 通訊埠 | principal.port | 用戶端的連接埠號碼。 |
| priority_code | 系統記錄訊息的優先順序代碼。 | |
| ProcessID | principal.process.pid | 產生事件的程序的程序 ID。 |
| ProviderGuid | security_result.about.resource.attribute.labels.ProviderGuid.value | 供應商的 GUID。 |
| ProviderKey | security_result.about.resource.attribute.labels.ProviderKey.value | 供應商金鑰。 |
| ProviderName | security_result.about.resource.attribute.labels.ProviderName.value | 供應商名稱。 |
| referrer_url | network.http.referral_url | 將用戶端導向目前網頁的網址。 |
| request_url | target.url | 用戶端要求的網址。 |
| s-computername | target.hostname | 目標電腦的主機名稱。 |
| s-ip | target.ip、target.asset.ip | 目標機器的 IP 位址。 |
| s-port | target.port | 目標機器的連接埠號碼。 |
| s-sitename | additional.fields.sitename.value.string_value | 網站名稱。 |
| sc-bytes | network.sent_bytes | 傳送至用戶端的位元組數。 |
| sc-status | network.http.response_code | 回應的 HTTP 狀態碼。 |
| sc-substatus | additional.fields.sc_substatus.value.string_value | 回應的 HTTP 子狀態碼。 |
| sc-win32-status | 回應的 Windows 狀態碼。 | |
| scbyte | network.sent_bytes | 傳送至用戶端的位元組數。 |
| scstatus | network.http.response_code | 回應的 HTTP 狀態碼。 |
| 嚴重性 | security_result.severity | 事件的嚴重程度。 |
| service.type | additional.fields.service_type.value.string_value | 服務類型。 |
| sIP | principal.ip、principal.asset.ip | 用戶端的 IP 位址。 |
| sPort | principal.port | 用戶端的連接埠號碼。 |
| sSiteName | additional.fields.sitename.value.string_value | 網站名稱。 |
| src_ip | principal.ip、principal.asset.ip、observer.ip | 用戶端的 IP 位址。 |
| src_port | principal.port | 用戶端的連接埠號碼。 |
| sysdate | 系統記錄訊息的日期和時間。 | |
| syslog_facility | security_result.severity_details | syslog 訊息的設施。 |
| syslog_pri | 系統記錄訊息的優先順序。 | |
| syslog_severity | security_result.severity_details | 系統記錄訊息的嚴重程度。 |
| syslog_severity_code | 系統記錄訊息的嚴重性代碼。 | |
| 標記 | security_result.rule_name | 與活動相關聯的標記。 |
| 任務 | additional.fields.task.value.string_value | 工作名稱。 |
| 時間 | 如果原始記錄時間戳記無效,可用於建構事件時間戳記。 | |
| time-taken | 要求時間長度 (以毫秒為單位)。 | |
| uri_query | target.url | 用戶端要求的網址查詢字串。 |
| user_agent | network.http.user_agent | 用戶端的 User-Agent。 |
| 使用者名稱 | target.user.userid | 使用者的使用者名稱。 |
| UserSid | target.user.windows_sid | 使用者的 Windows SID。 |
| 權重 | security_result.about.resource.attribute.labels.Weight.value | 篩選條件的權重。 |
| win32_status | 回應的 Windows 狀態碼。 | |
| xforwardedfor | X-Forwarded-For 標頭,內含以半形逗號分隔的 IP 位址清單。 | |
| metadata.log_type | "IIS" | |
| network.direction | "INBOUND" | |
| metadata.vendor_name | 「Microsoft」 | |
| metadata.product_name | 「Internet Information Server」 | |
| metadata.event_type | 「NETWORK_HTTP」、「USER_UNCATEGORIZED」、「GENERIC_EVENT」、「STATUS_UPDATE」、「USER_LOGOUT」、「USER_LOGIN」 | |
| extensions.auth.type | "MACHINE" |
還有其他問題嗎?向社群成員和 Google SecOps 專業人員尋求答案。