about_Logging
PowerShell は、エンジン、プロバイダー、コマンドレットからの内部操作を Windows イベント ログに記録します。
PowerShell では、エンジンとプロバイダーの開始と停止、PowerShell コマンドの実行など、PowerShell 操作に関する詳細がログに記録されます。
注意
Windows PowerShell 5.1 (以前) には、Windows イベント ログ用の EventLog コマンドレットが含まれています。 これらのバージョンでは、 EventLog コマンドレットの種類の一覧を表示するには、
Get-Command -Noun EventLog
します。 詳細については、Windows PowerShell のバージョンに関するコマンドレットのドキュメントと about_EventLogs を参照してください。
PowerShell 7 でのログ記録の詳細については、次の記事を参照してください。
PowerShell ログは、Windows イベント ビューアーを使用して表示できます。 イベント ログは Application and Services Logs グループにあり、 Microsoft-Windows-PowerShell という名前です。 関連付けられている ETW プロバイダー GUID
が {A0C1853B-5C40-4B15-8766-3CF1C58F985A}
。
スクリプト ブロック ログが有効になっている場合、PowerShell は次のイベントを Microsoft-Windows-PowerShell/Operational ログに記録します。
フィールド | 値 |
---|---|
EventId | 4104 / 0x1008 |
Channel | Operational |
Level | Verbose |
オペコード | Create |
タスク | CommandStart |
Keyword | Runspace |
スクリプト ブロック ログを有効にすると、PowerShell は処理するすべてのスクリプト ブロックの内容を記録します。 有効にすると、新しい PowerShell セッションによってこの情報がログに記録されます。
注意
機密データを確実に保護するには、診断以外の目的でスクリプト ブロック ログを使用するときに、保護されたイベント ログを有効にします。
スクリプト ブロック ログは、グループ ポリシーまたはレジストリ設定を使用して有効にすることができます。
自動文字起こしを有効にするには、グループ ポリシーの PowerShell スクリプト ブロック のログ記録 機能を有効 管理者テンプレート ->Windows コンポーネント ->Windows PowerShell を使用します。
次の関数を実行します。
function Enable-PSScriptBlockLogging {
$basePath = @(
'HKLM:\Software\Policies\Microsoft\Windows'
'PowerShell\ScriptBlockLogging'
) -join '\'
if (-not (Test-Path $basePath)) {
$null = New-Item $basePath -Force
}
Set-ItemProperty $basePath -Name EnableScriptBlockLogging -Value "1"
}
システムのログ記録レベルを上げると、ログに記録されたコンテンツに機密データが含まれる可能性が高くなります。 たとえば、スクリプト ログを有効にすると、スクリプトで使用される資格情報やその他の機密データをイベント ログに書き込むことができます。 機密データをログに記録したマシンが侵害された場合、ログは攻撃者にリーチの拡大に必要な情報を提供する可能性があります。
この情報を保護するために、Windows 10 では保護されたイベント ログが導入されています。 保護されたイベント ログにより、参加しているアプリケーションは、イベント ログに書き込まれた機密データを暗号化できます。 後で、より安全で一元化されたログ コレクターでこれらのログの暗号化を解除して処理できます。
イベント ログのコンテンツは、IETF 暗号化メッセージ構文 (CMS) 標準を使用して保護されます。 CMS では公開キー暗号化が使用されます。 コンテンツの暗号化とコンテンツの暗号化解除に使用されるキーは、個別に保持されます。
公開キーは広く共有でき、機密データではありません。 この公開キーで暗号化されたコンテンツは、秘密キーによってのみ復号化できます。 公開キー暗号化の詳細については、「 Wikipedia - 公開キー暗号化を参照してください。
保護されたイベント ログ ポリシーを有効にするには、保護するイベント ログ データを持つすべてのマシンに公開キーをデプロイします。 対応する秘密キーは、中央のイベント ログ コレクターや SIEM アグリゲーターなど、より安全な場所でイベント ログを後処理するために使用されます。 Azure で SIEM を設定できます。 詳細については、 Generic SIEM 統合を参照してください。
保護されたイベント ログを有効にするには、Enable Protected Event Logging
を使用してグループ ポリシーのAdministrative Templates -> Windows Components -> Event Logging
機能を有効にします。 この設定には暗号化証明書が必要です。暗号化証明書は、次のいずれかの形式で指定できます。
- base-64 でエンコードされた X.509 証明書の内容 (たとえば、証明書マネージャーの
Export
オプションによって提供されます)。 - ローカル コンピューターの証明書ストアにある証明書の拇印 (PKI インフラストラクチャによって展開できます)。
- 証明書への完全なパス (ローカルまたはリモート共有を指定できます)。
- 証明書または証明書を含むディレクトリへのパス (ローカルまたはリモート共有を指定できます)。
- ローカル コンピューターの証明書ストアにある証明書のサブジェクト名 (PKI インフラストラクチャによって展開できます)。
結果の証明書は、拡張キー使用法 (Document Encryption
) として1.3.6.1.4.1.311.80.1
し、Data Encipherment
またはKey Encipherment
キー使用法を有効にする必要があります。
警告
秘密キーは、イベントをログ記録するマシンに展開しないでください。 メッセージを復号化する安全な場所に保持する必要があります。
次のスクリプトは、秘密キーがあると仮定して、イベントを取得および復号化します。
Get-WinEvent Microsoft-Windows-PowerShell/Operational |
Where-Object Id -eq 4104 |
Unprotect-CmsMessage
PowerShell に関するフィードバック
PowerShell はオープンソース プロジェクトです。 フィードバックを提供するにはリンクを選択します。