PowerShell スクリプト ブロック ログは、次の場所にあります アプリケーションとサービスのログ → Microsoft → Windows → PowerShell → Operationalイベント 4104 として。スクリプト ブロック ログが有効でないと完全に記録されません。エクスポートするには:
wevtutil epl “Microsoft-Windows-PowerShell/Operational” C:logspowershell.evtx
PowerShell 7 は別の製品であり、PowerShellCore/Operational として別のチャネルを持ち、独自のポリシー設定があります。
攻撃者が Windows ボックスに触れた場合、PowerShell が関与している可能性が高いです。スクリプト ブロック ログは実際に実行されたコードを記録し、しばしば難読化されたレイヤーが剥がれた後に記録されます。Prime Core には、PowerShell ログ用の 663 の検出ルールがあり、417 の MITRE ATT&CK テクニックに対応しています。それらは、悪意のある PowerShell の使用(T1059.001)、難読化(T1027)、ツールを取得するダウンロード クレードル(T1105)をカバーしています。
始める前に
スクリプト ブロック ログはオンになっていますか?
reg query “HKLMSOFTWAREPoliciesMicrosoftWindowsPowerShellScriptBlockLogging”
EnableScriptBlockLogging が 0x1 に設定されていればオンです。このキーが存在しなければオフです。とはいえ、Windows PowerShell 5.1 は依然として疑わしいと判断されるスクリプト ブロックを、警告レベルの 4104 イベントとしてログに記録します。そのため、 いくつかの イベントを見つけるかもしれません。それらを完全な情報と誤解しないでください。
オンにすることは、今後に役立つのであって、既に発生したことには影響しません。グループポリシー設定を使用してください。 helps from now on, not for what already happened. Use the Group Policy setting 管理テンプレート → Windows コンポーネント → Windows PowerShell → PowerShell スクリプト ブロック ログの有効化、またはレジストリ値を直接設定します:
reg add “HKLMSOFTWAREPoliciesMicrosoftWindowsPowerShellScriptBlockLogging” /v EnableScriptBlockLogging /t REG_DWORD /d 1 /f
PowerShell 7 は、HKLMSOFTWAREPoliciesMicrosoftPowerShellCore の下に独自のポリシー キーを読み取ります。MSI ではなく zip からインストールされた場合、RegisterManifest.ps1 を $PSHOME から実行するまで、そのイベント チャネルが登録されていない可能性があります。
ログ容量に注意 実行されるすべてのスクリプトとモジュールはログに記録されます。チャネルの最大サイズを上げないと、数時間分しか保持されません。
機密情報に注意 管理者スクリプトは時々平文でパスワードや API キーを持ち、スクリプト ブロック ログはそれらを忠実に記録します。このファイルをどこかに送信する前にそれを心に留め、以下の LogTotal セクションを読んでください。
ログをエクスポート
イベント ビューアで、右クリックして Operational PowerShell の下にあり、「 すべてのイベントを保存…」を選択 コマンド ラインから:
:: スクリプト ブロックのみ
wevtutil epl “Microsoft-Windows-PowerShell/Operational” C:logsps_4104.evtx /q:”*[System[(EventID=4104)]]”
:: PowerShell 7
wevtutil epl “PowerShellCore/Operational” C:logspwsh.evtx
:: クラシックな「Windows PowerShell」ログ:ホスト コマンド ラインでのエンジン開始イベント
wevtutil epl “Windows PowerShell” C:logswindows_powershell.evtx
この最後のものは忘れがちで、取得する価値があります。イベント 400 は各エンジン開始を記録し、エンジンのバージョンも含まれます。現代的なシステムで EngineVersion が 2.0 である場合、通常は誰かが故意にダウングレードしてスクリプト ブロック ログを回避したことを意味します。
LogTotal にアップロードしてレビュー
LogTotal は EVTX をネイティブに読み込みます。最初に知っておくべきこと: LogTotal はまだ EVTX ファイルをサニタイズしていません。 [PROOF: confirm which formats the sanitize step covers today.] With PowerShell logs, that matters more than usual, because of the secrets mentioned above. Use EVTX uploads freely for test machines. For production hosts, get a yes from whoever owns data handling first.
- アップロード。 開いてください logtotal.com とファイルをドロップします。[証拠画面:アップロード画面、サイズ制限]
- レビュー。 [PROOF: what the results screen shows for PowerShell data]
実際のデータでこれがどのように見えるか。 私たちは使用しました [証拠:サンプルソース、例:スクリプト ブロック ログの有効化中のテスト VM、エンコードされたダウンロード クレードルと無害な AMSI 改ざんテスト ストリングを実行後]。LogTotal はこれをフラグしました [証拠:実際の発見]。[証拠:サンプルファイルへのリンク]
うまくいかないとき
| 症状 | 可能性のある原因 | Fix |
|---|---|---|
| 4104 イベントが全くない | スクリプト ブロック ログがオフで、疑わしいものが何も見つからなかった | 将来のために有効にしてください;まだ取得できる Windows PowerShell ログを確認してください |
| 警告の4104イベントしかない | ロギングがオフになっており、自動的に疑わしいブロックのみが記録されています | 上記と同様 |
| PowerShellCore/Operational が見つからない | PowerShell 7 がインストールされていないか、マニフェストが登録されていません | $PSHOME から RegisterManifest.ps1 を実行してください |
| 4104 テキストが読めない暗号文 | Protected Event Logging がオンです | 復号化証明書が必要です |
| ログが数時間しかカバーしていない | デフォルトサイズ、高ボリューム | チャネルの最大サイズを上げてください |
FAQ
スクリプト ブロック ログは難読化コードをキャッチしますか?
大部分はそうです。コンパイルされたスクリプト ブロックを記録します。難読化されたコードが次のステージを構築し実行する際、そのステージも別のブロックとしてログに記録され、多くの場合読みやすい形になります。
転写との違いは何ですか?
転写はセッションの入力と出力をテキスト ファイルとしてフォルダーに書き込みます。スクリプト ブロック ログはコード自体をイベント ログに記録します。これらはお互いに補完し合い、どちらも持っておく価値があります。