
إطار كشف التعتيم في PowerShell


Revoke-Obfuscation هو إطار عمل لاكتشاف التعتيم في PowerShell متوافق مع PowerShell v3.0+.
دانيال بوهانون (@danielhbohannon) لي هولمز (@Lee_Homes)
منشور المدونة: https://www.fireeye.com/blog/threat-research/2017/07/revoke-obfuscation-powershell.html
الورقة البيضاء: https://www.fireeye.com/content/dam/fireeye-www/blog/pdfs/revoke-obfuscation-report.pdf
في خريف 2016 وربيع 2017، أصدر دانيال بوهانون (@danielhbohannon) إطارين مفتوحي المصدر لتعتيم PowerShell: Invoke-Obfuscation و Invoke-CradleCrafter. كان الهدف من هذا البحث وهذه الأطر هو إبراز حدود النهج القائم على التوقيعات فقط في اكتشاف استخدام المهاجمين لـ PowerShell. كانت الرسالة الأساسية للمدافعين هي التركيز على اكتشاف مؤشرات التعتيم بالإضافة إلى الصيغ المشبوهة المعروفة.
ومع ذلك، فإن المستويات القصوى من العشوائية في Invoke-Obfuscation و Invoke-CradleCrafter إلى جانب خيارات التعتيم على مستوى الرموز (token-layer) التي لا يتم إزالة تعتيمها في تسجيل كتلة البرنامج النصي لـ PowerShell، دفعت المدافعين إلى البحث عن وسيلة جديدة وقابلة للتطوير للكشف العام عن تقنيات التعتيم المعروفة وغير المعروفة.
بعد بضعة أسابيع من إصدار Invoke-Obfuscation، كتب لي هولمز (@Lee_Homes) منشورًا في مدونته بعنوان المزيد عن اكتشاف PowerShell المعتم سلط فيه الضوء على تقنيات التحليل الإحصائي لاكتشاف السمات الشاذة في البرامج النصية المعتمة بشكل كبير، خاصة تلك المنتجة بواسطة Invoke-Obfuscation.
منذ هذا التبادل، أصبح دانيال ولي صديقين حميمين وشاركا العديد من الاهتمامات/الهواجس المشتركة - ألا وهي حب القهوة الفاخرة والسعي لإنشاء طرق جديدة لاكتشاف PowerShell المعتم بشكل شامل.
كمية الوقت الذي قضاه كلا فريقَي الدفاع (Blue Teamers) في الغوص في البحث ورمز الإثبات (POC) ستعادل عدة آلاف من أكواب القهوة المصنوعة في Chemex بافتراض وقت تخمير مستهدف قدره 4 دقائق (على افتراض أن عشاق قهوة آخرين على الأقل قد أدركوا هذه التورية حول "السكب").
Revoke-Obfuscation هو المنتج النهائي المصنوع يدويًا لهذه الجهود.
Revoke-Obfuscation هو إطار عمل مفتوح المصدر متوافق مع PowerShell v3.0+ لاكتشاف أوامر وبرامج PowerShell النصية المعتمة على نطاق واسع. يعتمد على AST (شجرة النحو المجردة) لـ PowerShell لاستخراج آلاف الميزات بسرعة من أي برنامج PowerShell نصي مدخل، ومقارنة متجه الميزات هذا بأحد عدة متجهات ميزات مرجحة محددة مسبقًا والتي تم حسابها من خلال عملية تعلم آلي ضد مجموعة من أكثر من 408 ألف برنامج PowerShell نصي. يمكن تنزيل هذه المجموعة الكاملة من (https://aka.ms/PowerShellCorpus). يمكنك العثور على تفاصيل حول جوانب علم البيانات لهذا العمل في الدليل الفرعي 'DataScience' للمستودع.
نظرًا لأن Revoke-Obfuscation يعتمد على استخراج الميزات والمقارنة بدلاً من مؤشرات الاختراق (IOCs) البحتة أو مطابقة التعبيرات المنتظمة (RegEx)، فهو أكثر قوة في قدرته على تحديد تقنيات التعتيم غير المعروفة حتى عندما يحاول المهاجمون تهدئة تعتيمهم عن طريق حشوها بمحتويات برنامج نصي غير معتم لقلب الفحوصات الأساسية مثل تحليل تردد الأحرف.
يمكن لـ Revoke-Obfuscation قياس معظم برامج PowerShell النصية المدخلة بسهولة في غضون 100-300 مللي ثانية. يسمح هذا المستوى من الأداء للمؤسسة بقياس تعتيم (في أسوأ الأحوال) أكثر من 12 ألف برنامج PowerShell نصي في الساعة دون الحاجة إلى فهرسة سجلات كتلة البرنامج النصي لـ PowerShell في SIEM.
أخيرًا، يدعم Revoke-Obfuscation وظيفة القائمة البيضاء (whitelisting) بسهولة بالإضافة إلى القدرة على استيعاب سجلات الأحداث التشغيلية لـ PowerShell وإعادة تجميع كتل البرامج النصية المسجلة عبر العديد من سجلات كتلة البرنامج النصي EID 4104. يمكن أن يصبح بسهولة متجرًا شاملاً لاستيعاب سجلات أحداث PowerShell التشغيلية للبيئة، وإعادة تجميع جميع البرامج النصية في تلك السجلات وجعلها فريدة، ثم تحديد برامج PowerShell النصية المعتمة التي تستحق الفحص اليدوي.
الكود المصدري لـ Revoke-Obfuscation مستضاف على Github، ويمكنك تنزيله واستنساخه ومراجعته من هذا المستودع (https://github.com/danielbohannon/Revoke-Obfuscation). يرجى الإبلاغ عن المشكلات أو طلبات الميزات من خلال متتبع الأخطاء الخاص بـ Github المرتبط بهذا المشروع.
للتثبيت (من Github):
Import-Module .\Revoke-Obfuscation.psd1
يمكن أيضًا تثبيت الكود المصدري مباشرةً من معرض PowerShell عبر الأوامر التالية:
للتثبيت (من معرض PowerShell):
Install-Module Revoke-Obfuscation
Import-Module Revoke-Obfuscation
سيوفر Revoke-Obfuscation برنامجًا تعليميًا مفصلاً بالإضافة إلى بعض المفاجآت الممتعة الأخرى. ولكن إذا لم تكن مهتمًا بالتسلية، فيمكنك ببساطة تشغيل Get-Help Measure-RvoObfuscation لرؤية صيغة الاستخدام أو متابعة القراءة.
هناك وظيفتان رئيسيتان مستخدمتان في هذا الإطار:
إذا كنت بحاجة إلى إعادة تجميع واستخراج سجلات كتلة البرنامج النصي من سجلات PowerShell التشغيلية، فإن Get-RvoScriptBlock هي الوظيفة المفضلة لديك. تقوم تلقائيًا بإرجاع كتل البرامج النصية الفريدة فقط وتستبعد قيم كتلة البرنامج النصي الافتراضية التي لا تعتبر ضارة. يمكن تجاوز ذلك باستخدام المفتاح -Deep.
Get-RvoScriptBlock -Path 'C:\Windows\System32\Winevt\Logs\Microsoft-Windows-PowerShell%4Operational.evtx' -VerboseGet-ChildItem .\Demo\demo.evtx | Get-RvoScriptBlock -VerboseGet-WinEvent -LogName Microsoft-Windows-PowerShell/Operational | Get-RvoScriptBlock -Verboseيدعم Get-RvoScriptBlock أيضًا نتائج تدقيق MIR/HX بالإضافة إلى سجلات PowerShell التشغيلية المستردة عبر مشروع Matt Graeber's (@mattifestation) CimSweep
(https://github.com/PowerShellMafia/CimSweep). بالنسبة لـ CimSweep، هناك تعديل طفيف في السجل مطلوب لخداع WMI للاستعلام عن سجل أحداث غير كلاسيكي. يمكن العثور على التفاصيل في قسم NOTES الخاص بـ Get-RvoScriptBlock.
Get-ChildItem C:\MirOrHxAuditFiles\*_w32eventlogs.xml | Get-RvoScriptBlock -VerboseGet-CSEventLogEntry -LogName Microsoft-Windows-PowerShell/Operational | Get-RvoScriptBlockيمكن العثور على مثال كامل مقابل بيانات الاختبار المسجلة في demo.evtx أدناه:
$obfResults = Get-WinEvent -Path .\Demo\demo.evtx | Get-RvoScriptBlock | Measure-RvoObfuscation -OutputToDisk -Verbose
يمكن العثور على مثال كامل مقابل البرامج النصية الاختبارية المستضافة محليًا وعن بُعد أدناه:
Measure-RvoObfuscation -Url 'http://bit.ly/DBOdemo1' -Verbose -OutputToDiskGet-Content .\Demo\DBOdemo*.ps1 | Measure-RvoObfuscation -Verbose -OutputToDiskGet-ChildItem .\Demo\DBOdemo*.ps1 | Measure-RvoObfuscation -Verbose -OutputToDiskيقوم المفتاح -OutputToDisk تلقائيًا بإخراج جميع البرامج النصية المعتمة إلى .\Results\Obfuscated. بغض النظر، سيتم إرجاع جميع النتائج ككائنات PSCustomObject تحتوي على محتوى البرنامج النصي بالإضافة إلى بيانات وصفية مثل درجة التعتيم، وقت القياس، نتيجة القائمة البيضاء، جميع ميزات البرنامج النصي المستخرجة، إلخ.
ثلاثة خيارات للقائمة البيضاء موجودة في موقعين في Revoke-Obfuscation:
-WhitelistFile .\files\*.ps1,.\more_files\*.ps1,.\one_more_file.ps1-WhitelistContent 'string 1 to whitelist','string 2 to whitelist'-WhitelistRegex 'regex 1 to whitelist','regex 2 to whitelist'إذا كنت مهتمًا بإنشاء مجموعة بيانات تدريب خاصة بك وإنشاء متجه مرجح لوظيفة Measure-Vector، فيمكن تشغيل ModelTrainer.cs/ModelTrainer.exe مقابل مجموعة بيانات موسومة. سيقوم الأمر التالي باستخراج متجهات الميزات من جميع البرامج النصية المدخلة وتجميعها في ملف CSV واحد يُستخدم في مرحلة التدريب هذه:
Get-ChildItem .\*.ps1 | ForEach-Object { [PSCustomObject](Get-RvoFeatureVector -Path $_.FullName) | Export-Csv .\all_features.csv -Append }
أخيرًا، إذا كنت تبحث عن منصة لإنشاء مؤشرات (IOCs) تستغل قوة AST لـ PowerShell (شجرة النحو المجردة) - والتي نوصي بها بشدة لتحديد نشاط PowerShell الضار غير المعتم - فإن PS Script Analyzer هو إطار ممتاز مصمم للتعامل مع مثل هذه المهام.
تم إصدار Revoke-Obfuscation بموجب ترخيص Apache 2.0.
v1.0 - 2017-07-27 Black Hat USA & 2017-07-30 DEF CON: الإصدار العام لـ Revoke-Obfuscation.