
استغلال لإثبات المفهوم وكشف ثغرات لأجهزة 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] يكشف هذا التقرير عن ثغرات أمنية خطيرة (مع كود إثبات المفهوم (PoC)) في أجهزة DVR/NVR المبنية باستخدام شريحة HiSilicon hi3520d وما يشابهها من الأنظمة على الرقاقة (SoC). يؤدي استغلال هذه الثغرات إلى تنفيذ أوامر عن بُعد غير مصرح به (RCE) باستخدام واجهة الويب فقط، مما يسبب السيطرة الكاملة على الجهاز المستغل. نظرًا لعدم وجود برامج ثابتة مطورة، لا يُنصح باستخدام هذه الأجهزة. تم التواصل مع البائع قبل ديسمبر 2016، ولكن لا توجد أي استجابة حتى الآن. تاريخ إصدار هذا الكشف هو فبراير 2017.
== مقدمة
قبل بضع سنوات اشتريت جهاز DVR صينيًا رخيصًا على eBay. شعار الإقلاع للجهاز يقول: "SECULINK - Security Monitoring". وبصفتي مهتمًا بأمن تكنولوجيا المعلومات، قررت إلقاء نظرة أقرب على الجهاز لأرى مدى "أمان" خدمة المراقبة الأمنية هذه. عند البحث في الموضوع وجدت بعض المواد المثيرة للاهتمام، لكنني تعمقت أكثر، ووجدت مشكلات أكثر إثارة للاهتمام وأكثر خطورة (0-days) تتعلق بالجهاز.
دعونا نلقي نظرة على جلسة الاختراق الكاملة من البداية. (سيتم الإشارة إلى الإنجازات الجديدة الخاصة بنا كما سيتم الإشارة إلى القديمة المعروفة أيضًا).
== استكشاف الـ DVR
أولاً يجب أن نتعرف على واجهة المستخدم الرسمية، ثم نتعمق أكثر، وربما نحاول الحصول على البرنامج الثابت. فرص العثور على ثغرات تزداد مع البرنامج الثابت.
=== نظرة أولى على الـ DVR
جهاز الـ DVR المخصص للاختبار يحمل العلامة التجارية "Seculink".
image::./seculink_device.png[Seculink DVR device]
الواجهات المادية المتاحة:
واجهات المستخدم الرسمية:
واجهة الإعداد القابلة للوصول المباشر محمية بمصادقة المستخدم (اسم المستخدم، كلمة المرور). المستخدم الفائق الافتراضي هو 'admin'، وكلمة المرور الافتراضية فارغة.
بعد تعيين كلمة مرور قوية، قد يشعر المستخدم بالأمان بأن عرض الكاميرا الخاص به لا يمكن للآخرين الوصول إليه. غالبًا ما يعيد الأشخاص توجيه منفذ الويب (tcp/80) لجهاز الـ DVR إلى جهة WAN من شبكتهم المحلية الآمنة من أجل الوصول إلى بث الـ DVR من الخارج (يمكننا التحقق من ذلك مثلًا عبر بحث مناسب في 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 (عبر netcat خام) يعرض وحدة تحكم التطبيق
مع رسائل تسجيل ومطالبة تسجيل دخول. تسجيل الدخول بأي من بيانات
اعتماد التطبيق المحددة يعمل. إصدار help بعد
المطالبة يعطي وصفًا قصيرًا لأوامر وحدة التحكم. الأمر
shell يبدو الأكثر إثارة للاهتمام. نعم، يعطي قشرة جذر (root shell)
للأجهزة. ;)
لاحظ أن هذا بوضوح مشكلة أمنية خطيرة، لأن أي مستخدم تطبيق (منخفض الصلاحيات) يجب ألا يحصل على قشرة جذر على الجهاز تلقائيًا.
=== قشرة الجذر
استكشاف الجهاز في قشرة الجذر (مثلًا عبر dmesg) يوضح
أن الـ DVR يعمل بنواة Linux (الإصدار 3.0.8)، ولديه
معالج ARMv7، وطراز SoC هو hi3520d.
من قائمة العمليات الجارية (ps) يتضح أن تطبيق الـ DVR
هو /var/Sofia، وهو يستمع على 34568/udp و
34569/udp أيضًا بالإضافة إلى منافذ tcp المذكورة أعلاه التي اكتشفها nmap
(netstat -nlup).
من قائمة الأقراص المثبتة (أمر mount)، يتضح أن
صورة البرنامج الثابت موجودة في أجهزة /dev/mtdblockX (حيث X=0,1,2,3,4,5).
البرنامج الثابت صغير وبالتالي محدود، لذا يجب أن نكون مبدعين إذا أردنا نسخ الملفات من/إلى الجهاز. لحسن الحظ، NFS مدعوم، لذا فإن إعداد خادم NFS على جهاز سطح المكتب لدينا و تركيبه من الـ DVR يحل المشكلة:
الآن الحصول على البرنامج الثابت سهل ومباشر:
يمكننا الحصول على الملفات (وليس فقط الصور الخام):
=== واجهة telnet
للوصول إلى الجهاز من خلال واجهة telnet (المنفذ 23/tcp)، قد
نحتاج إلى بعض بيانات اعتماد نظام التشغيل. بالنظر إلى /etc/passwd لدينا
تجزئة كلمة المرور للمستخدم الجذر:
لاحظ أنه لا يوجد مستخدم آخر غير root، كل شيء يعمل بصلاحيات كاملة. (لذا إذا تمكن شخص ما من اختراق الجهاز بطريقة ما، فلا يوجد حاجز، يحصل المهاجم على السيطرة الكاملة فورًا).
بافتراض كلمة مرور من ستة أحرف أبجدية رقمية (أحرف صغيرة)، يقوم 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
إذن مع المستخدم root وكلمة المرور xc3511 يمكن تسجيل الدخول عبر واجهة
telnet على المنفذ 23/tcp. حساب الجذر الثابت هذا الذي يمكن الوصول إليه
عبر واجهة telnet التي لا يمكن إغلاقها هو بوضوح باب خلفي.
هذه النتائج كانت متاحة تقريبًا من قبل الآخرين قبل بحثنا، ولكن ما يلي جديد تمامًا.
== هندسة عكسية للبرنامج الثابت
عند استكشاف البرنامج الثابت يتضح أن الملف الثنائي /var/Sofia هو
التطبيق الرئيسي الذي ينفذ جميع الواجهات إلى جانب معالجة الفيديو
وغيرها. لذا يبدو هذا الملف الثنائي الأكثر إثارة للاهتمام بالنسبة لنا.