
セッションおよびチケットデータをダンプし、異常をスコアリングし、SIEMベースのインシデントレスポンス用にWindowsイベントログのインジケーターを生成することで、偽造されたKerberosチケットを検出します。
WonkaVision は、Kerberos チケットを分析し、それらが偽造されているかどうかを判断するための概念実証 (POC) ツールです。このツールは Charlie Clark と Andrew Schwartz によって作成されました。
この POC は、本番環境対応のエンタープライズアプリケーションとして意図されたものではなく、検出された IOA を公表しながら、偽造チケットをより適切に検出する方法に関するアイデアを生み出すためのものであることに注意してください。
Charlie Clark はこのコードベースの主著者です。
セッション情報のダンプ、Kerberos チケットのダンプ、Kerberos チケットの復号化/暗号化を行うコードの多くは Rubeus から取得されました。GetNCChanges コードは Vincent Le Toux の MakeMeEnterpriseAdmin から改作されました。
3つの機能があります:
/createkeys - ダンパーとアナライザーが使用する公開鍵/秘密鍵のペアを作成します/dump - サーバー/ワークステーションで実行し、関連する Kerberos チケットとともにセッションデータをダンプします/analyze - すべてのダンプファイルを含むディレクトリに対して実行し、ダンプ内のすべてのセッションとチケットを分析して、スコアを生成し、イベントログに書き込みますWonkaVision には次の依存関係があります:
講演のスライドデッキはこちらです。
WonkaVision は BSD 3-Clause ライセンスの下でライセンスされています。
楕円曲線ディフィー・ヘルマン (ECDH) 鍵交換アルゴリズムと P-256 曲線を使用して、公開鍵と秘密鍵のペアを生成します。デフォルトでは、鍵を base64 エンコードされた blob としてターミナルに出力しますが、鍵をファイルに書き込むための /outdir:PATH 引数もあります。
ファイルに書き込む場合、private.key ファイルは KRBTGT キーであるかのように保護する必要があります
例 1:
C:\WonkaVision>WonkaVision.exe /createkeys
====================PublicKey====================
RUNLMSAAAABN/odC5C5W7meBvf6rKmWOoVW9qRTRcyCJBFuvRbEvMFuMa8cV20W1e+rRd4f9jSfr5vDVJ0+I/SJsZI1ondws
==================End PublicKey==================
====================PrivateKey====================
RUNLMiAAAABN/odC5C5W7meBvf6rKmWOoVW9qRTRcyCJBFuvRbEvMFuMa8cV20W1e+rRd4f9jSfr5vDVJ0+I/SJsZI1ondwsto7Fc/J4akdJdCix51F0ELLKWlsdMDlkYx2shFEV3AA=
==================End PrivateKey==================
例 2:
C:\WonkaVision>WonkaVision.exe /createkeys /outdir:.
[!] Writing key files to ., be sure to protect the private key as if it was the krbtgt key!
[*] Written public key to .\public.key
[*] Written private key to .\private.key
C:\WonkaVision>dir
Volume in drive C is System
Volume Serial Number is 22BC-4361
Directory of C:\WonkaVision
10/14/2022 01:10 PM <DIR> .
10/14/2022 01:10 PM <DIR> ..
10/14/2022 01:10 PM 104 private.key
10/14/2022 01:10 PM 72 public.key
10/14/2022 01:08 PM 1,383,424 WonkaVision.exe
3 File(s) 1,383,600 bytes
2 Dir(s) 71,813,464,064 bytes free
Kerberos チケットを含むセッションのセッション情報を、KERB-CRED 形式の Kerberos チケット自体も含めてダンプします。これは、LsaCallAuthenticationPackage を実行してセッション情報、チケットキャッシュの情報を要求し、チケットを KERB-CRED として要求することで行います (Rubeus の dump コマンドと同じ方法)。
2つの主要な引数が必要です:
/publickey:KEY - ダンプされたデータの暗号化に使用される公開鍵/dumpdir:DIR - ダンプされたデータを保存するディレクトリデータがダンプされると、WonkaVision は次の処理を行います:
/publickey:KEY 引数で渡された公開鍵とともに自身の秘密鍵を使用して、対称鍵を導出します/dumpdir:DIR 引数で指定されたディレクトリに書き込みます特定のセッション (/luid:X 引数)、ユーザー (/user:USER 引数)、サービス (/service:SVC 引数)、および/またはサーバー (/server:Y 引数) を指定することも可能ですが、これらは現在あまりテストされていません。
例:
WonkaVision.exe /dump /publickey:\\server\dumpshare\public.key /dumpdir:\\server\dumpshare\dumps
/dump コマンドで作成されたダンプを分析します。/dumpdir:DIR が指すすべての子ディレクトリを再帰的にループし、見つかった .json ファイルをすべて読み取ります。json ファイルを逆シリアル化すると、その中に保存されているすべてのセッションと、セッション内のすべてのチケットをループし、可能な限り詳細に分析して、見つかった期待値からの逸脱ごとにスコアを割り当てます。その後、これらのスコアを合計して合計スコアを生成し、発見されたすべての問題を含む WonkaVision Session と WonkaVision Ticket のそれぞれについて、9988 と 9989 の 2 種類の Windows イベントを生成します。
LDAP クエリと DC 同期に代替の資格情報を使用するために、/creduser:USER、/creddomain:DOMAIN、/credpass:PASSWORD を指定することができます。ただし、これは実運用での使用は推奨されません。デバッグの問題を少し簡単にするために実装されました。
2つの主要な引数が必要です:
/privatekey:KEY - 暗号化されたダンプを復号化するために使用される秘密鍵/dumpdir:DIR - 暗号化されたダンプが保存されているディレクトリ例:
WonkaVision.exe /analyze /privatekey:C:\keys\private.key /dumpdir:C:\dumpshare\dumps
WonkaVision はターミナルを介して分析出力を返しますが、攻撃指標 (IOA) 分析のより詳細な説明は Windows アプリケーションイベントログチャネルにあります。ここでアナリストは、合計スコア、特定の IOA、IOA の理由、ツールスコアに関して、より深い洞察とコンテキストを得ることができます。9988 (セッションイベント) と 9989 (チケットイベント) の 2 つのイベントがそれぞれ書き込まれます。イベントのサンプルはこちらにあります。
以下は WonkaVision セッションイベント (9988) の例です:

以下は WonkaVision チケットイベント (9989) の例です:
EVTX ログにおける Mimikatz を使用した偽造ゴールデンチケットの可能性がある例:


上記のように、WonkaVision のログは Windows アプリケーションイベントログチャネルに書き込まれます。設定されている場合、これらのログは SIEM (例: Splunk、Sentinel など) に転送できます。
Splunk "Classic" WinEvnet ログ記録を使用した推奨クエリも使用できます:
index="wv_demo_wineventlog" source="WinEventLog:Application" (Total_Score>=8) | table _time,Total_Score,User,Machine_Name,Service_Principal_Name,Mimikatz_Score,Rubeus_Score,Impacket_Score,Cobalt_Strike_Score,IOA_Reasons
Splunk における Mimikatz WonkaVision を使用した偽造ゴールデンチケットの可能性がある例:

Splunk における WonkaVision の Rubeus を使用した偽造ゴールデンチケットの可能性がある例:
Sentinel でのログ記録も可能です。ただし、これには追加の解析が必要になる場合があります。以下は、Jonathan Johnson (@jsecurity101) による、WonkaVision が Sentinel でどのように解析されるかの例クエリです:
Event
| where Computer contains "asgard" and Source contains "Wonka"
| extend ParsedEventData=parse_xml(EventData)
| extend Data=ParsedEventData.DataItem.EventData.Data
| parse-where Data with *
"Total Score: " TotalScore:string
"Session: " Session:string
"Machine Name: " MachineName:string
"User: " User:string
"Service Principal Name: " ServicePrincipalName:string
"IOAs: " IOAs:string
"SessionUser: " IOA_SessionUser:string
"KDCCalled: " IOA_KDCCalled:string
"Mimikatz Score: " TScore_MimikatzScore:string
"Impacket Score: " TScore_ImpacketScore:string
"Rubeus Score: " TScore_RubeusScore:string
"Cobalt Strike Score: " TScore_CobaltStrikeScore:string
"IOA Reasons: " IOA_Reasons:string
| where IOA_SessionUser contains "thor"
Sentinel における WonkaVision からの偽造ゴールデンチケットの可能性がある例:

デモ 1 - ゴールデンチケット作成:
デモ 2 - 鍵ペア作成とセッション/チケットダンプ:
デモ 3 - ダンプ分析と Windows イベント出力:
デモ 4 - Kerberos ネットワークスニファ:
私たちの講演 (デモ 4) でデモンストレーションした Kerberos トラフィックスニファ POC は SharpPCap で実装されましたが、生のソケットを使用するように簡単に変更でき、その依存関係とシステムへの npcap のインストールの必要性を排除できます。
これは最小限の POC だったため、実装された指標のほとんどは、このスライドデッキ の18ページで詳述されている Charlie の YASCON 2020 講演で言及された暗号化されていない指標でしたが、さらに多くを実装できる可能性があります。