
नौसिखिए का फर्मवेयर हैकिंग के प्रति दृष्टिकोण
यह दस्तावेज़ मेरे व्यक्तिगत अनुभव का वर्णन है - फर्मवेयर रिवर्सिंग और एक्सप्लॉइटिंग में एक नौसिखिया।

प्रदर्शन के लिए, हम CVE-2023-27216 का विश्लेषण और पुनरुत्पादन करेंगे।
किसी भी फर्मवेयर का शोषण करने के लिए निम्नलिखित चरण हैं:
gdbserver को स्थिर रूप से बनाएं।आमतौर पर एक फर्मवेयर बाइनरी फ़ाइल में एक बूटलोडर (uBoot), एक कर्नेल फ़ाइल, बूटलोडर के लिए कर्नेल हेडर (uImage), एक संपीड़ित फ़ाइल सिस्टम (आमतौर पर SquashFS प्रारूप में), एक CRC/MD5 तालिका (फ़ाइल अखंडता सत्यापित करने के लिए) और अन्य विविध फ़ाइलें होती हैं।
पहले फर्मवेयर का विश्लेषण करने का एक तरीका खोजें, कुछ शोध करें, कुछ संसाधन मिले:

बिनवॉक का उपयोग करके फर्मवेयर निकालें: binwalk -Me DSL-3782_A1_EU_1.01_07282016.bin

निकाले गए squashfs-root फ़ोल्डर और कुछ अजीब फ़ाइलें मिलीं।

बोनस: यदि आपको squashfs-root फ़ोल्डर दिखाई नहीं देता है, तो आप किसी भी ".squashfs" फ़ाइल पर unsquashfs का उपयोग करें जो आप देखते हैं। वे बस ज़िप फ़ाइलों की तरह हैं 😅।
फर्मवेयर आर्किटेक्चर और एंडियन की जाँच करें। यह फर्मवेयर से निकाले गए कुछ बायनरी की जाँच करके किया जा सकता है। आर्किटेक्चर और फर्मवेयर की जाँच करें: file <binary>

यहाँ हम लगभग पुष्टि कर सकते हैं कि फर्मवेयर MIPS 32-bit MSB आर्किटेक्चर पर चलता है। "लगभग" का कारण यह है कि कुछ फर्मवेयर MIPS संगत जैसे Lexra के साथ भिन्न आर्किटेक्चर पर चल सकते हैं।
सquashfs-root फ़ोल्डर की जाँच करें और कुछ दिलचस्प फ़ाइलें मिलीं:
usr/etc/init.d/rcS => यह वह स्क्रिप्ट है जो फर्मवेयर बूट होने पर चलती हैusr/etc/passwd => यह वह फ़ाइल है जिसमें उपयोगकर्ता जानकारी होती हैuserfs/romfile.cfg => इसमें एक क्रेडेंशियल admin:admin हैrcS फ़ाइल की जाँच करें और कुछ दिलचस्प कोड मिला:
echo "admin:$1$$iC.dUsGpxNNJGeOm1dFio/:0:0:root:/:/bin/sh" > /usr/etc/passwd
passwd फ़ाइल में लिखने के लिए उपयोग किया जाता हैBoa एक प्राचीन वेबसर्वर है, जिसका उपयोग मुख्य रूप से 2000 के दशक में राउटर जैसे एम्बेडेड उपकरणों में किया जाता था। हालांकि, बोआ सर्वर ने 2005 में ही अपना विकास बंद कर दिया था! भले ही बोआ सर्वर लगभग 20 साल पहले मर चुका है, यह आज भी हमारे विक्रेता की बदौलत जीवित है।

मैं अनुकरण प्रक्रिया के लिए Debian-आधारित OS जैसे Ubuntu या Kali का उपयोग करने की सलाह देता हूं। एक और OS है जो फर्मवेयर हैकिंग पर केंद्रित है जिसे AttifyOS कहा जाता है। इस दस्तावेज़ में, मैंने Kali Linux का उपयोग किया। अनुकरण प्रक्रिया शुरू करें, 2 उपकरण हैं:

आइए देखें कि फर्मवेयर को पूरी तरह से अनुकरण करने के लिए FAT का उपयोग कैसे करें। सबसे पहले, हम github से आपकी Kali मशीन पर रिपो को क्लोन करते हैं। और सेटअप प्रक्रिया से गुजरते हैं। आपको fat.config फ़ाइल भी बदलनी होगी, अन्यथा यह काम नहीं करेगा।
git clone https://github.com/attify/firmware-analysis-toolkit.git
cd firmware-analysis-toolkit
./setup.sh
vi fat.config # Modify to your sudo password.
फिर हम फर्मवेयर बाइनरी (जो हमने निर्माता से डाउनलोड की थी) को अपनी Kali मशीन पर FAT के फ़ोल्डर में कॉपी करते हैं और इसे चलाते हैं।
./fat.py DSL-3782_A1_EU_1.01_07282016.bin
नोट: FAT की सेटअप प्रक्रिया के दौरान हमें त्रुटियां मिल सकती हैं। यह 'no libmagic' कह सकता है।

बस सरलता से चलाएं
pip unistall python-magic
pip install python-magic
इससे आपकी समस्या ठीक हो जानी चाहिए, फिर हम बिल्ड कमांड फिर से चलाते हैं। यह अब बढ़िया काम करना चाहिए।

चलाने के लिए Enter दबाएं। अनुकरण प्रक्रिया अच्छी तरह से काम करनी चाहिए जैसे आप http://192.168.1.1 (Kali मशीन पर) ब्राउज़ करके जांच सकते हैं कि यह काम करता है या नहीं।

यदि आपके पास क्रेडेंशियल हैं तो आप कंसोल में भी लॉगिन कर सकते हैं। यहाँ admin:admin है।

यदि आप अनुकरण फर्मवेयर को बंद करने का निर्णय लेते हैं, तो बस Ctrl+A X दबाएं। जब आपको फिर से चलाने की आवश्यकता हो, तो fat.py को दोबारा न चलाएं क्योंकि फर्मवेयर पहले से ही एक इमेज में बन चुका है। आपको केवल वह स्क्रिप्ट चलानी होगी जो पहले ही उत्पन्न हो चुकी है।
cd firmadyne/scratch/<Image-ID>
./run.sh

डिबगिंग उद्देश्य के लिए gdbserver बनाएं। gdbserver बनाने के कई तरीके हैं। आप स्थिर रूप से निर्मित सर्वर भी डाउनलोड कर सकते हैं। एक repo है जिसमें कुछ स्थिर रूप से निर्मित सर्वर हैं। हालांकि, मैं स्वयं gdbserver बनाना पसंद करता हूं क्योंकि github repo में मौजूद काफी पुराने हैं, जिनमें कुछ संगतता समस्याएं हो सकती हैं।
संदर्भ के लिए इस ब्लॉग पोस्ट को देखें https://sheran.sg/blog/cross-compile-gdb-for-mips/. ब्लॉग 30 जुलाई 2024 को अपलोड किया गया था, इस प्रोजेक्ट से ठीक पहले, इसलिए यह पूरी तरह से काम करता है।
नोट: ब्लॉग MIPS x32 LSB के लिए बनाया गया था जबकि हमें MIPS x32 MSB चाहिए। हमें mipsel-linux-gnu को mips-linux-gnu में बदलना होगा।