
استخدم قواعد YARA على تتبعات Time Travel Debugging
استخدم قواعد YARA على آثار Time Travel Debugging
ملف ثنائي بسيط يقوم بتشغيل calc.exe، مُعبّأ بواسطة UPX.
يتمكن yara-ttd من العثور على سلسلة calc.exe في ذاكرة الوحدة، أثناء إنشاء سلسلة تنفيذ.
calc.exeالملف الثنائي المختبر يفك تشفير شيلكود، ويشغّله في سلسلة تنفيذ جديدة.
يتمكن yara-ttd من العثور على سلسلة calc.exe في الكومة (heap) عند ربط دالة ntdll!NtCreateThreadEx.
YARA أداة قوية لمطابقة الأنماط في الملفات الثنائية.
YARA هي أداة تهدف إلى مساعدة باحثي البرمجيات الخبيثة (وليس فقط) في تحديد وتصنيف عينات البرمجيات الخبيثة. باستخدام YARA يمكنك إنشاء أوصاف لعائلات البرمجيات الخبيثة (أو أي شيء تريد وصفه) بناءً على أنماط نصية أو ثنائية.
-- توثيق YARA
بفضل YARA، يمكننا توفير الكثير من الوقت عن طريق تصنيف عينات البرمجيات الخبيثة تلقائيًا في خط معالجة قبل تحليلها.
لسوء الحظ، فإن معظم عينات البرمجيات الخبيثة محمية بأنواع مختلفة من أدوات التعبئة (packers). تتكون مخططات أدوات التعبئة الكلاسيكية في وقت التشغيل مثل UPX أو VMProtect من استخراج ذاتي وتشغيل كود مبهم وأحيانًا مشفر. لذلك، لا يمكن لـ YARA التعامل مع الملفات الثنائية المعبأة لأنها لن تجد أي تطابقات في الكود المعبأ.
Time Travel Debugging - أو TTD - هي ميزة في مصحح أخطاء ويندوز الأصلي WinDbg.
Time Travel Debugging هي أداة تتيح لك التقاط أثر لعمليتك أثناء تنفيذها ثم إعادة تشغيله لاحقًا للأمام والخلف. يمكن أن يساعدك Time Travel Debugging (TTD) في تصحيح الأخطاء بسهولة أكبر من خلال السماح لك بـ"إرجاع" جلسة المصحح، بدلاً من الاضطرار إلى إعادة إنتاج المشكلة حتى تجد الخطأ.
بالنسبة لتحليل البرمجيات الخبيثة، تعتبر TTD أداة قوية لأنها تسمح بتسجيل أثر البرمجية الخبيثة داخل بيئة معزولة (sandbox). وبالتالي، يمكننا إعادة التشغيل ومشاركة الملف المسجل بأمان خارج البيئة المعزولة لتحليل البرمجية الخبيثة.
أيضًا، TTD ليست مصحح أخطاء، لذا لن يتم اكتشافها بواسطة تقنيات مكافحة التصحيح الكلاسيكية مثل PEB.BeingDebugged.
للحصول على تحليل أعمق لـ TTD من منظور أمني، راجع هذا المقال: غوص عميق في نظام TTD البيئي
بالطبع، TTD هي برمجيات احتكارية، ولم يكن هذا العمل ممكنًا لولا ربطات ttd التي طورها commial.
الفكرة وراء yara-ttd هي استخدام ملفات الأثر المسجلة بواسطة TTD مع yara نفسه لهزيمة أدوات التعبئة (packers).
نظرًا لأن yara لا يمكنه فحص الملف الثنائي المعبأ نفسه، فإن yara-ttd يوفر طريقة لتحليل ملف الأثر الذي يحتوي على جميع معلومات وقت التشغيل، بما في ذلك عملية فك التعبئة (unpacking).
باستخدام yara-ttd، يمكنك تحديد مجموعة من المواضع في ملف الأثر حيث تريد فحص الذاكرة بقواعد yara الخاصة بك. وبالتالي، يمكنك ربط (hook) الملف الثنائي المعبأ في أي مكان تريده باستخدام قواعد yara الخاصة بك!
يوفر yara-ttd عدة استراتيجيات لفحص الذاكرة، مثل عند تحميل الوحدات، أو عند تخصيص ذاكرة افتراضية، والتي تُستخدم غالبًا لتخزين كود البرمجية الخبيثة بعد فك تعبئته.
في الوقت الحالي، يدعم yara-ttd نظام ويندوز فقط، لأنه يحتاج إلى التفاعل مع واجهة برمجة تطبيقات TTD.
أولاً، قم ببناء المشروع:
mkdir build
cd build
cmake ..
cmake --build .
ثم أضف ملفي TTDReplay.dll و TTDReplayCPU.dll في نفس المجلد الذي يحتوي على الملف التنفيذي.
ستجد ملفات DLL هذه في %LocalAppData%\Microsoft\WindowsApps\Microsoft.WinDbg_X\TTD
أولاً تحتاج إلى تسجيل أثر (ملف .run) لبرنامجك.
للحصول على مساعدة مفصلة حول كيفية تسجيل أثر TTD، راجع هذا البرنامج التعليمي.
ثم قم ببساطة بتشغيل:
.\yara-ttd path\to\rule path\to\trace\file
هناك ثلاثة أوضاع لفحص الذاكرة:
يمكنك تحديد الوضع باستخدام -m:
.\yara-ttd -m 1 path\to\rule path\to\trace\file
مثل واجهة سطر الأوامر الرسمية yara، يمكنك استخدام الخيار -s لطباعة تفاصيل التطابقات، مثل عنوان الذاكرة والقاعدة الفرعية الدقيقة التي تطابقت.
نظرًا لأن TTD لا تخزن بنية الذاكرة، فإن yara-ttd يحسب قبل الفحص بنية عناوين الكومة لكل موضع زمني.
سينشئ ملف كاش بامتداد .tmp في نفس مسار ملف الأثر لتخزين بنية الكومة.
إذا أردت إعادة تشغيل yara-ttd على أثر وتحميل بنية الكومة من ملف الكاش المُنشأ، يمكنك ببساطة القيام بما يلي:
.\yara-ttd -m 1 --cache=path\to\cache\file path\to\rule path\to\trace\file
يمكننا الوصول إلى نطاق الذاكرة الكامل لعملية ما باستخدام TTD، وهو يتوافق مع الحد الأدنى والحد الأقصى للعنوان اللذين يعيدهما GetSystemInfo. ومع ذلك، في معظم الأحيان، يكون هذا النطاق كبيرًا جدًا بحيث لا يمكن فحصه دون أي تحسين.
المواضع الزمنية الافتراضية التي سيتم فحصها هي:
باستخدام الخيارين -t و -f، يمكنك تحديد مواضع أخرى أو استدعاءات دوال لفحصها:
.\yara-ttd -m 1 -t 3C1:A -t 5FF:22 -f ntdll!FreeVirtualMemory -f ntdll!NtCreateThreadEx path\to\rule path\to\trace\file
يتوقع الخيار -t مواضع TTD بالشكل major:minor (وكلاهما بالنظام الست عشري، دون 0x).
يتوقع الخيار -f سلسلة نصية بالشكل module_name!function_name.
يمكنك أيضًا إضافة جميع الدوال التي تريد ربطها في ملف:
> cat .\functions.txt
ntdll!FreeVirtualMemory
ntdll!NtCreateThreadEx
> .\yara-ttd -m 1 -F functions.txt path\to\rule path\to\trace\file
إذا كان لديك ملفات متعددة لفحصها باستخدام yara-ttd، يمكنك أيضًا فحص مجلد كامل.
سيتجاهل yara-ttd جميع الامتدادات التالية في المجلد:
.tmp (ملفات الكاش المنشأة بواسطة yara-ttd).idx (ملفات الفهرس المنشأة بواسطة ttd).err (ملفات الأخطاء المنشأة بواسطة ttd).out (ملفات السجلات المنشأة بواسطة ttd)في المثال التالي، سيقوم yara-ttd بفحص الملفين trace01.run و trace02.run فقط.
> dir .\traces
trace01.run
trace01.out
trace01.idx
trace02.run
trace01.run.err
trace01.tmp
> .\yara-ttd path\to\rule .\traces
بدلاً من ذلك، يمكنك تحديد جميع الآثار التي تريد فحصها في ملف واستخدام الخيار --scan-list أو -l. سيقوم بفحص الملفات المدرجة، ملف واحد في كل سطر:
> cat .\scan_me.txt
.\traces\trace01.run
.\traces\trace02.run
> .\yara-ttd -l path\to\rule .\scan_me.txt
عند فحص ملفات متعددة، يقوم
yara-ttdبتشغيل عمليات الفحص واحدة تلو الأخرى، وليس في وقت واحد مع خيوط المعالجة مثل واجهة سطر أوامرyaraالأصلية.