
Draytek फ़ायरवॉल के लिए रिवर्स इंजीनियरिंग और अवलोकन टूलकिट
उन्नत हमलावर तेजी से एज डिवाइसों को लक्ष्य के रूप में चुन रहे हैं। हालाँकि, ये डिवाइस क्लोज्ड-सोर्स सॉफ्टवेयर द्वारा नियंत्रित होते हैं, जिसे फ़र्मवेयर के रूप में जाना जाता है, जो अक्सर मालिकाना प्रारूप में वितरित किया जाता है। यह डिफेंडरों और शोधकर्ताओं के लिए एक अतिरिक्त कठिनाई है, जिन्हें यह समझना होगा कि इसकी सुरक्षा का आकलन करने के लिए फ़र्मवेयर कैसे निकाला जाए।
यह केवल एक काल्पनिक परिदृश्य से कहीं अधिक है, जैसा कि हमने हाल ही में तब पता लगाया जब एक क्लाइंट से समझौता किया गया था। उनके इंफ्रास्ट्रक्चर के किनारे पर Draytek उपकरण होने के कारण, स्वाभाविक प्रश्न था: क्या यह हमलावरों का प्रवेश बिंदु हो सकता है? 500k से अधिक Draytek डिवाइस इंटरनेट पर उजागर हैं। फिर भी, इन डिवाइसों के फ़र्मवेयर को निकालने और इन डिवाइसों के साथ काम करने वाले शोधकर्ताओं और डिफेंडरों की सहायता करने के लिए कोई कार्यशील उपकरण मौजूद नहीं है।
अपने मूल्यांकन के दौरान, हमने Draytek के फ़र्मवेयर प्रारूप का रिवर्स-इंजीनियरिंग किया, जिसमें एक बूटलोडर, एक संपीड़ित RTOS कर्नेल और दो फाइलसिस्टम शामिल हैं। अपनी जांच के माध्यम से, हमने इन घटकों को निकालने के लिए उपकरण विकसित किए, जिससे रीयल-टाइम ऑपरेटिंग सिस्टम की कोड मॉड्यूल को गतिशील रूप से लोड करने की क्षमता का पता चला। ये मॉड्यूल बूट के दौरान फ़र्मवेयर इमेज में फाइलसिस्टम में से एक से लोड किए जाते हैं, लेकिन सिस्टम के चलने के दौरान भी लोड किए जा सकते हैं और फ्लैश मेमोरी में एक अलग फाइलसिस्टम में संग्रहीत किए जा सकते हैं। एक हमलावर एक मॉड्यूल लोड करके इस सुविधा का फायदा उठा सकता है जो रीबूट या फ़र्मवेयर अपग्रेड के बाद भी सक्रिय रहता है, और अंतिम उपयोगकर्ता के पास इस प्रकार के हमले का पता लगाने का कोई तरीका नहीं होता है। परिणामस्वरूप, हमने मेमोरी में लोड किए गए मॉड्यूल की अखंडता की जांच करने के लिए अपना स्वयं का मॉड्यूल विकसित किया, जिससे इस संभावित खतरे को कम किया जा सके।
अधिक सुरक्षित इंटरनेट की हमारी खोज में, हम इस उपकरणों के सेट को समुदाय के लिए सुलभ बना रहे हैं, जो Draytek एज डिवाइसों पर ऑब्ज़र्वेबिलिटी, हार्डनिंग, पारदर्शिता और भेद्यता अनुसंधान को सक्षम बनाता है।
यह उपकरण एक शोध परियोजना के भाग के रूप में विकसित किया गया था जिसे DEFCON HHV और La Villa Hacker में प्रस्तुत किया गया था। स्लाइड्स और PoC वीडियो यहाँ पा सकते हैं।
हमने शुरू में इसे एक आंतरिक उपकरण के रूप में विकसित किया था। यह केवल स्क्रिप्ट्स का एक सेट था, लेकिन इसने बड़ी क्षमता दिखाई, जिसने हमें इसे ओपन-सोर्स बनाने के लिए प्रेरित किया। तब से, हम इन स्क्रिप्ट्स को Python पैकेज में एकीकृत करने के लिए काम कर रहे हैं जो आपको इस रेपो में मिलेगा और उन्हें अन्य डिवाइस मॉडलों के साथ संगत बना रहे हैं।
आवश्यकताएँ:
(वैकल्पिक) Python वर्चुअल वातावरण बनाएं और सक्रिय करें:
$ python3 -m virtualenv .venv
$ source .venv/bin.activate
draytek_arsenal स्थापित करें:
$ cd draytek_arsenal
$ python3 -m pip install -r requirements.txt
$ python3 -m pip install .
स्थापना का परीक्षण करें:
$ python3 -m draytek_arsenal
यह स्थापना स्थानीय कोड परिवर्तनों से प्रभावित होगी
$ python3 -m pip install -e .
कुछ कमांड जैसे mips_compile और mips_merge को कार्य करने के लिए एक पूरक Docker इमेज की आवश्यकता होती है।
यदि इसे डाउनलोड नहीं किया गया है तो यह त्रुटि संदेश दिखाया जाता है:
[x] Image 'draytek-arsenal' not found. Please build or download the image.
आप निम्न कमांड के साथ इमेज डाउनलोड कर सकते हैं:
$ docker pull ghcr.io/infobyte/draytek-arsenal:main
या इसे इसके साथ बनाएं:
$ docker build -t draytek-arsenal ./mips-tools
draytek-arsenal एक Python पैकेज में एकत्रित स्क्रिप्ट्स का एक सेट है। इसलिए, इसका उपयोग करने के लिए आपको एक कमांड चुननी चाहिए:
usage: draytek-arsenal [-h] [command] args..
कुछ कमांड निम्नलिखित हैं:
Draytec फ़र्मवेयर की जानकारी पार्स करें और दिखाएं।
usage: parse_firmware [-h] firmware
positional arguments:
firmware Path to the firmware
options:
-h, --help show this help message and exit
RTOS चलाने वाले Draytek को निकालने और डीकंप्रेस करने के लिए उपयोग किया जाने वाला कमांड।
usage: extract_rtos [-h] [--rtos RTOS] [--fs FS] [--dlm DLM] [--dlm-key1 DLM_KEY1]
[--dlm-key2 DLM_KEY2]
firmware
positional arguments:
firmware Path to the firmware
options:
-h, --help show this help message and exit
--rtos RTOS, -r RTOS File path where to extract and decompress the RTOS
--fs FS, -f FS Directory path where to extract and decompress the File
System
--dlm DLM, -d DLM Directory path where to extract and decompress the DLMs
--dlm-key1 DLM_KEY1 First key used to decrypt DLMs
--dlm-key2 DLM_KEY2 First key used to decrypt DLMs
लिनक्स चलाने वाले Draytek को निकालने और डीकंप्रेस करने के लिए उपयोग किया जाने वाला कमांड
usage: extract_linux [-h] [--fs FS] --key KEY firmware
positional arguments:
firmware Path to the firmware
options:
-h, --help show this help message and exit
--fs FS, -f FS Directory path where to extract and decompress the File System
--key KEY Key used to decrypt
किसी DLM मॉड्यूल का हैश प्राप्त करें।
usage: dlm_hash [-h] [-c] dlm
positional arguments:
dlm Path to the dlm
options:
-h, --help show this help message and exit
-c Print as .c code
वह पता खोजें जहाँ RTOS पहले जंप निर्देश के साथ लोड होता है।
usage: find_loading_addr [-h] rtos
positional arguments:
rtos Path to the rtos
options:
-h, --help show this help message and exit
जाँच करता है कि RTOS लिटिल या बिग एंडियन है।
usage: find_endianness [-h] rtos
positional arguments:
rtos Path to the rtos
options:
-h, --help show this help message and exit
MIPS रिलोकेटेबल बाइनरी संकलित करें (DLMs के लिए उपयोग किया जाता है)।
usage: mips_compile [-h] output [input ...]
positional arguments:
output Output file
input Output file
options:
-h, --help show this help message and exit
दो ELF MIPS रिलोकेटेबल फाइलों को मर्ज करें।
usage: mips_merge [-h] first_input second_input output
positional arguments:
first_input First input file
second_input Second input file
output Output file
options:
-h, --help show this help message and exit