
تعرض إمكانية خفض مستوى الأجهزة عن بُعد استنادًا إلى RouterOS (Mikrotik) لمئات الآلاف من أجهزة الشبكة للخطر. ترتبط مشكلة عدم الحصانة بتسمم ذاكرة التخزين المؤقت DNS لبروتوكول Winbox وتسمح بتنزيل البرامج القديمة (مع إعادة تعيين كلمة المرور افتراضيًا) أو البرامج الثابتة المعدلة على الجهاز.

تفاصيل الضعف
تدعم محطة RouterOS أمر دقة لعمليات البحث عن DNS.

تتم معالجة هذا الطلب بواسطة محلل ثنائي اسمه. Resolver هو واحد من العديد من الثنائيات المتصلة ببروتوكول RouterOS Winbox. على مستوى عالٍ ، يمكن توجيه "الرسائل" المرسلة إلى منفذ Winbox إلى ثنائيات متعددة في RouterOS استنادًا إلى نظام الترقيم المستند إلى الصفيف.
بشكل افتراضي ، لدى RouterOS ميزة خادم DNS معطلة.

ومع ذلك ، حتى مع تعطيل وظيفة الخادم ، يحتفظ جهاز التوجيه بجهاز DNS المؤقت الخاص به.

عندما نقدم طلبًا باستخدام winbox_dns_request ، على سبيل المثال ، example.com ، سيقوم الموجه بتخزين النتيجة مؤقتًا.

نظرًا لأنه يمكننا تحديد خادم DNS الذي يجب أن يذهب الطلب من خلاله ، فإن إدخال عناوين خاطئة أمر تافه. على سبيل المثال ، يمكنك تكوين تطبيق خادم DNS من
Philip Klaus للاستجابة دائمًا بسجل A الذي يحتوي على عنوان IP 192.168.88.250.
def dns_response(data): request = DNSRecord.parse(data) reply = DNSRecord(DNSHeader( id=request.header.id, qr=1, aa=1, ra=1), q=request.q) qname = request.q.qname qn = str(qname) reply.add_answer(RR(qn,ttl=30,rdata=A("192.168.88.250"))) print("---- Reply:\n", reply) return reply.pack()
الآن ، إذا بحثت عن example.com باستخدام Winbox ، يمكنك أن ترى أن ذاكرة التخزين المؤقت لنظام أسماء النطاقات الخاصة بالموجه قد تسممت.

بالطبع ، التسمم example.com ليس مفيدًا جدًا لأن الموجه لن يستخدمه بالفعل. ومع ذلك ، يحتاج جهاز التوجيه إلى الوصول إلى upgrade.mikrotik.com و cloud.mikrotik.com و cloud2.mikrotik.com و download.mikrotik.com. وبفضل خطأ آخر ، من الممكن تسممهم جميعًا مرة واحدة.
def dns_response(data): request = DNSRecord.parse(data) reply = DNSRecord(DNSHeader( id=request.header.id, qr=1, aa=1, ra=1), q=request.q) qname = request.q.qname qn = str(qname) reply.add_answer(RR(qn,ttl=30,rdata=A("192.168.88.250"))) reply.add_answer(RR("upgrade.mikrotik.com",ttl=604800, rdata=A("192.168.88.250"))) reply.add_answer(RR("cloud.mikrotik.com",ttl=604800, rdata=A("192.168.88.250"))) reply.add_answer(RR("cloud2.mikrotik.com",ttl=604800, rdata=A("192.168.88.250"))) reply.add_answer(RR("download.mikrotik.com",ttl=604800, rdata=A("192.168.88.250"))) print("---- Reply:\n", reply) return reply.pack()
يطلب جهاز التوجيه إذنًا واحدًا ، ونقدم خمسة طلبات. يقوم جهاز التوجيه بتخزين كل هذه الاستجابات بشكل غير صحيح.

من الواضح أن هذا الهجوم مفيد أيضًا إذا كان جهاز التوجيه يعمل كخادم DNS ، لأنه يسمح بمهاجمة عملاء جهاز التوجيه.
يسمح هذا الهجوم أيضًا باستغلال ثغرة أمنية أكثر خطورة: تقليل إصدار أو إعادة إصدار نسخة RouterOS. يقوم المهاجم بإعادة إنشاء منطق خادم التحديث ، بما في ذلك سجل التغيير ، ويفرض على RouterOS قبول النسخة القديمة (المستضعفة) على أنها حديثة. يكمن الخطر هنا في حقيقة أنه عند "تحديث" الإصدار ، تتم إعادة تعيين كلمة مرور المسؤول إلى القيمة الافتراضية - يمكن للمهاجم تسجيل الدخول إلى النظام باستخدام كلمة مرور فارغة!
الهجوم ناجح للغاية ، على الرغم من أن
المؤلف ينفذ عدة ناقلات أخرى ، بما في ذلك تلك المتعلقة
بتضمين باب خلفي في البرامج الثابتة ، ولكن هذا بالفعل تقنية زائدة عن الحاجة ومن غير القانوني استخدامه لأغراض غير مشروعة.
حماية
ببساطة تعطيل Winbox يحمي من هذه الهجمات. على الرغم من راحة الإدارة من خلال Winbox ، فمن الأفضل استخدام بروتوكول SSH.