
ターゲットシステム上でKerberos TGTを自動的に抽出または更新するためのAsync BOF。
このリポジトリには、2つの非同期ビーコンオブジェクトファイル(BOF)が含まれています。1つ目は tgt-monitor で、Kerberos ログオンイベントを監視し、新しい Kerberos TGT がキャプチャされるたびにエージェントを起動します。Rubeus の monitor コマンドと同様に、この BOF は無期限に実行され、定期的にシステム上の LSA チケットキャッシュをチェックします。新しい TGT が検出されると、チケットのメタデータを表示し、pass-the-ticket 攻撃による横方向の移動に使用できる base64 エンコードされた kirbi blob を出力します。2つ目は tgt-renew で、残りの有効期間が指定されたしきい値(例:15分)を下回った場合に、システム上の TGT を自動的に更新します。
[!Important] このリポジトリのBOFは、非同期オブジェクトファイル読み込み機能を必要とします。この機能は Conquest フレームワークによって提供されます。
両方のBOFは、NT AUTHORITY\SYSTEM コンテキストから実行する必要があります。特権は同じロジックに従ってチェックされます。
SeImpersonatePrivilege 経由)からの使用が可能になります。これでもSYSTEMレベルのアクセスが得られない場合、BOFは終了します。以下の手順は、BOFが停止イベントによってキャンセルされるまでループで繰り返されます。ユーザー定義の間隔がポーリングの遅延を設定します。
--user 引数が指定された場合、そのユーザー名に一致するセッションのみが考慮されます。BeaconWakeup() が呼び出されてエージェントがチェックインし、出力を返すように強制されます。
--user 引数が指定された場合、そのユーザー名に一致するセッションのみが考慮されます。RenewUntil 時間を過ぎている場合、期限切れとしてフラグが立てられ、再認証が必要です。BeaconWakeup() が呼び出されます。
チケット更新プロセスは以下の手順を含みます:
このリポジトリは、以下の2つのコマンドを実装した Conquest モジュール を提供します。
tgt-monitor BOF は、新しい TGT がキャプチャされると警告し、Base64 エンコードされた blob として返します。オブジェクトファイルには以下の引数を渡す必要があります:
| 名前 | 型 | 説明 |
|---|---|---|
interval | int | チェック間のタイムアウト(秒)。 |
targetUsers | string | 大文字小文字を区別しない、ターゲットユーザー名のカンマ区切りリスト。このフィールドが設定されている場合、指定されたユーザーの TGT のみが取得されます。それ以外の場合は、すべてのユーザーの TGT が収集されます。コンピュータアカウントは末尾に が必要です。 |
Usage: tgt-monitor [--interval interval] [--user user]
Example: tgt-monitor --interval 5 --user DC01$
Optional arguments:
--interval interval INT Polling interval in seconds (default: 60).
--user user STRING Comma-separated list of target usernames (default: all users).

エンコードされたチケットは、Rubeus.exe ptt /ticket:<base64> または impacket-ticketConverter を使用してさらに横方向の移動に直接利用できます(下のスクリーンショット参照)。Conquest では、ptt コマンドを使用して、現在のログオンセッションにチケットを直接注入し、対象ユーザーを偽装することが可能です。

tgt-renew BOF は、もうすぐ期限切れになるチケットを、更新できなくなるまで自動的に更新します。オブジェクトファイルには以下の引数を渡す必要があります:
Usage: tgt-renew [--interval seconds] [--threshold minutes] [--user user] [--luid luid]
Example: tgt-renew --luid 0x3e4 --interval 300 --threshold 30
Optional arguments:
--interval seconds INT Polling interval in seconds (default: 60).
--threshold minutes INT Ticket renewal threshold in minutes (default: 15).
--user user STRING Comma-separated list of target usernames (default: all users).
--luid luid STRING Comma-separated list of target LUIDs (default: all LUIDs).
--user フラグと --luid フラグは相互排他的です。

git clone https://github.com/jakobfriedl/tgt-monitor-bof
cd tgt-monitor-bof
make
その後、Conquest の Script Manager を使用して dist/tgt-monitor.py モジュールをロードします。
この Beacon Object File の実装は、以下のプロジェクトに基づいています:
$| 名前 | 型 | 説明 |
|---|
interval | int | チェック間のタイムアウト(秒)。 |
threshold | int | 更新しきい値(分)。EndTime までの時間がこのしきい値より短くなるとチケットが更新されます。 |
targetUsers | string | 大文字小文字を区別しない、ターゲットユーザー名のカンマ区切りリスト。このフィールドが設定されている場合、指定されたユーザーの TGT のみが更新されます。それ以外の場合は、すべてのユーザーの TGT が更新されます。コンピュータアカウントは末尾に $ が必要です。 |
targetLuids | string | 大文字小文字を区別しない、ターゲット LUID のカンマ区切りリスト。このフィールドが設定されている場合、指定された LUID の TGT のみが更新されます。 |