
प्रक्रिया हीप विश्लेषण ढांचा - विंडोज/लिनक्स - रिकॉर्ड प्रकार अनुमान और फोरेंसिक्स
python-haystack मेमोरी फोरेंसिक्स ################################
|travis| |coverage| |landscape| |pypi| |docs|
त्वरित उपयोग गाइड <docs/Haystack_basic_usage.ipynb>_ docs/ फ़ोल्डर में।
Haystack-reverse CLI <docs/Haystack_reverse_CLI.ipynb>_ docs/ फ़ोल्डर में।
अधिक दस्तावेज़ीकरण <http://python-haystack.readthedocs.io/en/latest/>_
python-haystack एक हीप विश्लेषण फ्रेमवर्क है, जो आवंटित मेमोरी में C संरचना की खोज और रिवर्सिंग पर केंद्रित है।
पहला फंक्शन/API SEARCH फंक्शन है। यह किसी प्रक्रिया मेमोरी डंप या लाइव प्रक्रिया की मेमोरी में ज्ञात रिकॉर्ड प्रकारों को खोजने की क्षमता प्रदान करता है।
दूसरा फंक्शन/API REVERSE फंक्शन है जो एक्सटेंशन python-haystack-reverse <https://github.com/trolldbois/python-haystack-reverse>_ में है।
इसका उद्देश्य किसी विश्लेषक को प्रक्रिया हीप में मौजूद मेमोरी रिकॉर्ड प्रकारों को रिवर्स इंजीनियर करने में मदद करना है।
यह मेमोरी से क्लासिक C संरचनाओं के पुनर्निर्माण और वर्गीकरण पर ध्यान केंद्रित करता है।
यह प्रकार परिभाषाओं को फिर से बनाने का प्रयास करता है।
आपके मेमोरी डंप प्रारूप को संभालने के लिए कुछ प्रवेश बिंदु मौजूद हैं।
haystack-live-dump द्वारा उत्पादित मेमोरी डंप फ़ोल्डरhaystack-find-heap विंडोज HEAP पर विवरण दिखाने की अनुमति देता है।haystack-search खोज CLIhaystack-show किसी विशिष्ट पते पर विशिष्ट रिकॉर्ड प्रकार के लिए CLI दिखाएंआप अपने मेमोरी हैंडलर/डंप को निर्दिष्ट करने के लिए निम्नलिखित URL का उपयोग कर सकते हैं:
dir:///path/to/my/haystack/fump/folder हेस्टैक डंप प्रारूप का उपयोग करने के लिएdmp:///path/to/my/minidump/file मिनिडंप प्रारूप (माइक्रोसॉफ्ट?) का उपयोग करने के लिएfrida://name_or_pid_of_process_to_attach_to लाइव प्रक्रिया मेमोरी तक पहुँचने के लिए frida का उपयोग करेंlive://name_or_pid_of_process_to_attach_to लाइव प्रक्रिया को ptrace करेंrekall:// rekall इमेज लोड करेंvolatility:// volatility इमेज लोड करेंcuckoo:// Cuckoo द्वारा उत्पादित मेमोरी डंप लोड करें (बीटा, पैच की आवश्यकता हो सकती है)विंडोज पर, सबसे सीधा तरीका Minidump प्राप्त करना है। माइक्रोसॉफ्ट Sysinternals
टूल का सूट CLI (procdump.exe) या GUI (Process explorer) प्रदान करता है।
इनमें से किसी एक का उपयोग करके (पूर्ण मेमोरी डंप विकल्प के साथ) आप एक फ़ाइल तैयार करेंगे
जिसका उपयोग haystack-minidump-xxx प्रवेश बिंदुओं की सूची के साथ किया जा सकता है।
जबकि तकनीकी रूप से आप कई तृतीय-पक्ष टूल का उपयोग कर सकते हैं, हेस्टैक को वास्तव में
मेमोरी मैपिंग जानकारी की आवश्यकता होती है।
इसलिए एक डंपिंग टूल शामिल है haystack-live-dump:
.. code-block:: bash
# haystack-live-dump <pid> myproc.dump
haystack-live-dump एक प्रक्रिया मेमोरी डंप को एक फ़ोल्डर में कैप्चर करें (हेस्टैक प्रारूप)haystack-rekall-dump एक विशिष्ट प्रक्रिया को हेस्टैक प्रक्रिया डंप में डंप करेंhaystack-volatility-dump एक विशिष्ट प्रक्रिया को हेस्टैक प्रक्रिया डंप में डंप करेंआप आसानी से डंप के प्रारूप को पुन: उत्पन्न कर सकते हैं, यह एक फ़ोल्डर/आर्काइव है जिसमें प्रत्येक मेमोरी मैप एक अलग फ़ाइल में होता है:
या आप अपने पसंदीदा प्रारूप के लिए एक haystack.abc.IMemoryMapping कार्यान्वयन कोड कर सकते हैं।
अन्यथा, यदि आपके पास पहले से Volatility या Rekall से सिस्टम मेमोरी डंप है,
तो आप किसी विशिष्ट प्रक्रिया मेमोरी को एक फ़ाइल में निकालने के लिए haystack-rekall-xxx या haystack-volatility-xxx परिवारों के
प्रवेश बिंदुओं का उपयोग कर सकते हैं।
प्रवेश बिंदु haystack-find-heap विंडोज HEAP पर विवरण दिखाने की अनुमति देता है।
इसे समर्थन करना चाहिए:
और लुक असाइड लिस्ट (LAL) और लो फ्रैग्मेंटेशन हीप (LFH) फ्रंटएंड का विवरण दिखाएँ।
आपको यह जानकर आश्चर्य हो सकता है कि कभी-कभी, एक एकल प्रक्रिया दो प्रकार के HEAP (32 और 64) को मिश्रित कर सकती है।
किसी विशिष्ट रिकॉर्ड की खोज करने के लिए, आपको पहले उस रिकॉर्ड प्रकार को परिभाषित करना होगा। C हेडर फ़ाइल से Python ctypes परिभाषा तक जाने के बुनियादी चरणों के लिए एक [त्वरित उपयोग गाइड](docs/Haystack basic usage.ipynb) उपलब्ध है। या आप इसे पारंपरिक Python ctypes रिकॉर्ड के साथ स्वयं कर सकते हैं।
खोज api haystack-xxx-search स्क्रिप्ट्स के परिवार के माध्यम से उपलब्ध है लेकिन
एक API में भी ताकि आप उस खोज को अपने कोड में एम्बेड कर सकें।
संक्षेप में, हेस्टैक खोज उस विशिष्ट रिकॉर्ड प्रकार के लिए 'मान्य' ऑफसेट खोजने के लिए प्रोग्राम की मेमोरी के प्रत्येक ऑफसेट पर पुनरावृति करेगा।
रिकॉर्ड की वैधता प्रकार बाधाओं द्वारा निर्धारित की जाती है जैसे:
.. code-block:: bash
$ python haystack/cli.py dir:///home/user/project/python-haystack/test/src/test-ctypes6.32.dump ctypes6_gen32.struct_usual
निम्नलिखित बाधाएँ समर्थित हैं:
उदाहरण:
.. code-block:: python
[struct_name]
myfield: [1,0xff]
ptr_field: NotNull
आप haystack/allocators/win32/winxpheap32.constraints पर एक नज़र डाल सकते हैं, जहाँ
विंडोज XP HEAP x32 की बाधाएँ परिभाषित हैं।
जाहिर है, जितनी अधिक बाधाएँ होंगी, परिणाम उतने ही बेहतर होंगे।
आप एक haystack.abc.interface.IRecordTypeDynamicConstraintsValidator वर्ग को लागू करके और इसे
ModuleConstraints.set_dynamic_constraints को फीड करके Python कोड का उपयोग करके अधिक जटिल बाधाएँ भी बना सकते हैं।
sslsnoop रिपॉजिटरी को v0.30 से अधिक रिलीज़ के साथ संगत होने के लिए अद्यतन की आवश्यकता है - लंबित
उदाहरण के लिए, यह session_state संरचनाओं + संकेतित चाइल्ड संरचनाओं को एक Python ऑब्जेक्ट के रूप में डंप करेगा जिसके साथ हम खेल सकते हैं। मान लें कि हमारे पास pid 4042 के रूप में एक ssh क्लाइंट या सर्वर है:
.. code-block:: bash
$ sudo haystack-live-search --pickled 4042 sslsnoop.ctypes_openssh.session_state search > instance.pickled
$ sudo haystack-live-search --pickled 4042 sslsnoop.ctypes_openssh.session_state refresh 0xb8b70d18 > instance.pickled
$ sudo haystack-live-search --pickled <pid> <your ctypes Structure> search
यह अभी काम नहीं कर रहा है
एक ग्राफिकल UI python-haystack-gui <https://github.com/trolldbois/python-haystack-gui>_ का प्रयास भी है
त्वरित उपयोग गाइड <docs/Haystack_basic_usage.ipynb>_ देखें
सबसे आसान तरीका ctypeslib का उपयोग करके C हेडर से ctypes रिकॉर्ड उत्पन्न करना है।
या अपने Python ctypes रिकॉर्ड को हाथ से परिभाषित करें।
@ Pypi रिपो में sslsnoop देखें। openssl और nss संरचनाएँ उत्पन्न होती हैं।
@ मेरे github पर ctypes-kernel देखें। लिनक्स कर्नेल संरचनाएँ एक निर्मित कर्नेल ट्री से उत्पन्न होती हैं। (VMM मुश्किल है)
मूल कार्यक्षमता किसी प्रक्रिया की मेमोरी में एक विशिष्ट C रिकॉर्ड की खोज करना है।
विस्तारित रिवर्स इंजीनियरिंग कार्यक्षमता का उद्देश्य मेमोरी/हीप विश्लेषण से संरचनाओं को रिवर्स करना है।
आप रिकॉर्ड फ़ील्ड के अपेक्षित मानों पर कुछ बाधाएँ जोड़ते हैं। पॉइंटर्स हमेशा मान्य मेमोरी स्पेस तक सीमित होते हैं।
passe-partout <http://www.hsc.fr/ressources/breves/passe-partout.html.fr>_ मूल रूप से।
जब से मैंने मार्च 2011 में शुरुआत की, मैंने कई अन्य संबंधित
पिछले कार्यों का पता लगाया है।
उनमें से अधिकांश docs/ फ़ोल्डर में हैं।
अन्य संबंधित कार्य mona.py Immunity से, कुछ अन्य Mandiant सामग्री...
संक्षेप में, यह शायद एक मूल विचार नहीं है। लेकिन फिर भी, मुझे अपने sslsnoop PoC के लिए लाइव मेमोरी निष्कर्षण के लिए एक संचालन स्टैंडअलोन lib नहीं मिला, इसलिए....
संबंधित कार्य <https://github.com/trolldbois/python-haystack/wiki/State-of-art-reference>_
http://ntinfo.biz/ xntsv32
.. |pypi| image:: https://img.shields.io/pypi/v/haystack.svg?style=flat-square&label=latest%20stable%20version :target: https://pypi.python.org/pypi/haystack :alt: Latest version released on PyPi
.. |coverage| image:: https://img.shields.io/coveralls/trolldbois/python-haystack/master.svg?style=flat-square&label=coverage :target: https://coveralls.io/github/trolldbois/python-haystack?branch=master :alt: Test coverage
.. |travis| image:: https://img.shields.io/travis/trolldbois/python-haystack/master.svg?style=flat-square&label=travis-ci :target: http://travis-ci.org/trolldbois/python-haystack :alt: Build status of the master branch on Mac/Linux
.. |landscape| image:: https://landscape.io/github/trolldbois/python-haystack/master/landscape.svg?style=flat :target: https://landscape.io/github/trolldbois/python-haystack/master :alt: Code Health
.. |docs| image:: https://readthedocs.org/projects/python-haystack/badge/?version=latest :target: https://readthedocs.org/projects/python-haystack/badge/?version=latest :alt: Documentation status