
يكتشف تذاكر Kerberos المزورة عن طريق تفريغ بيانات الجلسة والتذاكر، وتقييم الشذوذ، وإنشاء مؤشرات سجل أحداث Windows للاستجابة للحوادث القائمة على SIEM.
WonkaVision هي أداة إثبات مفهوم (POC) لتحليل تذاكر Kerberos ومحاولة تحديد ما إذا كانت مزورة. تم إنشاء هذه الأداة بواسطة Charlie Clark و Andrew Schwartz.
تجدر الإشارة إلى أن إثبات المفهوم هذا ليس المقصود منه أن يكون تطبيقًا مؤسسيًا جاهزًا للإنتاج، بل لتوليد أفكار حول كيفية تحسين اكتشاف التذاكر المزورة مع نشر مؤشرات الهجوم (IOAs) المكتشفة.
Charlie Clark هو المؤلف الأساسي لهذه القاعدة البرمجية.
تم أخذ الكثير من الكود الخاص بتفريغ معلومات الجلسة، وتفريغ تذاكر Kerberos وفك تشفير/تشفير تذاكر Kerberos من Rubeus. تم تكييف كود GetNCChanges من مشروع MakeMeEnterpriseAdmin الخاص بـ Vincent Le Toux.
لديها 3 وظائف:
/createkeys - إنشاء زوج مفاتيح عام/خاص لاستخدامه من قبل أداة التفريغ والمحلل/dump - يتم تشغيله على الخوادم/محطات العمل، لتفريغ بيانات الجلسة مع تذاكر Kerberos المرتبطة بها/analyze - يُشغَّل على مجلد يحتوي على جميع ملفات التفريغ، ويحلل جميع الجلسات والتذاكر داخل التفريغات، وينشئ درجات ويكتب إلى سجل الأحداثلدى WonkaVision التبعيات التالية:
شريحة العرض التقديمي من المحاضرة موجودة هنا.
WonkaVision مرخصة بموجب رخصة BSD 3-Clause.
يُنشئ زوج مفاتيح عام وخاص باستخدام خوارزمية تبادل مفاتيح المنحنى الإهليلجي Diffie-Hellman (ECDH) باستخدام منحنى P-256. بشكل افتراضي، يخرج المفاتيح إلى الطرفية على شكل كتل مشفرة بـ base64 ولكن يحتوي على وسيط /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، بما في ذلك تذاكر Kerberos نفسها بتنسيق KERB-CRED. يقوم بذلك عن طريق تنفيذ LsaCallAuthenticationPackage لطلب معلومات الجلسة، ومعلومات حول ذاكرة التخزين المؤقت للتذاكر، وطلب التذاكر بصيغة KERB-CREDs (بنفس الطريقة التي يقوم بها أمر dump في Rubeus).
مطلوب وسيطان أساسيان:
/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، يتنقل عبر جميع الجلسات المخزنة فيه وجميع التذاكر داخل الجلسات ويحللها بأقصى عمق ممكن، مع تخصيص درجة لكل انحراف عن المتوقع. بعد ذلك، يقوم بجمع هذه الدرجات لإنتاج درجة إجمالية وينشئ نوعين مختلفين من أحداث Windows، 9988 و 9989، لـ جلسة WonkaVision و تذكرة WonkaVision على التوالي، يحتويان على جميع المشكلات المكتشفة.
من الممكن تحديد /creduser:USER و /creddomain:DOMAIN و /credpass:PASSWORD لاستخدام بيانات اعتماد بديلة لاستعلامات LDAP و DCsync. ومع ذلك، لا يُنصح بذلك في الاستخدام الإنتاجي، فقد تم تنفيذها لتسهيل تصحيح الأخطاء.
مطلوب وسيطان أساسيان:
/privatekey:KEY - المفتاح الخاص المستخدم لفك تشفير التفريغات المشفرة/dumpdir:DIR - المجلد الذي تُخزن فيه التفريغات المشفرةمثال:
WonkaVision.exe /analyze /privatekey:C:\keys\private.key /dumpdir:C:\dumpshare\dumps
على الرغم من أن WonkaVision ستعيد مخرجات التحليل عبر الطرفية، يمكن العثور على وصف أكثر تفصيلاً لتحليل مؤشرات الهجوم (IOA) في قناة سجل أحداث تطبيقات Windows. هنا سيحصل المحلل على رؤية وسياق أكبر فيما يتعلق بالدرجة الإجمالية، ومؤشرات الهجوم المحددة، وسبب(أسباب) مؤشرات الهجوم، ودرجات الأدوات. يتم كتابة حدثين، 9988 (حدث الجلسة) و 9989 (حدث التذكرة) على التوالي. يمكن العثور على عينة من الأحداث هنا.
فيما يلي مثال لحدث جلسة WonkaVision (9988):

فيما يلي مثال لحدث تذكرة WonkaVision (9989):
مثال على تذكرة ذهبية مزورة محتملة باستخدام Mimikatz في سجلات EVTX:


كما ذُكر أعلاه، تُكتب سجلات WonkaVision إلى قناة سجل أحداث تطبيقات Windows. إذا تم تكوين ذلك، يمكن إعادة توجيه هذه السجلات إلى SIEM (مثل Splunk أو Sentinel أو غيرها).
يمكن أيضًا استخدام استعلام مقترح باستخدام تسجيل WinEvnet "Classic" في Splunk:
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
مثال على تذكرة ذهبية مزورة محتملة باستخدام Mimikatz من WonkaVision في Splunk:

مثال على تذكرة ذهبية مزورة محتملة باستخدام Rubeus من WonkaVision في Splunk:
يمكن أيضًا إجراء التسجيل باستخدام 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"
مثال على تذكرة ذهبية مزورة محتملة من WonkaVision في Sentinel:

العرض 1 - إنشاء التذكرة الذهبية:
العرض 2 - إنشاء زوج المفاتيح وتفريغ الجلسة/التذكرة:
العرض 3 - تحليل التفريغ وإخراج أحداث Windows:
العرض 4 - متشمم شبكة Kerberos:
إن POC متشمم حركة مرور Kerberos الذي عرضناه في محاضرتنا (العرض 4) تم تنفيذه باستخدام SharpPCap ولكن يمكن تعديله بسهولة لاستخدام المقابس الخام (raw sockets)، مما يزيل هذه التبعية وكذلك الحاجة إلى تثبيت npcap على النظام.
نظرًا لأنه كان مجرد POC بسيط، فإن معظم المؤشرات التي تم تنفيذها كانت المؤشرات غير المشفرة المذكورة في محاضرة Charlie في YASCON 2020 والمفصلة في الشريحة 18 من هذه الشرائح، على الرغم من إمكانية تنفيذ المزيد منها.