
पायथन स्क्रिप्टेबल रिवर्स इंजीनियरिंग सैंडबॉक्स, QEMU पर आधारित एक वर्चुअल मशीन इंस्ट्रुमेंटेशन और निरीक्षण ढांचा
यह परियोजना संग्रहीत कर दी गई है और इसकी मुद्दा कतार बंद कर दी गई है। यह परियोजना केवल संदर्भ उद्देश्यों के लिए सार्वजनिक रखी जाएगी।
.. image:: docs/media/pyrebox_logo_light_bg.png
.. _QEMU: http://qemu.org/ .. _DECAF: https://github.com/sycurelab/DECAF .. _S2E: https://github.com/dslab-epfl/s2e .. _AVATAR: https://github.com/avatartwo .. _PANDA: https://github.com/panda-re/panda .. _Volatility: http://www.volatilityfoundation.org/ .. _BUILD: BUILD.rst .. _here: https://github.com/Cisco-Talos/pyrebox/issues .. _slides: https://github.com/Cisco-Talos/pyrebox/tree/master/docs/pyrebox_hitb_ams.pdf .. _available: https://github.com/Cisco-Talos/pyrebox/tree/master/docs/pyrebox_euskalhack.pdf .. _scripts: https://github.com/Cisco-Talos/pyrebox/tree/master/scripts .. _readthedocs.io: https://pyrebox.readthedocs.io/en/latest/ .. _questions: https://github.com/Cisco-Talos/pyrebox/issues?utf8=%E2%9C%93&q=is%3Aissue%20label%3Aquestion%20 .. _presentation: https://www.youtube.com/watch?v=F2voG87obzM .. _Contest: https://volatility-labs.blogspot.com/2017/11/results-from-5th-annual-2017-volatility.html
PyREBox एक Python स्क्रिप्ट करने योग्य रिवर्स इंजीनियरिंग सैंडबॉक्स है। यह QEMU पर आधारित है, और इसका लक्ष्य एक अलग दृष्टिकोण से गतिशील विश्लेषण और डिबगिंग क्षमताएं प्रदान करके रिवर्स इंजीनियरिंग में सहायता करना है। PyREBox आपको एक चल रहे QEMU VM का निरीक्षण करने, उसकी मेमोरी या रजिस्टरों को संशोधित करने और उसके निष्पादन को इंस्ट्रूमेंट करने की अनुमति देता है, जिसके लिए आप Python में सरल स्क्रिप्ट बनाकर किसी भी प्रकार के विश्लेषण को स्वचालित कर सकते हैं। QEMU (जब पूरे-सिस्टम-एमुलेटर के रूप में काम करता है) एक पूर्ण सिस्टम (CPU, मेमोरी, डिवाइस...) का अनुकरण करता है। VMI तकनीकों का उपयोग करके, इसे अतिथि ऑपरेटिंग सिस्टम में कोई संशोधन करने की आवश्यकता नहीं होती, क्योंकि यह रन-टाइम पर पारदर्शी रूप से इसकी मेमोरी से जानकारी प्राप्त करता है।
DECAF_, PANDA_, S2E_, या AVATAR_ जैसी कई शैक्षणिक परियोजनाओं ने पहले QEMU आधारित इंस्ट्रूमेंटेशन का लाभ उठाकर रिवर्स इंजीनियरिंग कार्यों को हल किया है। ये परियोजनाएं C/C++ में प्लगइन लिखने की अनुमति देती हैं, और गतिशील टैन्ट विश्लेषण, प्रतीकात्मक निष्पादन, या यहां तक कि निष्पादन ट्रेस के रिकॉर्ड और रीप्ले जैसी कई उन्नत सुविधाओं को लागू करती हैं। PyREBox के साथ, हम इस तकनीक को लागू करने का लक्ष्य रखते हैं, जिसमें डिजाइन को सरल रखने और खतरा विश्लेषकों के लिए सिस्टम की उपयोगिता पर ध्यान केंद्रित किया गया है।
PyREBox ने 2017 में Volatility Plugin Contest_ जीता!
यह उपकरण HITB Amsterdam 2018 में प्रस्तुत किया गया था। आप slides_ देख सकते हैं, या presentation_ देख सकते हैं। इसे EuskalHack Security Congress के तीसरे संस्करण में भी प्रस्तुत किया गया था (slides available_)।
नवीनतम सुविधाओं का आनंद लेने के लिए PyREBox के नवीनतम संस्करण को पुल करना याद रखें। PyREBox सक्रिय विकास के अधीन है और नई शानदार सुविधाएं अभी आने वाली हैं! master शाखा में हमेशा एक स्थिर संस्करण होना चाहिए, जबकि dev शाखाओं में नवीनतम, कार्य-प्रगति सुविधाएं होती हैं। निम्नलिखित घोषणा सूची master शाखा को संदर्भित करती है, और वह तारीख जब विकास परिवर्तन master में विलय किए गए थे।
एक बिल्ड स्क्रिप्ट प्रदान की गई है। निर्भरता के बारे में विशिष्ट विवरण के लिए, कृपया BUILD_ देखें। हम एक Dockerfile भी प्रदान करते हैं।
इस परियोजना का दस्तावेज़ readthedocs.io_ पर होस्ट किया गया है।
यदि आपको लगता है कि आपको एक बग मिला है, तो कृपया इसे here_ पर रिपोर्ट करें।
एक नया मुद्दा बनाने से पहले, कृपया अन्य उपयोगकर्ताओं द्वारा खोले गए questions_ को देखें।
यह प्रोग्राम "जैसा है" प्रदान किया गया है, और कोई समर्थन गारंटीकृत नहीं है। फिर भी, आपकी समस्याओं को हल करने में हमारी सहायता करने के लिए, कृपया बग को दोहराने के लिए अधिक से अधिक जानकारी शामिल करें:
PyREBox QEMU पर आधारित है, इसलिए PyREBox के साथ एक VM शुरू करने के लिए, आपको इसे ठीक उसी तरह चलाने की आवश्यकता है जैसे आप QEMU VM को बूट कर रहे थे। कुछ उदाहरण स्क्रिप्ट प्रदान की गई हैं: start_i386.sh, start_x86_64.sh, आप उन्हें उदाहरण के रूप में उपयोग कर सकते हैं।
वर्तमान में समर्थित एकमात्र QEMU मॉनिटर विकल्प stdio है (-monitor stdio)।
एक संपूर्ण सिस्टम एमुलेशन प्लेटफॉर्म प्रदान करना जिसमें एमुलेटेड गेस्ट सिस्टम का निरीक्षण करने के लिए एक सरल इंटरफ़ेस हो।
QEMU से अलग, एक स्वच्छ डिज़ाइन रखना। QEMU पर बनाई गई कई परियोजनाएं QEMU के अपग्रेड होने पर विकसित नहीं होती हैं, नई सुविधाओं और अनुकूलन के साथ-साथ सुरक्षा अपडेट भी खो देती हैं। इसे प्राप्त करने के लिए, PyREBox को एक स्वतंत्र मॉड्यूल के रूप में लागू किया गया है जिसे QEMU के साथ संकलित किया जा सकता है जिसमें न्यूनतम संशोधनों की आवश्यकता होती है।
विभिन्न आर्किटेक्चर के लिए समर्थन। वर्तमान में, PyREBox केवल Windows के लिए x86 और x86-64 बिट आर्किटेक्चर का समर्थन करता है, लेकिन इसका डिज़ाइन ARM, MIPS, या PowerPC जैसे अन्य आर्किटेक्चर और अन्य ऑपरेटिंग सिस्टम का भी समर्थन करने की अनुमति देता है।
PyREBox शेल शुरू करना QEMU के मॉनिटर पर sh कमांड टाइप करने जितना आसान है। यह तुरंत एक IPython शेल शुरू करेगा। यह शेल कमांड इतिहास के साथ-साथ परिभाषित चर को भी रिकॉर्ड करता है। उदाहरण के लिए, आप एक मान सहेज सकते हैं और बाद में निष्पादन के एक अलग बिंदु पर, जब आप शेल को फिर से शुरू करते हैं, तो इसे पुनर्प्राप्त कर सकते हैं। PyREBox IPython में उपलब्ध सभी सुविधाओं का लाभ उठाता है जैसे ऑटो-पूर्णता, कमांड इतिहास, मल्टी-लाइन संपादन, और स्वचालित कमांड सहायता निर्माण।
PyREBox आपको सिस्टम (या एक प्रक्रिया) को काफी गुप्त तरीके से डीबग करने की अनुमति देगा। पारंपरिक डीबगरों के विपरीत जो डीबग किए जा रहे सिस्टम में रहते हैं (यहां तक कि ब्रेकपॉइंट डालने के लिए डीबग की गई प्रक्रिया की मेमोरी को संशोधित करते हैं), PyREBox निरीक्षण किए गए सिस्टम के बाहर पूरी तरह से रहता है, और इसे गेस्ट में किसी भी ड्राइवर या घटक की स्थापना की आवश्यकता नहीं होती है।
.. image:: docs/media/breakpoint.gif
PyREBox चल रहे VM की स्थिति का निरीक्षण और संशोधन करने के लिए कमांड का एक पूरा सेट प्रदान करता है। पूरी सूची प्राप्त करने के लिए बस list_commands टाइप करें। आप सिर्फ vol और संबंधित volatility कमांड टाइप करके कोई भी volatility प्लगइन चला सकते हैं। उपलब्ध volatility प्लगइन्स की पूरी सूची के लिए, आप list_vol_commands टाइप कर सकते हैं। यह सूची स्वचालित रूप से उत्पन्न होती है, इसलिए यह PyREBox के volatility/ पथ पर आपके द्वारा स्थापित किसी भी volatility प्लगइन को भी दिखाएगा।
आप अपने स्वयं के कमांड भी परिभाषित कर सकते हैं! यह एक स्क्रिप्ट में एक फ़ंक्शन घोषित करने और उसे लोड करने जितना सरल है।
यदि आपको कमांड से अधिक अभिव्यंजक किसी चीज़ की आवश्यकता है, तो आप API का लाभ उठाते हुए एक Python स्निपेट लिख सकते हैं। API के विस्तृत विवरण के लिए, Documentation_ देखें या शेल में help(api) टाइप करें।
.. image:: docs/media/stack.gif
PyREBox स्क्रिप्ट को गतिशील रूप से लोड करने की अनुमति देता है जो कॉलबैक फ़ंक्शन पंजीकृत कर सकती हैं जो कुछ घटनाओं के होने पर कॉल किए जाते हैं, जैसे निर्देश निष्पादित, मेमोरी रीड/राइट, प्रक्रियाएं बनाई/नष्ट की गईं, इत्यादि।
चूंकि PyREBox Volatility के साथ एकीकृत है, यह आपको अपनी Python स्क्रिप्ट में मेमोरी फोरेंसिक के लिए सभी volatility प्लगइन्स का लाभ उठाने देगा। कई सबसे प्रसिद्ध रिवर्स इंजीनियरिंग उपकरण Python में लागू किए गए हैं या कम से कम Python बाइंडिंग हैं। हमारा दृष्टिकोण इनमें से किसी भी उपकरण को एक स्क्रिप्ट में एकीकृत करने की अनुमति देता है।
अंत में, चूंकि Python कॉलबैक निष्पादित निर्देशों जैसी लगातार घटनाओं पर प्रदर्शन दंड ला सकते हैं, इसलिए ट्रिगर बनाना भी संभव है। ट्रिगर नेटिव-कोड प्लगइन हैं (C/C++ में विकसित) जिन्हें Python कॉलबैक निष्पादित होने से ठीक पहले किसी भी घटना पर रन-टाइम पर गतिशील रूप से डाला जा सकता है। यह Python कोड को हिट करने वाली घटनाओं की संख्या को सीमित करने के साथ-साथ नेटिव कोड में मानों की पूर्व-गणना करने की अनुमति देता है।
इस रिपॉजिटरी में आपको उदाहरण scripts_ मिलेंगे जो आपको अपना कोड लिखने में मदद कर सकते हैं। योगदान का स्वागत है!
सबसे पहले, PyREBox QEMU_ और Volatility_ के बिना संभव नहीं होता। हम उनके डेवलपर्स और अनुरक्षकों को इतने शानदार काम के लिए धन्यवाद देते हैं।
PyREBox DECAF_ या PANDA_ जैसी कई शैक्षणिक परियोजनाओं से प्रेरित है। वास्तव में, PyREBox द्वारा समर्थित कई कॉलबैक DECAF_ में पाए जाने वाले कॉलबैक के समतुल्य हैं, और इंस्ट्रूमेंटेशन के पीछे की अवधारणाएं इन कार्यों पर आधारित हैं।
PyREBox तृतीय-पक्ष कोड से लाभान्वित होता है, जो निर्देशिका pyrebox/third_party के अंतर्गत पाया जा सकता है। प्रत्येक तृतीय-पक्ष परियोजना के लिए, हम इसके मूल लाइसेंस का एक संकेत, परियोजना से लिए गए मूल स्रोत कोड फ़ाइलें, साथ ही स्रोत कोड फ़ाइलों के संशोधित संस्करण (यदि लागू हो) शामिल करते हैं, जो PyREBox द्वारा उपयोग किए जाते हैं।