
HiSilicon hi3520d DVR/NVR उपकरणों के लिए प्रूफ-ऑफ-कॉन्सेप्ट एक्सप्लॉइट और भेद्यता प्रकटीकरण। वेब इंटरफ़ेस, बैकडोर क्रेडेंशियल्स और बफर ओवरफ्लो विश्लेषण के माध्यम से RCE प्रदर्शित करता है।
= HiSilicon DVR हैक Istvan Toth [email protected] v1.0, 2017-09-06 :source-highlighter: pygments :toc: preamble :toclevels: 5 :toc-title: Contents :image_width: 100%
[abstract] यह रिपोर्ट HiSilicon hi3520d और समान सिस्टम ऑन चिप (SoC) पर आधारित DVR/NVR उपकरणों की गंभीर कमजोरियों (proof of concept (PoC) कोड के साथ) का खुलासा करती है। इन कमजोरियों के शोषण से केवल वेब इंटरफ़ेस का उपयोग करके अनधिकृत दूरस्थ कोड निष्पादन (RCE) संभव होता है, जिससे शोषित डिवाइस का पूर्ण नियंत्रण प्राप्त हो जाता है। अपग्रेडेड फर्मवेयर की कमी के कारण, इन उपकरणों के उपयोग की अनुशंसा नहीं की जाती है। विक्रेता से दिसंबर 2016 से पहले संपर्क किया गया था, लेकिन अब भी कोई प्रतिक्रिया नहीं मिली है। खुलासे की रिलीज़ तिथि फरवरी 2017 है।
== प्रस्तावना
कुछ साल पहले मैंने eBay पर एक सस्ता चीनी DVR डिवाइस खरीदा था। डिवाइस के बूट लोगो पर लिखा है: "SECULINK - Security Monitoring"। एक आईटी सुरक्षा उत्साही होने के नाते, मैंने डिवाइस को करीब से देखने का फैसला किया कि यह सुरक्षा निगरानी सेवा कितनी "सुरक्षित" है। इस विषय पर गूगल करने पर मुझे कुछ दिलचस्प सामग्री मिली, लेकिन गहराई से खोजने पर डिवाइस से जुड़ी कहीं अधिक दिलचस्प और गंभीर समस्याएं (0-days) मिलीं।
आइए शुरुआत से पूरे हैकिंग सत्र पर एक नज़र डालें। (नई, स्वयं की उपलब्धियों को पुरानी, ज्ञात उपलब्धियों के साथ दर्शाया जाएगा।)
== DVR की खोज
पहले हमें आधिकारिक उपयोगकर्ता इंटरफ़ेस सीखना चाहिए, फिर गहराई से खोजना चाहिए, शायद फर्मवेयर प्राप्त करने का प्रयास करना चाहिए। कमजोरियों को खोजने की संभावना फर्मवेयर के साथ बढ़ जाती है।
=== पहली नज़र में DVR
परीक्षण के लिए बनाया गया DVR डिवाइस "Seculink" ब्रांड का है।
image::./seculink_device.png[Seculink DVR device]
उपलब्ध भौतिक इंटरफ़ेस:
आधिकारिक उपयोगकर्ता इंटरफ़ेस:
सीधे सुलभ सेटअप इंटरफ़ेस उपयोगकर्ता प्रमाणीकरण (उपयोगकर्ता नाम, पासवर्ड) द्वारा प्रतिबंधित है। डिफ़ॉल्ट सुपरयूज़र 'admin' है, डिफ़ॉल्ट पासवर्ड खाली है।
मजबूत पासवर्ड सेट करने के बाद, उपयोगकर्ता यह महसूस कर सकता है कि उसका कैमरा दृश्य दूसरों के लिए सुलभ नहीं है। लोग अक्सर DVR स्ट्रीम तक बाहर से पहुंचने के लिए DVR डिवाइस के वेब पोर्ट (tcp/80) को अपने सुरक्षित LAN से WAN ओर फ़ॉरवर्ड करते हैं (हम इसे उपयुक्त Shodan खोज द्वारा जांच सकते हैं ;) )।
=== फर्मवेयर प्राप्त करना
फर्मवेयर प्राप्त करने के कई तरीके हो सकते हैं:
यद्यपि बाद वाला (डाउनलोड) तरीका यहाँ काम करता है और सबसे आसान है, आइए पहले वाले को आज़माएँ, क्योंकि यह डिवाइस के बारे में अन्य जानकारी भी देता है।
=== सेवा स्कैनिंग
आइए DVR पर पूर्ण पोर्ट स्कैन करें। ध्यान दें कि (रूट द्वारा चलाए जाने पर डिफ़ॉल्ट) SYN स्कैन बहुत धीमा होता है क्योंकि पैकेट ड्रॉप होते हैं, लेकिन पूर्ण TCP कनेक्ट स्कैन कुछ मिनटों में समाप्त हो जाता है।
Nmap scan report for dvr.lan (192.168.88.127) Host is up (0.028s latency). Not shown: 65529 closed ports PORT STATE SERVICE VERSION 23/tcp open telnet BusyBox telnetd 80/tcp open http uc-httpd 1.0.0 554/tcp open rtsp LuxVision or Vacron DVR rtspd 9527/tcp open unknown 34567/tcp open dhanalakshmi? 34599/tcp open unknown MAC Address: 00:12:12:15:B3:E7 (Plus ) Service Info: Host: LocalHost; Device: webcam
सारांश और मैनुअल परीक्षण:
ध्यान दें कि rtsp स्ट्रीम खोलने के लिए भी क्रेडेंशियल की आवश्यकता होती है।
यहाँ हमें यह बताना चाहिए कि डिवाइस संभवतः किसी Linux-जैसी प्रणाली है।
9527/tcp से (रॉ नेटकैट द्वारा) कनेक्ट करने पर एप्लिकेशन कंसोल लॉगिंग संदेशों और एक लॉगिन प्रॉम्प्ट के साथ दिखाई देता है। परिभाषित एप्लिकेशन क्रेडेंशियल्स में से किसी के साथ लॉगिन करना काम करता है। प्रॉम्प्ट के बाद help जारी करने पर कंसोल कमांड का संक्षिप्त विवरण मिलता है। कमांड shell सबसे दिलचस्प प्रतीत होती है। हाँ, यह डिवाइस पर रूट शेल देती है। ;)
ध्यान दें कि यह स्पष्ट रूप से एक गंभीर सुरक्षा समस्या है, क्योंकि किसी भी (कम विशेषाधिकार प्राप्त) एप्लिकेशन उपयोगकर्ता को डिवाइस पर स्वचालित रूप से रूट शेल नहीं मिलना चाहिए।
=== रूट शेल
रूट शेल में डिवाइस की खोज करने पर (जैसे dmesg द्वारा) यह स्पष्ट हो जाता है कि DVR Linux कर्नेल (संस्करण 3.0.8) चला रहा है, इसमें ARMv7 CPU है, SoC मॉडल hi3520d है।
चल रही प्रक्रियाओं (ps) की सूची से यह स्पष्ट है कि DVR एप्लिकेशन /var/Sofia है, जो nmap द्वारा पहचाने गए उपरोक्त tcp पोर्ट के अलावा 34568/udp और 34569/udp पर भी सुन रहा है (netstat -nlup)।
माउंटेड डिस्क की सूची (mount कमांड) से यह स्पष्ट है कि फर्मवेयर इमेज /dev/mtdblockX उपकरणों में है (जहाँ X=0,1,2,3,4,5)।
फर्मवेयर छोटा है और इसलिए सीमित है, इसलिए अगर हम डिवाइस से/में फ़ाइलें कॉपी करना चाहते हैं तो हमें रचनात्मक होना चाहिए। सौभाग्य से NFS समर्थित है, इसलिए अपने डेस्कटॉप मशीन पर NFS सर्वर स्थापित करना और DVR से इसे माउंट करना समस्या हल कर देता है:
अब फर्मवेयर प्राप्त करना सीधा है:
हम फ़ाइलें प्राप्त कर सकते हैं (केवल रॉ इमेज ही नहीं):
=== टेलनेट इंटरफ़ेस
टेलनेट इंटरफ़ेस (पोर्ट 23/tcp) के माध्यम से डिवाइस तक पहुंचने के लिए, हमें कुछ OS क्रेडेंशियल की आवश्यकता हो सकती है। /etc/passwd को देखने पर हमारे पास रूट उपयोगकर्ता के लिए पासवर्ड हैश है:
ध्यान दें कि रूट के अलावा कोई अन्य उपयोगकर्ता नहीं है, सब कुछ पूर्ण विशेषाधिकारों के साथ चल रहा है। (इसलिए यदि कोई किसी भी तरह डिवाइस में सेंध लगाता है, तो कोई बाधा नहीं होती, हमलावर को तुरंत पूर्ण शक्ति मिल जाती है।)
छह-अक्षर वाला अल्फ़ान्यूमेरिक (लोअरकेस) पासवर्ड मानते हुए, hashcat उपरोक्त कमजोर DES हैश को जल्दी से क्रैक कर देता है:
$ ./hashcat64.bin -a3 -m1500 absxcfbgXtb3o -1 ?l?d ?1?1?1?1?1?1
absxcfbgXtb3o:xc3511
Session..........: hashcat Status...........: Cracked Hash.Type........: descrypt, DES (Unix), Traditional DES Hash.Target......: absxcfbgXtb3o Time.Started.....: Sun Sep 3 03:25:07 2017 (2 mins, 29 secs) Time.Estimated...: Sun Sep 3 03:27:36 2017 (0 secs) Guess.Mask.......: ?1?1?1?1?1?1 [6] Guess.Charset....: -1 ?l?d, -2 Undefined, -3 Undefined, -4 Undefined Guess.Queue......: 1/1 (100.00%) Speed.Dev.#1.....: 815.9 kH/s (203.13ms) Recovered........: 1/1 (100.00%) Digests, 1/1 (100.00%) Salts Progress.........: 121360384/2176782336 (5.58%) Rejected.........: 0/121360384 (0.00%) Restore.Point....: 93440/1679616 (5.56%) Candidates.#1....: sa8711 -> h86ani HWMon.Dev.#1.....: N/A