
إطار تحليل كومة العمليات - Windows/Linux - استنتاج نوع السجل والأدلة الجنائية
################################
|travis| |coverage| |landscape| |pypi| |docs|
دليل الاستخدام السريع <docs/Haystack_basic_usage.ipynb>_ في مجلد docs/.
واجهة سطر الأوامر Haystack-reverse <docs/Haystack_reverse_CLI.ipynb>_ في مجلد docs/.
المزيد من التوثيق <http://python-haystack.readthedocs.io/en/latest/>_
python-haystack هو إطار عمل لتحليل الكومة (heap)، يركز على البحث والهندسة العكسية لبنى C في الذاكرة المخصصة.
الوظيفة/API الأولى هي وظيفة SEARCH. تعطي القدرة على البحث عن أنواع سجلات معروفة في تفريغ ذاكرة عملية أو ذاكرة عملية حية.
الوظيفة/API الثانية هي وظيفة REVERSE في الإضافة python-haystack-reverse <https://github.com/trolldbois/python-haystack-reverse>_ تهدف إلى مساعدة المحلل في الهندسة العكسية لأنواع سجلات الذاكرة الموجودة في كومة العملية. تركز على إعادة البناء وتصنيف بنى C الكلاسيكية من الذاكرة. تحاول إعادة تعريف الأنواع.
توجد عدة نقاط دخول للتعامل مع تنسيق تفريغ الذاكرة.
haystack-live-dumphaystack-find-heap يسمح بعرض تفاصيل HEAP في Windows.haystack-search واجهة سطر أوامر للبحثhaystack-show واجهة سطر أوامر لعرض نوع سجل معين في عنوان معينيمكنك استخدام عنوان URL التالي لتعيين معالج/تفريغ الذاكرة الخاص بك:
dir:///path/to/my/haystack/fump/folder لاستخدام تنسيق تفريغ haystackdmp:///path/to/my/minidump/file لاستخدام تنسيق minidump (مايكروسوفت؟)frida://name_or_pid_of_process_to_attach_to لاستخدام frida للوصول إلى ذاكرة عملية حيةlive://name_or_pid_of_process_to_attach_to ptrace على عملية حيةrekall:// تحميل صورة rekallvolatility:// تحميل صورة volatilitycuckoo:// تحميل تفريغ ذاكرة من إنتاج Cuckoo (تجريبي، قد يحتاج إلى تصحيح)في Windows، الطريقة الأكثر وضوحًا هي الحصول على Minidump. توفر مجموعة أدوات Microsoft Sysinternals إما واجهة سطر أوامر (procdump.exe) أو واجهة رسومية (Process Explorer). باستخدام إحدى هذه الأدوات (مع خيار تفريغ الذاكرة الكامل) ستحصل على ملف يمكن استخدامه مع قائمة نقاط الدخول haystack-minidump-xxx.
بينما يمكنك تقنيًا استخدام العديد من أدوات الطرف الثالث، إلا أن haystack يحتاج بالفعل إلى معلومات تخطيط الذاكرة ليعمل. لذلك توجد أداة تفريغ مضمنة haystack-live-dump:
.. code-block:: bash
# haystack-live-dump <pid> myproc.dump
haystack-live-dump يلتقط تفريغ ذاكرة عملية إلى مجلد (تنسيق haystack)haystack-rekall-dump يفريغ عملية محددة إلى تفريغ عملية بتنسيق haystackhaystack-volatility-dump يفريغ عملية محددة إلى تفريغ عملية بتنسيق haystackيمكنك بسهولة إعادة إنتاج تنسيق التفريغ، وهو عبارة عن مجلد/أرشيف يحتوي على كل خريطة ذاكرة في ملف منفصل:
أو يمكنك برمجة تطبيق لـ haystack.abc.IMemoryMapping للتنسيق المفضل لديك.
بخلاف ذلك، إذا كان لديك بالفعل تفريغ ذاكرة نظام من Volatility أو Rekall، يمكنك استخدام عائلات نقاط الدخول haystack-rekall-xxx أو haystack-volatility-xxx لاستخراج ذاكرة عملية محددة إلى ملف.
تسمح نقطة الدخول haystack-find-heap بعرض تفاصيل HEAP في Windows. يجب أن تدعم:
وعرض تفاصيل الواجهة الأمامية لقائمة Look Aside (LAL) وكومة التجزئة المنخفضة (LFH).
قد تفاجأ أحيانًا بأن عملية واحدة يمكنها خلط نوعي HEAP (32 و 64).
للبحث عن سجل معين، ستحتاج أولاً إلى تعريف هذا النوع من السجلات. يوجد [دليل استخدام سريع](docs/Haystack basic usage.ipynb) يشرح الخطوات الأساسية للانتقال من ملف رأس C إلى تعريف ctypes في Python. أو يمكنك القيام بذلك بنفسك باستخدام سجلات ctypes التقليدية في Python.
واجهة برمجة التطبيقات (API) للبحث متاحة من خلال عائلة البرامج النصية haystack-xxx-search وأيضًا كـ API بحيث يمكن تضمين هذا البحث في الكود الخاص بك.
باختصار، سيقوم بحث haystack بالمرور عبر كل إزاحة في ذاكرة البرنامج لمحاولة العثور على إزاحة 'صالحة' لذلك النوع المحدد من السجلات.
يتم تحديد صلاحية السجل من خلال قيود النوع مثل:
.. 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، حيث تم تعريف قيود HEAP x32 لويندوز XP.
من الواضح أنه كلما زادت القيود، كانت النتائج أفضل.
يمكنك أيضًا إنشاء قيود أكثر تعقيدًا باستخدام كود Python من خلال تنفيذ فئة haystack.abc.interface.IRecordTypeDynamicConstraintsValidator وتغذيتها إلى ModuleConstraints.set_dynamic_constraints
مستودع sslsnoop يحتاج إلى تحديث ليكون متوافقًا مع الإصدارات > v0.30 - قيد الانتظار
على سبيل المثال، سيقوم هذا بتفريغ هياكل session_state بالإضافة إلى هياكل الأطفال المشار إليها ككائن Python يمكننا التعامل معه. لنفترض أن لدينا عميل أو خادم ssh بالمعرف 4042:
.. 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
هذا لا يعمل الآن
هناك أيضًا محاولة لواجهة رسومية python-haystack-gui <https://github.com/trolldbois/python-haystack-gui>_
انظر دليل الاستخدام السريع <docs/Haystack_basic_usage.ipynb>_
الطريقة الأسهل هي استخدام ctypeslib لإنشاء سجلات ctypes من رؤوس C. أو قم بتعريف سجل ctypes في Python يدويًا.
@ انظر sslsnoop في مستودع Pypi. تم إنشاء هياكل openssl و nss. @ انظر ctypes-kernel على github الخاص بي. يتم إنشاء هياكل نواة Linux من شجرة نواة مبنية. (VMM أمر صعب)
الوظيفة الأساسية هي البحث في ذاكرة عملية عن سجل C محدد. الوظيفة الممتدة للهندسة العكسية تهدف إلى عكس هياكل من تحليل الذاكرة/الكومة.
تضيف بعض القيود على القيم المتوقعة لحقول السجل. دائمًا ما تكون المؤشرات مقيدة بمساحة ذاكرة صالحة.
في الأصل من passe-partout <http://www.hsc.fr/ressources/breves/passe-partout.html.fr>. منذ أن بدأت في مارس 2011، اكتشفت العديد من الأعمال السابقة الأخرى ذات الصلة.
معظمها موجود في مجلد docs/.
أعمال أخرى ذات صلة هي mona.py من Immunity، وبعض أشياء Mandiant الأخرى... باختصار، هذه ليست فكرة أصلية على الأرجح. لكنني لم أجد مكتبة مستقلة عاملة لاستخراج الذاكرة الحية من أجل sslsnoop PoC الخاص بي، لذا...
الأعمال ذات الصلة <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