PowerShell ログを収集する

以下でサポートされています。

このドキュメントでは、Bindplane を使用して PowerShell ログを Google Security Operations に収集する方法について説明します。パーサーは、未加工の Microsoft PowerShell ログを統合データモデル(UDM)に変換します。まず、未加工のログメッセージからフィールドを抽出し、UDM フィールドに正規化します。次に、特定のイベント ID に基づいて追加のコンテキストでデータを拡充し、最終的にセキュリティ分析用の構造化 UDM イベントを作成します。

始める前に

  • Google SecOps インスタンスがあることを確認します。
  • Windows 2016 以降があることを確認します。
  • プロキシの背後で実行している場合は、ファイアウォール ポートが開いていることを確認します。

Google SecOps の取り込み認証ファイルを取得する

  1. Google SecOps コンソールにログインします。
  2. [SIEM 設定] > [コレクション エージェント] に移動します。
  3. Ingestion Authentication File をダウンロードします。Bindplane をインストールするシステムにファイルを安全に保存します。

Google SecOps のお客様 ID を取得する

  1. Google SecOps コンソールにログインします。
  2. [SIEM 設定] > [プロファイル] に移動します。
  3. [組織の詳細情報] セクションから [お客様 ID] をコピーして保存します。

Windows に Bindplane エージェントをインストールする

  1. 管理者として コマンド プロンプトまたは PowerShell を開きます。
  2. 次のコマンドを実行します。

    msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
    

その他のインストール リソース

Syslog を取り込んで Google SecOps に送信するように Bindplane エージェントを構成する

  1. YAML ファイルを構成する前に、[サービス] パネルで observIQ Distro for Open Telemetry Collector Service を停止します。
  2. 構成ファイルにアクセスします。

    1. config.yaml ファイルを見つけます。通常、Linux では /etc/bindplane-agent/ ディレクトリに、Windows ではインストール ディレクトリにあります。
    2. テキスト エディタ(nanovi、メモ帳など)を使用してファイルを開きます。
  3. 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:
        endpoint: malachiteingestion-pa.googleapis.com
        # Adjust the path to the credentials file you downloaded in Step 1
        creds: '/path/to/ingestion-authentication-file.json'
        log_type: 'POWERSHELL'
        override_log_type: false
        raw_log_field: body
        customer_id: '<customer_id>'
    
    service:
      pipelines:
        logs/winpowershell:
          receivers:
            - windowseventlog/powershell
          processors: [batch]
          exporters: [chronicle/powershell] 
    
  4. <customer_id> は、実際の顧客 ID に置き換えます。

  5. /path/to/ingestion-authentication-file.json の値を、Google SecOps の取り込み認証ファイルを取得するで認証ファイルを保存したパスに更新します。

  6. config.yaml ファイルを保存したら、observIQ Distro for Open Telemetry Collector Service開始します。

Bindplane エージェントを再起動して変更を適用する

  • Windows で Bindplane エージェントを再起動するには、Services コンソールを使用するか、次のコマンドを入力します。

    net stop BindPlaneAgent && net start BindPlaneAgent
    

UDM マッピング テーブル

ログフィールド UDM マッピング ロジック
AccountName principal.user.userid 未加工ログの AccountName フィールドから直接マッピングされます。
ActivityID security_result.detection_fields[0].value 未加工ログの ActivityID フィールドから直接マッピングされます。中かっこが削除されます。
チャンネル IDM オブジェクトにはマッピングされません。
collection_time.nanos IDM オブジェクトにはマッピングされません。
collection_time.seconds IDM オブジェクトにはマッピングされません。
コマンド IDM オブジェクトにはマッピングされません。
CommandLine IDM オブジェクトにはマッピングされません。
パソコン principal.hostname 存在する場合、未加工ログの Computer フィールドから直接マッピングされます。
ContextInfo IDM オブジェクトにはマッピングされません。
ContextInfo_Command Name security_result.detection_fields[0].value 存在する場合、未加工ログの ContextInfo_Command Name フィールドから直接マッピングされます。
ContextInfo_Command 型 security_result.detection_fields[1].value 存在する場合、未加工ログの ContextInfo_Command Type フィールドから直接マッピングされます。
ContextInfo_Host アプリケーション target.process.command_line powershell.Host Application が存在しない場合、未加工ログの ContextInfo_Host Application フィールドから直接マッピングされます。
ContextInfo_Host ID target.asset.asset_id powershell.Host ID が存在しない場合、未加工ログの ContextInfo_Host ID フィールドから直接マッピングされます。値の先頭には Host ID: が付加されます。
ContextInfo_Host Name target.hostname powershell.Host Name が存在しない場合、未加工ログの ContextInfo_Host Name フィールドから直接マッピングされます。
ContextInfo_Script Name target.process.file.full_path script_name が存在しない場合、未加工ログの ContextInfo_Script Name フィールドから直接マッピングされます。
ContextInfo_Sequence Number security_result.detection_fields[2].value 存在する場合、未加工ログの ContextInfo_Sequence Number フィールドから直接マッピングされます。文字列に変換されました。
ContextInfo_Severity IDM オブジェクトにはマッピングされません。
create_time.nanos IDM オブジェクトにはマッピングされません。
create_time.seconds IDM オブジェクトにはマッピングされません。
customer_id IDM オブジェクトにはマッピングされません。
データ IDM オブジェクトにはマッピングされません。
データ security_result.detection_fields[0].value 存在する場合、未加工ログの Data フィールドから直接マッピングされます。
Data_1 security_result.detection_fields[1].value 存在する場合、未加工ログの Data_1 フィールドから直接マッピングされます。
Data_2 security_result.detection_fields[2].value 存在する場合、未加工ログの Data_2 フィールドから直接マッピングされます。
ドメイン principal.administrative_domain 未加工ログの Domain フィールドから直接マッピングされます。
entries IDM オブジェクトにはマッピングされません。
ERROR_EVT_UNRESOLVED IDM オブジェクトにはマッピングされません。
EventCategory IDM オブジェクトにはマッピングされません。
EventData IDM オブジェクトにはマッピングされません。
EventID metadata.product_event_type、security_result.rule_name 未加工ログの EventID フィールドから直接マッピングされます。値には、security_result.rule_name フィールドの EventID: が接頭辞として付加されます。
EventLevel IDM オブジェクトにはマッピングされません。
EventLevelName security_result.severity EventLevelName の値に基づいてマッピングされます。
- InformationINFORMATIONAL にマッピングされます。
- VerboseLOW にマッピングされます。
EventLog IDM オブジェクトにはマッピングされません。
EventReceivedTime IDM オブジェクトにはマッピングされません。
EventType IDM オブジェクトにはマッピングされません。
EventTime metadata.event_timestamp タイムスタンプが存在する場合に、タイムスタンプを抽出するために使用されます。
ExecutionProcessID principal.process.pid 未加工ログの ExecutionProcessID フィールドから直接マッピングされます(存在し、空でも 0 でもない場合)。文字列に変換されました。
ExecutionThreadID security_result.detection_fields[2].value 未加工ログの ExecutionThreadID フィールドから直接マッピングされます(存在し、空でも 0 でもない場合)。文字列に変換されました。
ファイル target.process.file.full_path 存在する場合、未加工ログの File フィールドから直接マッピングされます。
ホスト アプリケーション IDM オブジェクトにはマッピングされません。
HostApplication IDM オブジェクトにはマッピングされません。
ホスト名 principal.hostname 未加工ログの Hostname フィールドから直接マッピングされます。
id IDM オブジェクトにはマッピングされません。
キーワード IDM オブジェクトにはマッピングされません。
log_type metadata.log_type 未加工ログの log_type フィールドから直接マッピングされます。
マシン principal.asset.asset_id、principal.asset.platform_software.platform_version Machine フィールドが解析され、マシン ID とプラットフォーム情報が抽出されます。マシン ID には接頭辞 Machine ID: が付きます。プラットフォームは、値に基づいて UDM 列挙型にマッピングされます。
- winWINDOWS にマッピングされます。
- macMAC にマッピングされます。
- linLINUX にマッピングされます。
- その他の値は UNKNOWN_PLATFORM にマッピングされます。
ManagementGroupName additional.fields[0].value.string_value 存在する場合、未加工ログの ManagementGroupName フィールドから直接マッピングされます。
Message.EventTime metadata.event_timestamp タイムスタンプが存在する場合、その抽出に使用されます。文字列に変換されました。
Message.Message security_result.description EventID が [40341034104] と message_message_not_found にある場合、未加工ログの Message.Message フィールドから直接マッピングされます。改行とタブはカンマに置き換えられます。
メッセージ security_result.description 存在する場合、未加工ログの Message フィールドから直接マッピングされます。
MessageNumber IDM オブジェクトにはマッピングされません。
MessageSourceAddress principal.ip 存在する場合、未加工ログの MessageSourceAddress フィールドから直接マッピングされます。
MessageTotal IDM オブジェクトにはマッピングされません。
MG IDM オブジェクトにはマッピングされません。
オペコード metadata.description 未加工ログの Opcode フィールドから直接マッピングされます。
OpcodeValue IDM オブジェクトにはマッピングされません。
出力 security_result.detection_fields[0].value 存在する場合、未加工ログの Output フィールドから直接マッピングされます。
powershell.Command Name security_result.detection_fields[0].value 存在する場合に powershell.Command Name フィールドから直接マッピングされます。
powershell.Command Type security_result.detection_fields[1].value 存在する場合に powershell.Command Type フィールドから直接マッピングされます。
powershell.Host Application target.process.command_line 存在する場合、未加工ログの powershell.Host Application フィールドから直接マッピングされます。
powershell.Host ID target.asset.asset_id 存在する場合、未加工ログの powershell.Host ID フィールドから直接マッピングされます。値の先頭には Host ID: が付加されます。
powershell.Host Name target.hostname 存在する場合、未加工ログの powershell.Host Name フィールドから直接マッピングされます。
powershell.HostApplication target.process.command_line 存在する場合、未加工ログの powershell.HostApplication フィールドから直接マッピングされます。
powershell.HostId target.asset.asset_id 存在する場合、未加工ログの powershell.HostId フィールドから直接マッピングされます。値の先頭には Host ID: が付加されます。
powershell.HostName target.hostname 存在する場合、未加工ログの powershell.HostName フィールドから直接マッピングされます。
powershell.Script Name target.process.file.full_path 存在する場合、未加工ログの powershell.Script Name フィールドから直接マッピングされます。
powershell.ScriptName target.process.file.full_path 存在する場合、未加工ログの powershell.ScriptName フィールドから直接マッピングされます。
powershell.Sequence Number security_result.detection_fields[2].value 存在する場合、未加工ログの powershell.Sequence Number フィールドから直接マッピングされます。
powershell.SequenceNumber security_result.detection_fields[0].value 存在する場合、未加工ログの powershell.SequenceNumber フィールドから直接マッピングされます。
powershell.UserId principal.user.userid 存在する場合、未加工ログの powershell.UserId フィールドから直接マッピングされます。
プロセス ID principal.process.pid ExecutionProcessIDProcessID が存在しないか、空か、0 の場合、未加工ログの Process ID フィールドから直接マッピングされます。文字列に変換されました。
ProcessID principal.process.pid ExecutionProcessID が存在しないか、空であるか、0 である場合、未加工ログの ProcessID フィールドから直接マッピングされます。文字列に変換されました。
ProviderGuid metadata.product_deployment_id 未加工ログの ProviderGuid フィールドから直接マッピングされます。中かっこが削除されます。
PSEdition IDM オブジェクトにはマッピングされません。
PSRemotingProtocolVersion IDM オブジェクトにはマッピングされません。
PSVersion IDM オブジェクトにはマッピングされません。
RecordNumber metadata.product_log_id 未加工ログの RecordNumber フィールドから直接マッピングされます。文字列に変換されました。
RenderedDescription security_result.description 存在する場合、未加工ログの RenderedDescription フィールドから直接マッピングされます。
RunAs ユーザー IDM オブジェクトにはマッピングされません。
ScriptBlockId IDM オブジェクトにはマッピングされません。
ScriptBlockText security_result.detection_fields[0].value 存在する場合、未加工ログの ScriptBlockText フィールドから直接マッピングされます。
ScriptBlock ID IDM オブジェクトにはマッピングされません。
重大度 security_result.severity、security_result.severity_details Severity の値に基づいてマッピングされます。
- verbose または infoLOW にマッピングされます。
- warn または errMEDIUM にマッピングされます。
- critHIGH にマッピングされます。
: 生の値も security_result.severity_details にマッピングされます。
source.collector_id IDM オブジェクトにはマッピングされません。
source.customer_id IDM オブジェクトにはマッピングされません。
ソース additional.fields[1].value.string_value 存在する場合、未加工ログの Source フィールドから直接マッピングされます。
SourceModuleName principal.resource.name 未加工ログの SourceModuleName フィールドから直接マッピングされます。
SourceModuleType principal.resource.resource_subtype 未加工ログの SourceModuleType フィールドから直接マッピングされます。
SourceName metadata.product_name 未加工ログの SourceName フィールドから直接マッピングされます。
start_time.nanos IDM オブジェクトにはマッピングされません。
start_time.seconds IDM オブジェクトにはマッピングされません。
TenantId additional.fields[2].value.string_value 存在する場合、未加工ログの TenantId フィールドから直接マッピングされます。
ThreadID IDM オブジェクトにはマッピングされません。
timestamp.nanos IDM オブジェクトにはマッピングされません。
timestamp.seconds IDM オブジェクトにはマッピングされません。
type IDM オブジェクトにはマッピングされません。
UserID principal.user.windows_sid 未加工ログの UserID フィールドから直接マッピングされます。
ユーザー名 principal.user.userid AccountName が存在しない場合、未加工ログの Username フィールドから直接マッピングされます。
metadata.vendor_name Microsoft に設定します。
metadata.event_type EventID4104 で、_PathMessage に存在する場合、または EventID4103 の場合、または EventID が [800600400] にあり、powershell.ScriptNamepowershell.HostApplication が存在する場合は、PROCESS_LAUNCH に設定されます。EventID403 で、_HostApplicationMessage に存在する場合、または EventID403 で、NewEngineStateStopped の場合、PROCESS_TERMINATION に設定します。EventID4104 で、_PathMessage に存在しない場合、または EventID4103 で、no_valuescript_name が空で、script_name_not_foundhost_application_not_found がすべて true の場合、または EventID53504 の場合、または EventID40962 の場合、または EventID40961 の場合、または EventID が空で MessageSourceAddress が存在する場合は、STATUS_UPDATE に設定します。EventID が空で Username が存在する場合、USER_UNCATEGORIZED に設定します。EventID が空で、MessageSourceAddressUsername が存在しない場合は GENERIC_EVENT に設定します。
metadata.product_name SourceName が存在しない場合は、Powershell に設定します。
security_result.action ALLOW に設定します。
security_result.detection_fields[0].key Activity ID に設定します。
security_result.detection_fields[1].key Sequence Number に設定します。
security_result.detection_fields[2].key ExecutionThreadID に設定します。
additional.fields[0].key Management Group Name に設定します。
additional.fields[1].key Source に設定します。
additional.fields[2].key TenantId に設定します。
principal.asset.platform_software.platform platform_softwarewin が含まれている場合は WINDOWSmac が含まれている場合は MAClin が含まれている場合は LINUX、それ以外の場合は UNKNOWN_PLATFORM に設定します。
target.process.file.full_path EventID4104 で、_PathMessage に存在する場合、_Path に設定します。EventID4104 で、file_pathMessage に存在する場合、file_path に設定します。EventID403 で、_HostApplicationMessage に存在する場合、_HostApplication に設定します。

さらにサポートが必要な場合 コミュニティ メンバーや Google SecOps のプロフェッショナルから回答を得ることができます。