Microsoft PowerShell のログを収集する

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

このドキュメントでは、Bindplane エージェントを使用して Microsoft PowerShell ログを Google Security Operations に取り込む方法について説明します。

Microsoft PowerShell は、Microsoft のタスク自動化および構成管理フレームワークで、コマンドライン シェルとスクリプト言語で構成されています。PowerShell ログは、スクリプトの実行、モジュール アクティビティ、コマンドの呼び出しをキャプチャし、セキュリティ モニタリングとフォレンジック分析のために PowerShell オペレーションの可視性を提供します。

始める前に

次の前提条件を満たしていることを確認してください。

  • Google SecOps インスタンス
  • Windows Server 2016 以降
  • Windows ホストと Google SecOps 間のネットワーク接続
  • プロキシの背後で実行している場合は、Bindplane エージェントの要件に従ってファイアウォール ポートが開いていることを確認します
  • PowerShell ロギングを構成し、Bindplane エージェントをインストールするための Windows ホストへの管理者アクセス権

PowerShell ロギングを構成する

ログを収集するには、Windows ホストで PowerShell ロギングを有効にする必要があります。デフォルトでは、PowerShell のロギングは最小限です。スクリプト ブロック ロギングを有効にして、PowerShell アクティビティの詳細をキャプチャします。

グループ ポリシーを使用してスクリプト ブロック ロギングを有効にする

  1. 管理者として gpedit.msc を実行して、ローカル グループ ポリシー エディタを開きます。
  2. [コンピュータの構成] > [管理用テンプレート] > [Windows コンポーネント] > [Windows PowerShell] に移動します。
  3. [PowerShell スクリプト ブロック ロギングを有効にする] をダブルクリックします。
  4. [有効] を選択します。
  5. 必要に応じて、[スクリプト ブロックの呼び出しの開始 / 停止イベントをログに記録する] をオンにして、各スクリプト ブロックの開始イベントと停止イベントをキャプチャします。このオプションでは大量のログが生成されることに注意してください。
  6. [OK] をクリックします。
  7. 管理者としてコマンド プロンプトを開き、gpupdate /force を実行してポリシーを直ちに適用します。

レジストリを使用してスクリプト ブロック ロギングを有効にする

または、次のレジストリ値を設定して、スクリプト ブロックのロギングを有効にすることもできます。

  1. 管理者として regedit を実行して、レジストリ エディタを開きます。
  2. HKLM\SOFTWARE\Policies\Microsoft\Windows\PowerShell\ScriptBlockLogging に移動します。
  3. キーが存在しない場合は作成します。
  4. EnableScriptBlockLogging という名前の新しい DWORD(32 ビット)値を作成し、その値を 1 に設定します。
  5. 変更を反映させるために PowerShell セッションを再起動します。

PowerShell スクリプト ブロックのロギングでは、イベント ID 4104 で Microsoft-Windows-PowerShell/Operational イベントログ チャネルにイベントが書き込まれます。

省略可: モジュールのロギングを有効にする

モジュール ロギングは、指定されたモジュールのパイプライン実行の詳細を記録します。すべてのモジュールでモジュール ロギングを有効にするには、次の操作を行います。

  1. ローカル グループ ポリシー エディターで、[コンピュータの構成] > [管理用テンプレート] > [Windows コンポーネント] > [Windows PowerShell] に移動します。
  2. [Turn on Module Logging] をダブルクリックします。
  3. [有効] を選択します。
  4. [Module Names] の横にある [Show] をクリックします。
  5. すべてのモジュールをログに記録するには、* と入力します。
  6. [Module Names] ウィンドウで [OK] をクリックします。
  7. [Module Logging] ウィンドウで [OK] をクリックします。
  8. gpupdate /force を実行してポリシーを適用します。

モジュール ロギング イベントは、イベント ID 4103 で Windows PowerShell イベントログに書き込まれます。

省略可: 文字起こしを有効にする

トランスクリプトは、すべての PowerShell セッションの入力と出力のテキストベースのレコードを作成します。文字起こしを有効にするには、次の操作を行います。

  1. ローカル グループ ポリシー エディターで、[コンピュータの構成] > [管理用テンプレート] > [Windows コンポーネント] > [Windows PowerShell] に移動します。
  2. [Turn on PowerShell Transcription] をダブルクリックします。
  3. [有効] を選択します。
  4. 必要に応じて、文字起こし出力ディレクトリを指定します。空白のままにすると、文字起こしは各ユーザーの [ドキュメント] フォルダに保存されます。
  5. タイムスタンプとメタデータを含めるには、[呼び出しヘッダーを含める] をオンにします。
  6. [OK] をクリックします。
  7. gpupdate /force を実行してポリシーを適用します。

文字起こしは、PowerShell_transcript で始まる名前のテキスト ファイルに書き込まれます。

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

  1. Google SecOps コンソールにログインします。
  2. [セキュリティ情報およびイベント管理の設定] > [収集エージェント] に移動します。
  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 エージェントのインストール ガイドをご覧ください。

PowerShell ログを収集するように Bindplane エージェントを構成する

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: 未加工の Windows イベントログ XML を Google SecOps に送信するには、true に設定します。
    • start_at: エージェントの起動後に新しいイベントのみを収集する場合は、end に設定します。既存のすべてのイベントを収集する場合は、beginning に設定します。
  • エクスポータの構成:

    • <CUSTOMER_ID>: 前の手順の顧客 ID に置き換えます。
    • creds_file_path: 取り込み認証ファイルのフルパス。ダウンロードした認証ファイルをこの場所にコピーします。
    • endpoint: リージョン エンドポイント URL。Google SecOps リージョンのエンドポイントを使用します。

      • 米国: 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
    
  • または、サービス コンソールを使用します。

    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. [Investigate] > [Search] に移動します。
  3. 次の検索を実行して、PowerShell ログが取り込まれていることを確認します。

    metadata.log_type = "POWERSHELL"
    
  4. イベントが最近のタイムスタンプで表示されることを確認します。

PowerShell スクリプト ブロック ロギング イベント(イベント ID 4104)には、スクリプト コンテンツ、スクリプト ブロック ID、実行コンテキストなど、実行されたスクリプト ブロックの詳細が表示されます。

UDM マッピング テーブル

ログフィールド UDM マッピング ロジック
HostId principal.resource.product_object_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 プロダクトのロギング システム内のログエントリの一意の識別子
System.Opcode、opcode、winlog.opcode metadata.description イベントの説明または追加のコンテキスト
ProviderGuid、winlog.provider_guid metadata.product_deployment_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 プリンシパルの管理ドメイン
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 ターゲットに関連付けられているアセットのホスト名
ホスト ID、HostID、ContextInfo_Host ID target.asset.asset_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 プリンシパル リソースの一意の識別子
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 プリンシパル プロセスの起動に使用されたコマンドライン
Machine、machine_id principal.asset.asset_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 ターゲット アセットの一意の識別子
SequenceNumber、ContextInfo_Sequence Number、Sequence Number security_result.detection_fields 追加の検出情報の Key-Value ペア
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 追加の検出情報の Key-Value ペア
ExecutionThreadID、execution.thread_id、winlog.process.thread.id security_result.detection_fields 追加の検出情報の Key-Value ペア
出力 security_result.detection_fields 追加の検出情報の Key-Value ペア
データ security_result.detection_fields 追加の検出情報の Key-Value ペア
Data_1 additional.fields 標準の UDM スキーマでカバーされていない追加のカスタム フィールド
data_1 security_result.detection_fields 追加の検出情報の Key-Value ペア
Data_2 security_result.detection_fields 追加の検出情報の Key-Value ペア
winlog.activity_id security_result.detection_fields 追加の検出情報の Key-Value ペア
winlog.api additional.fields 標準の UDM スキーマでカバーされていない追加のカスタム フィールド
winlog.channel principal.resource.attribute.labels プリンシパル リソースに関連付けられたラベルまたは属性
オフセット additional.fields 標準の UDM スキーマでカバーされていない追加のカスタム フィールド
SeverityValue security_result.detection_fields 追加の検出情報の Key-Value ペア
intermediary intermediary イベントに関与した仲介エンティティに関する詳細
security_result security_result アクション、重大度、検出を含むセキュリティ結果の概要
metadata.vendor_name イベントを生成したベンダーの名前
SourceName metadata.product_name イベントを生成したサービスの名前

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