
IoT फर्मवेयर पहचान और निष्कर्षण
IoT फर्मवेयर पहचान और निष्कर्षण
moria फर्मवेयर और IoT इमेजों के अंदर एम्बेड की गई फ़ाइलों और संरचनाओं (फ़ाइलसिस्टम, कर्नेल, बूटलोडर, आर्काइव, कुंजियाँ) की पहचान करता है और जो कुछ भी पाता है उसका अधिकांश भाग बिना root के अनपैक कर देता है। यह प्रत्येक खोज को बाइट ऑफ़सेट, प्रकार, और विश्वास स्कोर के साथ रिपोर्ट करता है, और यह साफ़ JSON में बोलता है ताकि स्क्रिप्ट और LLM एजेंट इसे उतनी ही आसानी से चला सकें जितना लोग कर सकते हैं।
upx -d को विफल करने के लिए शून्य या बदल दिया गया था।openat + O_NOFOLLOW से होकर जाती है (कोई पथ-भ्रमण या सिमलिंक एस्केप नहीं), और डीकंप्रेशन बम के विरुद्ध सीमित है।-j), प्रत्येक खोज पर ऑफ़सेट और विश्वास के साथ।cmake -S . -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build -j
cmake --install build --prefix ~/.local # or /usr/local (needs sudo)
बिल्ड के लिए cmake, एक C++20 कंपाइलर, और zlib, liblzma, lz4, और zstd डेवलपमेंट लाइब्रेरीज़ की आवश्यकता होती है (वे डीकंप्रेसर जो --extract द्वारा उपयोग किए जाते हैं)। Debian/Ubuntu पर: sudo apt install cmake g++ zlib1g-dev liblzma-dev liblz4-dev libzstd-dev। किसी एक के बिना बिल्ड करने के लिए (एक न्यूनतम या केवल-पहचान बिल्ड), -DMORIA_OPTIONAL_CODECS=ON के साथ कॉन्फ़िगर करें और अनुपस्थित कोडेक बस अक्षम हो जाता है।
moria बाइनरी स्व-निहित है: सभी सिग्नेचर सेट बिल्ड समय पर एम्बेड किए जाते हैं, इसलिए बाइनरी कहीं भी बिना कुछ इंस्टॉल किए काम करती है (cp build/moria ~/.local/bin पर्याप्त है, और डाउनलोड की गई रिलीज़ बाइनरी बस चलती है)। एम्बेड किए गए सिग्नेचर के बजाय बाहरी सिग्नेचर का उपयोग करने के लिए (मान लीजिए, बिना रीबिल्ड किए एक नए .toml का परीक्षण करने के लिए), --sigs DIR पास करें या $MORIA_SIGDIR सेट करें।
आउटपुट डिफ़ॉल्ट रूप से मानव-पठनीय है। JSON के लिए -j पास करें।
moria <file> # identify: a findings tree with offsets, types, and confidence
moria <dir> # scan a tree: a type summary plus the notable files
moria -j <file> # JSON, for tools and agents
moria -e <file> # extract to <file>.extracted/ (-C DIR to choose the output dir)
moria -c <file> # carve raw byte ranges to <file>.carved/ (no parsing)
moria -E <file> # entropy pass: flag unidentified / possibly-encrypted regions
moria --list <archive> # list tar/cpio/zip members without extracting
moria --broad <path> # also load the ~2.5k general file-type signatures
moria --help
-e मान्यता प्राप्त प्रारूपों को <file>.extracted/ के अंतर्गत अनपैक करता है, प्रत्येक क्षेत्र के लिए एक निर्देशिका (0x<offset>-<type>/), साथ ही ऑफ़सेट को पथों से मैप करने वाली एक manifest.json। यह स्वचालित रूप से नेस्टेड कंटेनरों में पुनरावृत्ति करता है और UBI इमेजों को वॉल्यूम-दर-वॉल्यूम पुनर्निर्मित करता है। गार्ड (--depth, --max-files, --max-bytes, और एक डीकंप्रेशन-अनुपात कैप) शत्रुतापूर्ण इनपुट को सीमित करते हैं; एक ट्रिगर किया गया गार्ड उस शाखा को रोक देता है और फिर भी पुनर्प्राप्त सब कुछ लौटाता है।
प्रक्रिया के भीतर अनपैक किया गया, कोई बाहरी टूल नहीं और कोई sudo नहीं:
signatures/ हस्त-लिखित कोर है: फर्मवेयर फ़ाइलसिस्टम, कंटेनर, कर्नेल, और सामान्य प्रारूप, प्रत्येक संरचनात्मक सत्यापन के साथ।signatures-firmware/ विक्रेता फर्मवेयर-कंटेनर मैजिक रखता है और डिफ़ॉल्ट रूप से लोड होता है।signatures-generated/ file(1) के मैजिक डेटाबेस से व्युत्पन्न ~2.5k सामान्य फ़ाइल-प्रकार मैजिक रखता है और केवल --broad के साथ लोड होता है।एक प्रारूप जोड़ने के लिए, signatures/ में एक .toml डालें। एक छोटा C++ वैलिडेटर केवल उन जाँचों के लिए आवश्यक है जिन्हें डिक्लेरेटिव लेयर व्यक्त नहीं कर सकती, जैसे CRC या क्रॉस-ब्लॉक पॉइंटर।
moria संरचनात्मक पहचान, निष्कर्षण, और कार्विंग करता है। सीक्रेट/क्रेडेंशियल स्कैनिंग, SBOM, CVE, और लाइसेंस विश्लेषण एक अलग टूल है (mithril)।
MIT, LICENSE देखें।
कुछ ऑन-डिस्क प्रारूप प्रबंधन अन्य ओपन-सोर्स परियोजनाओं में एल्गोरिदम का एक स्वच्छ पुनःकार्यान्वयन है, जो moria की अपनी I/O लेयर के विरुद्ध स्वतंत्र रूप से लिखा गया है (कोई स्रोत कॉपी नहीं किया गया): UPX/UCL से UCL/NRV2B डीकंप्रेसर और CTO अनफ़िल्टर (GPL-2.0, केवल एल्गोरिदम), और littlefs का मेटाडेटा-कमिट और CTZ स्किप-लिस्ट लेआउट (BSD-3-Clause), और SPIFFS का पेज/ऑब्जेक्ट लेआउट (MIT)।