簡単な説明
PowerShell は、エンジン、プロバイダー、コマンドレットからの内部操作を Windows イベント ログに記録します。
長い説明
PowerShell では、エンジンとプロバイダーの開始と停止、PowerShell コマンドの実行など、PowerShell 操作に関する詳細がログに記録されます。
Note
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 セッションによってこの情報がログに記録されます。
Note
機密データを確実に保護するには、診断以外の目的でスクリプト ブロック ログを使用するときに、保護されたイベント ログを有効にします。
スクリプト ブロック ログは、グループ ポリシーまたはレジストリ設定を使用して有効にすることができます。
グループ ポリシーの使用
自動文字起こしを有効にするには、グループ ポリシーの 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 を Blue Team に する
- 一般的な SIEM 統合
PowerShell