
ポストエクスプロイテーション EVTX アナライザ(BloodHound Mapping 用)
BloodHoundマッピングのためのポストエクスプロイテーションEVTXアナライザー
LogHoundはWindowsセキュリティイベントログ(.evtx)を収集・解析し、認証イベント、セッションデータ、ログオンメタデータを抽出してBloodHoundに取り込み、より深い敵対的テレメトリを提供します。
LogHoundはレッドチームやネットワークペネトレーションテスターが直面する特定の問題、すなわち横方向移動のターゲットを効率的に追跡し、アクティブなユーザーセッションを解読し、運用セキュリティ(OpSec)を損なうことなく確定的なマシン所有権を確立するために構築されました。
Active Directoryドメインコントローラ上のイベントログファイル(Security.evtx)はギガバイト級になることがあります。従来の読み込み手法はシステムメモリを消費したりクラッシュしたりして、痕跡を残すことがよくあります。LogHoundはこれを解決するために、堅牢なImpacketフレームワーク上でチャンクベースのストリーミングパラダイムを採用しています。
ネットワーク構造をマッピングし、ログイン頻度に基づいて実際にマシンを「所有」しているユーザーを特定し、正確な稼働時間を計算して勤務時間外(ナイトアウル)の操作を特定し、このインテリジェンスをBloodHound CE(v5+)にシームレスに取り込みます。
LogHoundはPython 3とImpacketに依存します。仮想環境の使用を強く推奨します。
# 1. リポジトリをクローン
git clone https://github.com/LogHound/LogHound.git
cd LogHound
# 2. (推奨)Python仮想環境を作成
python3 -m venv venv
source venv/bin/activate
# 3. 必要な依存関係をインストール
pip install -r requirements.txt
LogHoundのCLIは標準のImpacketモジュール(secretsdump.pyなど)と同じように動作し、明示的な操作モード(--localまたは--remote)の指定が必要です。
python loghound.py [[domain/]username[:password]@]<targetName or address> [options]
--local EVTX_FILE: ローカルマシンに既に存在する.evtxファイルを解析します。--remote: 指定された資格情報を使用してリモートターゲットからSecurity.evtxを取得します。-hashes LMHASH:NTHASH: Pass-The-Hash認証にNTLMハッシュを使用します。-k: Kerberos認証を使用します。KRB5CCNAME環境変数で指定された.ccacheファイルから資格情報を取得します。-aesKey hex_key: Kerberos用に特定のAES鍵(128または256ビット)を使用します。-no-pass: パスワードの対話入力を求めません。-keytab KEYTAB_FILE: 認証にKerberos keytabファイルを使用します。-dc-ip IP: ドメインコントローラの明示的なIPアドレス。-target-ip IP: ターゲットマシンの明示的なIPアドレス(NetBIOS名前解決失敗を回避)。-format {json,csv,md,all}: テキストベースの出力形式を指定します。注意: インタラクティブなHTMLレポートとBloodHound JSONファイルは常に生成されます。デフォルトはjsonです。-outputfile BASENAME: サブディレクトリに生成される出力レポートの名前の接頭辞。-threads N: 並列実行するパーサースレッド数(デフォルト: 4)。-chunk-size N: 解析チャンクあたりのログレコード数。値を小さくするとRAMオーバーヘッドが減少し、大きくすると解析が若干高速化します(デフォルト: 1000)。
LogHoundは高度に疎結合でメモリ効率の高い分析パイプラインを採用しています。
core/collector.py): SMB経由でターゲットに接続し、WMIを介してwevtutil epl Securityを実行し、セキュリティイベントログをターゲット上の一時ファイルにエクスポートします。エクスポートされたファイルはSMB経由でloot/YYYY-MM-DD_<target>_Security.evtxにダウンロードされ、上書きを防ぎます。core/parser.py): スレッド化されたチャンクパーサーが生の.evtxバイナリをストリーム処理し、解析されたイベントを一時的なJSON Linesバッファ(jsonl/loghound_dump.jsonl)に逐次出力します。中断された場合、正確なチェックポイントから再開できます。core/analyzer.py): .jsonlストリームを1行ずつ反復処理し、RAMフットプリントを低く抑えます。中間状態の辞書(セッション追跡、所有権スコアリング、ロジック追跡)を計算します。core/exporter.pyおよびcore/exporter_bloodhound.py): 分析RAM状態を最終的なhtml/およびjson/エクスポート形式に動的にフラッシュします。詳細なアーキテクチャロジックおよび過去の取り込みエラーについては、内部ドキュメントARCHITECTURE.mdを参照してください。
LogHoundはネイティブに6つのWindowsセキュリティイベントID(4624, 4634, 4648, 4768, 4769, 4776)をフィルタリングします。
これらのイベントを使用して、LogHoundは生成されたユーザーノードにPropertiesブロックを介して以下のカスタム属性を直接追加し、BloodHound CEを強化します。
ObjectIdentifierマッピングが既存のSharpHound取り込みと完全に一致することを保証します。ADドメインユーザーはネイティブのWindows SID(S-1-5-21-...)を受け取ります。BloodHoundノードの破損を防ぐため、ローカルマシンアカウントはフォールバックとしてUSER@HOSTNAME形式を正確に維持します。computers.jsonは、正確なネイティブSessionAPIResultデータ構造を使用して、マシンとユーザー間の実際の「HasSession」エッジを描画します。分析エンジンは、追跡されたログオン/ログオフイベント(複数日にまたがるセッションなどの異常値を除外)に基づいて稼働時間を計算します。
分析は、最も頻繁なインタラクティブログオンをカウントすることで、ワークステーションまたはIPアドレスの明示的な所有者を特定します。これにより、プライマリOwnerが元のノードにバインドされ、セカンダリOther Usersの配列が付与されます。
このソフトウェアは、教育、許可されたペネトレーションテスト、およびフォレンジック調査目的のみで提供されます。明示的な運用許可がないネットワークに対して使用しないでください。
このプロジェクトはApache License 2.0の下でライセンスされています。LICENSEファイルを参照してください。
| プロパティ名 | 型 | メトリクス説明 |
|---|
loghound_avg_start_time | String | ユーザーの観測されたすべての有効日において記録された平均最初のログオン時刻(00:00 HH:MM)を計算します。 |
loghound_avg_end_time | String | 1日あたりの平均最終アクティビティ(ログオフまたは最終タッチ)を計算します。 |
loghound_active_days | Integer | 平均時間配列の計算に使用された、検証済みの日数(適切なセッションが少なくとも1つある日)の合計。 |
loghound_outside_hours | Boolean | True/False。特にナイトアウルを識別します。ユーザーの計算されたアクティブな開始から終了までの時間帯が22:00から06:00の夜間範囲と重なる場合、Trueと評価されます。 |
Avg Hours per Day | Float | ユーザーの平均開始時間と平均終了時間の間の正確な時間差として内部計算されます(テキスト/HTMLレポートに表示)。 |