收集 Microsoft PowerShell 記錄

支援的國家/地區:

本文說明如何使用 Bindplane 代理程式,將 Microsoft PowerShell 記錄擷取至 Google Security Operations。

Microsoft PowerShell 是 Microsoft 的工作自動化與設定管理架構,包含指令列殼層及指令碼語言。PowerShell 記錄檔會擷取指令碼執行作業、模組活動和指令叫用作業,方便您掌握 PowerShell 作業,以利進行安全監控和鑑識分析。

事前準備

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

  • Google SecOps 執行個體
  • Windows Server 2016 以上版本
  • Windows 主機與 Google SecOps 之間的網路連線
  • 如果透過 Proxy 執行,請確保防火牆通訊埠已根據 Bindplane 代理程式需求開啟
  • Windows 主機的管理員存取權,可設定 PowerShell 記錄並安裝 Bindplane 代理程式

設定 PowerShell 記錄

必須先在 Windows 主機上啟用 PowerShell 記錄功能,才能收集記錄。根據預設,PowerShell 記錄的資訊量最少。啟用指令碼區塊記錄功能,擷取詳細的 PowerShell 活動。

使用群組政策啟用指令碼封鎖記錄功能

  1. 以系統管理員身分執行 gpedit.msc,開啟本機群組原則編輯器
  2. 依序前往「電腦設定」>「系統管理範本」>「Windows 元件」>「Windows PowerShell」
  3. 按兩下「開啟 PowerShell 指令碼區塊記錄」
  4. 選取 [已啟用]
  5. 您可以視需要勾選「記錄指令碼區塊叫用開始 / 停止事件」,擷取每個指令碼區塊的開始和停止事件。請注意,這個選項會產生大量記錄。
  6. 按一下 [確定]
  7. 以系統管理員身分開啟「命令提示字元」,然後執行 gpupdate /force,立即套用政策。

使用登錄檔啟用指令碼封鎖記錄功能

或者,您也可以設定下列登錄值,啟用指令碼封鎖記錄功能:

  1. 以管理員身分執行 regedit,開啟登錄編輯程式
  2. 前往 HKLM\SOFTWARE\Policies\Microsoft\Windows\PowerShell\ScriptBlockLogging
  3. 如果金鑰不存在,請建立金鑰。
  4. 建立名為 EnableScriptBlockLogging 的新 DWORD (32 位元) 值,並將值設為 1
  5. 重新啟動 PowerShell 工作階段,變更才會生效。

PowerShell 指令碼區塊記錄會將事件寫入 Microsoft-Windows-PowerShell/Operational 事件記錄通道,並使用事件 ID 4104。

選用:啟用模組記錄功能

模組記錄會記錄指定模組的管道執行詳細資料。如要為所有模組啟用模組記錄,請按照下列步驟操作:

  1. 本機群組原則編輯器中,依序前往「電腦設定」>「系統管理範本」>「Windows 元件」>「Windows PowerShell」
  2. 按兩下「開啟模組記錄功能」
  3. 選取 [已啟用]
  4. 按一下「模組名稱」旁的「顯示」
  5. 輸入 * 即可記錄所有模組。
  6. 按一下「Module Names」視窗中的「OK」
  7. 按一下「Module Logging」視窗中的「OK」
  8. 執行 gpupdate /force 以套用政策。

模組記錄事件會寫入 Windows PowerShell 事件記錄檔,事件 ID 為 4103。

選用:啟用轉錄功能

轉錄功能會建立所有 PowerShell 工作階段輸入和輸出的文字記錄。如要啟用轉錄功能,請按照下列步驟操作:

  1. 本機群組原則編輯器中,依序前往「電腦設定」>「系統管理範本」>「Windows 元件」>「Windows PowerShell」
  2. 按兩下「開啟 PowerShell 轉錄功能」
  3. 選取 [已啟用]
  4. 視需要指定「轉錄稿輸出目錄」。如果留空,系統會將轉錄稿儲存到每位使用者的「文件」資料夾。
  5. 勾選「Include invocation headers」(包含呼叫標頭) ,即可納入時間戳記和中繼資料。
  6. 按一下 [確定]
  7. 執行 gpupdate /force 以套用政策。

轉錄稿會寫入以 PowerShell_transcript 開頭的文字檔。

取得 Google SecOps 擷取驗證檔案

  1. 登入 Google SecOps 控制台。
  2. 依序前往「SIEM 設定」>「收集代理程式」
  3. 按一下「下載」即可下載擷取驗證檔案
  4. 將檔案安全地儲存在要安裝 Bindplane 代理程式的 Windows 主機上。

取得 Google SecOps 客戶 ID

  1. 登入 Google SecOps 控制台。
  2. 依序前往「SIEM 設定」>「設定檔」
  3. 複製並儲存「機構詳細資料」部分中的客戶 ID

安裝 Bindplane 代理程式

請按照下列操作說明,在 Windows 主機上安裝 Bindplane 代理程式。

Windows 安裝

  1. 以管理員身分開啟「命令提示字元」或「PowerShell」
  2. 執行下列指令:

    msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
    
  3. 等待安裝完成。

  4. 執行下列指令,確認安裝成功:

    sc query observiq-otel-collector
    

    服務應顯示為RUNNING

其他安裝資源

如需其他安裝選項和疑難排解資訊,請參閱 Bindplane 代理程式安裝指南

設定 Bindplane 代理程式,收集 PowerShell 記錄

找出 Windows 設定檔

  • 找出 Windows 設定檔,方法如下:

    notepad "C:\Program Files\observIQ OpenTelemetry Collector\config.yaml"
    

編輯設定檔

  • config.yaml 的所有內容替換為下列設定:

    receivers:
      windowseventlog/powershell:
        channel: Microsoft-Windows-PowerShell/Operational
        max_reads: 100
        poll_interval: 5s
        raw: true
        start_at: end
    
    processors:
      batch:
    
    exporters:
      chronicle/powershell:
        compression: gzip
        creds_file_path: 'C:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.json'
        customer_id: '<CUSTOMER_ID>'
        endpoint: malachiteingestion-pa.googleapis.com
        log_type: 'POWERSHELL'
        raw_log_field: body
        override_log_type: false
    
    service:
      pipelines:
        logs/powershell:
          receivers:
            - windowseventlog/powershell
          processors:
            - batch
          exporters:
            - chronicle/powershell
    

設定參數

替換下列預留位置:

  • 接收器設定:

    • channel:要收集的 Windows 事件記錄檔通道。如要記錄 PowerShell 指令碼區塊,請使用 Microsoft-Windows-PowerShell/Operational。如要進行模組記錄,請使用 Windows PowerShell
    • raw:設為 true,將原始 Windows 事件記錄 XML 傳送至 Google SecOps。
    • start_at:設為 end,只收集代理程式啟動後的新事件。設為 beginning 即可收集所有現有事件。
  • 匯出工具設定:

    • <CUSTOMER_ID>:替換為上一步中的客戶 ID。
    • creds_file_path:擷取驗證檔案的完整路徑。將下載的驗證檔案複製到這個位置。
    • endpoint:區域端點網址。請使用 Google Security Operations 區域的端點:

      • 美國malachiteingestion-pa.googleapis.com
      • 歐洲europe-malachiteingestion-pa.googleapis.com
      • 亞洲asia-southeast1-malachiteingestion-pa.googleapis.com
      • 如需完整清單,請參閱「區域端點」。
    • log_type:設為 POWERSHELL 即可使用 PowerShell 剖析器。

儲存設定檔

編輯完畢後,依序點選「檔案」>「儲存」,即可儲存檔案。

重新啟動 Bindplane 代理程式,以套用變更

Windows

  • 以管理員身分使用命令提示字元或 PowerShell:

    net stop observiq-otel-collector && net start observiq-otel-collector
    
  • 或使用 Services 控制台:

    1. 按下 Win+R,輸入 services.msc,然後按下 Enter 鍵。
    2. 找出 observIQ OpenTelemetry Collector
    3. 按一下滑鼠右鍵,然後選取「重新啟動」
    4. 確認服務正在執行:

      sc query observiq-otel-collector
      
    5. 檢查記錄中是否有錯誤:

      type "C:\Program Files\observIQ OpenTelemetry Collector\log\collector.log"
      

確認記錄擷取作業

設定 Bindplane 代理程式並重新啟動服務後,PowerShell 記錄應該就會開始傳送到 Google SecOps。

  1. 登入 Google SecOps 控制台。
  2. 依序點選「調查」>「搜尋」
  3. 執行下列搜尋,確認系統是否正在擷取 PowerShell 記錄:

    metadata.log_type = "POWERSHELL"
    
  4. 確認事件顯示的時間戳記為近期時間。

PowerShell 指令碼區塊記錄事件 (事件 ID 4104) 會顯示執行的指令碼區塊詳細資料,包括指令碼內容、指令碼區塊 ID 和執行環境。

UDM 對應表

記錄欄位 UDM 對應 邏輯
HostId principal.resource.product_object_id 與主體資源相關聯的產品物件專屬 ID
System.Version metadata.product_version 產生事件的產品版本
System.EventId、EventID、winlog.event_id metadata.product_event_type 產品定義的事件類型
電腦、System.Computer、電腦、winlog.computer_name principal.hostname 主體實體的主機名稱
電腦、System.Computer、電腦、winlog.computer_name principal.asset.hostname 與主體相關聯的資產主機名稱
System.EventRecordID、RecordNumber、winlog.record_id metadata.product_log_id 產品記錄系統中記錄項目的專屬 ID
System.Opcode、opcode、winlog.opcode metadata.description 事件說明或其他背景資訊
ProviderGuid、winlog.provider_guid metadata.product_deployment_id 產品部署作業的專屬 ID
System.ProcessID、ProcessID、ExecutionProcessID、execution.process_id、winlog.process.pid principal.process.pid 主程序的程序 ID
SourceModuleName principal.resource.name 與主體相關聯的資源名稱
SourceModuleType principal.resource.resource_subtype 與主體相關聯的資源子類型
security.user_id、UserID、winlog.user.identifier principal.user.windows_sid 主體使用者的 Windows 安全性識別碼 (SID)
metadata.event_type 事件類型 (例如 USER_LOGIN、NETWORK_CONNECTION)
SourceName、winlog.provider_name metadata.product_name 產生事件的產品名稱
AccountName、Username、UserName、winlog.user.name principal.user.userid 主要使用者的使用者 ID
網域,winlog.user.domain principal.administrative_domain 主體的管理網域
路徑、target_file、ScriptName、script_name、ContextInfo_Script Name、file_path target.process.file.full_path 與目標程序相關聯的檔案完整路徑
HostName、powershell.Host Name、ContextInfo_Host Name target.hostname 目標實體的主機名稱
HostName、powershell.Host Name、ContextInfo_Host Name target.asset.hostname 與目標相關聯的資產主機名稱
主機 ID、HostID、ContextInfo_Host ID target.asset.asset_id 目標資產的專屬 ID
Nombre_de_comando、ContextInfo_Command Name、CommandName target.application 與目標相關聯的應用程式名稱
HostApplication、ContextInfo_Host Application target.process.command_line 用於啟動目標程序的指令列
ScriptBlockText target.process.command_line 用於啟動目標程序的指令列
MessageSourceAddress principal.ip 主體的 IP 位址
MessageSourceAddress principal.asset.ip 與主體相關聯的資產 IP 位址
Nombre_de_host principal.application 與主體相關聯的應用程式名稱
Version_de_host principal.platform_version 與主體相關聯的平台版本
Id_de_host principal.resource.id 主要資源的專屬 ID
Application_host principal.process.file.full_path 與主體程序相關聯的檔案完整路徑
HostApplication principal.process.command_line 用於啟動主要程序的指令列
Usuario、admin_domain principal.user.userid 主要使用者的使用者 ID
Usuario、admin_domain principal.administrative_domain 主體的管理網域
CommandLine principal.process.command_line 用於啟動主要程序的指令列
機器、機器 ID principal.asset.asset_id 主要資產的專屬 ID
Machine、platform_software principal.asset.platform_software.platform 資產的平台類型 (例如 WINDOWS、LINUX)
Machine、platform_software principal.asset.platform_software.platform_version 資產上的平台軟體版本
MessageSourceAddress intermediary.ip 中介實體的 IP 位址
MessageSourceAddress、Hostname intermediary.hostname 中介實體的主機名稱
MessageSourceAddress、Hostname intermediary.asset.hostname 與中介程式相關聯的資產主機名稱
MessageSourceAddress intermediary.port 中介裝置使用的連接埠號碼
HostApplication target.process.command_line 用於啟動目標程序的指令列
HostId target.asset.asset_id 目標資產的專屬 ID
SequenceNumber、ContextInfo_Sequence Number、Sequence Number security_result.detection_fields 其他偵測資訊的鍵/值組合
ProviderName principal.resource.attribute.labels 與主體資源相關聯的標籤或屬性
NewEngineState additional.fields 標準 UDM 結構定義未涵蓋的其他自訂欄位
PreviousEngineState additional.fields 標準 UDM 結構定義未涵蓋的其他自訂欄位
ScriptName additional.fields 標準 UDM 結構定義未涵蓋的其他自訂欄位
ManagementGroupName additional.fields 標準 UDM 結構定義未涵蓋的其他自訂欄位
來源 additional.fields 標準 UDM 結構定義未涵蓋的其他自訂欄位
RenderedDescription security_result.description 安全性結果或採取的動作說明
TenantId additional.fields 標準 UDM 結構定義未涵蓋的其他自訂欄位
使用者名稱 principal.user.userid 主要使用者的使用者 ID
ActivityID security_result.detection_fields 其他偵測資訊的鍵/值組合
ExecutionThreadID、execution.thread_id、winlog.process.thread.id security_result.detection_fields 其他偵測資訊的鍵/值組合
輸出 security_result.detection_fields 其他偵測資訊的鍵/值組合
資料 security_result.detection_fields 其他偵測資訊的鍵/值組合
Data_1 additional.fields 標準 UDM 結構定義未涵蓋的其他自訂欄位
data_1 security_result.detection_fields 其他偵測資訊的鍵/值組合
Data_2 security_result.detection_fields 其他偵測資訊的鍵/值組合
winlog.activity_id security_result.detection_fields 其他偵測資訊的鍵/值組合
winlog.api additional.fields 標準 UDM 結構定義未涵蓋的其他自訂欄位
winlog.channel principal.resource.attribute.labels 與主體資源相關聯的標籤或屬性
偏移 additional.fields 標準 UDM 結構定義未涵蓋的其他自訂欄位
SeverityValue security_result.detection_fields 其他偵測資訊的鍵/值組合
中介 中介 與事件相關的中介實體詳細資料
security_result security_result 整體安全性結果,包括動作、嚴重程度和偵測結果
metadata.vendor_name 產生事件的供應商名稱
SourceName metadata.product_name 產生事件的產品名稱

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