收集 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. (選用) 勾選「Log script block invocation start / stop events」,擷取每個指令碼區塊的開始和停止事件。請注意,這個選項會產生大量記錄。
  6. 按一下 [確定]。
  7. 以系統管理員身分開啟「命令提示字元」,然後執行 gpupdate /force,立即套用政策。

使用登錄檔啟用指令碼區塊記錄功能

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

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

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

選用:啟用模組記錄功能

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

  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。

取得 Bindplane 代理程式的 Google SecOps 憑證

如要向 Google SecOps 驗證 Bindplane 代理程式,請選擇下列其中一種方法:

  • 新部署作業:使用 Chronicle API (選項 1)。
  • 舊版部署作業:繼續使用擷取驗證檔案 (選項 2),直到 Ingestion API 於 2027 年 7 月 20 日停用。
  1. 登入 Google Cloud 控制台,選取連結至 Google SecOps 執行個體的 Google Cloud 專案。
  2. 依序前往 「IAM & Admin」(IAM 與管理) >「Service Accounts」(服務帳戶)。
  3. 按一下「建立服務帳戶」。
  4. 請提供下列設定詳細資料:
    • 「Service account name」(服務帳戶名稱):輸入帳戶名稱 (例如 bindplane-ingest)。
    • 「服務帳戶說明」:輸入說明 (例如 Bindplane agent log ingestion)。
  5. 點按「Create and continue」(建立並繼續)。
  6. 在「將專案存取權授予這個服務帳戶」部分,按一下「選取角色」,然後選取「Chronicle 編輯者」。
  7. 依序點選「繼續」和「完成」。
  8. 按一下您建立的服務帳戶,然後前往「金鑰」分頁。
  9. 依序點選「新增金鑰」>「建立新的金鑰」。
  10. 選取「JSON」,然後點選「建立」。金鑰檔案會下載到電腦。
  11. 將金鑰檔案儲存為 Bindplane 收集器目錄中的 ingestion-auth.json (Linux 上的 /opt/observiq-otel-collector/ingestion-auth.json 或 Windows 上的 C:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.json),或更新 config.yaml 中的 creds_file_path,使其與儲存路徑相符。
  12. 依序前往「IAM & Admin」(IAM 與管理) >「Settings」(設定),然後複製「Project number」(專案編號)。匯出工具設定時會用到。

方法 2:下載擷取驗證檔案 (舊版)

  1. 登入 Google SecOps 控制台。
  2. 依序前往「SIEM Settings」 > 「Collection Agents」。
  3. 下載擷取驗證檔案。
  4. 將檔案安全地儲存在要安裝 Bindplane 代理程式的系統中。

取得 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:
        protocol: https
        # Region of your instance, for example us, europe, asia-southeast1
        location: <LOCATION>
        # Project number of the Google Cloud project linked to the instance
        project: '<PROJECT_NUMBER>'
        compression: gzip
        creds_file_path: 'C:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.json'
        customer_id: '<CUSTOMER_ID>'
        endpoint: chronicle.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 即可收集所有現有事件。
  • Exporter 設定:

    • <CUSTOMER_ID>:替換為上一步的客戶 ID。
    • creds_file_path:服務帳戶 JSON 金鑰檔案的完整路徑 (選項 1)。將憑證檔案複製到這個位置。
    • location:將 <LOCATION> 替換為 Google SecOps 執行個體的區域 (例如 us、europe 或 asia-southeast1)。匯出工具會以這個值做為 chronicle.googleapis.com 的前置字元。如需完整清單,請參閱「區域性端點」。
    • project:將 <PROJECT_NUMBER> 替換為「IAM 與管理」>「設定」中的專案編號。
    • endpoint:維持設為 chronicle.googleapis.com。

    • log_type:設為 POWERSHELL 即可使用 PowerShell 剖析器。

舊版 Ingestion API 匯出工具

  • 如果您使用選項 2 的擷取驗證檔案,請將 exporters 區塊替換為下列內容。將 creds_file_path 設為擷取驗證檔案的路徑。如果執行個體位於美國境外,請將 malachiteingestion-pa.googleapis.com 替換為區域端點 (例如 europe-malachiteingestion-pa.googleapis.com)。

    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
    

儲存設定檔

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

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

Windows

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

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

    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 產品定義的事件類型
Computer、System.Computer、computer、winlog.computer_name principal.hostname 主體實體的主機名稱
Computer、System.Computer、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 安全性 ID (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 主體的管理網域
Path、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 與目標相關聯的資產主機名稱
Host 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)
機器、平台軟體 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 產生事件的產品名稱
syslog_host event.idm.read_only_udm.intermediary.hostname 從變更記錄對應
Computer event.idm.read_only_udm.intermediary.hostname 從變更記錄對應
Version event.idm.read_only_udm.metadata.product_version 從變更記錄對應
Task event.idm.read_only_udm.security_result.detection_fields 從變更記錄對應
OpcodeValue event.idm.read_only_udm.security_result.detection_fields 從變更記錄對應
ThreadID event.idm.read_only_udm.security_result.detection_fields 從變更記錄對應
AccountType event.idm.read_only_udm.security_result.detection_fields 從變更記錄對應
Offset event1.idm.read_only_udm.additional.fields 從變更記錄對應
SeverityValue event1.idm.read_only_udm.additional.fields 從變更記錄對應
NewEngineState", "PreviousEngineState", "HostVersion", "RunspaceId", "SequenceNumber", "EngineVersion" and "PipelineId additional.fields 從變更記錄對應
Payload security_result.detection_fields 從變更記錄對應
Script Name target.file.full_path 從變更記錄對應
SystemTime metadata.event_timestamp 從變更記錄對應
channel", "keywords", "MessageNumber", "MessageTotal", and "ScriptBlockId security_result.detection_fields 從變更記錄對應
System.ProviderName principal.resource.attribute.labels 從變更記錄對應
HostVersion", "RunspaceId", "PipelineId", "EngineVersion", "DetailSequence", "DetailTotal", "SequenceNumber", and "ScriptName additional.fields 從變更記錄對應
System.EventRecordID", "System.Task", "System.Keywords", "System.Opcode", and "System.ThreadID security.detection_fields 從變更記錄對應
EventLevelName security_result.severity 從變更記錄對應
ManagementGroupName", "Source", "TenantId additional_fields 從變更記錄對應

變更記錄

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

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