
Time Travel Debugging ट्रेसेस पर YARA नियमों का उपयोग करें
Time Travel Debugging ट्रेस पर YARA नियमों का उपयोग करें
एक सरल बाइनरी जो calc.exe लॉन्च करती है, UPX से पैक की गई है।
yara-ttd को थ्रेड निर्माण के दौरान मॉड्यूल मेमोरी में calc.exe स्ट्रिंग मिलती है।
calc.exe चलाता हैपरीक्षित बाइनरी एक शेलकोड को डिक्रिप्ट करती है, और उसे एक नए थ्रेड में चलाती है।
yara-ttd ntdll!NtCreateThreadEx फ़ंक्शन पर हुक करते समय हीप पर calc.exe स्ट्रिंग खोजने में सफल हो जाता है।
YARA बाइनरी के लिए एक शक्तिशाली पैटर्न मिलान उपकरण है।
YARA एक उपकरण है जिसका उद्देश्य (केवल इन्हीं तक सीमित नहीं) मैलवेयर शोधकर्ताओं को मैलवेयर नमूनों की पहचान और वर्गीकरण में मदद करना है। YARA के साथ आप पाठ्य या बाइनरी पैटर्न के आधार पर मैलवेयर परिवारों (या जो भी आप वर्णित करना चाहें) का विवरण बना सकते हैं।
YARA की बदौलत, हम विश्लेषण करने से पहले पाइपलाइन में मैलवेयर नमूनों को स्वचालित रूप से वर्गीकृत करके बहुत समय बचा सकते हैं।
दुर्भाग्य से, अधिकांश मैलवेयर नमूने विभिन्न प्रकार के पैकर से सुरक्षित होते हैं। UPX या VMProtect जैसी शास्त्रीय रनटाइम-पैकर योजना में स्व-निष्कर्षण और अस्पष्टीकृत तथा कभी-कभी एन्क्रिप्टेड कोड चलाना शामिल होता है। इसलिए, YARA पैक किए गए बाइनरी से नहीं निपट सकता क्योंकि उसे पैक किए गए कोड में कोई मेल नहीं मिलेगा।
टाइम ट्रैवल डिबगिंग - या TTD - नेटिव Windows डिबगर WinDbg की एक विशेषता है।
टाइम ट्रैवल डिबगिंग एक उपकरण है जो आपको अपनी प्रक्रिया के निष्पादित होते समय उसका ट्रेस कैप्चर करने और बाद में उसे आगे और पीछे दोनों दिशाओं में रीप्ले करने की अनुमति देता है। टाइम ट्रैवल डिबगिंग (TTD) आपके डिबगर सत्र को "रीवाइंड" करने की सुविधा देकर समस्याओं को अधिक आसानी से डीबग करने में मदद कर सकता है, बजाय इसके कि बग मिलने तक समस्या को दोबारा उत्पन्न करना पड़े।
मैलवेयर विश्लेषण के लिए, TTD एक शक्तिशाली उपकरण है क्योंकि यह सैंडबॉक्स में मैलवेयर का ट्रेस रिकॉर्ड करने की अनुमति देता है। इसलिए, हम मैलवेयर का विश्लेषण करने के लिए रिकॉर्ड की गई फ़ाइल को सैंडबॉक्स के बाहर सुरक्षित रूप से रीप्ले और साझा कर सकते हैं।
साथ ही, TTD एक डिबगर नहीं है, इसलिए यह PEB.BeingDebugged जैसी शास्त्रीय एंटी-डिबगिंग तकनीकों से पहचाना नहीं जाएगा।
सुरक्षा दृष्टिकोण से TTD के गहन विश्लेषण के लिए, यह लेख देखें: TTD पारिस्थितिकी तंत्र में गहराई से गोता
बेशक, TTD एक मालिकाना सॉफ़्टवेयर है, और यह कार्य commial द्वारा विकसित ttd-bindings के बिना संभव नहीं होता।
yara-ttd के पीछे का विचार TTD द्वारा रिकॉर्ड किए गए ट्रेस फ़ाइलों का उपयोग yara के साथ करके पैकरों को परास्त करना है।
चूँकि yara स्वयं पैक किए गए बाइनरी को स्कैन नहीं कर सकता, yara-ttd ट्रेस फ़ाइल का विश्लेषण करने का एक तरीका प्रदान करता है जिसमें अनपैकिंग प्रक्रिया सहित सभी रनटाइम जानकारी होती है।
yara-ttd के साथ, आप ट्रेस फ़ाइल में स्थितियों का एक समूह चुन सकते हैं जहाँ आप अपने yara नियमों से मेमोरी को स्कैन करना चाहते हैं।
इस प्रकार, आप पैक किए गए बाइनरी को अपने yara नियमों से जहाँ चाहें वहाँ हुक कर सकते हैं!
yara-ttd कई मेमोरी स्कैनिंग रणनीतियाँ प्रदान करता है, जैसे मॉड्यूल लोड होने पर, या वर्चुअल मेमोरी आवंटित होने पर, जिनका उपयोग अक्सर अनपैक होने के बाद मैलवेयर कोड को संग्रहीत करने के लिए किया जाता है।
अभी के लिए, yara-ttd केवल Windows का समर्थन करता है, क्योंकि इसे TTD API के साथ इंटरैक्ट करने की आवश्यकता होती है।
पहले प्रोजेक्ट बनाएँ:
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 CLI की तरह, आप मैचों के विवरण, जैसे मेमोरी पता और मेल खाने वाला सटीक सबरूल, प्रिंट करने के लिए -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स्कैन एक के बाद एक चलाता है, न कि मूलyaracli की तरह थ्रेडिंग के साथ एक साथ।