
مولِّد تعمية أوامر cmd.exe ومنصة اختبار الكشف

Invoke-DOSfuscation هو إطار عمل لتعتيم أوامر cmd.exe متوافق مع PowerShell v2.0+. (الورقة البيضاء: https://www.fireeye.com/blog/threat-research/2018/03/dosfuscation-exploring-obfuscation-and-detection-techniques.html)
على مدار السنوات القليلة الماضية كمستشار لاستجابة الحوادث، شهدت مجموعة كبيرة من تقنيات التعتيم والتهرب التي يستخدمها العديد من الجهات الفاعلة في التهديدات. بعض هذه التقنيات معقدة بشكل لا يُصدق بينما البعض الآخر بسيط بشكل رائع، ولكن كلا الفئتين تُستخدمان للتهرب من الكشف. من خلال تجربتي، وجدت أن APT32 و FIN7 هما الأكثر إثارة للاهتمام في استخدام تقنيات التعتيم، وإبداعهما جدير بالملاحظة.
في يونيو 2017، بعد سلسلة من تقنيات تعتيم سطر الأوامر المتزايدة، استخدمت FIN7 إمكانية استبدال سلاسل متغيرات البيئة الأصلية في cmd.exe والتي لم أكن أعلم بوجودها في ذلك الوقت. بفضل هذا الاكتشاف، شاركت في تأليف مقال مع Nick Carr (@ItsReallyNick) بعنوان Obfuscation in the Wild: Targeted Attackers Lead the Way in Evasion Techniques حيث أبرزنا تقنيات التعتيم التي حددناها في العديد من المجموعات في البرية.
في عطلة نهاية الأسبوع التالية، استكشفت وظيفة الاستبدال الأصلية هذه في cmd.exe وقمت ببناء وإطلاق أداة بسيطة لإثبات المفهوم تسمى Out-FINcodedCommand. بمجرد إصدار هذه الأداة، تراجعت وفكرت، "ربما هناك المزيد من قدرات التعتيم داخل cmd.exe التي يجب أن أستكشفها وأبني اكتشافات لها قبل أن نكتشف استخدامها في البرية."
كانت تلك بداية بحثي الذي قادني في النهاية إلى تطوير إطار عمل Invoke-DOSfuscation هذا.
يزداد استخدام المهاجمين لتقنيات التعتيم للتهرب من الاكتشافات التي تعتمد بشكل كبير على قيم وسيطات سطر الأوامر. لمواجهة ذلك، أمضيت خمسة أشهر في البحث وتطوير تقنيات التعتيم والتشفير الأصلية في cmd.exe حتى أتمكن من إنشاء اكتشافات قوية لهذه التقنيات الأساسية التي لم أرها بعد في البرية.
الغرض الوحيد من هذا الإطار هو تمكين المدافعين من إنشاء آلاف الأوامر النموذجية المعتمة بشكل عشوائي لاختبار وضبط قدراتهم على الكشف ضد هذه التقنيات. لقد قمت بتضمين أداة الاختبار الكاملة الخاصة بي في هذا الإصدار لأتمتة عملية اختبار الكشف هذه.
بطرق عديدة، يتيح هذا الإطار للمدافعين اختبار تقنيات تعتيم cmd.exe بشكل عشوائي، واكتشفت أثناء بناء هذه الأداة العديد من فرص التعتيم الإضافية التي لم أكتشفها في بحثي الأولي.
كما شاركت هذه المعلومات مع Microsoft في نوفمبر 2017 واستفسرت عن فرص لتوفير رؤية إضافية في الأعمال الداخلية لاستخدام cmd.exe للتقنيات الأساسية التي هي اللبنات الأساسية لجميع وظائف التعتيم المضمنة في هذا الإطار.
كمدافع، الهدف النهائي من هذا البحث والتطوير هو رفع الوعي ودفع التغيير الذي سيساعد المستخدمين النهائيين على حماية أنفسهم بشكل أفضل ضد TTPs (الأدوات والتقنيات والإجراءات) المتغيرة باستمرار للمهاجمين.
على الرغم من أن جميع مكونات التعتيم مبنية في وظائف رسمية قائمة بذاتها، فإن معظم المستخدمين سيجدون وظيفة Invoke-DOSfuscation أسهل طريقة لاستكشاف وتصور تقنيات التعتيم التي يدعمها هذا الإطار. ومع ذلك، للاختبار العشوائي والاستكشاف العميق للعديد من خيارات الضبط لكل فئة تعتيم، يُوصى باستخدام الوظائف الفردية مباشرة خارج غلاف الوظيفة Invoke-DOSfuscation.
لتمكين المدافعين من البدء بسهولة في اختبار العشوائية واختبار أفكار الكشف، يتضمن هذا الإطار أيضًا وحدة إضافية، Invoke-DOSfuscationTestHarness.psm1 التي يتم استيرادها تلقائيًا مع بقية المشروع. الوظيفتان الرئيسيتان في هذه الوحدة للمدافعين هما:
Invoke-DosTestHarness - يُنشئ (بإعدادات الوسائط الافتراضية) أكثر من 1000 أمر معتم بشكل عشوائي من قائمة أوامر الاختبار لأغراض سلامة الحمولة والكشف. كل تكرار لأداة الاختبار يختار عشوائيًا جميع وسائط الوظائف المتاحة ويستدعي وظائف التعتيم الأربعة مباشرة بدلاً من استخدام قيم -ObfuscationLevel (1-3) القياسية التي تستخدمها وظيفة القائمة Invoke-DOSfuscation افتراضيًا. هذا ينتج نطاقًا أوسع بكثير من مخرجات التعتيم التي يمكن بناء اكتشافات أكثر شمولاً ضدها. يتم بعد ذلك فحص كل أمر معتم مقابل الوظيفة الثانية:Get-DosDetectionMatch - يتحقق من أمر الإدخال (سلسلة) مقابل جميع قيم الكشف بالتعبير العادي المدخلة في مصفوفة $regexDetectionTerms في الوظيفة. يتم استدعاء هذه الوظيفة تلقائيًا بواسطة Invoke-DosTestHarness ولكن يمكن استدعاؤها بشكل مستقل أيضًا.في نهاية كل استدعاء لأداة الاختبار، سيتم عرض إحصائيات تنفيذ الأوامر الصحيحة والكشف حتى يتمكن المدافعون من التعرف بسرعة على الأوامر التي تحتوي على 0 أو 1-2 تطابقات كشف فقط والتي قد تحتاج إلى تغطية أفضل.
أخيرًا، لتجنب إجبار المدافعين على تشغيل أداة الاختبار للبدء، قمت بتوفير 1000 أمر نموذجي في دليل Samples مقسمة عبر كل وظيفة من وظائف التعتيم الأربعة. تتضمن التنسيقات ملفات .txt، وملفات .evtx الخاصة بـ Security و Sysmon. لقد قمت بتضمين بضع قواعد كشف نموذجية في مصفوفة $regexDetectionTerms في Invoke-DOSfuscationTestHarness.psm1، ولكنك ستحتاج إلى إضافة واختبار المزيد من القواعد أثناء اختبار الأوامر المعتمة النموذجية). بالإضافة إلى ملفات .txt التي تحتوي على الأوامر الخام، هناك ملفات .evtx تحتوي على سجلات تنفيذ العملية (أحداث Sysmon EID 1) لكل من الأوامر النموذجية البالغ عددها 1000. سجلات الأحداث هذه مفيدة بشكل كبير لبناء مؤشرات بناءً على عمليات الطفل الدقيقة التي هي نتاج ثانوي للعديد من تقنيات البناء التي يعتمد عليها Invoke-DOSfuscation.
للبدء، اعرض الأوامر المعتمة النموذجية التي لا تتطابق مع أي من قواعد الكشف الحالية الخاصة بك ببساطة عن طريق تشغيل:
(Get-Content .\Samples\STATIC_1-of-4_Out-DosConcatenatedCommand.txt) | where-object { -not (Get-DosDetectionMatch -Command $_).Detected }
لاختبار كل من الأوامر المعتمة وعمليات الطفل من سجلات أحداث التنفيذ المسجلة في Security EID 4688، ببساطة قم بتشغيل:
(Get-WinEvent -Path .\Samples\DYNAMIC_SECURITY_EID4688_1-of-4_Out-DosConcatenatedCommand.evtx) | where-object { $_.Message } | foreach-object { ($_.Message.Split("`n") | select-string '^\tProcess Command Line:\t') -replace '^\tProcess Command Line:\t','' } | where-object { -not (Get-DosDetectionMatch -Command $_).Detected }
شفرة المصدر لـ Invoke-DOSfuscation مستضافة على Github، ويمكنك تنزيلها وتفرعها ومراجعتها من هذا المستودع (https://github.com/danielbohannon/Invoke-DOSfuscation). يرجى الإبلاغ عن المشكلات أو طلبات الميزات من خلال متتبع الأخطاء الخاص بـ Github المرتبط بهذا المشروع.
للتثبيت:
Import-Module .\Invoke-DOSfuscation.psd1
Invoke-DOSfuscation
يتم إصدار Invoke-DOSfuscation بموجب ترخيص Apache 2.0.
الإصدار 1.0 - 23 مارس 2018 Black Hat Asia (سنغافورة): الإصدار العام لـ Invoke-DOSfuscation.