.. | ||
bootloader-testing.md | ||
firmware-integrity.md | ||
README.md |
फर्मवेयर विश्लेषण
{% hint style="success" %}
AWS हैकिंग सीखें और अभ्यास करें:HackTricks प्रशिक्षण AWS रेड टीम विशेषज्ञ (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks प्रशिक्षण GCP रेड टीम विशेषज्ञ (GRTE)
हैकट्रिक्स का समर्थन करें
- सदस्यता योजनाएं की जाँच करें!
- शामिल हों 💬 डिस्कॉर्ड समूह या टेलीग्राम समूह और ट्विटर 🐦 @hacktricks_live** को** फॉलो करें।
- हैकिंग ट्रिक्स साझा करें, PRs सबमिट करके HackTricks और HackTricks Cloud github रेपो में।
परिचय
फर्मवेयर महत्वपूर्ण सॉफ्टवेयर है जो उपकरणों को सही ढंग से काम करने की संभावना देता है जिससे हार्डवेयर घटकों और उपयोगकर्ताओं के संवाद को प्रबंधित और सुविधाजनक बनाने में सहायता मिलती है। यह स्थायी मेमोरी में संग्रहीत होता है, इसे सुनिश्चित करते हुए कि उपकरण महत्वपूर्ण निर्देशों तक पहुंच सकता है जब यह चालू किया जाता है, जिससे ऑपरेटिंग सिस्टम का लॉन्च होता है। फर्मवेयर की जांच और संभावना से संशोधन करना सुरक्षा दोषों की पहचान में एक महत्वपूर्ण कदम है।
जानकारी एकत्र करना
जानकारी एकत्र करना एक उपकरण के निर्माण और उसमें उपयोग की तकनीकों को समझने का एक महत्वपूर्ण प्रारंभिक कदम है। इस प्रक्रिया में डेटा एकत्रित करना शामिल है:
- CPU वास्तुकला और ऑपरेटिंग सिस्टम जिस पर यह चलता है
- बूटलोडर विशेषताएँ
- हार्डवेयर लेआउट और डेटाशीट्स
- कोडबेस मैट्रिक्स और स्रोत स्थान
- बाह्य पुस्तकालय और लाइसेंस प्रकार
- अपडेट इतिहास और नियामक प्रमाणपत्र
- वास्तुकला और फ्लो डायग्राम
- सुरक्षा मूल्यांकन और पहचाने गए सुरक्षा दोष
इस उद्देश्य के लिए, ओपन-सोर्स इंटेलिजेंस (OSINT) उपकरण अमूल्य हैं, जैसे कि किसी भी उपलब्ध ओपन-सोर्स सॉफ्टवेयर घटकों का मैन्युअल और स्वचालित समीक्षा प्रक्रियाओं के माध्यम से विश्लेषण। Coverity Scan और Semmle’s LGTM जैसे उपकरण मुफ्त स्थिर विश्लेषण प्रदान करते हैं जिनका उपयोग संभावित मुद्दों को खोजने के लिए किया जा सकता है।
फर्मवेयर प्राप्त करना
फर्मवेयर प्राप्त करने के लिए विभिन्न तरीकों से उपाय किया जा सकता है, प्रत्येक का अपना स्तर होता है:
- स्रोत से (डेवलपर, निर्माता) सीधे
- प्रदत्त निर्देशों से इसे बिल्ड करना
- आधिकारिक समर्थन साइट से डाउनलोड करना
- होस्ट किए गए फर्मवेयर फ़ाइलें खोजने के लिए Google डॉर्क क्वेरी का उपयोग करना
- S3Scanner जैसे उपकरण के साथ सीधे क्लाउड स्टोरेज तक पहुंचना
- मध्य में मानव-में-मध्य तकनीकों के माध्यम से अपडेट को अंतर्वर्ती करना
- उपकरण से निकालना जैसे कनेक्शन के माध्यम से
- उपकरण संचालन में अपडेट अनुरोधों के लिए स्निफिंग
- हार्डकोड अपडेट इंडपॉइंट्स का पहचान करना और उपयोग करना
- बूटलोडर या नेटवर्क से डंप करना
- सभी अन्य विफल होने पर, उपयुक्त हार्डवेयर उपकरण का उपयोग करके स्टोरेज चिप को हटाना और पढ़ना
file <bin>
strings -n8 <bin>
strings -tx <bin> #print offsets in hex
hexdump -C -n 512 <bin> > hexdump.out
hexdump -C <bin> | head # might find signatures in header
fdisk -lu <bin> #lists a drives partition and filesystems if multiple
यदि आप उन उपकरणों के साथ बहुत कुछ नहीं मिलता है, तो छवि का एंट्रोपी जांचें binwalk -E <bin>
के साथ, यदि एंट्रोपी कम है, तो यह संभावना नहीं है कि यह एन्क्रिप्टेड है। यदि एंट्रोपी अधिक है, तो यह संभावना है कि यह एन्क्रिप्टेड है (या किसी प्रकार से संकुचित है)।
इसके अतिरिक्त, आप इन उपकरणों का उपयोग कर सकते हैं फर्मवेयर में एम्बेडेड फ़ाइल्स को निकालने के लिए:
{% content-ref url="../../generic-methodologies-and-resources/basic-forensic-methodology/partitions-file-systems-carving/file-data-carving-recovery-tools.md" %} file-data-carving-recovery-tools.md {% endcontent-ref %}
या binvis.io (कोड) फ़ाइल की जांच करने के लिए।
फ़ाइल सिस्टम प्राप्त करना
पिछले टिप्पणीत उपकरणों जैसे binwalk -ev <bin>
के साथ, आपको फ़ाइल सिस्टम को निकालने में सक्षम होना चाहिए।
बिनवॉक आम तौर पर इसे एक फ़ोल्डर में निकालता है जिसे फ़ाइल सिस्टम प्रकार के रूप में नामित किया गया है, जो आम तौर पर निम्नलिखित में से एक होता है: squashfs, ubifs, romfs, rootfs, jffs2, yaffs2, cramfs, initramfs।
मैनुअल फ़ाइल सिस्टम निकालना
कभी-कभी, बिनवॉक अपने सिग्नेचर में फ़ाइल सिस्टम का जादू बाइट नहीं होगा। इन मामलों में, बाइनरी से फ़ाइल सिस्टम का ऑफसेट खोजने और संकुचित फ़ाइल सिस्टम को निकालने के लिए बिनवॉक का उपयोग करें और निम्नलिखित चरणों का पालन करके फ़ाइल सिस्टम को मैन्युअल रूप से निकालें।
$ binwalk DIR850L_REVB.bin
DECIMAL HEXADECIMAL DESCRIPTION
----------------------------------------------------------------------------- ---
0 0x0 DLOB firmware header, boot partition: """"dev=/dev/mtdblock/1""""
10380 0x288C LZMA compressed data, properties: 0x5D, dictionary size: 8388608 bytes, uncompressed size: 5213748 bytes
1704052 0x1A0074 PackImg section delimiter tag, little endian size: 32256 bytes; big endian size: 8257536 bytes
1704084 0x1A0094 Squashfs filesystem, little endian, version 4.0, compression:lzma, size: 8256900 bytes, 2688 inodes, blocksize: 131072 bytes, created: 2016-07-12 02:28:41
निम्नलिखित dd कमांड चलाएं और Squashfs फ़ाइल सिस्टम कार्विंग करें।
$ dd if=DIR850L_REVB.bin bs=1 skip=1704084 of=dir.squashfs
8257536+0 records in
8257536+0 records out
8257536 bytes (8.3 MB, 7.9 MiB) copied, 12.5777 s, 657 kB/s
वैकल्पिक रूप से, निम्नलिखित कमांड भी चलाया जा सकता है।
$ dd if=DIR850L_REVB.bin bs=1 skip=$((0x1A0094)) of=dir.squashfs
- स्क्वॉशएफएस के लिए (ऊपर दिए गए उदाहरण में उपयोग किया गया)
$ unsquashfs dir.squashfs
फ़ाइलें इसके बाद "squashfs-root
" निर्देशिका में होंगी।
- सीपीआईओ आर्काइव फ़ाइलें
$ cpio -ivd --no-absolute-filenames -F <bin>
- JFFS2 फ़ाइल सिस्टम के लिए
$ jefferson rootfsfile.jffs2
- NAND फ़्लैश के साथ UBIFS फ़ाइल सिस्टम के लिए
$ ubireader_extract_images -u UBI -s <start_offset> <bin>
$ ubidump.py <bin>
फर्मवेयर विश्लेषण
एक बार फर्मवेयर प्राप्त हो जाए, इसे उसकी संरचना और संभावित सुरक्षा दोषों को समझने के लिए विश्लेषित करना महत्वपूर्ण है। इस प्रक्रिया में फर्मवेयर छवि से मूल्यवान डेटा को विश्लेषित करने के लिए विभिन्न उपकरणों का उपयोग किया जाता है।
प्रारंभिक विश्लेषण उपकरण
एक सेट के रूप में कमांड प्रदान किए गए हैं जो बाइनरी फ़ाइल (जिसे <bin>
के रूप में संदर्भित किया गया है) की प्रारंभिक जांच के लिए मददगार हैं। ये कमांड फ़ाइल प्रकारों की पहचान करने, स्ट्रिंग्स निकालने, बाइनरी डेटा का विश्लेषण करने, और विभाजन और फ़ाइल सिस्टम विवरण को समझने में मदद करते हैं:
file <bin>
strings -n8 <bin>
strings -tx <bin> #prints offsets in hexadecimal
hexdump -C -n 512 <bin> > hexdump.out
hexdump -C <bin> | head #useful for finding signatures in the header
fdisk -lu <bin> #lists partitions and filesystems, if there are multiple
छवि के एन्क्रिप्शन स्थिति का मूल्यांकन करने के लिए एंट्रोपी को binwalk -E <bin>
के साथ जांचा जाता है। कम एंट्रोपी एन्क्रिप्शन की कमी की सुझाव देती है, जबकि उच्च एंट्रोपी संभावित एन्क्रिप्शन या संपीड़न की संकेत देती है।
एम्बेडेड फ़ाइल्स को निकालने के लिए, फ़ाइल-डेटा-कार्विंग-रिकवरी-टूल्स दस्तावेज़ और फ़ाइल जांच के लिए binvis.io जैसे उपकरण और संसाधनों की सिफारिश की जाती है।
फ़ाइलसिस्टम निकालना
binwalk -ev <bin>
का उपयोग करके, आम तौर पर फ़ाइलसिस्टम को निकाला जा सकता है, अक्सर एक नाम वाले निर्देशिका में (जैसे, squashfs, ubifs)। हालांकि, जब binwalk फाइलसिस्टम प्रकार को पहचानने में असफल होता है क्योंकि मैजिक बाइट्स गायब हैं, तो मैन्युअल निकालना आवश्यक होता है। इसमें शामिल है binwalk
का उपयोग करके फ़ाइलसिस्टम के ऑफसेट को ढूंढना, जिसके बाद dd
कमांड का उपयोग करके फ़ाइलसिस्टम को बाहर निकालना:
$ binwalk DIR850L_REVB.bin
$ dd if=DIR850L_REVB.bin bs=1 skip=1704084 of=dir.squashfs
फ़ाइलसिस्टम विश्लेषण
फ़ाइलसिस्टम को निकालने के बाद, सुरक्षा दोषों की खोज शुरू होती है। असुरक्षित नेटवर्क डेमन, हार्डकोड क्रेडेंशियल, एपीआई एंडपॉइंट, अपडेट सर्वर कार्यक्षमताएँ, अनकंपाइल्ड कोड, स्टार्टअप स्क्रिप्ट, और ऑफलाइन विश्लेषण के लिए कंपाइल्ड बाइनरी के लिए ध्यान दिया जाता है।
महत्वपूर्ण स्थान और वस्तुएँ जांचने के लिए शामिल हैं:
- etc/shadow और etc/passwd उपयोगकर्ता क्रेडेंशियल के लिए
- SSL प्रमाणपत्र और कुंजी etc/ssl में
- संभावित जोखिमों के लिए कॉन्फ़िगरेशन और स्क्रिप्ट फ़ाइलें
- और विश्लेषण के लिए एम्बेडेड बाइनरी
- सामान्य आईओटी डिवाइस वेब सर्वर और बाइनरी
फ़ाइलसिस्टम के भीतर संवेदनशील जानकारी और दोषों का पता लगाने में कई उपकरण सहायक हैं:
- LinPEAS और Firmwalker संवेदनशील जानकारी खोज के लिए
- The Firmware Analysis and Comparison Tool (FACT) व्यापक फर्मवेयर विश्लेषण के लिए
- FwAnalyzer, ByteSweep, ByteSweep-go, और EMBA स्थिर और गतिशील विश्लेषण के लिए
कंपाइल्ड बाइनरी पर सुरक्षा जांच
फ़ाइलसिस्टम में पाए जाने वाले स्रोत कोड और कंपाइल्ड बाइनरी को दोषों के लिए जांचना चाहिए। checksec.sh जैसे उनिक्स बाइनरी और PESecurity जैसे विंडोज बाइनरी के लिए उपकरण असुरक्षित बाइनरी की पहचान करने में मदद करते हैं।
डायनामिक विश्लेषण के लिए फर्मवेयर का अनुकरण
फर्मवेयर का अनुकरण करने की प्रक्रिया या तो एक डिवाइस के संचालन या एक व्यक्तिगत कार्यक्रम का डायनामिक विश्लेषण संभव बनाती है। इस दृष्टिकोण को हार्डवेयर या आर्किटेक्चर निर्भरताओं के साथ चुनौतियों का सामना कर सकता है, लेकिन रूट फ़ाइलसिस्टम या विशेष बाइनरी को मैचिंग आर्किटेक्चर और एंडियनेस के साथ एक डिवाइस जैसे रास्पबेरी पाई या पूर्व-निर्मित वर्चुअल मशीन पर स्थानांतरित करना, और आगे के परीक्षण को सुविधाजनक बना सकता है।
व्यक्तिगत बाइनरी का अनुकरण
एकल कार्यक्रमों की जांच के लिए, कार्यक्रम के एंडियनेस और सीपीयू आर्किटेक्चर की पहचान महत्वपूर्ण है।
MIPS आर्किटेक्चर के साथ उदाहरण
MIPS आर्किटेक्चर बाइनरी का अनुकरण करने के लिए, निम्नलिखित कमांड का उपयोग किया जा सकता है:
file ./squashfs-root/bin/busybox
और आवश्यक अनुकरण उपकरण स्थापित करने के लिए:
sudo apt-get install qemu qemu-user qemu-user-static qemu-system-arm qemu-system-mips qemu-system-x86 qemu-utils
ARM Architecture Emulation
ARM बाइनरी के लिए, प्रक्रिया समान है, जहाँ एम्युलेटर के रूप में qemu-arm
का उपयोग किया जाता है।
पूर्ण सिस्टम एम्युलेशन
Firmadyne, Firmware Analysis Toolkit और अन्य जैसे उपकरण, पूर्ण फर्मवेयर एम्युलेशन को सुविधाजनक बनाते हैं, प्रक्रिया को स्वचालित करते हैं और डायनामिक विश्लेषण में सहायक होते हैं।
प्रैक्टिस में डायनामिक विश्लेषण
इस स्थिति में, विश्लेषण के लिए वास्तविक या एम्युलेटेड डिवाइस वातावरण का उपयोग किया जाता है। ओएस और फाइल सिस्टम तक पहुंच बनाए रखना महत्वपूर्ण है। एम्युलेशन हार्डवेयर इंटरैक्शन को पूरी तरह से नकल नहीं कर सकती, जिससे कभी-कभी एम्युलेशन पुनरारंभ की आवश्यकता होती है। विश्लेषण को फाइल सिस्टम, उजागरित वेबपेज और नेटवर्क सेवाओं का शोध करना चाहिए, और बूटलोडर की कमजोरियों की जांच करनी चाहिए। फर्मवेयर अखंडता परीक्षण में खातरनाक वंशवाद संभावित दोषों की पहचान के लिए महत्वपूर्ण है।
रनटाइम विश्लेषण तकनीकें
रनटाइम विश्लेषण में, प्रक्रिया या बाइनरी के संचालन वातावरण के साथ बातचीत करना शामिल है, gdb-multiarch, Frida, और Ghidra जैसे उपकरणों का उपयोग करके ब्रेकपॉइंट सेट करने और फजिंग और अन्य तकनीकों के माध्यम से दोषों की पहचान करने के लिए।
बाइनरी शोषण और प्रमाण-ऑफ-कॉन्सेप्ट
पहचाने गए दोषों के लिए एक प्रमाण-ऑफ-कॉन्सेप्ट (PoC) विकसित करने के लिए लक्ष्य संरचना और निचले स्तर की भाषाओं में प्रोग्रामिंग की गहरी समझ की आवश्यकता है। एम्बेडेड सिस्टम में बाइनरी रनटाइम सुरक्षा सुरक्षा विधियाँ दुर्लभ हैं, लेकिन जब मौजूद होती हैं, तो Return Oriented Programming (ROP) जैसी तकनीकें आवश्यक हो सकती हैं।