about_Logging_Windows
簡単な説明
PowerShell は、エンジン、プロバイダー、コマンドレットからの内部操作を Windows イベント ログに記録します。
詳細な説明
PowerShell では、エンジンとプロバイダーの開始と停止、PowerShell コマンドの実行など、PowerShell 操作に関する詳細がログに記録されます。
Windows PowerShell 5.1 でのログ記録の詳細については、 about_Loggingを参照してください。
PowerShell では、次の 2 つのカテゴリのログ記録の構成がサポートされています。
モジュール ログ - 指定されたモジュールのメンバーのパイプライン実行イベントを記録します。 モジュールのログ記録は、セッションと特定のモジュールの両方で有効にする必要があります。 このログの構成の詳細については、 about_PowerShell_Configを参照してください。
構成によってモジュール ログが有効になっている場合は、モジュールの LogPipelineExecutionDetails プロパティの値を設定することで、セッション内の特定のモジュールのログ記録を有効または無効にすることができます。
たとえば、 PSReadLine モジュールのモジュール ログを有効にするには、次のようにします。
$psrl = Get-Module PSReadLine $psrl.LogPipelineExecutionDetails = $true Get-Module PSReadline | Select-Object Name, LogPipelineExecutionDetails
Name LogPipelineExecutionDetails ---- --------------------------- PSReadLine True
スクリプト ブロックのログ記録 - 対話形式で呼び出された場合でも、自動化を介して呼び出された場合でも、コマンド、スクリプト ブロック、関数、スクリプトの処理を記録します。
スクリプト ブロック ログを有効にすると、PowerShell は処理するすべてのスクリプト ブロックの内容を記録します。 有効にすると、新しい PowerShell セッションによってこの情報がログに記録されます。 詳細については、「 スクリプト ブロックのログ記録の有効化」を参照してください。
Windows での PowerShell イベント プロバイダーの登録
Linux または macOS とは異なり、Windows では、イベントをイベント ログに書き込む前にイベント プロバイダーを登録する必要があります。 PowerShell イベント プロバイダーを有効にするには、管理者特権の PowerShell プロンプトから次のコマンドを実行します。
$PSHOME\RegisterManifest.ps1
Windows での PowerShell イベント ログ エントリの表示
PowerShell ログは、Windows イベント ビューアーを使用して表示できます。 イベント ログは Application および Services Logs グループにあり、 PowerShellCore という名前です。 関連付けられている ETW プロバイダー GUID が {f90714a8-5509-434a-bf6d-b1624c8a19a2}
。
スクリプト ブロック ログが有効になっている場合、PowerShell は次のイベントを PowerShellCore/Operational ログに記録します。
フィールド | 値 |
---|---|
EventId | 4104 / 0x1008 |
Channel | Operational |
Level | Verbose |
オペコード | Create |
タスク | CommandStart |
Keyword | Runspace |
Windows での PowerShell イベント プロバイダーの登録解除
イベント プロバイダーを登録すると、イベントのデコードに使用されるバイナリ ライブラリにロックが設定されます。 このライブラリを更新するには、このロックを解除するためにプロバイダーの登録を解除する必要があります。
PowerShell プロバイダーの登録を解除するには、管理者特権の PowerShell プロンプトから次のコマンドを実行します。
$PSHOME\RegisterManifest.ps1 -Unregister
PowerShell を更新した後、 $PSHOME\RegisterManifest.ps1
を実行して、更新されたイベント プロバイダーを登録します。
スクリプト ブロックログの有効化
スクリプト ブロック ログを有効にすると、PowerShell は処理するすべてのスクリプト ブロックの内容を記録します。 有効にすると、新しい PowerShell セッションによってこの情報がログに記録されます。
Note
診断以外の目的でスクリプト ブロック ログを使用する場合は、以下で説明するように、保護されたイベント ログを有効にすることをお勧めします。
スクリプト ブロック ログは、グループ ポリシーまたはレジストリ設定を使用して有効にすることができます。
グループ ポリシーの使用
自動文字起こしを有効にするには、Administrative Templates ->PowerShell Core を使用して、グループ ポリシーの Turn on PowerShell Script Block Logging 機能を有効にします。
レジストリを使用する
次の関数を実行します。
function Enable-PSScriptBlockLogging {
$basePath = @(
'HKLM:\Software\Policies\Microsoft'
'PowerShellCore\ScriptBlockLogging'
) -join '\'
if (-not (Test-Path $basePath)) {
$null = New-Item $basePath -Force
}
Set-ItemProperty $basePath -Name EnableScriptBlockLogging -Value "1"
}
PowerShell 構成ファイルの使用
powerShell の動作を制御するpowershell.config.json
ファイルで、ScriptBlockLogging
オプションを設定できます。 詳細については、「 about_PowerSHell_Config」を参照してください。
保護されたイベント ログ
システムのログ記録レベルを上げると、ログに記録されたコンテンツに機密データが含まれる可能性が高くなります。 たとえば、スクリプト ログを有効にすると、スクリプトで使用される資格情報やその他の機密データをイベント ログに書き込むことができます。 機密データをログに記録したマシンが侵害された場合、ログは攻撃者にリーチの拡大に必要な情報を提供する可能性があります。
この情報を保護するために、Windows 10 では保護されたイベント ログが導入されています。 保護されたイベント ログにより、参加しているアプリケーションは、イベント ログに書き込まれた機密データを暗号化できます。 後で、より安全で一元化されたログ コレクターでこれらのログの暗号化を解除して処理できます。
イベント ログのコンテンツは、IETF 暗号化メッセージ構文 (CMS) 標準を使用して保護されます。 CMS では公開キー暗号化が使用されます。 コンテンツの暗号化とコンテンツの暗号化解除に使用されるキーは、個別に保持されます。
公開キーは広く共有でき、機密データではありません。 この公開キーで暗号化されたコンテンツは、秘密キーによってのみ復号化できます。 公開キー暗号化の詳細については、「 Wikipedia - 公開キー暗号化を参照してください。
保護されたイベント ログ ポリシーを有効にするには、保護するイベント ログ データを持つすべてのマシンに公開キーをデプロイします。 対応する秘密キーは、中央のイベント ログ コレクターや SIEM アグリゲーターなど、より安全な場所でイベント ログを後処理するために使用されます。 Azure で SIEM を設定できます。 詳細については、 Generic SIEM 統合を参照してください。
グループ ポリシーを使用した保護されたイベント ログの有効化
保護されたイベント ログを有効にするには、Administrative Templates -> Windows Components -> Event Logging
を使用してグループ ポリシーのEnable Protected Event Logging
機能を有効にします。 この設定には暗号化証明書が必要です。暗号化証明書は、次のいずれかの形式で指定できます。
- base-64 でエンコードされた X.509 証明書の内容 (たとえば、証明書マネージャーの
Export
オプションによって提供されます)。 - ローカル コンピューターの証明書ストアにある証明書の拇印 (PKI インフラストラクチャによって展開できます)。
- 証明書への完全なパス (ローカルまたはリモート共有を指定できます)。
- 証明書または証明書を含むディレクトリへのパス (ローカルまたはリモート共有を指定できます)。
- ローカル コンピューターの証明書ストアにある証明書のサブジェクト名 (PKI インフラストラクチャによって展開できます)。
結果の証明書は、拡張キー使用法 (1.3.6.1.4.1.311.80.1
) としてDocument Encryption
し、Data Encipherment
またはKey Encipherment
キー使用法を有効にする必要があります。
警告
秘密キーは、イベントをログ記録するマシンに展開しないでください。 メッセージを復号化する安全な場所に保持する必要があります。
保護されたイベント ログ メッセージの暗号化を解除する
次のスクリプトは、秘密キーがあると仮定して、イベントを取得および復号化します。
Get-WinEvent Microsoft-Windows-PowerShell/Operational |
Where-Object Id -eq 4104 |
Unprotect-CmsMessage
関連項目
PowerShell