
मैलवेयर सुविधाओं का सिग्नेचर-आधारित पता लगाना जो विंडोज API कॉल अनुक्रमों पर आधारित है। यह सैंडबॉक्स API ट्रेस के लिए YARA की तरह है!
dynmx (उच्चारित dynamics) एक सिग्नेचर-आधारित पहचान दृष्टिकोण है जो विंडोज API कॉल अनुक्रमों पर आधारित बिहेवियरल मैलवेयर फीचर्स के लिए है। सरल शब्दों में, आप dynmx को API कॉल ट्रेस (जिन्हें फंक्शन लॉग कहा जाता है) के लिए एक प्रकार का YARA मान सकते हैं, जो मैलवेयर सैंडबॉक्स से उत्पन्न होते हैं। इसलिए, पहचान दृष्टिकोण का डेटा आधार स्थैतिक रूप से विश्लेषित मैलवेयर नमूने स्वयं नहीं हैं, बल्कि वह डेटा है जो मैलवेयर सैंडबॉक्स में मैलवेयर नमूने के गतिशील विश्लेषण के दौरान उत्पन्न होता है। वर्तमान में, dynmx निम्नलिखित मैलवेयर सैंडबॉक्स के फंक्शन लॉग का समर्थन करता है:
report.json फ़ाइल)report.json फ़ाइल)पहचान दृष्टिकोण का विस्तृत विवरण मास्टर थीसिस Signature-Based Detection of Behavioural Malware Features with Windows API Calls में दिया गया है। यह प्रोजेक्ट इस दृष्टिकोण का प्रोटोटाइप कार्यान्वयन है और मास्टर थीसिस के दौरान विकसित किया गया था। सिग्नेचर मैलवेयर विश्लेषकों द्वारा dynmx सिग्नेचर DSL में मैन्युअल रूप से परिभाषित किए जाते हैं और इस टूल की सहायता से फंक्शन लॉग में पहचाने जा सकते हैं। dynmx सिग्नेचर DSL की विशेषताएँ और सिंटैक्स भी मास्टर थीसिस में पाए जा सकते हैं। इसके अलावा, आप रिपॉजिटरी dynmx-signatures में नमूना dynmx सिग्नेचर पा सकते हैं। API कॉल के आधार पर मैलवेयर फीचर्स का पता लगाने के अलावा, dynmx मैलवेयर द्वारा उपयोग किए जाने वाले OS संसाधनों (एक तथाकथित Access Activity Model) को निकाल सकता है। ये संसाधन API कॉल की जांच करके और OS संसाधनों पर संचालन का पुनर्निर्माण करके निकाले जाते हैं। वर्तमान में, मॉडल में फाइल सिस्टम, रजिस्ट्री और नेटवर्क श्रेणियों के OS संसाधनों पर विचार किया जाता है।
निम्नलिखित अनुभाग में, मैलवेयर फीचर्स का पता लगाने और संसाधनों के निष्कर्षण के उदाहरण दिखाए गए हैं।
इस उदाहरण के लिए, हम SHA-256 हैश योग c0832b1008aa0fc828654f9762e37bda019080cbdd92bd2453a05cfb3b79abb3 वाला मैलवेयर नमूना चुनते हैं। के अनुसार MalwareBazaar, यह नमूना मैलवेयर परिवार Amadey से संबंधित है। इस नमूने का एक सार्वजनिक VMRay विश्लेषण रिपोर्ट उपलब्ध है जो VMRay द्वारा ट्रेस किया गया function log भी प्रदान करता है। यह फंक्शन लॉग हमारा डेटा आधार होगा जिसका उपयोग हम पहचान के लिए करेंगे। यदि हम जानना चाहते हैं कि मैलवेयर नमूना 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...