PowerShell スクリプトブロックログの解析
使用するタイミング
- PowerShell スクリプトブロックログの分析が必要なセキュリティインシデントを調査する場合
- このドメインに関する検知ルールや脅威ハンティングクエリを作成する場合
- SOC アナリストがこの分析タイプの構造化された手順を必要とする場合
- 関連する攻撃手法に対するセキュリティ監視カバレッジを検証する場合
前提条件
- セキュリティオペレーションの概念とツールに関する知識
- 安全に実行するためのテスト環境またはラボ環境へのアクセス
- 必要な依存関係がインストールされた Python 3.8+
- テストアクティビティに対する適切な承認
手順
- 依存関係のインストール:
pip install python-evtx lxml - PowerShell Operational ログの収集:
Microsoft-Windows-PowerShell%4Operational.evtx - python-evtx を使用してイベント ID 4104 のエントリを解析し、ScriptBlockText、ScriptBlockId、MessageNumber/MessageTotal を抽出して、複数パートのスクリプト再構築を行います。
- 検出ヒューリスティックを適用:
- Base64 エンコードされたコマンド (
-EncodedCommand、FromBase64String) - ダウンロードクラドル (
DownloadString、DownloadFile、Invoke-WebRequest、Net.WebClient) - AMSI バイパスパターン (
AmsiUtils、amsiInitFailed) - 難読化指標 (高エントロピー、チックマーク挿入、文字列連結)
- Base64 エンコードされたコマンド (
- 再構築されたスクリプト、リスクスコア、MITRE ATT&CK マッピングを含むレポートを生成します。
python scripts/agent.py --evtx-file /path/to/PowerShell-Operational.evtx --output ps_analysis.json
例
エンコードされたコマンド実行の検出
import base64
if "-encodedcommand" in script_text.lower():
encoded = script_text.split()[-1]
decoded = base64.b64decode(encoded).decode("utf-16-le")
マルチブロックスクリプトの再構築
複数の 4104 イベントに分割されたスクリプトは、共通の ScriptBlockId を持ちます。MessageNumber で並べたブロックを連結して、完全なスクリプトを復元します。