
लिनक्स मेमोरी कैप्चर और विश्लेषण को स्वचालित करने के लिए स्क्रिप्ट
लिनक्स मेमोरी ग्रैबर लिनक्स मेमोरी डंप करने और Volatility(TM) प्रोफाइल बनाने के लिए एक स्क्रिप्ट। Hal Pomeranz ([email protected]), 2020-02-01
"अगर मैंने आगे देखा है तो यह दिग्गजों के कंधों पर खड़े होकर।" ~ आइज़ैक न्यूटन
बहुत से लोग हैं जो इस सरल छोटे उपकरण को संभव बनाने के लिए धन्यवाद के पात्र हैं:
-- AVML उपलब्ध कराने के लिए Microsoft के अच्छे लोग
-- LiME पर अपने काम के लिए Joe Sylve
-- Volatility(TM) विकास टीम को उनके निरंतर काम के लिए। मैं विशेष रूप से Andrew Case को पहचानना चाहूंगा जिन्होंने मेरे उपकरण के विकास के दौरान मेरे कई परेशान करने वाले प्रश्नों का उत्तर दिया।
-- libdwarf और dwarfdump के निरंतर समर्थन के लिए David Anderson
-- MoonSols से Matt Suiche। जब मैं अपना उपकरण बना रहा था, तो मेरा डिज़ाइन लक्ष्य था "इसे DumpIt जितना आसान बनाएं" (यदि आपको विंडोज मेमोरी कैप्चर करने की आवश्यकता है, तो मैं इससे आसान किसी उपकरण को नहीं जानता)। तो प्रेरणा के लिए धन्यवाद, Matt!
-- वे लोग जिन्होंने उपकरण को बेहतर बनाने के लिए विचार और कोड प्रदान किए हैं:
Julien -- वैकल्पिक आउटपुट/बिल्ड निर्देशिकाएं और केस ID लेबल, रूट के रूप में नहीं चलने पर रोकें
Jonathon Poling -- Julien के समान विचार
Jeff Bryner -- प्रत्येक कैप्चर के लिए volatilityrc फाइलें बनाना
इन सभी प्रयासों से समुदाय बेहतर है। मैंने अपने उपकरण को Creative Commons 'Attribution' License (CC BY) के तहत उपलब्ध कराने का विकल्प चुना है, ताकि इसे यथासंभव व्यापक रूप से उपलब्ध कराया जा सके।
लिनक्स मेमोरी का विश्लेषण करने के लिए, पहले आपको लिनक्स मेमोरी कैप्चर करने में सक्षम होना होगा। AVML बहुत अच्छा काम करता है, लेकिन यदि आपके सिस्टम में /proc/kcore या /dev/crash नहीं है तो आपको Joe Sylve के Linux Memory Extractor (LiME) की आवश्यकता होगी। लेकिन आपके पास उस सिस्टम के कर्नेल के लिए संकलित एक LiME मॉड्यूल होना चाहिए जहां आप RAM लेना चाहते हैं।
Volatility(TM) लिनक्स मेमोरी इमेज का विश्लेषण करने में बहुत अच्छा है। लेकिन इसे एक प्रोफाइल की आवश्यकता है जो उस सिस्टम से मेल खाती हो जहां मेमोरी कैप्चर की गई थी। प्रोफाइल बनाने का मतलब है उपयुक्त सिस्टम पर एक C प्रोग्राम संकलित करना और महत्वपूर्ण कर्नेल डेटा संरचनाओं के पतों को प्राप्त करने के लिए dwarfdump का उपयोग करना। आपको /boot निर्देशिका से System.map फ़ाइल की एक प्रति की भी आवश्यकता है।
अब यदि आपके पास अपने लक्ष्य सिस्टम की डुप्लिकेट है, तो आप क्लोन पर Volatility(TM) प्रोफाइल बना सकते हैं और यदि आवश्यक हो तो लक्ष्य से मेमोरी कैप्चर और विश्लेषण करने के लिए LiME बना सकते हैं। लेकिन ऐसी कई स्थितियां हैं जहां आपके लक्ष्य सिस्टम की डुप्लिकेट उपलब्ध नहीं है। इसलिए आपको अपने लक्ष्य मशीन पर अपना Volatility(TM) प्रोफाइल और LiME बनाना पड़ सकता है।
और यह कमजोर दिल वालों के लिए नहीं है। इसमें कई कदम शामिल हैं, और कुछ काफी निम्न-स्तरीय लिनक्स कमांड शामिल हैं। मेरा लक्ष्य एक ऐसा पैकेज बनाना था जिसे (एक विशेषज्ञ द्वारा) थंब ड्राइव पर स्थापित किया जा सके और फील्ड में एजेंटों को वितरित किया जा सके। थंब ड्राइव के उपयोगकर्ता को थंब ड्राइव में प्लग करने, एक कमांड चलाने, और सफलतापूर्वक लक्ष्य मशीन की मेमोरी इमेज और एक कार्यशील Volatility(TM) प्रोफाइल प्राप्त करने में सक्षम होना चाहिए। परिणाम मेरी lmg (Linux Memory Grabber) स्क्रिप्ट है।
यदि आप फोरेंसिक शुद्धता पर जोर देते हैं, तो यह संभवतः आपके लिए उपकरण नहीं है। आइए उन तरीकों पर चर्चा करें जिनसे मेरा उपकरण लक्ष्य सिस्टम के साथ बातचीत करता है:
हटाने योग्य मीडिया -- उपकरण को पोर्टेबल USB उपकरण जैसे थंब ड्राइव से चलाने के लिए डिज़ाइन किया गया है। आप अपने लक्ष्य सिस्टम में एक लिखने योग्य उपकरण प्लग करने जा रहे हैं, जहां यह संभावित रूप से दुर्भावनापूर्ण उपयोगकर्ताओं या सिस्टम पर मैलवेयर द्वारा लक्षित किया जा सकता है। उपकरण को सिस्टम में प्लग करने की क्रिया मशीन की स्थिति को बदलने वाली है (जैसे, लॉग प्रविष्टियां, mtab प्रविष्टियां आदि बनाना)। यदि उपकरण ऑपरेटिंग सिस्टम द्वारा स्वचालित रूप से माउंट नहीं किया जाता है, तो उपयोगकर्ता को रूट शेल के माध्यम से मैन्युअल रूप से उपकरण माउंट करना होगा।
संकलन -- Volatility(TM) प्रोफाइल बनाने में लक्ष्य मशीन पर कोड संकलित करना शामिल है। ऐसा ही AVML के काम न करने पर LiME बनाने में भी होता है। तो gcc निष्पादित किया जाएगा, हेडर फ़ाइलें पढ़ी जाएंगी, लाइब्रेरी लिंक की जाएंगी, आदि। lmg TMPDIR को USB उपकरण की निर्देशिका पर सेट करके लक्ष्य मशीन के फ़ाइल सिस्टम पर प्रभाव को कम करने का प्रयास करता है जहां से lmg चलता है। इसका मतलब है कि संकलक द्वारा बनाई गई मध्यवर्ती फ़ाइलें लक्ष्य मशीन के स्थानीय फ़ाइल सिस्टम के बजाय थंब ड्राइव पर लिखी जाएंगी।
निर्भरताएं -- लिनक्स पर कर्नेल कोड संकलित करने के लिए, लक्ष्य मशीन को gcc, make आदि के साथ एक कार्यशील विकास वातावरण और सभी उपयुक्त इन्क्लूड फ़ाइलें और साझा लाइब्रेरी की आवश्यकता होती है। और विशेष रूप से, कर्नेल हेडर फ़ाइलें स्थानीय मशीन पर मौजूद होनी चाहिए। ये निर्भरताएं लक्ष्य पर मौजूद नहीं हो सकती हैं। इस मामले में, उपयोगकर्ता के पास उपयुक्त निर्भरताओं को स्थापित करने (यदि संभव हो) या सिस्टम के लिए Volatility(TM) प्रोफाइल बनाने में असमर्थ होने का विकल्प है।
मैलवेयर -- lmg लक्ष्य मशीन से /bin/bash, gcc, zip, और कई अन्य प्रोग्रामों का उपयोग करता है। यदि सिस्टम से समझौता किया गया है, तो lmg द्वारा उपयोग किए जाने वाले एप्लिकेशन भरोसेमंद नहीं हो सकते हैं। एक अधिक पूर्ण समाधान पोर्टेबल USB उपकरण पर lmg के लिए एक सुरक्षित निष्पादन वातावरण बनाना होगा, लेकिन यह इस प्रारंभिक अवधारणा प्रमाण के दायरे से बाहर था।
मेमोरी -- चलाए जा रहे सभी कमांड लक्ष्य सिस्टम की मेमोरी को बदलने का कारण बनेंगे। RAM कैप्चर करने की क्रिया हमेशा कलाकृतियां बनाएगी, लेकिन इस मामले में RAM डंपर चलाने के अलावा व्यापक संकलन, फ़ाइल सिस्टम एक्सेस आदि भी हैं।
यह सब कहने के बाद, lmg कम कुशल एजेंटों को लक्ष्य सिस्टम से उपयोगी मेमोरी विश्लेषण डेटा कैप्चर करने की अनुमति देने के लिए एक बहुत ही सुविधाजनक उपकरण है।
ध्यान दें कि यदि AVML विफल होता है, तो lmg USB उपकरण पर पहले से मौजूद LiME मॉड्यूल की तलाश करेगा जो लक्ष्य मशीन के कर्नेल संस्करण और प्रोसेसर आर्किटेक्चर से मेल खाता हो। यदि मिल गया, तो lmg पुनर्संकलन की जहमत नहीं उठाएगा। इसी तरह, आप लक्ष्य सिस्टम पर प्रभाव को कम करने के लिए lmg को Volatility(TM) प्रोफाइल नहीं बनाने का विकल्प चुन सकते हैं।
lmg gcc और zip जैसे प्रोग्रामों को लागू करते समय सापेक्ष पथ नामों का उपयोग करता है। इसलिए यदि आप इन प्रोग्रामों को वैकल्पिक मीडिया से चलाना चाहते हैं, तो lmg चलाने से पहले $PATH को उचित रूप से अपडेट करें।
पहले, lmg के साथ प्रदान किए गए INSTALL दस्तावेज़ में दिए गए निर्देशों के अनुसार एक थंब ड्राइव तैयार करें।
जब आप RAM अधिग्रहण करना चाहते हैं, तो थंब ड्राइव को अपने लक्ष्य सिस्टम में प्लग करें। अधिकांश लिनक्स सिस्टम पर, नए USB उपकरण स्वचालित रूप से /media के तहत माउंट हो जाएंगे। मान लें कि आपका /media/LMG के अंतर्गत आता है।
अब, रूट के रूप में, "/media/LMG/lmg" चलाएँ। यह इंटरेक्टिव मोड है और lmg द्वारा सिस्टम के लिए LiME मॉड्यूल बनाने और/या Volatility(TM) प्रोफाइल बनाने से पहले उपयोगकर्ता से पुष्टि के लिए संकेत दिया जाएगा। यदि आप संकेत नहीं चाहते हैं, तो "/media/LMG/lmg -y" का उपयोग करें।
बाकी सब कुछ स्वचालित है। स्क्रिप्ट चलने के बाद, आपके पास थंब ड्राइव पर एक नई निर्देशिका होगी जिसका नाम है:
".../capture/-YYYY-MM-DD_hh.mm.ss"
lmg एक -c विकल्प का समर्थन करता है जो डिफ़ॉल्ट "-YYYY-MM-DD_hh.mm.ss" निर्देशिका के बजाय उपयोग किए जाने वाले केस ID निर्देशिका नाम को निर्दिष्ट करने के लिए है।
जो भी निर्देशिका नाम उपयोग किया जाता है, उस निर्देशिका में शामिल होगा:
-YYYY-MM-DD_hh.mm.ss-memory.lime -- RAM कैप्चर -YYYY-MM-DD_hh.mm.ss-profile.zip -- Volatility(TM) प्रोफाइल -YYYY-MM-DD_hh.mm.ss-bash -- लक्ष्य के /bin/bash की प्रति volatilityrc -- प्रोटोटाइप Volatility कॉन्फ़िग फ़ाइल
volatilityrc फ़ाइल कैप्चर की गई मेमोरी और प्लगइन के लिए उपयुक्त स्थानों को परिभाषित करती है। इस फ़ाइल का उपयोग कैसे करें, इसके लिए नीचे USAGE EXAMPLE देखें।
/bin/bash की प्रति मेमोरी कैप्चर में bash प्रक्रियाओं की मेमोरी में शेल इतिहास डेटा संरचना का पता निर्धारित करने में सहायक है। इस निष्पादन योग्य का उपयोग करने के तरीके के बारे में अधिक जानकारी के लिए https://github.com/volatilityfoundation/volatility/wiki/Linux-Command-Reference#linux_bash देखें (या नीचे USAGE EXAMPLE देखें)।