
Linux और MacOS के लिए पूरी तरह से डॉकरयुक्त Linux कर्नेल डिबगिंग वातावरण
LIKE-DBG (LInux-KErnel-DeBuGger) एक पूरी तरह से कंटेनरीकृत Linux kernel डिबगिंग और exploitation लैब है। यह एक kernel और root filesystem बनाता या अपनाता है, उन्हें QEMU के अंतर्गत बूट करता है, और आपको एक इंटरैक्टिव GDB सत्र (pwndbg या GEF) में ले जाता है, हर हिस्से को एक ही tmux विंडो में जोड़ता है।
इसका उद्देश्य उबाऊ सेटअप को हटाना है ताकि आपका समय kernel पर जाए, scaffolding पर नहीं।
हर चरण Docker के अंदर चलता है, इसलिए होस्ट पर आपको केवल Docker, tmux,
Python, और uv इंस्टॉल करना होता है। एक kernel संस्करण चुनें (या इसे एक CTF
चैलेंज दें), एक कमांड चलाएँ, और पूर्ण symbols के साथ start_kernel पर पहुँचें।
एक कमांड आपके config को हल करता है, kernel और rootfs बनाता या पुनः उपयोग करता है, guest को बूट करता है, और डिबगर को अटैच करता है:
uv run ./start_kgdb
यह रन एक लूप है जिसके अंदर आप रहते हैं: एक kernel और rootfs बनाएँ या अपनाएँ, इसे QEMU (Debuggee) के अंतर्गत बूट करें, GDB (Debugger) संलग्न करें, फिर संपादित करें, पहुँचाएँ, चलाएँ, क्रैश करें, मूल कारण खोजें, और दोहराएँ।
kernel प्राप्त करने के दो तरीके हैं:
bzImage/Image दें (साथ में vmlinux और initramfs यदि आपके पास हों) और यह उसे GDB के अंतर्गत ज्यों का त्यों बूट करता है। देखें docs/ctf-foreign-kernel.md।exploit-dev, hardened, kasan, ubsan, lockdep, और अधिक) जो kernel कॉन्फ़िग फ़्रैगमेंट और रनटाइम डिफ़ॉल्ट में परिणत होते हैं। बिल्ड के बाद .config सत्यापन उस प्रोफ़ाइल को पकड़ता है जो लागू नहीं हुई। ध्यान दें कि exploit-dev (डिफ़ॉल्ट) केवल KASLR बंद करता है; SMEP, SMAP, और KPTI तब तक चालू रहते हैं जब तक आप प्रोफ़ाइल न बदलें या उन्हें स्वयं टॉगल न करें (देखें docs/configuration.md)।current, टास्क और मॉड्यूल वॉकिंग, सिंबल लुकअप) के लिए करते हैं; GEF एक-पंक्ति का स्विच है।--run और --upload एक exploit को 9p शेयर या SSH के माध्यम से लाइव गेस्ट तक पहुँचाते हैं। एकल फ़्लैग-रहित .c स्वतः लक्ष्य आर्क के लिए स्टैटिक-musl में कंपाइल होता है; बाकी सब ज्यों का त्यों पहुँचाया जाता है। देखें exploit/README.md।--insmod और --rmmod के साथ कमांड पर लोड करें; उनके सिंबल GDB में स्वतः लोड होते हैं। देखें modules/README.md।--analyze-crash ऑफ़लाइन एक रिपोर्ट पुनः उत्पन्न करता है।--run/--insmod हमेशा उसी गेस्ट में पहुँचें जिसके पैन से आपने उन्हें टाइप किया।artifacts/runs/<id>/ लिखता है जिसमें हल की गई सेटिंग्स, होस्ट प्रोफ़ाइल, कमांड रिकॉर्ड, लॉग, और पैन ट्रांसक्रिप्ट होते हैं।docker समूह में गैर-root उपयोगकर्ता के रूप में चलाएँ। क्रॉस-कंपाइलेशन और initramfs का काम कंटेनरों के अंदर होता है (एक zig cc musl टूलचेन), इसलिए किसी होस्ट क्रॉस-टूलचेन की आवश्यकता नहीं है।
# 1. Install dependencies
uv sync
# 2. Start the project tmux server (loads the shipped .tmux.conf)
tmux -L likedbg -f .tmux.conf new -s LIKE-DBG
# 3. Inside that tmux session: build-or-reuse a kernel, boot it, attach the debugger
uv run ./start_kgdb
पहला रन कंटेनर इमेज और एक कर्नेल बनाता है, इसलिए इसमें कुछ समय लगता है; बाद के रन कैश का पुनः उपयोग करते हैं और सेकंडों में शुरू हो जाते हैं।
प्रत्येक बूट अपने सत्र का नाम उस चीज़ के अनुसार बदल देता है जिसे वह डीबग कर रहा है (LIKE-DBG-pawnyable-lk01,
LIKE-DBG-6_6_30-exploit-dev), इसलिए आपके द्वारा चलाया गया सत्र कभी अगले को ब्लॉक नहीं करता और दो
चुनौतियों को साथ-साथ डीबग किया जा सकता है। C-b d से डिटैच करें; tmux -L likedbg ls दिखाता है कि क्या
चल रहा है, और नीचे दिया गया = tmux का सटीक-मिलान रूप है (इसके बिना, एक -2 सत्र जीत सकता है):
tmux -L likedbg attach -t =LIKE-DBG-6_6_30-exploit-dev
यहाँ से, पूर्ण वर्कफ़्लो के लिए docs/build-your-own-kernel.md पढ़ें, या यदि आपके पास डीबग करने के लिए कोई चैलेंज है तो docs/ctf-foreign-kernel.md पढ़ें। बंडल किए गए कमज़ोर ड्राइवर के विरुद्ध पूरे लूप के व्यावहारिक भ्रमण के लिए, LK01 walkthrough का पालन करें।
| दस्तावेज़ | विषय |
|---|---|
| docs/walkthrough-lk01.md | यहाँ से शुरू करें: बंडल किए गए कमज़ोर ड्राइवर के विरुद्ध एक निर्देशित एंड-टू-एंड उदाहरण, बिल्ड से लेकर use-after-free तक और क्रैश रिपोर्ट तक। |
| docs/build-your-own-kernel.md | स्रोत से कर्नेल बनाएँ, उसे बूट करें, फिर डीबग करें और पुनरावृत्ति करें। |
| docs/ctf-foreign-kernel.md | प्रदान किए गए CTF या विदेशी कर्नेल को अपनाएँ और उसके लिए एक्सप्लॉइट वितरित करें। |
| docs/configuration.md | TOML कॉन्फ़िग स्टैक, डीबग प्रोफ़ाइल, और हर नॉब। |
| exploit/README.md | एक्सप्लॉइट-डेव लूप: ऑटो-कंपाइल सीमा और एस्केप हैच। |
| modules/README.md | आउट-ऑफ़-ट्री कस्टम मॉड्यूल और GDB सिंबल ऑटो-लोड। |
modules/lk01/ में एक छोटा, जानबूझकर कमज़ोर प्रशिक्षण ड्राइवर और एक क्रैश PoC शामिल है, जो एक कार्यशील उदाहरण के रूप में पूर्ण बिल्ड, लोड और एक्सप्लॉइट लूप के लिए तैयार है।