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 アクティビティの詳細をキャプチャします。
グループ ポリシーを使用してスクリプト ブロック ロギングを有効にする
- 管理者として
gpedit.mscを実行して、ローカル グループ ポリシー エディタを開きます。 - [コンピュータの構成] > [管理用テンプレート] > [Windows コンポーネント] > [Windows PowerShell] に移動します。
- [PowerShell スクリプト ブロック ロギングを有効にする] をダブルクリックします。
- [有効] を選択します。
- 必要に応じて、[スクリプト ブロックの呼び出しの開始 / 停止イベントをログに記録する] をオンにして、各スクリプト ブロックの開始イベントと停止イベントをキャプチャします。このオプションでは大量のログが生成されることに注意してください。
- [OK] をクリックします。
- 管理者としてコマンド プロンプトを開き、
gpupdate /forceを実行してポリシーを直ちに適用します。
レジストリを使用してスクリプト ブロック ロギングを有効にする
または、次のレジストリ値を設定して、スクリプト ブロックのロギングを有効にすることもできます。
- 管理者として
regeditを実行して、レジストリ エディタを開きます。 HKLM\SOFTWARE\Policies\Microsoft\Windows\PowerShell\ScriptBlockLoggingに移動します。- キーが存在しない場合は作成します。
EnableScriptBlockLoggingという名前の新しい DWORD(32 ビット)値を作成し、その値を1に設定します。- 変更を反映させるために PowerShell セッションを再起動します。
PowerShell スクリプト ブロックのロギングでは、イベント ID 4104 で Microsoft-Windows-PowerShell/Operational イベントログ チャネルにイベントが書き込まれます。
省略可: モジュールのロギングを有効にする
モジュール ロギングは、指定されたモジュールのパイプライン実行の詳細を記録します。すべてのモジュールでモジュール ロギングを有効にするには、次の操作を行います。
- ローカル グループ ポリシー エディターで、[コンピュータの構成] > [管理用テンプレート] > [Windows コンポーネント] > [Windows PowerShell] に移動します。
- [Turn on Module Logging] をダブルクリックします。
- [有効] を選択します。
- [Module Names] の横にある [Show] をクリックします。
- すべてのモジュールをログに記録するには、
*と入力します。 - [Module Names] ウィンドウで [OK] をクリックします。
- [Module Logging] ウィンドウで [OK] をクリックします。
gpupdate /forceを実行してポリシーを適用します。
モジュール ロギング イベントは、イベント ID 4103 で Windows PowerShell イベントログに書き込まれます。
省略可: 文字起こしを有効にする
トランスクリプトは、すべての PowerShell セッションの入力と出力のテキストベースのレコードを作成します。文字起こしを有効にするには、次の操作を行います。
- ローカル グループ ポリシー エディターで、[コンピュータの構成] > [管理用テンプレート] > [Windows コンポーネント] > [Windows PowerShell] に移動します。
- [Turn on PowerShell Transcription] をダブルクリックします。
- [有効] を選択します。
- 必要に応じて、文字起こし出力ディレクトリを指定します。空白のままにすると、文字起こしは各ユーザーの [ドキュメント] フォルダに保存されます。
- タイムスタンプとメタデータを含めるには、[呼び出しヘッダーを含める] をオンにします。
- [OK] をクリックします。
gpupdate /forceを実行してポリシーを適用します。
文字起こしは、PowerShell_transcript で始まる名前のテキスト ファイルに書き込まれます。
Google SecOps の取り込み認証ファイルを取得する
- Google SecOps コンソールにログインします。
- [セキュリティ情報およびイベント管理の設定] > [収集エージェント] に移動します。
- [ダウンロード] をクリックして、取り込み認証ファイルをダウンロードします。
Bindplane エージェントがインストールされる Windows ホストに、ファイルを安全に保存します。
Google SecOps のお客様 ID を取得する
- Google SecOps コンソールにログインします。
- [SIEM 設定] > [プロファイル] に移動します。
[組織の詳細情報] セクションから [お客様 ID] をコピーして保存します。
Bindplane エージェントをインストールする
次の手順に沿って、Windows ホストに Bindplane エージェントをインストールします。
Windows のインストール
- 管理者としてコマンド プロンプトまたは PowerShell を開きます。
次のコマンドを実行します。
msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quietインストールが完了するまで待ちます。
次のコマンドを実行して、インストールの内容を確認します。
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または、サービス コンソールを使用します。
Win+Rキーを押して「services.msc」と入力し、Enter キーを押します。- observIQ OpenTelemetry Collector を見つけます。
- 右クリックして [再起動] を選択します。
サービスが実行されていることを確認します。
sc query observiq-otel-collectorログでエラーを確認します。
type "C:\Program Files\observIQ OpenTelemetry Collector\log\collector.log"
ログの取り込みを確認する
Bindplane エージェントを構成してサービスを再起動すると、PowerShell ログが Google SecOps に流れ始めます。
- Google SecOps コンソールにログインします。
- [Investigate] > [Search] に移動します。
次の検索を実行して、PowerShell ログが取り込まれていることを確認します。
metadata.log_type = "POWERSHELL"イベントが最近のタイムスタンプで表示されることを確認します。
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 のプロフェッショナルから回答を得ることができます。