PowerShellスクリプトブロックログを有効化しエクスポートする方法

PowerShellスクリプトブロックログを有効化しエクスポートする方法

SOC Prime Team
SOC Prime Team linkedin icon フォローする

PowerShellスクリプトブロックログは、 アプリケーションとサービスのログ → Microsoft → Windows → PowerShell → 操作にイベント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セクションを読んでください。

ログをエクスポートする

イベントビューアで右クリック 操作 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をネイティブに読み込みます。知っておくべきことの1つ: LogTotalはまだEVTXファイルを消毒しません。 PowerShellログの消毒が通常以上に重要なのは、上記の秘密保持のためです。テストマシンでは自由にEVTXをアップロードしてください。プロダクションホストでは、データ取り扱いを担当する人からの承認をまず得てください。

  1. アップロード。 開く logtotal.com してファイルをドロップします。
  2. レビュー。

問題が発生したとき

症状考えられる原因Fix
4104イベントが全くないスクリプトブロックのロギングがオフで、何も疑わしく思われませんでした今後のために有効化して、Windows PowerShellログで得られるものを確認
少数の注意イベントとしての4104イベントロギングはオフで、自動の疑わしいブロックロギングを見ています上記と同じ
PowerShellCore/Operationalが見つからないPowerShell 7がインストールされていないか、そのマニフェストが登録されていない$PSHOMEからRegisterManifest.ps1を実行してください
4104のテキストが読めない暗号文書Protected Event Logging がオン復号化証明書が必要
ログは数時間しか続かないデフォルトサイズ、ボリューム多チャンネルの最大サイズを増やします

FAQ

スクリプトブロックのロギングは難読化されたコードをキャッチしますか?

主に、はい。スクリプトブロックはコンパイルされた状態で記録されます。難読化されたコードが次のステージを構築して実行すると、そのステージが独自のブロックとしてログに記録され、しばしば読みやすい形で表示されます。

トランスクリプションとの違いは何ですか?

トランスクリプションはセッション入力と出力のテキストファイルをフォルダに書き出します。スクリプトブロックのロギングはコード自体をイベントログに記録します。これらは補完し合い、どちらも価値があります。

SOC PrimeのDetection as Codeプラットフォームに参加し ビジネスに最も関連性のある脅威に対する可視性を向上させましょう。開始して即座に価値をもたらすためには、今すぐSOC Primeの専門家とのミーティングを予約してください。