英語で読む

次の方法で共有


about_Logging

簡単な説明

PowerShell は、エンジン、プロバイダー、コマンドレットからの内部操作を Windows イベント ログに記録します。

詳細な説明

PowerShell では、エンジンとプロバイダーの開始と停止、PowerShell コマンドの実行など、PowerShell 操作に関する詳細がログに記録されます。

注意

Windows PowerShell 5.1 (以前) には、Windows イベント ログ用の EventLog コマンドレットが含まれています。 これらのバージョンでは、 EventLog コマンドレットの種類の一覧を表示するには、 Get-Command -Noun EventLogします。 詳細については、Windows PowerShell のバージョンに関するコマンドレットのドキュメントと about_EventLogs を参照してください。

PowerShell 7 でのログ記録の詳細については、次の記事を参照してください。

Windows での PowerShell イベント ログ エントリの表示

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 を使用します。

レジストリを使用する

次の関数を実行します。

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キー使用法を有効にする必要があります。

警告

秘密キーは、イベントをログ記録するマシンに展開しないでください。 メッセージを復号化する安全な場所に保持する必要があります。

保護されたイベント ログ メッセージの暗号化を解除する

次のスクリプトは、秘密キーがあると仮定して、イベントを取得および復号化します。

PowerShell
Get-WinEvent Microsoft-Windows-PowerShell/Operational |
    Where-Object Id -eq 4104 |
    Unprotect-CmsMessage

関連項目