
الكشف المعتمد على التوقيعات لميزات البرامج الضارة استنادًا إلى تسلسلات استدعاء واجهة برمجة تطبيقات ويندوز. إنها مثل YARA لتتبعات واجهة برمجة تطبيقات الصندوق الرملي!
dynmx (تُلفظ دايناميكس) هي منهجية كشف قائمة على التوقيعات للخصائص السلوكية للبرامج الضارة بناءً على متواليات استدعاءات واجهة برمجة تطبيقات Windows. بطريقة مبسطة، يمكنك التفكير في dynmx كنوع من YARA لآثار استدعاءات API (ما يسمى بسجلات الوظائف) الناشئة عن صناديق رمل البرامج الضارة. وبالتالي، فإن أساس البيانات لمنهجية الكشف ليس عينات البرامج الضارة نفسها التي يتم تحليلها بشكل ثابت، بل البيانات التي يتم توليدها أثناء تحليل ديناميكي لعينة البرنامج الضارة في صندوق رمل للبرامج الضارة. حالياً، يدعم dynmx سجلات الوظائف من صناديق الرمل التالية:
report.json)report.json)تم وصف منهجية الكشف بالتفصيل في رسالة الماجستير كشف التوقيعات للخصائص السلوكية للبرامج الضارة باستخدام استدعاءات واجهة برمجة تطبيقات Windows. هذا المشروع هو التنفيذ النموذجي لهذه المنهجية وتم تطويره في إطار رسالة الماجستير. يتم تعريف التوقيعات يدوياً من قبل محللي البرامج الضارة في لغة توقيعات dynmx DSL ويمكن اكتشافها في سجلات الوظائف بمساعدة هذه الأداة. يمكن أيضاً العثور على ميزات وبناء جملة لغة توقيعات dynmx DSL في رسالة الماجستير. علاوة على ذلك، يمكنك العثور على توقيعات dynmx نموذجية في المستودع dynmx-signatures. بالإضافة إلى كشف الخصائص الضارة بناءً على استدعاءات API، يمكن لـ dynmx استخراج موارد نظام التشغيل التي يستخدمها البرنامج الضار (ما يسمى بنموذج نشاط الوصول). يتم استخراج هذه الموارد من خلال فحص استدعاءات API وإعادة بناء العمليات على موارد نظام التشغيل. حالياً، يتم أخذ موارد نظام التشغيل من فئات نظام الملفات والتسجيل والشبكة في الاعتبار في النموذج.
في القسم التالي، يتم عرض أمثلة لكشف الخصائص الضارة واستخراج الموارد.
لهذا المثال، نختار عينة البرنامج الضار بمجموع تجزئة SHA-256 c0832b1008aa0fc828654f9762e37bda019080cbdd92bd2453a05cfb3b79abb3. وفقاً لـ MalwareBazaar، تنتمي العينة إلى عائلة البرامج الضارة Amadey. يوجد تقرير تحليل VMRay عام لهذه العينة والذي يوفر أيضاً سجل الوظائف الذي تم تتبعه بواسطة VMRay. سيكون سجل الوظائف هذا هو أساس بياناتنا الذي سنستخدمه للكشف.
إذا أردنا معرفة ما إذا كانت عينة البرنامج الضار تستخدم تقنية حقن تسمى Process Hollowing، يمكننا محاولة كشف توقيع dynmx التالي في سجل الوظائف.```yaml dynmx_signature: meta: name: process_hollow title: Process Hollowing description: Detection of Process hollowing malware feature detection: proc_hollow: # Create legit process in suspended mode - api_call: ["CreateProcess[AW]", "CreateProcessInternal[AW]"] with: - argument: "dwCreationFlags" operation: "flag is set" value: 0x4 - return_value: "return" operation: "is not" value: 0 store: - name: "hProcess" as: "proc_handle" - name: "hThread" as: "thread_handle" # Injection of malicious code into memory of previously created process - variant: - path: # Allocate memory with read, write, execute permission - api_call: ["VirtualAllocEx", "VirtualAlloc", "(Nt|Zw)AllocateVirtualMemory"] with: - argument: ["hProcess", "ProcessHandle"] operation: "is" value: "$(proc_handle)" - argument: ["flProtect", "Protect"] operation: "is" value: 0x40 - api_call: ["WriteProcessMemory"] with: - argument: "hProcess" operation: "is" value: "$(proc_handle)" - api_call: ["SetThreadContext", "(Nt|Zw)SetContextThread"] with: - argument: "hThread" operation: "is" value: "$(thread_handle)" - path: # Map memory section with read, write, execute permission - api_call: "(Nt|Zw)MapViewOfSection" with: - argument: "ProcessHandle" operation: "is" value: "$(proc_handle)" - argument: "AccessProtection" operation: "is" value: 0x40 # Resume thread to run injected malicious code - api_call: ["ResumeThread", "(Nt|Zw)ResumeThread"] with: - argument: ["hThread", "ThreadHandle"] operation: "is" value: "$(thread_handle)" condition: proc_hollow as sequence
بناءً على التوقيع، يمكننا العثور على بعض ميزات DSL التي تجعل *dynmx* قويًا:
* تعريف تسلسلات استدعاء API بمسارات بديلة
* مطابقة أسماء دوال استدعاء API مع تعبيرات منتظمة
* مطابقة قيم الوسائط والإرجاع مع العديد من العوامل
* تخزين المتغيرات، على سبيل المثال لتتبع المقابض في تسلسل استدعاء API
* تعريف شرط الكشف مع العوامل المنطقية (`AND`، `OR`، `NOT`)
إذا قمنا بتشغيل *dynmx* مع التوقيع الموضح أعلاه مقابل دالة العينة `c0832b1008aa0fc828654f9762e37bda019080cbdd92bd2453a05cfb3b79abb3`، نحصل على الإخراج التالي الذي يشير إلى أنه تم اكتشاف التوقيع.```
$ python3 dynmx.py detect -i 601941f00b194587c9e57c5fabaf1ef11596179bea007df9bdcdaa10f162cac9.json -s process_hollow.yml
|
__| _ _ _ _ _
/ | | | / |/ | / |/ |/ | /\/
\_/|_/ \_/|/ | |_/ | | |_/ /\_/
/|
\|
Ver. 0.5 (PoC), by 0x534a
[+] Parsing 1 function log(s)
[+] Loaded 1 dynmx signature(s)
[+] Starting detection process with 1 worker(s). This probably takes some time...
[+] Result
process_hollow c0832b1008aa0fc828654f9762e37bda019080cbdd92bd2453a05cfb3b79abb3.txt
يمكننا الدخول في مزيد من التفاصيل عن طريق ضبط تنسيق الإخراج إلى detail. الآن، يمكننا رؤية تسلسل استدعاء API الدقيق الذي تم اكتشافه في سجل الوظيفة. علاوة على ذلك، يمكننا رؤية أن التوقيع تم اكتشافه في العملية 51f0.exe.```
$ python3 dynmx.py -f detail detect -i 601941f00b194587c9e57c5fabaf1ef11596179bea007df9bdcdaa10f162cac9.json -s process_hollow.yml
|
__| _ _ _ _ _ / | | | / |/ | / |/ |/ | // _/|/ _/|/ | |/ | | |_/ /_/ /| |
Ver. 0.5 (PoC), by 0x534a
[+] Parsing 1 function log(s) [+] Loaded 1 dynmx signature(s) [+] Starting detection process with 1 worker(s). This probably takes some time...