अपनी सुरक्षा और मैलवेयर पहचान में सुधार के लिए YARA नियम कैसे लिखें

YARA एंटीवायरस सॉफ़्टवेयर को प्रतिस्थापित नहीं करेगा, लेकिन यह आपको समस्याओं का अधिक कुशलता से पता लगाने में मदद कर सकता है और अधिक अनुकूलन की अनुमति देता है। सुरक्षा और घटना प्रतिक्रिया को बेहतर बनाने के लिए YARA नियम लिखना सीखें।

सुरक्षा

छवि: iStock/vadimrysev

में YARA . के बारे में हमारा पहला लेख, हमने परिभाषित किया कि यह किस प्रकार का टूल था और किस संदर्भ में इसका उपयोग किया जा सकता है: नेटवर्क या एंडपॉइंट पर मैलवेयर का पता लगाना, घटना प्रतिक्रिया और निगरानी में मदद करना, फाइलों को वर्गीकृत करना या संवेदनशील डेटा लीक का पता लगाना। हमने यह भी दिखाया कि इसे कैसे स्थापित किया जाए। अब इसका सर्वोत्तम लाभ उठाने के लिए नियम लिखने का समय आ गया है।

देख: Google Chrome: सुरक्षा और UI युक्तियाँ जो आपको जानना आवश्यक हैं (टेक रिपब्लिक प्रीमियम)

शुरू करने के लिए एक खाली टेम्पलेट का प्रयोग करें

YARA नियम टेक्स्ट फाइलें हैं, जो एक बहुत ही बुनियादी, फिर भी शक्तिशाली, सिंटैक्स का पालन करती हैं।

YARA नियमों में हमेशा तीन भाग होते हैं:

  • मेटा भाग: इस भाग में सामान्य या विशिष्ट जानकारी होती है जो संसाधित नहीं होती है लेकिन उपयोगकर्ता को यह समझने में मदद करती है कि यह किस बारे में है।
  • तार भाग: इस भाग में वे सभी तार होते हैं जिन्हें फ़ाइलों में खोजने की आवश्यकता होती है।
  • हालत हिस्सा: यह भाग मिलान की स्थिति को परिभाषित करता है। यह सिर्फ एक या कई स्ट्रिंग्स से मेल खा सकता है, लेकिन यह अधिक जटिल भी हो सकता है जैसा कि हम इस लेख में बाद में देखेंगे।

मेरे अनुभव से, एक खाली टेम्पलेट बनाने की दृढ़ता से सलाह दी जाती है जिसका उपयोग आप हमेशा एक नया नियम लिखना शुरू करने के लिए करेंगे। इस तरह, आपको बस कुछ परिवर्तनशील सामग्री भरने और वांछित शर्तें जोड़ने की आवश्यकता है।

rule samplerule
{
meta:
author="Cedric Pernet"
version="0.1"
date="2021/05/12"
reference="any useful reference"
strings:
condition:
}

इस टेम्पलेट का उपयोग करके, आप मेटाडेटा और नियम के नाम को शीघ्रता से संपादित कर सकते हैं (हमारे उदाहरण में इसे नमूना नियम नाम दिया गया है)। मेटाडेटा कुछ भी हो सकता है जिसे उपयोगकर्ता वहां रखना चाहता है। मेरे लिए, मैं हमेशा एक संस्करण संख्या, एक तिथि, एक संदर्भ का उपयोग करता हूं जो मैलवेयर हैश हो सकता है, या एक ब्लॉग रिपोर्ट जिसमें उल्लेख किया गया है कि मैं क्या पता लगाना चाहता हूं, और एक लेखक फ़ील्ड।

अब जब मेटाडेटा लिखा जा चुका है, तो चलिए पहले नियम को लिखना शुरू करते हैं।

एक पहला नियम

YARA नियम स्ट्रिंग तत्वों और शर्तों का एक संयोजन है। NS स्ट्रिंग्स टेक्स्ट स्ट्रिंग्स, हेक्साडेसिमल स्ट्रिंग्स या हो सकते हैं नियमित अभिव्यक्ति.

NS शर्तेँ अन्य प्रोग्रामिंग भाषाओं की तरह ही बूलियन एक्सप्रेशन हैं। सबसे अधिक ज्ञात हैं AND, OR, NOT। संबंधपरक, अंकगणित और बिटवाइज ऑपरेटरों का भी उपयोग किया जा सकता है।

यहाँ पहला नियम है:

rule netcat_detection
{
meta:
author="Cedric Pernet"
version="0.1"
date="2021/05/12"
reference="netcat is a free tool available freely online"
strings:
$str1="gethostpoop fuxored" // this is very specific to the netcat tool
$str2="nc -l -p port [options]"
condition:
$str1 or $str2
}

तो चलिए netcat_detection नाम के इस नियम की व्याख्या करते हैं।

हमारे सामान्य मेटाडेटा के बाद, स्ट्रिंग्स डिवीजन में दो चर, str1 और str2 होते हैं, जिन्हें निश्चित रूप से किसी भी तरह से नामित किया जा सकता है। साथ ही, यह समझाने के लिए कि टिप्पणियों को कैसे जोड़ा जाए, पहले चर के अंत में एक टिप्पणी होती है।

कंडीशन पार्ट में निम्न कंडीशन शामिल है: इसे या तो str1 या str2 से मेल खाना चाहिए।

इसे और सहज तरीके से लिखा जा सकता था:

condition:
any of ($str*)

यह उपयोगी हो सकता है यदि हमारे पास बहुत से भिन्न चर हैं और हम इनमें से किसी पर भी मिलान करना चाहते हैं।

पहला नियम चलाना

चलिए अब अपना रूल चलाते हैं, जिसे हमने रूल1.यार नाम की फाइल के रूप में सेव किया था। हम इसे कई अलग-अलग फाइलों वाले फ़ोल्डर के खिलाफ चलाना चाहते हैं, उनमें से दो नेटकैट सॉफ्टवेयर के 32- और 64-बिट संस्करण हैं (चित्रा ए) हमारा सिस्टम उबंटू लिनक्स वितरण के परीक्षण के लिए है, लेकिन इससे कोई फर्क नहीं पड़ता क्योंकि यारा को लिनक्स, मैक या विंडोज ऑपरेटिंग सिस्टम पर आसानी से स्थापित किया जा सकता है।

चित्रा ए

अंजीर.jpg

किसी विशेष सॉफ़्टवेयर का पता लगाने के लिए फ़ोल्डर पर YARA नियम चलाना।

जैसा कि अपेक्षित था, YARA चलता है और नियम से मेल खाने वाली सभी फाइलों के नाम लौटाता है।

बेशक, आप एक फ़ाइल में जितने चाहें उतने YARA नियम रख सकते हैं, जो इसे कई अलग-अलग नियम फ़ाइलों की तुलना में अधिक आरामदायक बनाता है।

-s विकल्प के साथ YARA चलाना उन फाइलों से मेल खाने वाले सटीक तार दिखाता है (चित्रा बी):

चित्रा बी

अंजीर.जेपीजी

मैचिंग स्ट्रिंग्स दिखाने के लिए YARA को -s विकल्प के साथ चलाना।

एक तरफ ध्यान दें, आपके कॉर्पोरेट नेटवर्क में कहीं नेटकैट जैसे टूल ढूंढना वास्तव में जांच के लायक हो सकता है: वह मूल उपकरण औसत उपयोगकर्ता कंप्यूटर पर नहीं मिलना चाहिए, क्योंकि यह कंप्यूटर को विशिष्ट बंदरगाहों पर डेटा कनेक्ट और एक्सचेंज करने की अनुमति देता है और इसका उपयोग किया जा सकता है हमलावर यह, निश्चित रूप से, आईटी लोगों या रेड टीम के कर्मचारियों द्वारा भी इस्तेमाल किया जा सकता है, इसलिए यह निर्धारित करने के लिए जांच की जाती है कि यह कॉर्पोरेट नेटवर्क से मशीन पर क्यों पाया गया।

अधिक जटिल तार

सिस्टम के भीतर फाइलों को खोजने के लिए एक मूल स्ट्रिंग का मिलान करना पर्याप्त हो सकता है। फिर भी स्ट्रिंग्स को अलग-अलग सिस्टम पर अलग-अलग तरीके से एन्कोड किया जा सकता है या हमलावरों द्वारा थोड़ा ट्रिगर किया जा सकता है। एक मामूली बदलाव, उदाहरण के लिए, रैंडम अपर और लोअर केस का उपयोग करके स्ट्रिंग्स के केस को बदलना हो सकता है। सौभाग्य से, YARA इसे आसानी से संभाल सकती है।

निम्नलिखित YARA स्ट्रिंग्स भाग में, एक स्ट्रिंग मेल खाएगी चाहे वह किसी भी मामले का उपयोग करे:

strings:
$str1="thisisit" nocase

शर्त $str1 अब इस्तेमाल किए गए किसी भी मामले से मेल खाएगी: “ThisIsIt”, “THISISIT”, “thisisit”, “ThIsIsiT”, आदि।

यदि प्रति वर्ण दो बाइट्स का उपयोग करके स्ट्रिंग्स को एन्कोड किया गया है, तो “वाइड” संशोधक का उपयोग किया जा सकता है, और निश्चित रूप से इसे दूसरे के साथ जोड़ा जा सकता है:

 strings:
$str1="thisisit" nocase wide

ASCII और वाइड फॉर्म दोनों पर स्ट्रिंग्स की खोज के लिए, संशोधक “ascii” का उपयोग वाइड के साथ संयोजन में किया जा सकता है।

strings:
$str1="thisisit" ascii wide

हेक्साडेसिमल स्ट्रिंग्स

हेक्साडेसिमल स्ट्रिंग्स का उपयोग आसानी से किया जा सकता है:

strings:
$str1={ 75 72 65 6C 6E 20 }
$str2={ 75 72 65 6C ?? 20 }
$str3={ 75 72 [2-4] 65 6C }

यहां तीन अलग-अलग हेक्साडेसिमल चर हैं। पहला हेक्साडेसिमल स्ट्रिंग्स पर सटीक अनुक्रम की खोज करता है। दूसरा वाला दो के साथ व्यक्त वाइल्डकार्ड का उपयोग करता है? वर्ण और किसी भी हेक्साडेसिमल मान के साथ तार खोजेंगे जहां ?? खड़ा है।

देख: पासवर्ड ब्रीच: पॉप कल्चर और पासवर्ड मिक्स क्यों नहीं होते (फ्री पीडीएफ) (टेक रिपब्लिक)

तीसरी स्ट्रिंग दो पहले बाइट्स की खोज करती है, फिर दो से चार वर्णों की छलांग, फिर दो अंतिम बाइट्स। यह बहुत आसान है जब कुछ अनुक्रम अलग-अलग फाइलों में भिन्न होते हैं लेकिन दो ज्ञात लोगों के बीच यादृच्छिक बाइट्स की अनुमानित संख्या दिखाते हैं।

नियमित अभिव्यक्ति

नियमित अभिव्यक्ति, किसी भी प्रोग्रामिंग भाषा की तरह, विशेष सामग्री का पता लगाने के लिए बहुत उपयोगी होते हैं जिन्हें विभिन्न तरीकों से लिखा जा सकता है। YARA में, उन्हें एक स्ट्रिंग का उपयोग करके परिभाषित किया जाता है जो स्लैश (/) वर्ण के साथ शुरू और समाप्त होती है।

आइए एक उदाहरण लेते हैं जो समझ में आता है।

मैलवेयर बाइनरी में, डेवलपर ने डिबग जानकारी छोड़ दी, विशेष रूप से प्रसिद्ध पीडीबी डोरी।

यह पढ़ता है:

डी:कार्यक्षेत्रमालवेयर_v42रिलीजmalw.pdb

अब विचार केवल एक नियम बनाने का नहीं होगा जो इस मैलवेयर से मेल खाएगा, बल्कि संस्करण संख्या में परिवर्तन होने पर इसके सभी अलग-अलग संस्करणों का होगा। इसके अलावा, हमने “डी” ड्राइव को नियम से बाहर करने का फैसला किया, क्योंकि डेवलपर के पास इसे किसी अन्य ड्राइव पर भी हो सकता है।

हम नियमित अभिव्यक्ति के साथ आते हैं (चित्रा सी):

चित्रा सी

अंजीर.जेपीजी

पीडीबी स्ट्रिंग और परिणामों के आधार पर मैलवेयर के सभी संस्करणों से मेल खाने वाला नियम।

प्रदर्शन उद्देश्यों के लिए, हमने newmalwareversion.exe नाम की एक फ़ाइल बनाई, जिसमें तीन अलग-अलग PDB स्ट्रिंग्स हैं, जिनमें से प्रत्येक एक अलग संस्करण संख्या के साथ है। हमारा नियम उन सभी से मेल खाता है।

कृपया ध्यान दें कि हमारे स्ट्रिंग्स के अक्षर दोगुने हो गए हैं, क्योंकि एक विशेष वर्ण है जिसे बचने की जरूरत है, जैसे कि सी भाषा में।

अधिक जटिल स्थितियां

शर्तेँ सिर्फ एक या कई स्ट्रिंग्स से मेल खाने से ज्यादा स्मार्ट हो सकता है। आप स्ट्रिंग्स की गणना करने के लिए शर्तों का उपयोग कर सकते हैं, एक ऑफ़सेट निर्दिष्ट करने के लिए जिस पर आप एक स्ट्रिंग ढूंढना चाहते हैं, फ़ाइल आकार से मेल खाने के लिए या यहां तक ​​​​कि लूप का भी उपयोग कर सकते हैं।

यहां कुछ उदाहरण दिए गए हैं जिन पर मैंने स्पष्टीकरण के लिए टिप्पणी की:

condition:
2 of ($str*) // will match on 2 of several strings named str followed by a number
($str1 or $str2) and ($text1 or $text2) // example of Boolean operators
#a == 4 and #b > 6 // string a needs to be found exactly four times and string b needs to be found strictly more than six times
$str at 100 // string str needs to be located within the file at offset 100
$str in (500..filesize) // string str needs to be located between offset 500 and end of file.
filesize > 500KB // Only files which are more than 500KB big will be considered

निष्कर्ष

यह लेख YARA की सबसे बुनियादी क्षमताओं को दिखाता है। हम सब कुछ दस्तावेज नहीं कर सके, निश्चित रूप से, क्योंकि यह वास्तव में एक प्रकार की प्रोग्रामिंग भाषा है। फाइलों के मिलान के लिए YARA द्वारा दी जाने वाली संभावनाएं काफी अनंत हैं। विश्लेषक जितना अधिक YARA के साथ सहज होगा, उतना ही वह इसके बारे में महसूस करेगा और अधिक कुशल नियम लिखने के लिए अपने कौशल में सुधार करेगा।

चूंकि भाषा लिखना और उपयोग करना इतना आसान है, यह जानने की बात है कि कोई वास्तव में क्या पता लगाना चाहता है। पिछले वर्षों के दौरान सुरक्षा शोधकर्ताओं को अपने शोध पत्रों और ब्लॉग पोस्ट के परिशिष्टों में YARA नियमों को प्रकाशित करते हुए देखना आम हो गया है, ताकि सभी को अपने कंप्यूटर या सर्वर पर दुर्भावनापूर्ण सामग्री से मिलान करने में मदद मिल सके। YARA नियम भी ऐसी सामग्री से मेल खाने की अनुमति देते हैं जो दुर्भावनापूर्ण नहीं है, लेकिन सावधानीपूर्वक निगरानी करने की आवश्यकता है, उदाहरण के लिए आंतरिक दस्तावेज़, YARA को डेटा हानि का पता लगाने वाले उपकरण के साथ-साथ एक दुर्भावनापूर्ण सामग्री डिटेक्टर में प्रस्तुत करना। किसी को परामर्श करने में संकोच नहीं करना चाहिए यारा प्रलेखन टूल द्वारा दी जाने वाली सभी संभावनाओं को देखने के लिए।

प्रकटीकरण: मैं ट्रेंड माइक्रो के लिए काम करता हूं, लेकिन इस लेख में व्यक्त विचार मेरे हैं।

और देखें

Leave a Reply

Your email address will not be published.

%d bloggers like this: