Windows Hyper-V ログを収集する

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

このドキュメントでは、Bindplane を使用して Windows Hyper-V ログを Google Security Operations に取り込む方法について説明します。

Windows Hyper-V は、VM のライフサイクル、ネットワーク、ストレージ、セキュリティ イベントログを生成する Microsoft ハイパーバイザです。Bindplane エージェントは、エクスポートされた Hyper-V イベントログ ファイルをローカル ファイル システムから直接収集します。

始める前に

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

  • Google SecOps インスタンス
  • observiq-otel-collector サービスをサポートする Windows Server 2016 以降
  • プロキシの背後で実行している場合は、Bindplane エージェントの要件に従ってファイアウォール ポートが開いていることを確認します。
  • 管理者権限で Windows Hyper-V ホストへの特権アクセス

Bindplane エージェントの Google SecOps 認証情報を取得する

Bindplane エージェントを Google SecOps で認証するには、次のいずれかの方法を選択します。

  • 新しいデプロイ: Chronicle API を使用します(オプション 1)。
  • 以前のデプロイ: Ingestion API が 2027 年 7 月 20 日に廃止されるまで、取り込み認証ファイル(オプション 2)を引き続き使用します。
  1. Google Cloud コンソールにログインし、Google SecOps インスタンスにリンクされている Google Cloud プロジェクトを選択します。
  2. [IAM と管理]> [サービス アカウント] に移動します。
  3. [サービス アカウントを作成] をクリックします。
  4. 次の構成の詳細を入力します。
    • サービス アカウント名: アカウントの名前を入力します(例: bindplane-ingest)。
    • サービス アカウントの説明: 説明を入力します(例: Bindplane agent log ingestion)。
  5. [作成して続行] をクリックします。
  6. [このサービス アカウントにプロジェクトへのアクセスを許可する] セクションで、[ロールを選択] をクリックし、[Chronicle 編集者] を選択します。
  7. [**続行**] をクリックして [**完了**] をクリックします。
  8. 作成したサービス アカウントをクリックし、[キー] タブに移動します。
  9. 鍵を追加 > 新しい鍵を作成 の順にクリックします。
  10. [JSON] を選択し、[作成] をクリックします。キーファイルがパソコンにダウンロードされます。
  11. キーファイルを Bindplane コレクタ ディレクトリ(Linux の場合は /opt/observiq-otel-collector/ingestion-auth.json、Windows の場合は C:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.json)に ingestion-auth.json として保存するか、保存先のパスに合わせて config.yaml の creds_file_path を更新します。
  12. [IAM と管理][>][設定] に移動し、[プロジェクト番号] をコピーします。エクスポート構成に必要になります。

オプション 2: 取り込み認証ファイルをダウンロードする(レガシー)

  1. Google SecOps コンソールにログインします。
  2. [SIEM 設定] > [収集エージェント] に移動します。
  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
    

サービスは [実行中] と表示されます。

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

その他のインストール オプションとトラブルシューティングについては、Bindplane エージェントのインストール ガイドをご覧ください。

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

構成ファイルを探す

  • Windows:

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

構成ファイルを編集する

  • config.yaml の内容全体を次の構成に置き換えます。

    receivers:
      filelog:
        include:
          - C:\HyperVLogs\*.evtx
        start_at: beginning
    
    exporters:
      chronicle/windows_hyperv:
        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: WINDOWS_HYPERV
        raw_log_field: body
        ingestion_labels:
          env: production
    
    service:
      pipelines:
        logs/hyperv_to_chronicle:
          receivers:
            - filelog
          exporters:
            - chronicle/windows_hyperv
    

構成パラメータ

各プレースホルダを次のように置き換えます。

  • レシーバーの構成:

    • filelog: ディスクからログファイルを収集するレシーバーのタイプ
    • include: モニタリングするファイルパスのリスト。Hyper-V イベントログをエクスポートする場所に設定します(例: C:\HyperVLogs\*.evtx)。
    • start_at: 既存のログを読み取る場合は beginning、新しいエントリのみを読み取る場合は end に設定します。
  • エクスポーターの構成:

    • windows_hyperv: エクスポーターの説明名
    • creds_file_path: サービス アカウント JSON キーファイルのフルパス(オプション 1):
      • Windows: C:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.json
    • <customer_id>: 前のステップのお客様 ID
    • location: <LOCATION> を Google SecOps インスタンスのリージョン(us、europe、asia-southeast1 など)に置き換えます。エクスポーターは、この値で chronicle.googleapis.com に接頭辞を付けます。完全なリストについては、リージョン エンドポイントをご覧ください。
    • project: <PROJECT_NUMBER> を [IAM と管理] > [設定] のプロジェクト番号に置き換えます。
    • endpoint: chronicle.googleapis.com に設定したままにします。
    • WINDOWS_HYPERV: Chronicle に表示されるログタイプ
    • ingestion_labels: YAML 形式のオプションのラベル(例: env: production)
  • パイプラインの構成:

    • hyperv_to_chronicle: パイプラインの説明名

レガシー Ingestion API エクスポーター

  • オプション 2 の取り込み認証ファイルを使用する場合は、exporters ブロックを次のように置き換えます。creds_file_path を取り込み認証ファイルのパスに設定します。インスタンスが米国以外にある場合は、malachiteingestion-pa.googleapis.com を リージョン エンドポイント(europe-malachiteingestion-pa.googleapis.com など)に置き換えます。

    exporters:
      chronicle/windows_hyperv:
        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: WINDOWS_HYPERV
        raw_log_field: body
        ingestion_labels:
          env: production
    

構成ファイルを保存する

  • 編集が完了したら、ファイルを保存します。
    • Windows: [ファイル] > [保存] をクリックします。

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

Windows で Bindplane エージェントを再起動するには:

  1. 次のいずれかのオプションを選択します。

    • 管理者としてコマンド プロンプトまたは PowerShell を開きます。
    net stop observiq-otel-collector && net start observiq-otel-collector
    
    • サービス コンソール:
      1. Win+R を押して services.msc と入力し、Enter キーを押します。
      2. [observIQ OpenTelemetry Collector] を探します。
      3. 右クリックして [再起動] を選択します。
  2. サービスが実行されていることを確認します。

    sc query observiq-otel-collector
    
  3. ログでエラーを確認します。

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

Windows Hyper-V ログのエクスポートを構成する

Windows Hyper-V ログは、Windows イベントログ エントリとして保存されます。Bindplane エージェントが収集できるように、これらのログをディスク上のファイルにエクスポートする必要があります。

  1. エクスポートされたログファイルを保存するディレクトリを作成します。

    mkdir C:\HyperVLogs
    
  2. wevtutil を使用して Hyper-V イベントログをエクスポートします。

    wevtutil epl Microsoft-Windows-Hyper-V-VMMS-Admin C:\HyperVLogs\hyperv-vmms-admin.evtx
    wevtutil epl Microsoft-Windows-Hyper-V-Worker-Admin C:\HyperVLogs\hyperv-worker-admin.evtx
    

    必要に応じて、追加の Hyper-V イベント チャネルをエクスポートできます。使用可能なチャネルは次のとおりです。

    • Microsoft-Windows-Hyper-V-VMMS-Admin(仮想マシン管理サービス)
    • Microsoft-Windows-Hyper-V-Worker-Admin(VM ワーカー プロセス)
    • Microsoft-Windows-Hyper-V-Hypervisor-Admin(ハイパーバイザ イベント)
    • Microsoft-Windows-Hyper-V-Config-Admin(構成イベント)
  3. (省略可)PowerShell を使用して定期的なエクスポートをスケジュールします。

    $action = New-ScheduledTaskAction -Execute "cmd.exe" -Argument '/c wevtutil epl Microsoft-Windows-Hyper-V-VMMS-Admin C:\HyperVLogs\hyperv-vmms-admin.evtx /ow:true && wevtutil epl Microsoft-Windows-Hyper-V-Worker-Admin C:\HyperVLogs\hyperv-worker-admin.evtx /ow:true'
    $trigger = New-ScheduledTaskTrigger -RepetitionInterval (New-TimeSpan -Hours 1) -Once -At (Get-Date)
    Register-ScheduledTask -Action $action -Trigger $trigger -TaskName "ExportHyperVLogs" -Description "Export Hyper-V logs for Bindplane agent"
    
  4. エクスポートされたログファイルが `C:\HyperVLogs` に作成されていることを確認します。

  5. config.yaml の Bindplane エージェントの include パスがエクスポート ディレクトリと一致していることを確認します。

UDM マッピング テーブル

ログフィールド UDM マッピング ロジック
channel, event_data.data, event_id.id, event_id.qualifiers, keywords, task, SeverityValue, OpcodeValue, EventID, ProviderGuid, ActivityId, Version, RecordNumber, ProcessID, ThreadID, Channel, AccountName, UserID, AccountType, Opcode, SourceModuleName, SourceModuleType additional.fields これらのフィールドから作成されたラベルとマージされます。
system_time, EventReceivedTime metadata.collected_timestamp system_time から形式で解析されるか、EventReceivedTime から UNIX または UNIX_MS として解析されます。
メッセージ metadata.description 値を直接コピーしました
EventTime, EventReceivedTime metadata.event_timestamp EventTime から UNIX または UNIX_MS として解析されるか、EventReceivedTime から UNIX または UNIX_MS として解析されます。
metadata.event_type has_principal と has_target_process の場合は「PROCESS_LAUNCH」、has_principal と has_target で has_target_process でない場合は「USER_LOGIN」、has_principal で has_target でない場合は「STATUS_UPDATE」、has_target の場合は「USER_RESOURCE_ACCESS」、それ以外の場合は「GENERIC_EVENT」に設定します。
provider.event_source metadata.product_event_type 値を直接コピーしました
record_id, RecordNumber metadata.product_log_id 空でない場合は record_id から、空でない場合は RecordNumber から文字列に変換されます。
provider.name, SourceName metadata.product_name 空でない場合は provider.name の値、空でない場合は SourceName の値、それ以外の場合は「Microsoft-Windows-Hyper-V」
バージョン metadata.product_version 文字列に変換しました
メッセージ network.session_duration.nanos Grok パターンを使用してメッセージから抽出され、整数に変換されます。
ドメイン principal.administrative_domain 値を直接コピーしました
パソコン principal.asset.hostname 値を直接コピーしました
パソコン, ホスト名 principal.hostname 空でない場合はパソコンの値、空でない場合はホスト名の値
AccountName principal.user.role_description 値を直接コピーしました
AccountType principal.user.role_name 値を直接コピーしました
event_data.name principal.user.user_display_name 値を直接コピーしました
security.user_id, UserID principal.user.userid 空でない場合は security.user_id の値、空でない場合は UserID の値
メッセージ security_result.description Grok パターンを使用してメッセージから抽出されます。
メッセージ, ActivityId security_result.detection_fields Grok を使用してメッセージから抽出された nt_status と ActivityId からのラベルとマージされます。
レベル, 重大度 security_result.severity レベル値(1 ~ 3 INFORMATIONAL、4 ERROR、5 CRITICAL、それ以外は UNKNOWN_SEVERITY)または重大度(INFO INFORMATIONAL、WARN MEDIUM、ERROR ERROR)に基づいて設定します。
EventType security_result.severity_details 値を直接コピーしました
execution.process_id, ProcessID target.process.pid 空でない場合は execution.process_id から、空でない場合は ProcessID から文字列に変換されます。
execution.thread_id, ThreadID target.process.product_specific_process_id 空でない場合は execution.thread_id から、空でない場合は ThreadID から「ThreadID: 」に設定します。
provider.guid, ProviderGuid target.resource.id { } を削除した後の provider.guid の値、または { } を削除した後の ProviderGuid の値
メッセージ target.resource.product_object_id Grok パターンを使用してメッセージから抽出されます。
provider.guid target.resource.type 空でない場合は「Hyper-V VmSwitch」に設定します。

変更ログ

このパーサーの変更ログを表示する

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