
पूर्णतः डॉकरीकृत लिनक्स कर्नेल डीबगिंग वातावरण
# LIKE-DBG
[](https://github.com/psf/black)
[](https://github.com/0xricksanchez/like-dbg/actions?query=workflow%3Aflake8)
[](https://github.com/0xricksanchez/like-dbg/actions?query=workflow%3Ashellcheck)
[](https://github.com/0xricksanchez/like-dbg/actions?query=workflow%3Ahadolint)
[](https://codecov.io/gh/0xricksanchez/like-dbg)
[](https://tldrlegal.com/license/mit-license)
[](https://github.com/0xricksanchez/like-dbg/releases/)
LIKE-DBG (*LI*nux-*KE*rnel-*D*e*B*u*G*ger) का उद्देश्य Linux कर्नेल डिबगिंग वातावरण स्थापित करने का प्रयास करते समय आने वाले उबाऊ चरणों को स्वचालित करना है।
मैंने कर्नेल एक्सप्लॉइटेशन रिसर्च में गोता लगाने का निश्चय किया और पाया कि मौजूदा समाधान पर्याप्त उपयोगी नहीं हैं।
इसलिए, यह शोध में गोता लगाने से पहले के सभी आवश्यक प्रारंभिक चरणों को यथासंभव सरल और मज़ेदार बनाने का एक प्रयास है।
कर्नेल बनाने, उसे एक एम्युलेटेड वातावरण में चलाने और डिबगर को जोड़ने के सभी चरण docker कंटेनरों के अंदर पारदर्शी रूप से किए जाते हैं ताकि सिस्टम आवश्यकताएँ न्यूनतम रहें।
वर्तमान में, निम्नलिखित प्रत्येक चरण के लिए एक समर्पित docker कंटेनर उपलब्ध है:
- कर्नेल बनाना
- कर्नेल के साथ उपयोग करने हेतु एक रूट फाइल सिस्टम बनाना
- कर्नेल + फाइल सिस्टम को _debuggee_ के रूप में लॉन्च करना
- कर्नेल से _debugger_ के रूप में जुड़ना
## सावधानियाँ
चूँकि यह परियोजना अपने प्रारंभिक चरणों में है, मुझे उम्मीद है कि चीज़ें तेज़ी से बदलेंगी, साथ ही रास्ते में ब्रेकिंग बदलाव भी आएँगे।
सुधार के प्रमुख बिंदु हैं:
- `x86_64` और `arm64` से आगे बढ़कर वास्तविक मल्टी-आर्किटेक्चर समर्थन प्राप्त करना
- कर्नेल बिल्डर को विस्तार देना ताकि वह केवल हालिया™ कर्नेल ही नहीं बल्कि अन्य कर्नेल भी सफलतापूर्वक बना सके
- Android कर्नेल समर्थन जोड़ना
- (एकीकरण) परीक्षण जोड़ना
- डिबगिंग अनुभव को और भी बेहतर बनाना
## विशेषताएँ
अच्छी बात यह है कि अपने प्रारंभिक चरणों के बावजूद, कुछ उपयोगी सुविधाएँ पहले से मौजूद हैं:
- सामान्य:
- प्रत्येक चरण के dockerization के कारण न्यूनतम होस्ट सिस्टम आवश्यकताएँ
- एक आसानी से समझ में आने वाला `configs/user.ini` कॉन्फ़िग जो अत्यधिक अनुकूलन योग्य सत्रों की अनुमति देता है
- या कमांड-लाइन के माध्यम से विभिन्न डिबगिंग सेटअपों के लिए अलग-अलग कॉन्फ़िगरेशन प्रदान करें!
- CTF रनर जो विशेष रूप से Linux कर्नेल एक्सप्लॉइटेशन चुनौतियों को संभालने के लिए डिज़ाइन किया गया है
- `ctf/misc` जिसमें CTF में सहायता के लिए कुछ शानदार स्क्रिप्ट हैं
- कोड गुणवत्ता उपाय:
- पायथन कोड के लिए [black](https://github.com/psf/black) फॉर्मेटर
- सभी पायथन कोड के लिए [flake8](https://github.com/PyCQA/flake8) लिंटर
- शेल स्क्रिप्ट के लिए [shellcheck](https://github.com/koalaman/shellcheck) लिंटर
- Dockerfiles के लिए [hadolint](https://github.com/hadolint/hadolint) लिंटर
- ऑपरेटिंग सिस्टम अज्ञेयवादी, अर्थात इसे निम्नलिखित पर बिना किसी समस्या के चलना चाहिए:
- Debian/Ubuntu
- Arch Linux/Manjaro
- Fedora
- कर्नेल बिल्डर:
- मल्टी-आर्क: `x86_64`, `arm64`
- कर्नेल बनाने के लिए `gcc` और `clang` के बीच चयन करें
- कॉन्फ़िगरेशन मोड:
- generic-mode,
- syzkaller-mode,
- custom-mode, या
- एक उपयोग योग्य कर्नेल कॉन्फ़िग प्रदान करें
- निम्न से बनाने के लिए सूक्ष्म-स्तरीय संस्करण नियंत्रण:
- Commit hash
- Release tag (उदा.: 5.10-rc)
- Major-Minor-Patch (उदा.: 5.10.77)
- पैच फ़ाइलों को स्वचालित रूप से लागू करने की क्षमता
- कस्टम कर्नेल मॉड्यूल जोड़ने की बुनियादी क्षमता
- रूट फाइल सिस्टम बिल्डर:
- [debootstrap](https://wiki.debian.org/Debootstrap) द्वारा संचालित
- कर्नेल की आर्किटेक्चर से मेल खाती फाइल सिस्टम की स्वचालित पीढ़ी
- अनुकूलित करने की क्षमता:
- फाइल सिस्टम में वांछित पैकेज
- Debian रिलीज़ संस्करण जिस पर सब कुछ आधारित होगा
- Debuggee:
- [QEMU](https://github.com/qemu/qemu) द्वारा संचालित
- `configs/*.ini` फ़ाइलों के भीतर से QEMU रनटाइम विकल्पों का अनुकूलन।
- Debugger:
- [GDB (multiarch)](https://sourceware.org/gdb/) द्वारा संचालित, या तो
- [GEF](https://github.com/hugsy/gef) और [GEF-extras](https://github.com/hugsy/gef-extras) के साथ, या
- [pwndbg](https://github.com/pwndbg/pwndbg) के साथ
- उपयोगकर्ताओं को `io/scripts/gdb_script` में GDB स्क्रिप्ट निर्दिष्ट करने की अनुमति देता है ताकि परिदृश्य-अनुरूप डिबगिंग अनुभव मिल सके
## आवश्यकताएँ
आरंभ करने के लिए, आपको यह सुनिश्चित करना होगा कि आपके सिस्टम में निम्नलिखित आवश्यकताएँ स्थापित हैं:
- `docker`
- `tmux`
- `python>=3.11`
- `poetry` # <https://python-poetry.org/docs/>
इसे `root` उपयोगकर्ता के रूप में चलाने की अनुशंसा नहीं की जाती है, उदाहरण के लिए VPS पर परीक्षण उद्देश्यों के लिए।
यह ठीक से काम कर सकता है लेकिन सामान्य तौर पर मैं अत्यधिक अनुशंसा करता हूँ कि एक समर्पित गैर-root उपयोगकर्ता बनाएं जिसे `docker` और `sudo` समूह में रखा जाए!
**नोट**: यदि आप कस्टम TMUX कॉन्फ़िग का उपयोग कर रहे हैं, तो सुनिश्चित करें कि आपका पहला पेन `0` से शुरू हो!
### वैकल्पिक
यह अनुभाग उन टूल्स को कवर करता है जो LIKE-DBG चलाने के लिए _आवश्यक_ नहीं हैं लेकिन उपयोगी हैं और डिबगिंग या एक्सप्लॉइट लिखते समय काफी सहायता करते हैं।
- [musl-gcc](https://www.musl-libc.org/how.html)
- [ctags](https://github.com/universal-ctags/ctags)
- [ropr](https://github.com/Ben-Lichtman/ropr)
## सेटअप
`like-dbg` के अंदर `poetry install` चलाएँ
## कॉन्फ़िगरेशन
कर्नेल डिबगिंग अनुभव को सूक्ष्म-ट्यून करना इस परियोजना के लक्ष्यों में से एक है।
वर्तमान में, सभी ट्यून करने योग्य विकल्प दो कॉन्फ़िगरेशन फ़ाइलों में उजागर होते हैं: `configs/system.ini` और `configs/user.ini`।
कुछ फ़ील्ड्स को न बदलने की अनुशंसा की जाती है क्योंकि वे मुख्य रूप से विकास कारणों से हैं।
हालाँकि, वातावरण को अपनी आवश्यकताओं के अनुसार अनुकूलित करने वाले सभी विकल्प स्वयं-व्याख्यात्मक होने चाहिए क्योंकि उन सभी पर एक संक्षिप्त टिप्पणी अंकित है।
## उपयोग
**नोट:** पहली बार उपयोग पर `poetry install` चलाएँ।
एक बार जब आप कॉन्फ़िगरेशन लिख/अनुकूलित कर लें, तो उपयोग आपके परिदृश्य पर निर्भर करता है।
आरंभ करने का सबसे आसान तरीका, जो `configs/user.ini` कॉन्फ़िगरेशन पर आधारित है, निम्नलिखित है:
```sh
tmux -f .tmux.conf
poetry shell
# यह एक कर्नेल चेकआउट करता है, उसे बनाता है, एक रूट फाइल सिस्टम बनाता है और अंततः डिबगर और डिबगी शुरू करता है
./start_kgdb.py
```
स्वचालित रूप से बनाए गए फाइलसिस्टम के लिए 2 उपयोगकर्ता हैं:
- `root` बिना पासवर्ड के
- `user`:`user`
यह जानबूझकर किया गया है ताकि आप आसानी से दोनों दृष्टिकोणों से विकास और एक्सप्लॉइटेशन कर सकें।
### विस्तारित उपयोग
```sh
# यदि आप एक CTF चुनौती आज़माना चाहते हैं जहाँ आपको एक (संपीड़ित) Linux Image और एक रूट फाइलसिस्टम दिया गया था, तो प्रयास करें:
./start_kgdb.py --ctf <Image> <RootFS>
# यदि आप वर्तमान डिबगिंग सत्र समाप्त करना चाहते हैं
./start_kgdb.py -k
# यदि आप किसी विशिष्ट डिबगिंग सेटअप के लिए एक कस्टम 'user.ini' प्रदान करना चाहते हैं
./start_kgdb.py -c <path_to_cfg> [other_args]
# यदि आप LIKE-DBG की कुछ आंशिक कार्यक्षमता का परीक्षण करना चाहते हैं
# चरण 1: कर्नेल डाउनलोड करें
# चरण 2: चरण 1 और कर्नेल अनपैक करें
# चरण 3: चरण 2 और कर्नेल बनाएँ
# चरण 4: केवल एक रूट फाइल सिस्टम बनाएँ
# चरण 5: चरण 3+4 और डिबगी शुरू करें
./start_kgdb.py -p <stage_nr>
# सभी कंटेनर अपडेट करें
./start_kgdb.py -u
```
### उदाहरण
`examples` उपनिर्देशिका में नमूने हैं कि LIKE_DBG विशिष्ट कर्नेल डिबगिंग कार्यों में आपकी कैसे सहायता कर सकता है।
प्रत्येक उदाहरण में एक समर्पित `README.md` भी शामिल है जिसमें उदाहरणों को दोहराने के लिए आवश्यक जानकारी होती है।
## शोकेस

## हैकिंग
पायथन कोड काफी पठनीय होना चाहिए, इसलिए बेझिझक परियोजना को अपने विचारों से विस्तारित करें। सभी PR का स्वागत है :)!
अन्यथा, फीचर-अनुरोध issue बनाने या कुछ बढ़िया नई सुविधाओं पर विचार-विमर्श करने के लिए [discussions पेज](https://github.com/0xricksanchez/like-dbg/discussions) पर जाने के लिए स्वतंत्र महसूस करें!
PS: यदि आप एक लोगो प्रदान करना चाहते हैं, तो बेझिझक करें।