
Tshark का उपयोग करके pcap फ़ाइलों से मैलवेयर HTTP अनुरोधों के अद्वितीय फिंगरप्रिंट उत्पन्न करता है, जो अनुरोध संरचना, हेडर और पेलोड विशेषताओं के विश्लेषण के माध्यम से मैलवेयर परिवारों की पहचान और समूहीकरण को सक्षम बनाता है।
मैलवेयर के HTTP अनुरोधों की फ़िंगरप्रिंटिंग के लिए उपकरण। Tshark पर आधारित और Python3 में लिखा गया। कार्यशील प्रोटोटाइप चरण :-)
इसका मुख्य उद्देश्य मैलवेयर अनुरोधों का अद्वितीय प्रतिनिधित्व (फ़िंगरप्रिंट) प्रदान करना है, जो उनकी पहचान में सहायता करते हैं। अद्वितीय का अर्थ है कि प्रत्येक फ़िंगरप्रिंट केवल एक विशेष मैलवेयर परिवार में ही देखा जाना चाहिए, फिर भी एक परिवार में कई फ़िंगरप्रिंट हो सकते हैं। Hfinger अनुरोध को पूरे अनुरोध को मुद्रित करने की तुलना में छोटे रूप में प्रस्तुत करता है, लेकिन फिर भी मानव द्वारा व्याख्या योग्य है।
Hfinger का उपयोग मैन्युअल मैलवेयर विश्लेषण के साथ-साथ सैंडबॉक्स सिस्टम या SIEM में भी किया जा सकता है। उत्पन्न फ़िंगरप्रिंट अनुरोधों को समूहित करने, अनुरोधों को विशेष मैलवेयर परिवारों से जोड़ने, एक परिवार के विभिन्न संचालनों की पहचान करने, या अन्य सुरक्षा प्रणालियों द्वारा छोड़े गए अज्ञात दुर्भावनापूर्ण अनुरोधों की खोज करने के लिए उपयोगी होते हैं जो फ़िंगरप्रिंट साझा करते हैं।
एक शैक्षणिक पेपर इस उपकरण पर काम के साथ है, जो उदाहरण के लिए, डिज़ाइन विकल्पों की प्रेरणा, और p0f, FATT, और Mercury की तुलना में उपकरण के मूल्यांकन का वर्णन करता है।
इस परियोजना की मूल धारणा यह है कि विभिन्न मैलवेयर परिवारों के HTTP अनुरोध कमोबेश अद्वितीय होते हैं, इसलिए उन्हें किसी प्रकार की पहचान प्रदान करने के लिए फ़िंगरप्रिंट किया जा सकता है। Hfinger कुछ हेडर की संरचना और मूल्यों के बारे में जानकारी बनाए रखता है ताकि आगे के विश्लेषण के साधन प्रदान किए जा सकें। उदाहरण के लिए, समान अनुरोधों का समूहीकरण - इस समय, यह अभी भी कार्य प्रगति पर है।
मैलवेयर के HTTP अनुरोधों और हेडर के विश्लेषण के बाद, हमने अनुरोधों के कुछ हिस्सों को सबसे विशिष्ट के रूप में पहचाना है। इनमें शामिल हैं:
इसके अतिरिक्त, अनुरोध URL की कुछ मानक सुविधाओं पर भी विचार किया गया। इन सभी भागों को सुविधाओं के एक सेट में अनुवादित किया गया, जिसका विस्तार से वर्णन यहाँ किया गया है।
उपरोक्त सुविधाओं को अलग-अलग लंबाई के प्रतिनिधित्व में अनुवादित किया जाता है, जो वास्तविक फ़िंगरप्रिंट है। रिपोर्ट मोड के आधार पर, अनुरोधों को फ़िंगरप्रिंट करने के लिए विभिन्न सुविधाओं का उपयोग किया जाता है। इन मोडों के बारे में अधिक जानकारी नीचे प्रस्तुत की गई है। फीचर चयन प्रक्रिया का वर्णन आगामी शैक्षणिक पेपर में किया जाएगा।
स्थापना से पहले न्यूनतम आवश्यकताएँ:
Python >= 3.3,Tshark >= 2.2.0.PyPI से स्थापना उपलब्ध है:
pip install hfinger
Hfinger का Xubuntu 22.04 LTS पर tshark पैकेज संस्करण 3.6.2 के साथ परीक्षण किया गया है,
लेकिन Xubuntu 18.04 पर 2.6.10 या Xubuntu 20.04 पर 3.2.3 जैसे पुराने संस्करणों के साथ भी काम करना चाहिए।
कृपया ध्यान दें कि किसी भी PoC की तरह, आपको Hfinger को एक अलग वातावरण में चलाना चाहिए, कम से कम Python वर्चुअल वातावरण के साथ। इसकी सेटअप यहाँ शामिल नहीं है, लेकिन आप इस ट्यूटोरियल को आज़मा सकते हैं।
स्थापना के बाद, आप टूल को सीधे कमांड लाइन से hfinger के साथ
या Python मॉड्यूल के रूप में python -m hfinger के साथ कॉल कर सकते हैं।
उदाहरण के लिए:
foo@bar:~$ hfinger -f /tmp/test.pcap
[{"epoch_time": "1614098832.205385000", "ip_src": "127.0.0.1", "ip_dst": "127.0.0.1", "port_src": "53664", "port_dst": "8080", "fingerprint": "2|3|1|php|0.6|PO|1|us-ag,ac,ac-en,ho,co,co-ty,co-le|us-ag:f452d7a9/ac:as-as/ac-en:id/co:Ke-Al/co-ty:te-pl|A|4|1.4"}]
सहायता को छोटे -h या लंबे --help स्विच के साथ प्रदर्शित किया जा सकता है:
usage: hfinger [-h] (-f FILE | -d DIR) [-o output_path] [-m {0,1,2,3,4}] [-v]
[-l LOGFILE]
Hfinger - pcap फ़ाइलों में संग्रहीत मैलवेयर HTTP अनुरोधों की फ़िंगरप्रिंटिंग
वैकल्पिक तर्क:
-h, --help यह सहायता संदेश दिखाएं और बाहर निकलें
-f FILE, --file FILE एकल pcap फ़ाइल पढ़ें
-d DIR, --directory DIR
निर्देशिका DIR से pcap फ़ाइलें पढ़ें
-o output_path, --output-path output_path
आउटपुट निर्देशिका का पथ
-m {0,1,2,3,4}, --mode {0,1,2,3,4}
फ़िंगरप्रिंट रिपोर्ट मोड।
0 - मोड 2 के समान संख्या में टकराव और फ़िंगरप्रिंट, लेकिन कम सुविधाओं का उपयोग करते हुए,
1 - सभी डिज़ाइन की गई सुविधाओं का प्रतिनिधित्व, लेकिन मोड 0, 2 और 4 की तुलना में थोड़ा अधिक टकराव,
2 - इष्टतम (डिफ़ॉल्ट मोड),
3 - उत्पन्न फ़िंगरप्रिंट की सबसे कम संख्या, लेकिन टकरावों की सबसे अधिक संख्या,
4 - उच्चतम फ़िंगरप्रिंट एन्ट्रॉपी, लेकिन मोड 0-2 की तुलना में थोड़ा अधिक फ़िंगरप्रिंट
-v, --verbose अनुरोध में गैर-मानक मानों के बारे में जानकारी रिपोर्ट करें
(जैसे, गैर-ASCII वर्ण, कोई CRLF टैग नहीं, कॉन्फ़िगरेशन सूची में मौजूद नहीं मान)।
--logfile (-l) के बिना त्रुटि मानक पर प्रिंट करेगा।
-l LOGFILE, --logfile LOGFILE
वर्बोज़ मोड में आउटपुट लॉग फ़ाइल। -v या --verbose स्विच को दर्शाता है।
आपको pcap फ़ाइल (-f) या pcap फ़ाइलों वाली निर्देशिका (-d) का पथ प्रदान करना होगा। आउटपुट JSON प्रारूप में है। यह मानक आउटपुट पर या प्रदान की गई निर्देशिका (-o) में स्रोत फ़ाइल के नाम का उपयोग करके सहेजा जाएगा। उदाहरण के लिए, कमांड का आउटपुट:
hfinger -f example.pcap -o /tmp/pcap
यहाँ सहेजा जाएगा:
/tmp/pcap/example.pcap.json
रिपोर्ट मोड -m/--mode का उपयोग 0-4 श्रेणी में एक पूर्णांक प्रदान करके डिफ़ॉल्ट रिपोर्ट मोड को बदलने के लिए किया जा सकता है।
मोड प्रतिनिधित्व अनुरोध सुविधाओं या राउंडिंग मोड में भिन्न होते हैं।
डिफ़ॉल्ट मोड (2) को हमारे द्वारा चुना गया था ताकि उन सभी सुविधाओं का प्रतिनिधित्व किया जा सके जो आमतौर पर अनुरोधों के विश्लेषण के दौरान उपयोग की जाती हैं,
लेकिन यह टकरावों और उत्पन्न फ़िंगरप्रिंटों की कम संख्या भी प्रदान करता है।
अन्य मोड के साथ, आप अलग-अलग लक्ष्य प्राप्त कर सकते हैं।
उदाहरण के लिए, मोड 3 में आपको उत्पन्न फ़िंगरप्रिंटों की कम संख्या मिलती है
लेकिन मैलवेयर परिवारों के बीच टकराव की अधिक संभावना होती है। यदि आप अनिश्चित हैं, तो आपको कुछ भी बदलने की आवश्यकता नहीं है।
रिपोर्ट मोड के बारे में अधिक जानकारी यहाँ है।
संस्करण 0.2.1 से शुरू करते हुए Hfinger कम वर्बोज़ है। यदि आप प्राप्त करना चाहते हैं तो आपको -v/--verbose का उपयोग करना चाहिए
हेडर के गैर-मानक मानों, अनुरोध के गैर-पेलोड भाग में गैर-ASCII वर्णों,
CRLF टैग (\r\n\r\n) की कमी, और विश्लेषित अनुरोधों के साथ अन्य समस्याओं के बारे में जानकारी जो एप्लिकेशन त्रुटियाँ नहीं हैं।
जब वर्बोज़ मोड में ऐसी कोई समस्या आती है, तो उन्हें मानक त्रुटि आउटपुट पर मुद्रित किया जाएगा।
आप -l/--log स्विच (जो -v/--verbose को दर्शाता है) का उपयोग करके लॉग को एक परिभाषित स्थान पर भी सहेज सकते हैं।
लॉग डेटा लॉग फ़ाइल में जोड़ा जाएगा।
संस्करण 0.2.0 से शुरू करते हुए, Hfinger अन्य Python अनुप्रयोगों में आयात का समर्थन करता है।
इसे अपने ऐप में उपयोग करने के लिए बस hfinger.analysis से hfinger_analyze फ़ंक्शन आयात करें
और इसे pcap फ़ाइल और रिपोर्टिंग मोड के पथ के साथ कॉल करें।
लौटाया गया परिणाम फ़िंगरप्रिंटिंग परिणामों के साथ dicts की एक सूची है।
उदाहरण के लिए:
from hfinger.analysis import hfinger_analyze
pcap_path = "SPECIFY_PCAP_PATH_HERE"
reporting_mode = 4
print(hfinger_analyze(pcap_path, reporting_mode))
संस्करण 0.2.1 से शुरू करते हुए Hfinger सामने आने वाली सूचना लॉग करने के लिए logging मॉड्यूल का उपयोग करता है
हेडर के गैर-मानक मानों, अनुरोध के गैर-पेलोड भाग में गैर-ASCII वर्णों,
CRLF टैग (\r\n\r\n) की कमी, और विश्लेषित अनुरोधों के साथ अन्य समस्याओं के बारे में जानकारी जो एप्लिकेशन त्रुटियाँ नहीं हैं।
Hfinger नाम hfinger का उपयोग करके अपना स्वयं का लॉगर बनाता है, लेकिन पूर्व कॉन्फ़िगरेशन के बिना लॉग जानकारी व्यवहार में छोड़ दी जाती है।
यदि आप यह लॉग जानकारी प्राप्त करना चाहते हैं, तो hfinger_analyze को कॉल करने से पहले, आपको hfinger लॉगर कॉन्फ़िगर करना चाहिए,
लॉग स्तर को logging.INFO पर सेट करें, लॉग हैंडलर को अपनी आवश्यकताओं के अनुसार कॉन्फ़िगर करें, इसे लॉगर में जोड़ें।
अधिक जानकारी hfinger_analyze फ़ंक्शन docstring में उपलब्ध है।
एक फ़िंगरप्रिंट एक अनुरोध से निकाली गई सुविधाओं पर आधारित होता है। पूर्ण सूची से विशेष सुविधाओं का उपयोग चयनित पर निर्भर करता है एक पूर्वनिर्धारित सूची से रिपोर्ट मोड (रिपोर्ट मोड के बारे में अधिक जानकारी यहाँ है)। नीचे दिया गया आंकड़ा डिफ़ॉल्ट रिपोर्ट मोड में एक उदाहरण फ़िंगरप्रिंट के निर्माण का प्रतिनिधित्व करता है।

जानकारी निकालने के लिए अनुरोध के तीन भागों का विश्लेषण किया जाता है: URI,
हेडर की संरचना (विधि और प्रोटोकॉल संस्करण सहित), और पेलोड।
फ़िंगरप्रिंट की विशेष सुविधाओं को | (पाइप) का उपयोग करके अलग किया जाता है। उदाहरण से POST अनुरोध के लिए उत्पन्न अंतिम फ़िंगरप्रिंट है:
2|3|1|php|0.6|PO|1|us-ag,ac,ac-en,ho,co,co-ty,co-le|us-ag:f452d7a9/ac:as-as/ac-en:id/co:Ke-Al/co-ty:te-pl|A|4|1.4
सुविधाओं का निर्माण नीचे फ़िंगरप्रिंट में उपस्थिति के क्रम में वर्णित है।
सबसे पहले, URI सुविधाएँ निकाली जाती हैं:
log10(43)≈2),log10(20/3)≈1),hfinger/configs/extensions.txt में ज्ञात एक्सटेंशन की सूची पर है,log10(4)≈0.6)।दूसरे, हेडर संरचना सुविधाओं का विश्लेषण किया जाता है:
PO),अनुरोध में हेडर के क्रम का प्रतिनिधित्व करने के लिए, प्रत्येक हेडर के नाम को hfinger/configs/headerslow.json में स्कीमा के अनुसार एन्कोड किया गया है, उदाहरण के लिए, User-Agent हेडर को us-ag के रूप में एन्कोड किया गया है।
एन्कोडेड नामों को , द्वारा अलग किया जाता है। यदि हेडर का नाम बड़े अक्षर से शुरू नहीं होता है
(या मिश्रित हेडर जैसे Accept-Encoding का विश्लेषण करते समय इसके किसी भी भाग),
तो एन्कोडेड प्रतिनिधित्व ! से उपसर्गित किया जाता है।
यदि हेडर का नाम ज्ञात हेडर की सूची में नहीं है,
तो इसे FNV1a हैश का उपयोग करके हैश किया जाता है,
और हैश का उपयोग एन्कोडिंग के रूप में किया जाता है।
लोकप्रिय हेडर का विश्लेषण करते समय, अनुरोध की जाँच की जाती है कि क्या वे उसमें दिखाई देते हैं। ये हेडर हैं:
जब हेडर अनुरोध में पाया जाता है, तो इसके मान की जाँच एक तालिका के विरुद्ध की जाती है
विशिष्ट मानों के तालिका के साथ header_name_representation:value_representation जोड़े बनाने के लिए।
हेडर का नाम hfinger/configs/headerslow.json में स्कीमा के अनुसार एन्कोड किया गया है (जैसा कि पहले प्रस्तुत किया गया है),
और मान को hfinger/configs निर्देशिका या configs.py फ़ाइल में संग्रहीत स्कीमा के अनुसार एन्कोड किया जाता है,
जो हेडर पर निर्भर करता है। उपरोक्त उदाहरण में Accept को ac के रूप में एन्कोड किया गया है
और इसका मान */* को as-as (asterisk-asterisk) के रूप में एन्कोड किया गया है, जिससे ac:as-as प्राप्त होता है।
जोड़े अनुरोध में उपस्थिति के क्रम में फ़िंगरप्रिंट में डाले जाते हैं और / का उपयोग करके सीमांकित किए जाते हैं।
यदि हेडर मान एन्कोडिंग तालिका में नहीं पाया जा सकता है, तो इसे FNV1a हैश का उपयोग करके हैश किया जाता है।
यदि हेडर मान कई मानों से बना है, तो उन्हें , द्वारा सीमांकित मानों की सूची प्रदान करने के लिए टोकनाइज़ किया जाता है,
उदाहरण के लिए, देगा । हालांकि, विकास के इस बिंदु पर, यदि हेडर
मान में "गुणवत्ता मान" टैग () है, तो पूरे मान को इसके FNV1a हैश का उपयोग करके एन्कोड किया जाता है।
अंत में, और हेडर के मान सीधे उनके FNV1a हैश का उपयोग करके एन्कोड किए जाते हैं।
अंत में, पेलोड सुविधाओं में:
N के साथ दर्शाई गई, और अन्यथा A के साथ,Hfinger पाँच रिपोर्ट मोड में काम करता है, जो फ़िंगरप्रिंट में दर्शाई गई सुविधाओं में भिन्न होते हैं, इस प्रकार
अनुरोधों से निकाली गई जानकारी में भिन्न होते हैं। ये हैं (उपकरण कॉन्फ़िगरेशन में उपयोग की जाने वाली संख्या के साथ):
0 - मोड 2 के समान संख्या में टकराव और फ़िंगरप्रिंट उत्पन्न करता है, लेकिन कम सुविधाओं का उपयोग करता है,1 - सभी डिज़ाइन की गई सुविधाओं का प्रतिनिधित्व करता है, लेकिन मोड 0, 2, और 4 की तुलना में थोड़ा अधिक टकराव उत्पन्न करता है,2 - इष्टतम (डिफ़ॉल्ट मोड), उन सभी सुविधाओं का प्रतिनिधित्व करता है जो आमतौर पर अनुरोधों के विश्लेषण के दौरान उपयोग की जाती हैं,
लेकिन टकरावों और उत्पन्न फ़िंगरप्रिंटों की कम संख्या भी प्रदान करता है,3 - सभी मोडों में से उत्पन्न फ़िंगरप्रिंटों की सबसे कम संख्या उत्पन्न करता है,
लेकिन टकरावों की सबसे अधिक संख्या प्राप्त करता है,4 - उच्चतम फ़िंगरप्रिंट एन्ट्रॉपी प्रदान करता है,
लेकिन मोड 0-2 की तुलना में थोड़ा अधिक फ़िंगरप्रिंट उत्पन्न करता है।मोडों को मैलवेयर परिवारों की विशिष्ट रूप से पहचान करने की Hfinger की क्षमताओं को अनुकूलित करने के लिए चुना गया था
बनाम उत्पन्न फ़िंगरप्रिंटों की संख्या। मोड 0, 2, और 4 मैलवेयर परिवारों के बीच टकरावों की समान संख्या प्रदान करते हैं, हालांकि, मोड 4 अन्य दो की तुलना में थोड़ा अधिक फ़िंगरप्रिंट उत्पन्न करता है।
मोड 2 उत्पन्न फ़िंगरप्रिंटों और टकरावों की तुलनीय संख्या के साथ मोड 0 की तुलना में अधिक अनुरोध सुविधाओं का प्रतिनिधित्व करता है।
मोड 1 एकमात्र ऐसा है जो सभी डिज़ाइन की गई सुविधाओं का प्रतिनिधित्व करता है, लेकिन यह मोड 0, 1, और 4 की तुलना में टकरावों की संख्या को लगभग दोगुना कर देता है। मोड 3 अन्य मोडों की तुलना में कम से कम दो गुना कम फ़िंगरप्रिंट उत्पन्न करता है, लेकिन यह लगभग नौ गुना अधिक टकराव प्रस्तुत करता है। सभी डिज़ाइन की गई सुविधाओं का विवरण यहाँ है।
मोड निम्नलिखित सुविधाओं से बने होते हैं (फ़िंगरप्रिंट में उपस्थिति के क्रम में):
0:
1:
2:
3:
4:

Accept: */*, text/*ac:as-as,te-asq=